diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 0000000..3d23674 --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,60 @@ +name: Deploy Docs + +on: + push: + branches: + - master + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: github-pages + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + cache-dependency-path: docus/package-lock.json + + - name: Install docs dependencies + run: npm ci --prefix docus + + - name: Generate docs content + run: node tools/sync-docus-docs.mjs + + - name: Build static docs + run: npm run build --prefix docus + env: + DOCS_BASE_URL: /${{ github.event.repository.name }}/ + DOCS_SITE_URL: https://${{ github.repository_owner }}.github.io + DOCS_REPO_URL: https://github.com/${{ github.repository }} + DOCS_REPO_BRANCH: ${{ github.ref_name }} + + - name: Upload Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docus/.output/public + + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 65107c9..afedc36 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,10 @@ target/ # Misc node_modules/ +docus/.nuxt/ +docus/.output/ +docus/.data/ +docus/.nitro/ # OS .DS_Store diff --git a/arma/client/addons/garage/README.md b/arma/client/addons/garage/README.md index 2950114..f469a4e 100644 --- a/arma/client/addons/garage/README.md +++ b/arma/client/addons/garage/README.md @@ -37,6 +37,11 @@ the client. The client builds vehicle context and sends requests. The server garage addon and extension own stored vehicle state. +Virtual garage spawning resolves the active garage context and category lane, +then finalizes only the vehicle selected in that BIS garage session. Nearby +world vehicles are ignored as spawn candidates and are only used for the spawn +blocking check at the resolved lane. + Refuel and repair buttons are available from the selected vehicle detail panel for nearby world vehicles. Stored records must be retrieved before they can be serviced because fuel and repair operate on live vehicle objects. Service diff --git a/arma/client/addons/garage/functions/fnc_initActionService.sqf b/arma/client/addons/garage/functions/fnc_initActionService.sqf index bb4fd57..5656da3 100644 --- a/arma/client/addons/garage/functions/fnc_initActionService.sqf +++ b/arma/client/addons/garage/functions/fnc_initActionService.sqf @@ -88,9 +88,21 @@ GVAR(GarageActionServiceBaseClass) = compileFinal createHashMapFromArray [ GVAR(GarageUIBridge) call ["sendEvent", ["garage::retrieve::failure", createHashMapFromArray [["message", "Stored vehicle record could not be found."]]]]; }; + private _className = _vehicleData getOrDefault ["classname", ""]; + if (_className isEqualTo "") exitWith { + GVAR(GarageUIBridge) call ["sendEvent", ["garage::retrieve::failure", createHashMapFromArray [["message", "Stored vehicle record is missing a classname."]]]]; + }; + private _context = GVAR(GarageContextService) call ["getContext", []]; - private _spawnPosition = _context getOrDefault ["spawnPosition", getPosATL player]; - private _spawnHeading = _context getOrDefault ["spawnHeading", getDir player]; + private _vehicleCategory = GVAR(GarageHelperService) call ["resolveVGCategory", [_className]]; + private _spawnLane = GVAR(GarageContextService) call ["getExactSpawnLane", [_vehicleCategory, _context]]; + if (_spawnLane isEqualTo createHashMap) exitWith { + private _categoryLabel = GVAR(GarageHelperService) call ["resolveGarageCategoryLabel", [_vehicleCategory]]; + GVAR(GarageUIBridge) call ["sendEvent", ["garage::retrieve::failure", createHashMapFromArray [["message", format ["This garage does not support spawning %1.", _categoryLabel]]]]]; + }; + + private _spawnPosition = _spawnLane getOrDefault ["spawnPosition", _context getOrDefault ["spawnPosition", getPosATL player]]; + private _spawnHeading = _spawnLane getOrDefault ["spawnHeading", _context getOrDefault ["spawnHeading", getDir player]]; private _spawnRadius = _context getOrDefault ["spawnRadius", 6]; private _blockingVehicles = []; { _blockingVehicles pushBackUnique _x; } forEach (_spawnPosition nearEntities [["Car", "Tank", "Air", "Ship"], _spawnRadius]); @@ -99,11 +111,6 @@ GVAR(GarageActionServiceBaseClass) = compileFinal createHashMapFromArray [ GVAR(GarageUIBridge) call ["sendEvent", ["garage::retrieve::failure", createHashMapFromArray [["message", "The garage spawn area is blocked."]]]]; }; - private _className = _vehicleData getOrDefault ["classname", ""]; - if (_className isEqualTo "") exitWith { - GVAR(GarageUIBridge) call ["sendEvent", ["garage::retrieve::failure", createHashMapFromArray [["message", "Stored vehicle record is missing a classname."]]]]; - }; - private _vehicle = createVehicle [_className, _spawnPosition, [], 0, "CAN_COLLIDE"]; _vehicle setDir _spawnHeading; _vehicle setFuel (_vehicleData getOrDefault ["fuel", 0]); diff --git a/arma/client/addons/garage/functions/fnc_initContextService.sqf b/arma/client/addons/garage/functions/fnc_initContextService.sqf index 45da63e..1c156a7 100644 --- a/arma/client/addons/garage/functions/fnc_initContextService.sqf +++ b/arma/client/addons/garage/functions/fnc_initContextService.sqf @@ -29,81 +29,189 @@ GVAR(GarageContextServiceBaseClass) = compileFinal createHashMapFromArray [ ["name", "Vehicle Garage"], ["anchorPosition", getPosATL player], ["sourceObject", objNull], + ["garageType", ""], ["spawnHeading", getDir player], ["spawnPosition", player getPos [8, getDir player]], + ["spawnLanes", createHashMap], ["spawnRadius", 6], - ["nearbyRadius", 30] + ["nearbyRadius", 30], + ["laneRadius", 150] ] }], - ["scanEntryValues", compileFinal { - params [["_values", [], [[]]], ["_state", createHashMap, [createHashMap]]]; + ["findNearbyGarageObject", compileFinal { + private _nearestGarage = objNull; + private _nearestDistance = 1e10; + { - if (_x isEqualType "" && { (_state getOrDefault ["name", "Vehicle Garage"]) isEqualTo "Vehicle Garage" }) then { _state set ["name", _x]; }; - if (_x isEqualType "") then { - private _resolvedObject = _state getOrDefault ["sourceObject", objNull]; - if (isNull _resolvedObject) then { - private _namedObject = missionNamespace getVariable [_x, objNull]; - if (!isNull _namedObject) then { _state set ["sourceObject", _namedObject]; }; - }; - if ((_state getOrDefault ["anchorPosition", []]) isEqualTo [] && { _x in allMapMarkers }) then { _state set ["anchorPosition", markerPos _x]; }; - continue; + if (isNull _x || { !(_x getVariable ["isGarage", false]) }) then { continue; }; + private _distance = player distance2D _x; + if (_distance < _nearestDistance) then { + _nearestDistance = _distance; + _nearestGarage = _x; }; - if (_x isEqualType objNull && { isNull (_state getOrDefault ["sourceObject", objNull]) }) then { - _state set ["sourceObject", _x]; - if ((_state getOrDefault ["anchorPosition", []]) isEqualTo []) then { _state set ["anchorPosition", getPosATL _x]; }; - continue; - }; - if (_x isEqualType 0 && { (_state getOrDefault ["spawnHeading", -1]) < 0 }) then { _state set ["spawnHeading", _x]; continue; }; - if (_x isEqualType [] && { count _x > 0 }) then { - if ({ _x isEqualType 0 } count _x >= 2 && { ((_state getOrDefault ["offset", []]) isEqualTo []) || ((_state getOrDefault ["anchorPosition", []]) isEqualTo []) }) then { - if ((_state getOrDefault ["anchorPosition", []]) isEqualTo []) then { _state set ["anchorPosition", _x]; } else { _state set ["offset", _x]; }; - continue; - }; - _self call ["scanEntryValues", [_x, _state]]; - }; - } forEach _values; - _state + } forEach (player nearObjects 12); + + _nearestGarage }], - ["resolveEntry", compileFinal { - params [["_entry", [], [[]]]]; - private _state = createHashMapFromArray [["name", "Vehicle Garage"], ["anchorPosition", []], ["sourceObject", objNull], ["offset", []], ["spawnHeading", -1]]; - _self call ["scanEntryValues", [_entry, _state]]; - private _anchorPosition = _state getOrDefault ["anchorPosition", []]; - private _offset = _state getOrDefault ["offset", []]; - private _spawnPosition = if (_anchorPosition isEqualTo []) then { [] } else { if (_offset isEqualTo []) then { _anchorPosition } else { _anchorPosition vectorAdd _offset } }; - createHashMapFromArray [["name", _state getOrDefault ["name", "Vehicle Garage"]], ["anchorPosition", _anchorPosition], ["sourceObject", _state getOrDefault ["sourceObject", objNull]], ["spawnHeading", _state getOrDefault ["spawnHeading", -1]], ["spawnPosition", _spawnPosition]] + ["resolveGarageName", compileFinal { + params [["_garageObject", objNull, [objNull]]]; + + if (isNull _garageObject) exitWith { "Vehicle Garage" }; + + private _displayName = _garageObject getVariable ["garageName", ""]; + if (_displayName isNotEqualTo "") exitWith { _displayName }; + + private _varName = vehicleVarName _garageObject; + if (_varName isEqualTo "") exitWith { "Vehicle Garage" }; + + _varName + }], + ["buildMarkerLane", compileFinal { + params [["_markerName", "", [""]], ["_garageObject", objNull, [objNull]]]; + + if (_markerName isEqualTo "" || { markerShape _markerName isEqualTo "" }) exitWith { createHashMap }; + + private _spawnCategory = GVAR(GarageHelperService) call ["inferGarageCategory", [_markerName]]; + if (_spawnCategory isEqualTo "") exitWith { createHashMap }; + + private _spawnPosition = markerPos _markerName; + private _interactionPosition = if (isNull _garageObject) then { _spawnPosition } else { getPosATL _garageObject }; + private _markerDistance = if (isNull _garageObject) then { player distance2D _spawnPosition } else { _garageObject distance2D _spawnPosition }; + private _garageVarName = if (isNull _garageObject) then { "" } else { toLowerANSI (vehicleVarName _garageObject) }; + private _markerKey = toLowerANSI _markerName; + private _nameScore = 0; + + if (_garageVarName isNotEqualTo "" && { (_markerKey find _garageVarName) >= 0 }) then { + _nameScore = -50; + }; + + createHashMapFromArray [ + ["name", _markerName], + ["interactionPosition", _interactionPosition], + ["sourceObject", _garageObject], + ["spawnCategory", _spawnCategory], + ["spawnHeading", markerDir _markerName], + ["spawnPosition", _spawnPosition], + ["score", _markerDistance + _nameScore] + ] + }], + ["discoverSpawnLanes", compileFinal { + params [["_garageObject", objNull, [objNull]]]; + + private _laneRadius = (_self call ["createDefaultContext", []]) getOrDefault ["laneRadius", 150]; + private _lanes = createHashMap; + + { + private _markerName = _x; + if ((toLowerANSI _markerName find "garage") < 0) then { continue; }; + + private _entry = _self call ["buildMarkerLane", [_markerName, _garageObject]]; + if (_entry isEqualTo createHashMap) then { continue; }; + + private _spawnPosition = _entry getOrDefault ["spawnPosition", []]; + if (_spawnPosition isEqualTo []) then { continue; }; + + private _distance = if (isNull _garageObject) then { player distance2D _spawnPosition } else { _garageObject distance2D _spawnPosition }; + if (_distance > _laneRadius) then { continue; }; + + private _spawnCategory = _entry getOrDefault ["spawnCategory", ""]; + private _currentEntry = _lanes getOrDefault [_spawnCategory, createHashMap]; + + if (_currentEntry isEqualTo createHashMap || { (_entry getOrDefault ["score", 1e10]) < (_currentEntry getOrDefault ["score", 1e10]) }) then { + _lanes set [_spawnCategory, _entry]; + }; + } forEach allMapMarkers; + + _lanes + }], + ["selectSpawnLane", compileFinal { + params [ + ["_lanes", createHashMap, [createHashMap]], + ["_preferredCategory", "", [""]], + ["_defaultPosition", [], [[]]], + ["_defaultHeading", 0, [0]] + ]; + + private _normalizedCategory = GVAR(GarageHelperService) call ["normalizeGarageCategory", [_preferredCategory]]; + private _lane = createHashMap; + + if (_normalizedCategory isNotEqualTo "") then { + _lane = _lanes getOrDefault [_normalizedCategory, createHashMap]; + }; + + if (_lane isEqualTo createHashMap) then { + { + private _candidate = _lanes getOrDefault [_x, createHashMap]; + if (_candidate isNotEqualTo createHashMap) exitWith { _lane = _candidate; }; + } forEach ["cars", "armor", "helis", "planes", "naval", "other"]; + }; + + if (_lane isEqualTo createHashMap) then { + _lane = createHashMapFromArray [ + ["spawnCategory", _normalizedCategory], + ["spawnHeading", _defaultHeading], + ["spawnPosition", _defaultPosition] + ]; + }; + + _lane + }], + ["getSpawnLane", compileFinal { + params [["_category", "", [""]], ["_context", createHashMap, [createHashMap]]]; + + private _resolvedContext = _context; + if (_resolvedContext isEqualTo createHashMap) then { + _resolvedContext = _self call ["getContext", []]; + }; + + private _spawnLanes = _resolvedContext getOrDefault ["spawnLanes", createHashMap]; + private _defaultPosition = _resolvedContext getOrDefault ["spawnPosition", getPosATL player]; + private _defaultHeading = _resolvedContext getOrDefault ["spawnHeading", getDir player]; + _self call ["selectSpawnLane", [_spawnLanes, _category, _defaultPosition, _defaultHeading]] + }], + ["getExactSpawnLane", compileFinal { + params [["_category", "", [""]], ["_context", createHashMap, [createHashMap]]]; + + private _resolvedContext = _context; + if (_resolvedContext isEqualTo createHashMap) then { + _resolvedContext = _self call ["getContext", []]; + }; + + private _normalizedCategory = GVAR(GarageHelperService) call ["normalizeGarageCategory", [_category]]; + if (_normalizedCategory isEqualTo "") exitWith { createHashMap }; + + private _spawnLanes = _resolvedContext getOrDefault ["spawnLanes", createHashMap]; + _spawnLanes getOrDefault [_normalizedCategory, createHashMap] }], ["resolveContext", compileFinal { private _context = _self call ["createDefaultContext", []]; - private _locations = (missionConfigFile >> "FORGE_CfgGarages" >> "locations") call BFUNC(getCfgData); - if !(_locations isEqualType []) exitWith { _self set ["lastContext", _context]; _context }; + private _garageObject = _self call ["findNearbyGarageObject", []]; + private _garageName = _self call ["resolveGarageName", [_garageObject]]; + private _garageType = ""; + private _anchorPosition = getPosATL player; + private _spawnHeading = getDir player; + private _spawnPosition = player getPos [8, _spawnHeading]; + private _spawnLanes = createHashMap; - private _nearestEntry = []; - private _nearestDistance = 1e10; - { - private _entry = _self call ["resolveEntry", [_x]]; - private _anchorPosition = _entry getOrDefault ["anchorPosition", []]; - if (_anchorPosition isEqualTo []) then { continue; }; - private _distance = player distance2D _anchorPosition; - if (_distance < _nearestDistance) then { _nearestDistance = _distance; _nearestEntry = _entry; }; - } forEach _locations; + if (!isNull _garageObject) then { + _garageType = GVAR(GarageHelperService) call ["normalizeGarageCategory", [_garageObject getVariable ["garageType", ""]]]; + _anchorPosition = getPosATL _garageObject; + _spawnHeading = getDir _garageObject; + _spawnPosition = _garageObject getPos [8, _spawnHeading]; + _spawnLanes = _self call ["discoverSpawnLanes", [_garageObject]]; + }; - if (_nearestEntry isEqualTo []) exitWith { _self set ["lastContext", _context]; _context }; - - private _anchorPosition = _nearestEntry getOrDefault ["anchorPosition", []]; - private _garageObject = _nearestEntry getOrDefault ["sourceObject", objNull]; - private _garageName = _nearestEntry getOrDefault ["name", "Vehicle Garage"]; - private _spawnHeading = _nearestEntry getOrDefault ["spawnHeading", getDir player]; - if (_spawnHeading < 0) then { _spawnHeading = if (!isNull _garageObject) then { getDir _garageObject } else { getDir player }; }; - - private _spawnPosition = _nearestEntry getOrDefault ["spawnPosition", []]; - if (_spawnPosition isEqualTo []) then { _spawnPosition = if (_anchorPosition isEqualTo []) then { player getPos [8, _spawnHeading] } else { _anchorPosition }; }; + private _selectedLane = _self call ["selectSpawnLane", [_spawnLanes, _garageType, _spawnPosition, _spawnHeading]]; + _spawnHeading = _selectedLane getOrDefault ["spawnHeading", _spawnHeading]; + _spawnPosition = _selectedLane getOrDefault ["spawnPosition", _spawnPosition]; _context set ["name", _garageName]; _context set ["anchorPosition", _anchorPosition]; _context set ["sourceObject", _garageObject]; + _context set ["garageType", _garageType]; _context set ["spawnHeading", _spawnHeading]; _context set ["spawnPosition", _spawnPosition]; + _context set ["spawnLanes", _spawnLanes]; _self set ["lastContext", _context]; _context }], diff --git a/arma/client/addons/garage/functions/fnc_initHelperService.sqf b/arma/client/addons/garage/functions/fnc_initHelperService.sqf index 714d2a2..88d35e7 100644 --- a/arma/client/addons/garage/functions/fnc_initHelperService.sqf +++ b/arma/client/addons/garage/functions/fnc_initHelperService.sqf @@ -22,6 +22,33 @@ #pragma hemtt ignore_variables ["_self"] GVAR(GarageHelperServiceBaseClass) = compileFinal createHashMapFromArray [ ["#type", "GarageHelperServiceBaseClass"], + ["normalizeGarageCategory", compileFinal { + params [["_value", "", [""]]]; + + private _normalized = toLowerANSI (trim _value); + if (_normalized isEqualTo "") exitWith { "" }; + if (_normalized in ["cars", "armor", "helis", "planes", "naval", "other"]) exitWith { _normalized }; + "" + }], + ["inferGarageCategory", compileFinal { + params [["_value", "", [""]]]; + + private _normalized = toLowerANSI (trim _value); + if (_normalized isEqualTo "") exitWith { "" }; + + private _resolvedCategory = _self call ["normalizeGarageCategory", [_normalized]]; + if (_resolvedCategory isNotEqualTo "") exitWith { _resolvedCategory }; + + switch (true) do { + case ((_normalized find "cars") >= 0): { "cars" }; + case ((_normalized find "armor") >= 0): { "armor" }; + case ((_normalized find "helis") >= 0): { "helis" }; + case ((_normalized find "planes") >= 0): { "planes" }; + case ((_normalized find "naval") >= 0): { "naval" }; + case ((_normalized find "other") >= 0): { "other" }; + default { "" }; + } + }], ["resolveCategory", compileFinal { params [["_className", "", [""]]]; @@ -36,6 +63,33 @@ GVAR(GarageHelperServiceBaseClass) = compileFinal createHashMapFromArray [ default { "other" }; } }], + ["resolveVGCategory", compileFinal { + params [["_className", "", [""]]]; + + if (_className isEqualTo "") exitWith { "other" }; + + switch (true) do { + case (_className isKindOf ["Car", configFile >> "CfgVehicles"]): { "cars" }; + case (_className isKindOf ["Tank", configFile >> "CfgVehicles"]): { "armor" }; + case (_className isKindOf ["Helicopter", configFile >> "CfgVehicles"]): { "helis" }; + case (_className isKindOf ["Plane", configFile >> "CfgVehicles"]): { "planes" }; + case (_className isKindOf ["Ship", configFile >> "CfgVehicles"]): { "naval" }; + default { "other" }; + } + }], + ["resolveGarageCategoryLabel", compileFinal { + params [["_category", "", [""]]]; + + switch (_category) do { + case "cars": { "cars" }; + case "armor": { "armored vehicles" }; + case "helis": { "helicopters" }; + case "planes": { "planes" }; + case "naval": { "naval vehicles" }; + case "other": { "other vehicles" }; + default { "this vehicle type" }; + } + }], ["resolveDisplayName", compileFinal { params [["_className", "", [""]]]; diff --git a/arma/client/addons/garage/functions/fnc_openVG.sqf b/arma/client/addons/garage/functions/fnc_openVG.sqf index 70c3518..1d04905 100644 --- a/arma/client/addons/garage/functions/fnc_openVG.sqf +++ b/arma/client/addons/garage/functions/fnc_openVG.sqf @@ -4,7 +4,7 @@ * File: fnc_openVG.sqf * Author: IDSolutions * Date: 2025-12-16 - * Last Update: 2026-01-30 + * Last Update: 2026-04-22 * Public: No * * Description: @@ -20,11 +20,12 @@ * call forge_client_garage_fnc_openVG */ -private _locations = (missionConfigFile >> "FORGE_CfgGarages" >> "locations") call BFUNC(getCfgData); -{ - FORGE_VehSpawnPos = (_x select 1) getPos [5, (_x select 2)]; - true; -} count _locations; +private _context = GVAR(GarageContextService) call ["getContext", []]; +private _spawnLane = GVAR(GarageContextService) call ["getSpawnLane", [_context getOrDefault ["garageType", ""], _context]]; + +FORGE_VehSpawnPos = _spawnLane getOrDefault ["spawnPosition", player getPos [8, getDir player]]; +missionNamespace setVariable [QGVAR(activeVGContext), _context]; +missionNamespace setVariable [QGVAR(activeVGNearbyVehicles), + (FORGE_VehSpawnPos nearEntities [["Car", "Tank", "Air", "Ship"], 15])]; BIS_fnc_garage_center = createVehicle ["Land_HelipadEmpty_F", FORGE_VehSpawnPos, [], 0, "NONE"]; BIS_fnc_garage_centerType = getText (configFile >> "CfgVehicles" >> "B_Quadbike_01_F" >> "model"); @@ -53,16 +54,41 @@ if !(GVAR(isPreLoaded)) then { }] call BFUNC(addScriptedEventHandler); [missionNamespace, "garageClosed", { - private _nearestObjects = BIS_fnc_garage_center nearEntities [["Car","Tank","Air","Ship"], 15]; + private _nearbyVehicles = BIS_fnc_garage_center nearEntities [["Car", "Tank", "Air", "Ship"], 15]; + private _preExistingVehicles = missionNamespace getVariable [QGVAR(activeVGNearbyVehicles), []]; + private _spawnedVehicles = _nearbyVehicles select { !(_x in _preExistingVehicles) }; + + if (_spawnedVehicles isNotEqualTo []) then { + private _spawnedVehiclePairs = _spawnedVehicles apply { [_x distance2D BIS_fnc_garage_center, _x] }; + _spawnedVehiclePairs sort true; + + private _obj = (_spawnedVehiclePairs select 0) param [1, objNull]; + if (isNull _obj) exitWith { + missionNamespace setVariable [QGVAR(activeVGNearbyVehicles), nil]; + missionNamespace setVariable [QGVAR(activeVGContext), nil]; + }; - if (!isNil "_nearestObjects") then { - private _obj = _nearestObjects select 0; private _veh = typeOf _obj; private _textures = getObjectTextures _obj; private _animationNames = animationNames _obj; + private _context = missionNamespace getVariable [QGVAR(activeVGContext), createHashMap]; + private _spawnCategory = GVAR(GarageHelperService) call ["resolveVGCategory", [_veh]]; + private _spawnLane = GVAR(GarageContextService) call ["getExactSpawnLane", [_spawnCategory, _context]]; + private _spawnLabel = GVAR(GarageHelperService) call ["resolveGarageCategoryLabel", [_spawnCategory]]; - { deleteVehicle _x } forEach _nearestObjects; - private _createVehicle = createVehicle [_veh, FORGE_VehSpawnPos, [], 0, "CAN_COLLIDE"]; + { deleteVehicle _x } forEach _spawnedVehicles; + + if (_spawnLane isEqualTo createHashMap) exitWith { + missionNamespace setVariable [QGVAR(activeVGNearbyVehicles), nil]; + missionNamespace setVariable [QGVAR(activeVGContext), nil]; + private _params = ["warning", "Virtual Garage", format ["This garage does not support spawning %1.", _spawnLabel], 4000]; + EGVAR(notifications,NotificationService) call ["create", _params]; + }; + + private _spawnPosition = _spawnLane getOrDefault ["spawnPosition", FORGE_VehSpawnPos]; + private _spawnHeading = _spawnLane getOrDefault ["spawnHeading", getDir _obj]; + private _createVehicle = createVehicle [_veh, _spawnPosition, [], 0, "CAN_COLLIDE"]; + _createVehicle setDir _spawnHeading; if (_textures isNotEqualTo []) then { private _count = 0; @@ -81,6 +107,9 @@ if !(GVAR(isPreLoaded)) then { }; }; }; + + missionNamespace setVariable [QGVAR(activeVGNearbyVehicles), nil]; + missionNamespace setVariable [QGVAR(activeVGContext), nil]; }] call BFUNC(addScriptedEventHandler); GVAR(isPreLoaded) = true; diff --git a/arma/server/addons/garage/functions/fnc_initGarage.sqf b/arma/server/addons/garage/functions/fnc_initGarage.sqf index ae7897a..7250fae 100644 --- a/arma/server/addons/garage/functions/fnc_initGarage.sqf +++ b/arma/server/addons/garage/functions/fnc_initGarage.sqf @@ -20,14 +20,37 @@ * call forge_server_garage_fnc_initGarage */ +private _resolveGarageType = { + params [["_value", "", [""]]]; + + private _normalized = toLowerANSI (trim _value); + + switch (true) do { + case ((_normalized find "cars") >= 0): { "cars" }; + case ((_normalized find "armor") >= 0): { "armor" }; + case ((_normalized find "helis") >= 0): { "helis" }; + case ((_normalized find "planes") >= 0): { "planes" }; + case ((_normalized find "naval") >= 0): { "naval" }; + case ((_normalized find "other") >= 0): { "other" }; + default { "" }; + } +}; + private _garages = (allVariables missionNamespace) select { private _var = missionNamespace getVariable _x; - ("garage" in _x) && { _var isEqualType objNull } && { !isNull _var } + ((toLowerANSI _x) find "garage") >= 0 && { _var isEqualType objNull } && { !isNull _var } }; if (_garages isEqualTo []) exitWith { ["INFO", "No editor-placed garages found."] call EFUNC(common,log) }; { - private _garage = missionNamespace getVariable _x; + private _garageName = _x; + private _garage = missionNamespace getVariable _garageName; SETPVAR(_garage,isGarage,true); + if ((_garage getVariable ["garageType", ""]) isEqualTo "") then { + private _garageType = _garageName call _resolveGarageType; + if (_garageType isNotEqualTo "") then { + SETPVAR(_garage,garageType,_garageType); + }; + }; } forEach _garages; diff --git a/arma/server/docs/README.md b/arma/server/docs/README.md index c59146c..761e9bc 100644 --- a/arma/server/docs/README.md +++ b/arma/server/docs/README.md @@ -33,6 +33,9 @@ password = "root" connect_timeout_ms = 5000 ``` +For install links and Forge-specific setup steps, see +[SurrealDB Setup](../../../docs/surrealdb-setup.md). + ## References - [API Reference](./api-reference.md) diff --git a/docs/CLIENT_GARAGE_USAGE_GUIDE.md b/docs/CLIENT_GARAGE_USAGE_GUIDE.md index c670ff0..cf116bb 100644 --- a/docs/CLIENT_GARAGE_USAGE_GUIDE.md +++ b/docs/CLIENT_GARAGE_USAGE_GUIDE.md @@ -19,9 +19,12 @@ browser events through `forge_client_garage_fnc_handleUIEvents`. call forge_client_garage_fnc_openVG; ``` -The virtual garage uses mission-configured `FORGE_CfgGarages` locations to set -the spawn/preview position, opens the BIS garage interface, and restricts the -available vehicle lists from the virtual garage repository. +The virtual garage resolves the active interaction object near the player, +discovers nearby `garage*` markers placed in Eden, chooses the matching spawn +lane for the selected vehicle type, opens the BIS garage interface, and +restricts the available vehicle lists from the virtual garage repository. When +the BIS garage closes, only the vehicle selected in that virtual garage session +is finalized and spawned onto the resolved lane. ## Client Services @@ -79,8 +82,24 @@ _object setVariable ["isGarage", true, true]; _object setVariable ["garageType", "cars", true]; ``` -Virtual garage access also requires configured garage locations in mission -config so the preview/spawn position can be resolved. +When using the server garage auto-init flow, editor-placed objects whose +variable names contain `garage` are marked as garage interaction points and +their `garageType` can be inferred from the name. + +Virtual garage spawn lanes are resolved from empty markers placed in Eden. The +marker name should contain `garage` and one of the six supported category names: +`cars`, `armor`, `helis`, `planes`, `naval`, or `other`. Markers are matched to +the nearby interaction object by proximity, and names that include the garage +object's variable name are preferred when multiple garages exist. + +Vehicle spawning is strict by category. If the active garage site does not have +a matching local marker for the vehicle category being retrieved or spawned from +the virtual garage, the request is blocked and the player is shown a message. + +Nearby world vehicles are not used as virtual garage spawn candidates. They are +only checked to determine whether the resolved spawn position is blocked. If +any vehicle is within 5 meters of the spawn marker when the virtual garage is +opened, the session is blocked and the player is shown a warning. ## Authoritative State diff --git a/docs/DEVELOPMENT_GUIDE.md b/docs/DEVELOPMENT_GUIDE.md index e41603b..e8b4588 100644 --- a/docs/DEVELOPMENT_GUIDE.md +++ b/docs/DEVELOPMENT_GUIDE.md @@ -4,6 +4,9 @@ This guide covers the usual path for adding or changing a Forge module. ## Local Checks +Before running storage-backed workflows locally, complete +[SurrealDB Setup](./surrealdb-setup.md). + Run these before pushing Rust or extension changes: ```powershell diff --git a/docs/FRAMEWORK_ARCHITECTURE.md b/docs/FRAMEWORK_ARCHITECTURE.md index 61a8033..df7f4b9 100644 --- a/docs/FRAMEWORK_ARCHITECTURE.md +++ b/docs/FRAMEWORK_ARCHITECTURE.md @@ -125,6 +125,9 @@ password = "root" connect_timeout_ms = 5000 ``` +For install links and role-based setup guidance, see +[SurrealDB Setup](./surrealdb-setup.md). + Check persistence readiness before issuing commands that require storage: ```sqf diff --git a/docs/README.md b/docs/README.md index 09210e6..84419e8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -13,6 +13,8 @@ collects framework-level documentation for those pieces. crates. - [Development Guide](./DEVELOPMENT_GUIDE.md): how to add or change a module without breaking the framework boundaries. +- [SurrealDB Setup](./surrealdb-setup.md): where to get SurrealDB or + Surrealist and how to connect Forge to it for local or live use. ## Server and Extension Usage Guides diff --git a/docs/surrealdb-setup.md b/docs/surrealdb-setup.md new file mode 100644 index 0000000..918a801 --- /dev/null +++ b/docs/surrealdb-setup.md @@ -0,0 +1,101 @@ +# SurrealDB Setup + +Forge uses SurrealDB for durable storage. The Rust server extension connects to +SurrealDB on startup and applies Forge schema modules automatically, so setup +comes down to running a reachable database and matching the Forge config. + +## Choose the Right Path + +### Developer or Server Operator + +Use this path if you are building Forge, running a local test server, or +hosting the live Arma server. + +Official SurrealDB resources: + +- [SurrealDB install page](https://surrealdb.com/install) +- [SurrealDB CLI `start` reference](https://surrealdb.com/docs/reference/cli/surrealdb-cli/commands/start) + +Install SurrealDB with the official method for your platform: + +```powershell +# Windows +iwr https://windows.surrealdb.com -useb | iex +``` + +```bash +# macOS +brew install surrealdb/tap/surreal +``` + +```bash +# Linux +curl -sSf https://install.surrealdb.com | sh +``` + +For Forge, start a persistent local database instead of the default in-memory +mode: + +```powershell +surreal start surrealkv://forge.db --bind 127.0.0.1:8000 --user root --pass root +``` + +Then copy `arma/server/extension/config.example.toml` to `config.toml` next to +`forge_server_x64.dll` and keep the values aligned with the database you +started: + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +After that: + +1. Start the Arma server with the Forge extension enabled. +2. Let the extension connect and apply the Forge schema modules. +3. Verify the connection state: + +```sqf +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` + +If you change the endpoint, namespace, database, username, or password in +SurrealDB, change the same values in Forge's `config.toml`. + +### Mission Designer or Community Manager/Leader + +Use this path if you mostly need to inspect, query, or adjust data for a test +or live server and you are not changing Forge source code. + +Official SurrealDB resources: + +- [Surrealist installation](https://surrealdb.com/docs/explore/surrealist/installation) +- [Surrealist web app](https://app.surrealdb.com) +- [Surrealist local database serving](https://surrealdb.com/docs/explore/surrealist/concepts/local-database-serving) + +Recommended approach: + +1. Install **Surrealist Desktop**. It is the better fit for Forge because the + official docs note that the web app can be limited when connecting to + `localhost` or non-HTTPS endpoints. +2. Connect Surrealist to the same database Forge uses. +3. Use the values from the server's `config.toml`: + +```text +Endpoint: http://127.0.0.1:8000 +Namespace: forge +Database: main +Username: root +Password: root +``` + +If you need your own local sandbox instead of connecting to an existing Forge +server, install SurrealDB first and follow the developer/server-operator path +above. Surrealist Desktop can also launch a local database for you after the +`surreal` executable is installed and available on your `PATH`. diff --git a/docus/.gitignore b/docus/.gitignore new file mode 100644 index 0000000..a76c8dc --- /dev/null +++ b/docus/.gitignore @@ -0,0 +1,5 @@ +.nuxt +.output +.data +.nitro +node_modules diff --git a/docus/README.md b/docus/README.md new file mode 100644 index 0000000..b3bfdc7 --- /dev/null +++ b/docus/README.md @@ -0,0 +1,37 @@ +# Forge Docs + +This directory contains the online documentation site for the Forge framework. +The site is built with Nuxt and Docus, and its content is generated from the +repository's source markdown files. + +## Local Development + +Install dependencies: + +```powershell +npm install +``` + +Start the docs site: + +```powershell +npm run dev +``` + +The content tree is refreshed automatically from: + +- `docs/` +- `arma/server/docs/` + +## Production Build + +```powershell +npm run build +``` + +Use these environment variables when deploying to a custom host: + +- `DOCS_BASE_URL` +- `DOCS_SITE_URL` +- `DOCS_REPO_URL` +- `DOCS_REPO_BRANCH` diff --git a/docus/app.config.ts b/docus/app.config.ts new file mode 100644 index 0000000..3c243d6 --- /dev/null +++ b/docus/app.config.ts @@ -0,0 +1,34 @@ +const repoUrl = + process.env.DOCS_REPO_URL || + 'https://github.com/InnovativeDevSolutions/forge'; +const repoBranch = process.env.DOCS_REPO_BRANCH || 'master'; +const siteUrl = + process.env.DOCS_SITE_URL || + 'https://innovativedevsolutions.github.io'; + +export default defineAppConfig({ + site: { + name: 'Forge Framework', + description: + 'Persistent Arma 3 framework with Rust services, SurrealDB storage, and browser-backed client UIs.', + url: siteUrl, + socials: { + github: 'InnovativeDevSolutions/forge' + } + }, + github: { + url: repoUrl, + branch: repoBranch, + rootDir: 'docus' + }, + footer: { + credits: 'Copyright © 2025-2026 Forge Framework', + links: [ + { + icon: 'simple-icons:github', + href: repoUrl, + target: '_blank' + } + ] + } +}); diff --git a/docus/content/1.getting-started/.navigation.yml b/docus/content/1.getting-started/.navigation.yml new file mode 100644 index 0000000..dacc69b --- /dev/null +++ b/docus/content/1.getting-started/.navigation.yml @@ -0,0 +1,2 @@ +title: Getting Started +icon: i-lucide-rocket diff --git a/docus/content/1.getting-started/0.index.md b/docus/content/1.getting-started/0.index.md new file mode 100644 index 0000000..ecfeaa0 --- /dev/null +++ b/docus/content/1.getting-started/0.index.md @@ -0,0 +1,88 @@ +# Getting Started + +Use this section as the main entry point for the Forge framework. + +Forge combines: + +- Arma 3 client addons for UX and browser-hosted interfaces +- Arma 3 server addons for mission integration and authoritative flow control +- a Rust server extension for command routing and persistence +- shared Rust crates for models, repositories, and services +- SurrealDB for durable storage + +## Common Commands + +```powershell +cargo test +npm run build:webui +.\build-arma.ps1 +``` + +## Start Here + +::u-page-grid + :::u-page-card + --- + icon: i-lucide-network + title: Architecture + to: /getting-started/architecture + --- + Understand how SQF, Rust services, SurrealDB, and browser UIs fit together. + ::: + + :::u-page-card + --- + icon: i-lucide-boxes + title: Module Reference + to: /getting-started/module-reference + --- + Review gameplay domains, infrastructure modules, and extension command groups. + ::: + + :::u-page-card + --- + icon: i-lucide-wrench + title: Development Guide + to: /getting-started/development + --- + See the rules for adding modules and changing boundaries without regressions. + ::: + + :::u-page-card + --- + icon: i-lucide-database + title: SurrealDB Setup + to: /getting-started/surrealdb-setup + --- + Install SurrealDB, match Forge config values, and choose the right setup path + for developers or admin-facing roles. + ::: + + :::u-page-card + --- + icon: i-lucide-server-cog + title: Server Extension + to: /server-extension + --- + Follow the extension architecture, API surface, and SQF usage examples. + ::: + + :::u-page-card + --- + icon: i-lucide-layers-3 + title: Server Modules + to: /server-modules + --- + Dive into the actor, bank, CAD, garage, locker, organization, phone, store, + task, and owned-storage guides. + ::: + + :::u-page-card + --- + icon: i-lucide-monitor-smartphone + title: Client Addons + to: /client-addons + --- + Explore the client bridge model and addon-specific browser integration rules. + ::: +:: diff --git a/docus/content/1.getting-started/1.architecture.md b/docus/content/1.getting-started/1.architecture.md new file mode 100644 index 0000000..1083dc5 --- /dev/null +++ b/docus/content/1.getting-started/1.architecture.md @@ -0,0 +1,136 @@ +# Framework Architecture + +Forge is organized around domain modules. A domain usually has SQF addon +entry points, Rust models, repository traits, service logic, extension command +handlers, and optional browser UI. + +## Runtime Flow + +```text +Arma client UI or SQF action + -> client addon bridge + -> server addon function + -> forge_server callExtension command + -> extension command group + -> forge-services domain service + -> forge-repositories trait + -> SurrealDB repository implementation + -> SurrealDB +``` + +For small payloads, server SQF calls `forge_server` directly through the +extension bridge. For large payloads, `arma/server/addons/extension` stages +request and response chunks through the extension transport module. + +## Main Layers + +### Client Addons + +Client addons live under `arma/client/addons`. They own local player UX, +keybinds, browser UI dialogs, and UI-to-SQF event handling. When a client needs +durable or authoritative state, it routes work to the matching server addon +instead of touching persistence directly. + +### Server Addons + +Server addons live under `arma/server/addons`. They own server-side SQF +initialization, game-object integration, validation near the Arma runtime, and +calls into the Rust extension. The `extension` addon is the shared bridge for +`callExtension` and transport handling. + +### Rust Extension + +The server extension lives under `arma/server/extension`. It registers the +`forge_server` command groups, loads configuration, initializes SurrealDB, and +maps SQF command inputs into service calls. + +The extension should stay thin: + +- Parse and validate command arguments that arrive from SQF. +- Resolve Arma-specific context such as player UID when required. +- Call the matching service. +- Serialize the service result back to JSON or a simple string. + +### Shared Rust Crates + +The `lib` workspace contains reusable Rust crates: + +- `forge-models`: shared domain structs and serialization rules. +- `forge-repositories`: storage-agnostic repository traits and in-memory + implementations used by tests and hot-state services. +- `forge-services`: domain behavior, validation, and mutation workflows. +- `forge-shared`: cross-crate helpers. + +### Persistence + +Durable storage is SurrealDB. Schema modules live under +`arma/server/extension/src/schema`, and concrete SurrealDB repository +implementations live under `arma/server/extension/src/storage`. + +Repository traits stay in `lib/repositories` so service logic remains testable +without a database. + +## Hot State + +Several domains have `hot` command groups. Hot state keeps a runtime copy of +frequently accessed data in memory, then saves it back to durable storage when +requested. This is useful for player state that changes often during a session. + +Typical hot-state flow: + +```text +actor:hot:init +actor:hot:get +actor:hot:override +actor:hot:save +actor:hot:remove +``` + +Use hot state for session workflows. Use normal domain commands for direct +durable CRUD operations. + +## Transport Layer + +The transport layer exists because Arma extension calls have practical payload +size limits. It provides chunked request and response handling while still +routing to the same domain command groups. + +Common direct command: + +```sqf +"forge_server" callExtension ["status", []]; +``` + +Common transport path: + +```text +server addon fnc_extCall + -> transport:request:append + -> transport:invoke_stored + -> transport:response:get +``` + +## Configuration + +The server extension reads `config.toml` next to the extension DLL. The current +persistence section is: + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +For install links and role-based setup guidance, see +[SurrealDB Setup](/getting-started/surrealdb-setup). + +Check persistence readiness before issuing commands that require storage: + +```sqf +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` diff --git a/docus/content/1.getting-started/2.module-reference.md b/docus/content/1.getting-started/2.module-reference.md new file mode 100644 index 0000000..cfbc736 --- /dev/null +++ b/docus/content/1.getting-started/2.module-reference.md @@ -0,0 +1,221 @@ +# Module Reference + +This reference lists the main Forge modules and where each layer lives. + +## Directory Map + +```text +arma/client/addons/ Client-side Arma addons and browser UIs +arma/server/addons/ Server-side Arma addons and extension bridge +arma/server/extension/ Rust arma-rs extension and SurrealDB adapters +bin/icom/ Interprocess communication helper +lib/models/ Shared domain data models +lib/repositories/ Repository traits and in-memory stores +lib/services/ Domain services and workflow logic +lib/shared/ Cross-crate helpers +tools/ Web UI build tooling +docs/ Framework-level documentation +``` + +## Gameplay Domains + +| Domain | Purpose | Client addon | Server addon | Service/model layer | Extension group | +| --- | --- | --- | --- | --- | --- | +| Actor | Player identity, loadout, position, status, contact identifiers, and persistent character data. | `arma/client/addons/actor` | `arma/server/addons/actor` | `lib/models/src/actor.rs`, `lib/services/src/actor.rs` | `actor:*` | +| Bank | Player accounts, cash/bank balances, PIN validation, transfers, checkout charging, and transaction context. | `arma/client/addons/bank` | `arma/server/addons/bank` | `lib/models/src/bank.rs`, `lib/services/src/bank.rs` | `bank:*`, `bank:hot:*` | +| CAD | Dispatch requests, assignments, orders, activity stream, profiles, groups, and hydrated dispatcher views. | `arma/client/addons/cad` | `arma/server/addons/cad` | `lib/models/src/cad.rs`, `lib/services/src/cad.rs` | `cad:*` | +| Garage | Player vehicle storage with plate IDs, fuel, damage, and hit point state. | `arma/client/addons/garage` | `arma/server/addons/garage` | `lib/models/src/garage.rs`, `lib/services/src/garage.rs` | `garage:*`, `garage:hot:*` | +| Locker | Player item storage keyed by classname with category and amount. | `arma/client/addons/locker` | `arma/server/addons/locker` | `lib/models/src/locker.rs`, `lib/services/src/locker.rs` | `locker:*`, `locker:hot:*` | +| Organization | Player organizations, membership, treasury, credit lines, shared assets, and fleet data. | `arma/client/addons/org` | `arma/server/addons/org` | `lib/models/src/org.rs`, `lib/services/src/org.rs` | `org:*`, `org:hot:*` | +| Phone | Contacts, messages, and email state. | `arma/client/addons/phone` | `arma/server/addons/phone` | `lib/models/src/phone.rs`, `lib/services/src/phone.rs` | `phone:*` | +| Store | Storefront entity setup, catalog hydration, checkout workflows, and checkout charging integration. | `arma/client/addons/store` | `arma/server/addons/store` | `lib/models/src/store.rs`, `lib/services/src/store.rs` | `store:checkout` | +| Task | Server-owned mission/task flows, catalog, ownership, status, participant tracking, rewards, and defuse counters. | none | `arma/server/addons/task` | `lib/models/src/task.rs`, `lib/services/src/task.rs` | `task:*` | +| Owned Garage | Organization or owner-scoped vehicle unlock storage. | via garage/org UI | server extension only | `lib/models/src/v_garage.rs`, `lib/services/src/v_garage.rs` | `owned:garage:*` | +| Owned Locker | Organization or owner-scoped arsenal unlock storage. | via locker/org UI | server extension only | `lib/models/src/v_locker.rs`, `lib/services/src/v_locker.rs` | `owned:locker:*` | + +Server and extension guides: +[Actor](/server-modules/actor), +[Bank](/server-modules/bank), +[CAD](/server-modules/cad), +[Economy](/server-modules/economy), +[Garage](/server-modules/garage), +[Locker](/server-modules/locker), +[Organization](/server-modules/organization), +[Owned Storage](/server-modules/owned-storage), +[Phone](/server-modules/phone), +[Store](/server-modules/store), +[Task](/server-modules/task). + +Client guides: +[Client Overview](/client-addons), +[Main](/client-addons/main), +[Common](/client-addons/common), +[Actor](/client-addons/actor), +[Bank](/client-addons/bank), +[CAD](/client-addons/cad), +[Garage](/client-addons/garage), +[Locker](/client-addons/locker), +[Notifications](/client-addons/notifications), +[Organization](/client-addons/organization), +[Phone](/client-addons/phone), +[Store](/client-addons/store). + +## Infrastructure Modules + +| Module | Purpose | Location | +| --- | --- | --- | +| `common` | Shared SQF helpers, base stores, utility functions, and shared UI bridge pieces. | `arma/client/addons/common`, `arma/server/addons/common` | +| `extension` | Server SQF bridge around `forge_server` extension calls and chunked transport. | `arma/server/addons/extension` | +| `main` | Mod-level configuration, pre-init wiring, and server/client startup glue. | `arma/client/addons/main`, `arma/server/addons/main` | +| `economy` | Server-side fuel, medical, and service economy helpers. Fuel and repair charge organization hot state; medical charges player bank/cash first, then organization funds with repayable member debt when personal funds cannot cover the bill. | `arma/server/addons/economy` | +| `notifications` | Client notification UI, sounds, and UI event handling. | `arma/client/addons/notifications` | +| `icom` | Rust helper for interprocess communication and event broadcasting. | `bin/icom`, `arma/server/extension/src/icom.rs` | +| `terrain` | Extension-side terrain export helper. | `arma/server/extension/src/terrain.rs` | +| `transport` | Chunked request/response handling for large extension payloads. | `arma/server/extension/src/transport.rs` | +| `surreal` | SurrealDB connection lifecycle and status reporting. | `arma/server/extension/src/surreal.rs` | + +## Extension Command Groups + +Commands are invoked with: + +```sqf +"forge_server" callExtension ["group:command", [_arg1, _arg2]]; +``` + +Nested groups use additional `:` separators, for example +`bank:hot:deposit`. + +### Core + +| Command | Purpose | +| --- | --- | +| `version` | Return the extension version string. | +| `status` | Return SurrealDB connection state. | +| `surreal:status` | Return SurrealDB connection state directly from the Surreal module. | + +### Actor + +| Command | Purpose | +| --- | --- | +| `actor:get` | Fetch actor data for a resolved player UID. | +| `actor:create` | Create actor data from JSON. | +| `actor:update` | Apply actor JSON updates. | +| `actor:exists` | Return `true` or `false`. | +| `actor:delete` | Delete actor data. | +| `actor:hot:init`, `actor:hot:get`, `actor:hot:keys`, `actor:hot:override`, `actor:hot:save`, `actor:hot:remove` | Manage actor hot state. | + +See [Actor Usage Guide](/server-modules/actor) for examples. + +### Bank + +| Command | Purpose | +| --- | --- | +| `bank:get`, `bank:create`, `bank:update`, `bank:exists`, `bank:delete` | Durable bank CRUD. | +| `bank:hot:init`, `bank:hot:get`, `bank:hot:override`, `bank:hot:patch`, `bank:hot:save`, `bank:hot:remove` | Manage bank hot state. | +| `bank:hot:deposit`, `bank:hot:withdraw`, `bank:hot:deposit_earnings`, `bank:hot:transfer` | Mutate hot bank balances with operation context. | +| `bank:hot:charge_checkout` | Charge a checkout against hot bank state. | +| `bank:hot:validate_pin` | Validate a PIN for bank operations. | + +See [Bank Usage Guide](/server-modules/bank) for examples. + +### Garage + +| Command | Purpose | +| --- | --- | +| `garage:create`, `garage:get`, `garage:add`, `garage:update`, `garage:patch`, `garage:remove`, `garage:delete`, `garage:exists` | Durable player garage operations. | +| `garage:hot:init`, `garage:hot:get`, `garage:hot:override`, `garage:hot:add`, `garage:hot:remove_vehicle`, `garage:hot:save`, `garage:hot:remove` | Manage player garage hot state. | + +See [Garage Usage Guide](/server-modules/garage) for examples. + +### Locker + +| Command | Purpose | +| --- | --- | +| `locker:create`, `locker:get`, `locker:add`, `locker:update`, `locker:patch`, `locker:remove`, `locker:delete`, `locker:exists` | Durable player locker operations. | +| `locker:hot:init`, `locker:hot:get`, `locker:hot:override`, `locker:hot:save`, `locker:hot:remove` | Manage player locker hot state. | + +See [Locker Usage Guide](/server-modules/locker) for examples. + +### Organization + +| Command | Purpose | +| --- | --- | +| `org:get`, `org:create`, `org:update`, `org:exists`, `org:delete` | Durable organization CRUD. | +| `org:assets:get`, `org:assets:update` | Manage organization assets. | +| `org:fleet:get`, `org:fleet:update` | Manage organization fleet entries. | +| `org:members:get`, `org:members:add`, `org:members:remove` | Manage organization membership. | +| `org:hot:*` | Runtime organization workflows including registration, invites, credit lines, checkout charging, assets, fleet, leave, disband, save, and remove. | + +See [Org Usage Guide](/server-modules/organization) for examples. + +### Phone + +| Command | Purpose | +| --- | --- | +| `phone:init` | Initialize phone state for a UID. | +| `phone:contacts:list`, `phone:contacts:add`, `phone:contacts:remove` | Manage contacts. | +| `phone:messages:list`, `phone:messages:thread`, `phone:messages:send`, `phone:messages:mark_read`, `phone:messages:delete` | Manage messages. | +| `phone:emails:list`, `phone:emails:send`, `phone:emails:mark_read`, `phone:emails:delete` | Manage emails. | +| `phone:remove` | Remove phone state for a UID. | + +See [Phone Usage Guide](/server-modules/phone) for examples. + +### CAD + +| Command Group | Purpose | +| --- | --- | +| `cad:activity:append`, `cad:activity:recent` | Append and read recent activity. | +| `cad:assignments:list`, `cad:assignments:assign`, `cad:assignments:acknowledge`, `cad:assignments:decline`, `cad:assignments:upsert`, `cad:assignments:delete` | Manage dispatch assignments. | +| `cad:orders:list`, `cad:orders:create`, `cad:orders:create_from_context`, `cad:orders:close`, `cad:orders:upsert`, `cad:orders:delete` | Manage orders. | +| `cad:requests:list`, `cad:requests:submit`, `cad:requests:submit_from_context`, `cad:requests:close`, `cad:requests:upsert`, `cad:requests:delete` | Manage requests. | +| `cad:profiles:list`, `cad:profiles:update_from_context`, `cad:profiles:upsert`, `cad:profiles:delete` | Manage profiles. | +| `cad:groups:build` | Build grouped CAD state. | +| `cad:view:hydrate` | Build the dispatcher view model. | + +See [CAD Usage Guide](/server-modules/cad) for examples. + +### Task + +| Command Group | Purpose | +| --- | --- | +| `task:reset` | Reset task state. | +| `task:catalog:active`, `task:catalog:get`, `task:catalog:upsert`, `task:catalog:delete` | Manage task catalog entries. | +| `task:ownership:bind`, `task:ownership:release`, `task:ownership:accept`, `task:ownership:reward_context` | Manage task ownership and rewards. | +| `task:status:set`, `task:status:get`, `task:status:clear` | Manage task status. | +| `task:defuse:increment`, `task:defuse:get` | Manage defuse counters. | +| `task:clear` | Clear task state. | + +See [Task Usage Guide](/server-modules/task) for examples. + +### Owned Storage + +| Command Group | Purpose | +| --- | --- | +| `owned:garage:create`, `owned:garage:fetch`, `owned:garage:get`, `owned:garage:add`, `owned:garage:remove`, `owned:garage:delete`, `owned:garage:exists` | Owner-scoped vehicle storage. | +| `owned:garage:hot:*` | Owner-scoped vehicle hot state. | +| `owned:locker:create`, `owned:locker:fetch`, `owned:locker:get`, `owned:locker:add`, `owned:locker:remove`, `owned:locker:delete`, `owned:locker:exists` | Owner-scoped item storage. | +| `owned:locker:hot:*` | Owner-scoped item hot state. | + +See [Owned Storage Usage Guide](/server-modules/owned-storage) for examples. + +### Other Extension Groups + +| Command Group | Purpose | +| --- | --- | +| `store:checkout` | Run store checkout behavior. | +| `icom:connect`, `icom:broadcast`, `icom:send_event` | ICom connection and event forwarding. | +| `terrain:exportSVG` | Export terrain data as SVG. | +| `transport:invoke`, `transport:invoke_stored` | Invoke commands through transport. | +| `transport:request:append`, `transport:request:clear` | Manage stored request chunks. | +| `transport:response:get`, `transport:response:clear` | Manage stored response chunks. | + +## Rust Crates + +| Crate | Role | +| --- | --- | +| `forge-models` | Domain models and validation. Keep these serializable and free of persistence details. | +| `forge-repositories` | Repository traits and in-memory implementations. Keep these storage-agnostic. | +| `forge-services` | Business rules and workflows. Depend on repository traits, not concrete databases. | +| `forge-shared` | Cross-crate helpers. Keep dependencies light. | +| `forge-server` | Arma extension crate. Owns command registration, SurrealDB runtime wiring, and concrete storage adapters. | +| `forge-icom` | ICom helper binary and client library. | diff --git a/docus/content/1.getting-started/3.development.md b/docus/content/1.getting-started/3.development.md new file mode 100644 index 0000000..978471c --- /dev/null +++ b/docus/content/1.getting-started/3.development.md @@ -0,0 +1,132 @@ +# Development Guide + +This guide covers the usual path for adding or changing a Forge module. + +## Local Checks + +Before running storage-backed workflows locally, complete +[SurrealDB Setup](/getting-started/surrealdb-setup). + +Run these before pushing Rust or extension changes: + +```powershell +cargo fmt --check +cargo check +cargo test +cargo build +cargo clippy --all-targets --all-features -- -D warnings +``` + +Run this after changing browser UI sources: + +```powershell +npm run build:webui +``` + +Build Arma packages with: + +```powershell +.\build-arma.ps1 +``` + +## Module Boundaries + +Keep each layer responsible for one kind of work: + +| Layer | Owns | Avoid | +| --- | --- | --- | +| `lib/models` | Data structures, serde defaults, validation helpers. | Database calls, SQF-specific context. | +| `lib/repositories` | Repository traits and in-memory stores. | SurrealDB-specific code. | +| `lib/services` | Business rules, workflow orchestration, structured results. | Arma engine calls, extension transport details. | +| `arma/server/extension` | Command parsing, context resolution, SurrealDB implementations, serialization to SQF. | Business rules that belong in services. | +| `arma/server/addons` | Server SQF lifecycle, game-object integration, calls into `forge_server`. | Direct database logic. | +| `arma/client/addons` | Client UI, keybinds, local UI events. | Authoritative persistence. | + +## Adding a Domain Module + +1. Add the model in `lib/models/src/.rs`. +2. Export the model from `lib/models/src/lib.rs`. +3. Add repository traits in `lib/repositories/src/.rs`. +4. Add in-memory repository support if the service needs tests or hot state. +5. Export the traits from `lib/repositories/src/lib.rs`. +6. Add service logic in `lib/services/src/.rs`. +7. Add focused unit tests for service behavior. +8. Export the service from `lib/services/src/lib.rs`. +9. Add a SurrealDB schema module under `arma/server/extension/src/schema`. +10. Add the concrete storage adapter under `arma/server/extension/src/storage`. +11. Register the storage adapter in `arma/server/extension/src/storage.rs`. +12. Add an extension command group under `arma/server/extension/src/.rs`. +13. Register the command group in `arma/server/extension/src/lib.rs`. +14. Add server addon functions under `arma/server/addons/` if SQF needs a module-level API. +15. Add client addon or browser UI files under `arma/client/addons/` if the module has player-facing UI. +16. Add documentation in `docs/` and module-level READMEs. + +## Extension Command Rules + +Commands should return one of these forms: + +- JSON string for structured results. +- `"true"` or `"false"` for simple existence and boolean operations. +- `"OK"` for successful destructive operations with no response body. +- `"Error: "` for failures. + +Prefer stable JSON shapes over ad hoc strings. SQF callers should always check +for the `"Error:"` prefix before parsing JSON. + +Example: + +```sqf +private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Actor request failed: %1", _payload]; +}; + +private _actor = fromJSON _payload; +``` + +## Persistence Rules + +SurrealDB is the durable store. Keep database-specific mapping in the extension +storage adapters, not in services or repository traits. + +When changing persisted data: + +- Update or add the matching `.surql` schema module. +- Update the concrete storage adapter. +- Preserve existing records when possible through serde defaults or migration + logic. +- Add tests at the service level for behavior, and add storage tests only when + database mapping is the risk. + +## Hot-State Rules + +Use hot state for data that is read or mutated frequently during a player +session. Hot-state modules usually provide: + +- `init` to load durable state into memory. +- `get` to read the runtime copy. +- `override` or focused mutation commands to update the runtime copy. +- `save` to write the runtime copy back to SurrealDB. +- `remove` to evict the runtime copy. + +Do not assume hot state is durable until `save` succeeds. + +## Web UI Rules + +Browser UI source files live under each client addon. Built assets usually land +under that addon's `ui/_site` directory. + +Use the existing common bridge in `arma/client/addons/common` when a UI needs +to send events back to SQF. Keep UI state and rendering in JavaScript, and keep +server-authoritative decisions in server SQF or Rust services. + +## Documentation Checklist + +When adding or changing a module, update: + +- `docs/MODULE_REFERENCE.md` for framework-level inventory. +- A module-specific README in the addon directory when SQF or UI usage changes. +- `arma/server/docs/api-reference.md` when extension commands change. +- Existing usage guides when payload shapes or workflows change. diff --git a/docus/content/1.getting-started/4.surrealdb-setup.md b/docus/content/1.getting-started/4.surrealdb-setup.md new file mode 100644 index 0000000..918a801 --- /dev/null +++ b/docus/content/1.getting-started/4.surrealdb-setup.md @@ -0,0 +1,101 @@ +# SurrealDB Setup + +Forge uses SurrealDB for durable storage. The Rust server extension connects to +SurrealDB on startup and applies Forge schema modules automatically, so setup +comes down to running a reachable database and matching the Forge config. + +## Choose the Right Path + +### Developer or Server Operator + +Use this path if you are building Forge, running a local test server, or +hosting the live Arma server. + +Official SurrealDB resources: + +- [SurrealDB install page](https://surrealdb.com/install) +- [SurrealDB CLI `start` reference](https://surrealdb.com/docs/reference/cli/surrealdb-cli/commands/start) + +Install SurrealDB with the official method for your platform: + +```powershell +# Windows +iwr https://windows.surrealdb.com -useb | iex +``` + +```bash +# macOS +brew install surrealdb/tap/surreal +``` + +```bash +# Linux +curl -sSf https://install.surrealdb.com | sh +``` + +For Forge, start a persistent local database instead of the default in-memory +mode: + +```powershell +surreal start surrealkv://forge.db --bind 127.0.0.1:8000 --user root --pass root +``` + +Then copy `arma/server/extension/config.example.toml` to `config.toml` next to +`forge_server_x64.dll` and keep the values aligned with the database you +started: + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +After that: + +1. Start the Arma server with the Forge extension enabled. +2. Let the extension connect and apply the Forge schema modules. +3. Verify the connection state: + +```sqf +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` + +If you change the endpoint, namespace, database, username, or password in +SurrealDB, change the same values in Forge's `config.toml`. + +### Mission Designer or Community Manager/Leader + +Use this path if you mostly need to inspect, query, or adjust data for a test +or live server and you are not changing Forge source code. + +Official SurrealDB resources: + +- [Surrealist installation](https://surrealdb.com/docs/explore/surrealist/installation) +- [Surrealist web app](https://app.surrealdb.com) +- [Surrealist local database serving](https://surrealdb.com/docs/explore/surrealist/concepts/local-database-serving) + +Recommended approach: + +1. Install **Surrealist Desktop**. It is the better fit for Forge because the + official docs note that the web app can be limited when connecting to + `localhost` or non-HTTPS endpoints. +2. Connect Surrealist to the same database Forge uses. +3. Use the values from the server's `config.toml`: + +```text +Endpoint: http://127.0.0.1:8000 +Namespace: forge +Database: main +Username: root +Password: root +``` + +If you need your own local sandbox instead of connecting to an existing Forge +server, install SurrealDB first and follow the developer/server-operator path +above. Surrealist Desktop can also launch a local database for you after the +`surreal` executable is installed and available on your `PATH`. diff --git a/docus/content/2.server-extension/0.index.md b/docus/content/2.server-extension/0.index.md new file mode 100644 index 0000000..8f9201b --- /dev/null +++ b/docus/content/2.server-extension/0.index.md @@ -0,0 +1,43 @@ +# Forge Server Extension + +Forge Server is an arma-rs extension for Arma 3 server-side persistence and +domain services. It exposes game-facing commands and stores durable state in +SurrealDB. + +## Architecture + +SQF modules call `forge_server` through `fnc_extCall`. Small requests use the +direct `callExtension` path, while large payloads are staged through the +transport layer. + +```text +SQF module + -> extension bridge + -> domain command + -> service layer + -> repository + -> SurrealDB +``` + +## Configuration + +Copy `config.example.toml` to `config.toml` next to the extension DLL. + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +For install links and Forge-specific setup steps, see +[SurrealDB Setup](/getting-started/surrealdb-setup). + +## References + +- [API Reference](/server-extension/api-reference) +- [Usage Examples](/server-extension/usage-examples) +- [Framework Module Guides](/getting-started) diff --git a/docus/content/2.server-extension/1.api-reference.md b/docus/content/2.server-extension/1.api-reference.md new file mode 100644 index 0000000..1ad6653 --- /dev/null +++ b/docus/content/2.server-extension/1.api-reference.md @@ -0,0 +1,48 @@ +# Forge Server API Reference + +The Forge server extension exposes domain-oriented commands through +`callExtension`. Persistent data is stored through the configured SurrealDB +connection and schema modules. + +## Core Commands + +```sqf +"forge_server" callExtension ["version", []]; +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` + +`status` and `surreal:status` return `initializing`, `connected`, or `failed`. + +## Domain Commands + +Game systems should call the domain APIs instead of raw database operations: + +- `actor:*` +- `bank:*` +- `garage:*` +- `locker:*` +- `org:*` +- `phone:*` +- `store:*` +- `task:*` +- `cad:*` +- `owned:garage:*` +- `owned:locker:*` +- `transport:*` + +Large request and response payloads are routed through the transport layer when +needed by `forge_server_addons_extension_fnc_extCall`. + +## Module Guides + +- [Actor](/server-modules/actor) +- [Bank](/server-modules/bank) +- [CAD](/server-modules/cad) +- [Garage](/server-modules/garage) +- [Locker](/server-modules/locker) +- [Organization](/server-modules/organization) +- [Owned Storage](/server-modules/owned-storage) +- [Phone](/server-modules/phone) +- [Store](/server-modules/store) +- [Task](/server-modules/task) diff --git a/docus/content/2.server-extension/2.usage-examples.md b/docus/content/2.server-extension/2.usage-examples.md new file mode 100644 index 0000000..c766ea2 --- /dev/null +++ b/docus/content/2.server-extension/2.usage-examples.md @@ -0,0 +1,47 @@ +# Forge Server Usage Examples + +These examples use the domain command surface exposed by the extension. +Persistence is handled by the server through SurrealDB. + +## Status Check + +```sqf +["status", []] call forge_server_extension_fnc_extCall params ["_status", "_ok"]; +if (_ok && {_status isEqualTo "connected"}) then { + systemChat "Forge persistence is online."; +}; +``` + +## Actor Fetch + +```sqf +private _uid = getPlayerUID player; +["actor:get", [_uid]] call forge_server_extension_fnc_extCall params ["_payload", "_ok"]; +if (_ok) then { + private _actor = fromJSON _payload; + systemChat format ["Loaded actor %1", _actor getOrDefault ["uid", _uid]]; +}; +``` + +## Store Checkout + +```sqf +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", "default"], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "bank"], + ["items", [ + createHashMapFromArray [ + ["classname", "FirstAidKit"], + ["category", "item"], + ["priceValue", 50], + ["quantity", 2] + ] + ]], + ["vehicles", []] +]; + +["store:checkout", [toJSON _checkout]] call forge_server_extension_fnc_extCall; +``` diff --git a/docus/content/3.server-modules/.navigation.yml b/docus/content/3.server-modules/.navigation.yml new file mode 100644 index 0000000..b3ef48f --- /dev/null +++ b/docus/content/3.server-modules/.navigation.yml @@ -0,0 +1,2 @@ +title: Server Modules +icon: i-lucide-layers-3 diff --git a/docus/content/3.server-modules/0.index.md b/docus/content/3.server-modules/0.index.md new file mode 100644 index 0000000..7ef07e6 --- /dev/null +++ b/docus/content/3.server-modules/0.index.md @@ -0,0 +1,113 @@ +# Server Module Guides + +These pages document the authoritative server-side workflows in Forge. + +Most modules follow the same shape: + +1. Server SQF gathers game context and validates mission/runtime assumptions. +2. The `forge_server` extension routes the request into the matching command group. +3. Services apply business rules through storage-agnostic repository traits. +4. The extension persists durable state through SurrealDB adapters when needed. + +## Gameplay Domains + +::u-page-grid + :::u-page-card + --- + icon: i-lucide-user-round + title: Actor + to: /server-modules/actor + --- + Persistent player identity, position, loadout, contact fields, and hot state. + ::: + + :::u-page-card + --- + icon: i-lucide-wallet + title: Bank + to: /server-modules/bank + --- + Player funds, transfers, PIN validation, checkout charging, and bank hot state. + ::: + + :::u-page-card + --- + icon: i-lucide-map + title: CAD + to: /server-modules/cad + --- + Dispatch requests, assignments, profiles, grouped state, and hydrated views. + ::: + + :::u-page-card + --- + icon: i-lucide-ambulance + title: Economy + to: /server-modules/economy + --- + Fuel, service, and medical charging rules across player and organization funds. + ::: + + :::u-page-card + --- + icon: i-lucide-car-front + title: Garage + to: /server-modules/garage + --- + Vehicle storage, hot-state updates, and persistence of vehicle condition. + ::: + + :::u-page-card + --- + icon: i-lucide-package + title: Locker + to: /server-modules/locker + --- + Player inventory storage, unique item limits, and locker hot-state behavior. + ::: + + :::u-page-card + --- + icon: i-lucide-building-2 + title: Organization + to: /server-modules/organization + --- + Membership, treasury, shared assets, fleet, and organization hot workflows. + ::: + + :::u-page-card + --- + icon: i-lucide-key-round + title: Owned Storage + to: /server-modules/owned-storage + --- + Owner-scoped locker and vehicle unlock storage used by org-linked features. + ::: + + :::u-page-card + --- + icon: i-lucide-smartphone + title: Phone + to: /server-modules/phone + --- + Contacts, message threads, and email state for in-game phone workflows. + ::: + + :::u-page-card + --- + icon: i-lucide-shopping-cart + title: Store + to: /server-modules/store + --- + Checkout orchestration across pricing, grants, payment sources, and rollback. + ::: + + :::u-page-card + --- + icon: i-lucide-flag + title: Task + to: /server-modules/task + --- + Task catalog, ownership, status transitions, defuse counters, and rewards. + ::: +:: diff --git a/docus/content/3.server-modules/1.actor.md b/docus/content/3.server-modules/1.actor.md new file mode 100644 index 0000000..40eacd4 --- /dev/null +++ b/docus/content/3.server-modules/1.actor.md @@ -0,0 +1,127 @@ +# Actor Usage Guide + +The actor module stores persistent player character data: identity, loadout, +position, direction, stance, contact fields, state, holster status, rank, and +organization. + +## Storage Model + +Actor data is persisted through SurrealDB by the server extension. + +```json +{ + "uid": "76561198000000000", + "name": "Player Name", + "loadout": {}, + "position": [1234.5, 6789.0, 0.0], + "direction": 90.0, + "stance": "STAND", + "email": "0160000000@spearnet.mil", + "phone_number": "0160000000", + "state": "HEALTHY", + "holster": true, + "rank": null, + "organization": "default" +} +``` + +Rules validated by the Rust service: + +- `uid` is authoritative from the command argument and must be a 17-digit Steam + UID. +- `name` is optional, but cannot be empty when set and cannot exceed 50 + characters. +- `position` must be three finite numbers when set. +- `direction` must be in the `0.0 <= direction < 360.0` range. +- `email` must contain `@` and end with `.mil` when set. +- `phone_number` must start with `0160` and be 10 digits when set. +- Empty `phone_number`, `email`, or `organization` fields are filled on create. + +## Commands + +All commands are called on the `actor` group. + +| Command | Arguments | Returns | +| --- | --- | --- | +| `actor:get` | `uid` | Actor JSON. If no actor exists, returns a default actor but does not persist it. | +| `actor:create` | `uid`, `actor_json` | Persisted actor JSON. | +| `actor:update` | `uid`, `patch_json` | Updated actor JSON. | +| `actor:exists` | `uid` | `true` or `false`. | +| `actor:delete` | `uid` | `OK`. | + +## Create an Actor + +The `uid` field in the JSON is overwritten with the command UID. + +```sqf +private _actor = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["name", name player], + ["loadout", getUnitLoadout player], + ["position", getPosATL player], + ["direction", getDir player], + ["stance", stance player], + ["email", ""], + ["phone_number", ""], + ["state", "HEALTHY"], + ["holster", true], + ["organization", "default"] +]; + +private _result = "forge_server" callExtension ["actor:create", [ + getPlayerUID player, + toJSON _actor +]]; +``` + +## Update an Actor + +`actor:update` accepts a JSON object containing only fields to change. + +```sqf +private _patch = createHashMapFromArray [ + ["position", getPosATL player], + ["direction", getDir player], + ["stance", stance player], + ["loadout", getUnitLoadout player] +]; + +private _result = "forge_server" callExtension ["actor:update", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +Supported patch fields are `name`, `position`, `direction`, `stance`, `email`, +`phone_number`, `state`, `holster`, `rank`, `organization`, and `loadout`. +`uid` is ignored. + +## Hot State + +The `actor:hot:*` commands keep a runtime copy of actor data and write it back +only when `actor:hot:save` runs. + +| Command | Arguments | Returns | +| --- | --- | --- | +| `actor:hot:init` | `uid` | Actor JSON from durable storage. | +| `actor:hot:get` | `uid` | Actor JSON. | +| `actor:hot:keys` | none | JSON array of hot actor UIDs. | +| `actor:hot:override` | `uid`, `actor_json` | Actor JSON. | +| `actor:hot:save` | `uid` | Current hot actor JSON and async durable save. | +| `actor:hot:remove` | `uid` | `OK`. | + +Use hot state for frequently updated session data such as position and loadout. +Use durable commands for account creation and administrative changes. + +## Error Handling + +```sqf +private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Actor error: %1", _payload]; +}; + +private _actor = fromJSON _payload; +``` diff --git a/docus/content/3.server-modules/10.store.md b/docus/content/3.server-modules/10.store.md new file mode 100644 index 0000000..f947863 --- /dev/null +++ b/docus/content/3.server-modules/10.store.md @@ -0,0 +1,151 @@ +# Store Usage Guide + +The store module processes checkout requests. It charges a payment source and +grants purchased items to the player locker, virtual arsenal locker, and +virtual garage unlocks. + +## Server SQF Module + +The server addon uses two long-lived module objects: + +- `StorefrontStore` is the storefront workflow facade. It builds hydrate + payloads, validates checkout requests, calls the Rust `store:checkout` + command, syncs UI patches, and asks related module stores to save hot state. +- `StoreCatalogService` scans configured item and vehicle categories, builds + catalog responses, resolves checkout entries, and calculates authoritative + prices. + +Editor-placed store entities are initialized by `fnc_initStore` during store +post-init. The initializer matches non-null mission namespace objects whose +variable names contain `store` and sets `isStore = true`, following the same +pattern used by garage entities. + +## Checkout Model + +`store:checkout` accepts one JSON context. + +```json +{ + "requesterUid": "76561198000000000", + "requesterName": "Player Name", + "orgId": "default", + "requesterIsDefaultOrgCeo": false, + "paymentMethod": "bank", + "items": [ + { + "classname": "arifle_MX_F", + "category": "weapon", + "priceValue": 500, + "quantity": 1 + } + ], + "vehicles": [ + { + "classname": "B_Quadbike_01_F", + "category": "cars", + "priceValue": 1500 + } + ] +} +``` + +Rules validated by the Rust service: + +- `requesterUid` is required. +- At least one item or vehicle is required. +- The checkout total must be greater than zero. +- Item categories must be `item`, `attachment`, `weapon`, `magazine`, or + `backpack`. +- Vehicle categories must be `cars`, `armor`, `helis`, `planes`, `naval`, or + `other`. +- Payment method must be `cash`, `bank`, `org_funds`, or `credit_line`. +- Player locker capacity cannot exceed 25 unique items after checkout. +- Organization funds can only be charged by the org owner or the default org + CEO flag. + +## Command + +| Command | Arguments | Returns | +| --- | --- | --- | +| `store:checkout` | `checkout_json` | Checkout result JSON. | + +## Result Model + +```json +{ + "chargedTotal": 2000.0, + "paymentMethod": "bank", + "message": "Checkout completed. $2,000 charged, 1 locker grant(s), 1 vehicle unlock(s).", + "lockerGranted": [], + "vehicleGranted": [], + "lockerPatch": {}, + "vaPatch": {}, + "vgaragePatch": {}, + "bankPatch": {}, + "orgPatch": {}, + "orgTargetUids": [] +} +``` + +Patch fields are intended for UI updates after checkout. The service commits +all grants and payment changes together, and attempts rollback if a later write +fails. + +## Player Bank Checkout + +```sqf +private _item = createHashMapFromArray [ + ["classname", "arifle_MX_F"], + ["category", "weapon"], + ["priceValue", 500], + ["quantity", 1] +]; + +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", "default"], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "bank"], + ["items", [_item]], + ["vehicles", []] +]; + +private _result = "forge_server" callExtension ["store:checkout", [toJSON _checkout]]; +``` + +## Organization Funds Checkout + +When `paymentMethod` is `org_funds`, vehicles are also added to the +organization fleet patch. + +```sqf +private _vehicle = createHashMapFromArray [ + ["classname", "B_Quadbike_01_F"], + ["category", "cars"], + ["priceValue", 1500] +]; + +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "org_funds"], + ["items", []], + ["vehicles", [_vehicle]] +]; + +private _result = "forge_server" callExtension ["store:checkout", [toJSON _checkout]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Checkout failed: %1", _payload]; +}; + +private _checkoutResult = fromJSON _payload; +``` diff --git a/docus/content/3.server-modules/11.task.md b/docus/content/3.server-modules/11.task.md new file mode 100644 index 0000000..0639dbb --- /dev/null +++ b/docus/content/3.server-modules/11.task.md @@ -0,0 +1,289 @@ +# Task Usage Guide + +The task module stores transient mission task metadata for active server or +mission lifecycle workflows. SQF still owns Arma-only runtime state such as +objects and participants. + +The server addon at `arma/server/addons/task` also owns task execution: +creating BIS tasks, registering task entities, tracking participants, binding +task ownership, applying player/org rewards, and clearing task state when a +task completes. + +Runtime dependencies: + +- `forge_server_extension` +- `forge_server_common` +- `forge_server_actor` +- `forge_server_bank` +- `forge_server_org` +- `forge_client_notifications` + +## Data Model + +Catalog entries are flexible JSON objects. The service normalizes these fields +when a catalog entry is inserted or ownership changes: + +- `taskId` +- `taskID` +- `accepted` +- `requesterUid` +- `orgID` + +Ownership context: + +```json +{ + "requesterUid": "76561198000000000", + "orgId": "default" +} +``` + +## Commands + +| Command | Arguments | Returns | +| --- | --- | --- | +| `task:reset` | none | `true`. | +| `task:catalog:active` | none | Active catalog entry array JSON. | +| `task:catalog:get` | `task_id` | Catalog entry JSON or `null`. | +| `task:catalog:upsert` | `task_id`, `entry_json` | Stored catalog entry JSON. | +| `task:catalog:delete` | `task_id` | `true`. | +| `task:ownership:bind` | `task_id`, `ownership_json` | Ownership mutation result JSON. | +| `task:ownership:release` | `task_id` | Ownership mutation result JSON. | +| `task:ownership:accept` | `task_id`, `ownership_json` | Ownership mutation result JSON. | +| `task:ownership:reward_context` | `task_id` | Reward context JSON. | +| `task:status:set` | `task_id`, `status` | `true`. | +| `task:status:get` | `task_id` | Status string JSON. | +| `task:status:clear` | `task_id` | `true`. | +| `task:defuse:increment` | `task_id` | New counter value JSON. | +| `task:defuse:get` | `task_id` | Counter value JSON. | +| `task:clear` | `task_id` | `true`. | + +## Upsert a Catalog Entry + +```sqf +private _entry = createHashMapFromArray [ + ["title", "Destroy Cache"], + ["description", "Destroy the enemy supply cache."], + ["reward", 1500] +]; + +private _result = "forge_server" callExtension ["task:catalog:upsert", [ + "task-cache-1", + toJSON _entry +]]; +``` + +## Mark a Task Active + +```sqf +"forge_server" callExtension ["task:status:set", [ + "task-cache-1", + "active" +]]; + +private _active = "forge_server" callExtension ["task:catalog:active", []]; +``` + +Completed statuses `succeeded` and `failed` are also stored as completed status +fallbacks. Clearing status removes active and completed state. + +## Accept a Task + +```sqf +private _ownership = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["orgId", "default"] +]; + +private _result = "forge_server" callExtension ["task:ownership:accept", [ + "task-cache-1", + toJSON _ownership +]]; +``` + +`task:ownership:accept` fails if the task is not active or another requester +already accepted it. + +## Rewards + +```sqf +private _result = "forge_server" callExtension ["task:ownership:reward_context", [ + "task-cache-1" +]]; + +private _context = fromJSON (_result select 0); +``` + +The reward context contains `requesterUid` and `orgId`. + +## Server Task Flows + +The task addon provides these server-owned task flows: + +- `attack` +- `defend` +- `defuse` +- `delivery` +- `destroy` +- `hostage` +- `hvt` + +Mission designers can create tasks in four ways: + +- Eden modules for editor-authored tasks. +- `forge_server_task_fnc_startTask` for script-authored tasks. +- `forge_server_task_fnc_handler` for pre-registered entities with reputation + gating and ownership binding. This path expects the BIS task and catalog + entry to already exist if map-task and CAD visibility are required. +- Direct task function calls for server-owned or mission-authored flows that + intentionally fall back to the `default` org. This path expects the BIS task + to already exist if map-task visibility is required. + +The dynamic mission manager can also generate attack tasks from config. That is +system-generated content rather than a hand-authored task creation path. + +## CAD Compatibility + +CAD hydrates assignable tasks from `TaskStore.getActiveTaskCatalog`. A task must +have a catalog entry and active task status before CAD can show and assign it. + +CAD-compatible creation paths: + +- Eden modules: compatible because they delegate to + `forge_server_task_fnc_startTask`. +- `forge_server_task_fnc_startTask`: compatible because it registers the + catalog entry, creates the BIS task, and dispatches through the handler. +- Dynamic mission manager attack tasks: compatible because the mission manager + uses `forge_server_task_fnc_startTask`. + +Limited or incompatible paths: + +- `forge_server_task_fnc_handler`: only compatible if a catalog entry was + already registered elsewhere. The handler sets active status and ownership, + but it does not create the BIS task shown in the map task tab or upsert the + catalog entry. +- Direct task function calls: not CAD-compatible by default. They bypass + `startTask` and usually do not register the task catalog entry or active + status that CAD hydrates from. They also only call `BIS_fnc_taskSetState` at + completion/failure; they do not create the BIS task first. + +## BIS Map Task Prerequisite + +Only the Eden task modules and `forge_server_task_fnc_startTask` create the BIS +task automatically through `BIS_fnc_taskCreate`. + +If a mission uses `forge_server_task_fnc_handler` directly or calls a task flow +function such as `forge_server_task_fnc_attack`, the mission must create a BIS +task with the same task ID before the Forge task completes. Otherwise the +success/failure `BIS_fnc_taskSetState` call has no visible map task to update. + +That prerequisite can be satisfied with a vanilla Eden task creation module or +a scripted `BIS_fnc_taskCreate` call. `forge_server_task_fnc_startTask` is the +preferred Forge path because it handles BIS task creation, Forge catalog +registration, entity registration, and handler dispatch together. + +## Eden Modules + +Eden task modules are the normal designer-facing path. Place the module, +configure its attributes, and sync it to the relevant entities or grouping +modules. + +Available task modules: + +- `FORGE_Module_Attack`: sync directly to target units or vehicles. +- `FORGE_Module_Destroy`: sync directly to objects, vehicles, or units. +- `FORGE_Module_Defuse`: sync to `FORGE_Module_Explosives` and optionally + `FORGE_Module_Protected`. +- `FORGE_Module_Delivery`: sync to `FORGE_Module_Cargo`; the cargo module syncs + to cargo objects. +- `FORGE_Module_Hostage`: sync to `FORGE_Module_Hostages` and + `FORGE_Module_Shooters`. +- `FORGE_Module_HVT`: sync directly to HVT units. +- `FORGE_Module_Defend`: configure the defense marker and wave settings. + +These modules delegate to `forge_server_task_fnc_startTask`. + +## Scripted Start Task + +Use `forge_server_task_fnc_startTask` when creating tasks from modules, +mission scripts, or generated mission-manager content. It registers task +entities, creates the BIS task, stores the catalog entry, then dispatches +through `forge_server_task_fnc_handler`. + +```sqf +[ + "attack", + "compound_attack_01", + getPosATL leader1, + "Attack: East Compound", + "Eliminate all hostile forces.", + createHashMapFromArray [["targets", [unit1, unit2, unit3]]], + createHashMapFromArray [ + ["limitFail", 0], + ["limitSuccess", 3], + ["funds", 50000], + ["ratingFail", -10], + ["ratingSuccess", 20], + ["timeLimit", 900] + ], + 0, + getPlayerUID player, + "script" +] call forge_server_task_fnc_startTask; +``` + +## Handler Calls + +Use `forge_server_task_fnc_handler` directly when the task entities are already +registered and you want reputation gating plus ownership binding. Create the +BIS task and catalog entry separately if this task should appear in the map +task tab or CAD: + +```sqf +[ + "delivery", + ["delivery_1", 1, 3, "delivery_zone", 250000, -75, 300, false, false, 900], + 250, + getPlayerUID player +] call forge_server_task_fnc_handler; +``` + +## Direct Task Calls + +Direct task function calls still work for mission-authored or server-owned +tasks, but they do not provide a requester UID. Ownership falls back to the +`default` org. Create the BIS task separately if this task should appear in the +map task tab. + +## Timer Semantics + +Task time limits use `0` for no limit: + +- attack `timeLimit` +- destroy `timeLimit` +- delivery `timeLimit` +- hostage `timeLimit` +- HVT `timeLimit` + +Positive values are measured in seconds. Do not pass `-1` as a no-limit value; +the task runtime treats any non-zero task time limit as active. + +Defuse IED timers are different. `iedTimer` must be greater than `0`, because +IEDs are expected to have an active countdown. The Eden defuse module defaults +to `300` seconds. + +## Defuse Counter + +```sqf +"forge_server" callExtension ["task:defuse:increment", ["task-cache-1"]]; +private _count = "forge_server" callExtension ["task:defuse:get", ["task-cache-1"]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Task error: %1", _payload]; +}; +``` diff --git a/docus/content/3.server-modules/2.bank.md b/docus/content/3.server-modules/2.bank.md new file mode 100644 index 0000000..05cd332 --- /dev/null +++ b/docus/content/3.server-modules/2.bank.md @@ -0,0 +1,169 @@ +# Bank Usage Guide + +The bank module stores player account balances, earnings, PINs, and transaction +strings. The hot-state API also owns the active banking workflows used by the +UI: deposit, withdraw, transfer, checkout charge, and PIN validation. + +## Storage Model + +Bank data is persisted through SurrealDB by the server extension. + +```json +{ + "uid": "76561198000000000", + "name": "Player Name", + "bank": 1000.0, + "cash": 250.0, + "earnings": 0.0, + "pin": 1234, + "transactions": [] +} +``` + +Rules validated by the Rust service: + +- `uid` is authoritative from the command argument. +- `name` cannot be empty. +- `bank` and `cash` cannot be negative. +- `pin` must be a four-digit number. +- Durable `bank:get` requires an existing bank account. + +## Durable Commands + +| Command | Arguments | Returns | +| --- | --- | --- | +| `bank:create` | `uid`, `bank_json` | Persisted bank JSON. | +| `bank:get` | `uid` | Bank JSON. | +| `bank:update` | `uid`, `patch_json` | Updated bank JSON. | +| `bank:exists` | `uid` | `true` or `false`. | +| `bank:delete` | `uid` | `OK`. | + +## Create an Account + +The `uid` field in the JSON is overwritten with the command UID. + +```sqf +private _account = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["name", name player], + ["bank", 0], + ["cash", 0], + ["earnings", 0], + ["pin", 1234], + ["transactions", []] +]; + +private _result = "forge_server" callExtension ["bank:create", [ + getPlayerUID player, + toJSON _account +]]; +``` + +## Hot-State Commands + +| Command | Arguments | Returns | +| --- | --- | --- | +| `bank:hot:init` | `uid` | Bank JSON loaded into hot state. | +| `bank:hot:get` | `uid` | Bank JSON. | +| `bank:hot:override` | `uid`, `bank_json` | Bank JSON. | +| `bank:hot:patch` | `uid`, `patch_json` | `{ account, patch }`. | +| `bank:hot:deposit` | `uid`, `amount`, `context_json` | `{ account, patch }`. | +| `bank:hot:withdraw` | `uid`, `amount`, `context_json` | `{ account, patch }`. | +| `bank:hot:deposit_earnings` | `uid`, `amount`, `context_json` | `{ account, patch }`. | +| `bank:hot:transfer` | `source_uid`, `target_uid`, `amount`, `context_json` | Transfer result JSON. | +| `bank:hot:charge_checkout` | `uid`, `amount`, `context_json` | `{ account, patch }`. | +| `bank:hot:validate_pin` | `uid`, `pin`, `context_json` | `{}` on success. | +| `bank:hot:save` | `uid` | Current hot bank JSON and async durable save. | +| `bank:hot:remove` | `uid` | `OK`. | + +Use hot-state commands for UI workflows. They return patch objects so the UI can +update only changed fields. + +## Deposit and Withdraw + +ATM sessions require `atmAuthorized: true`. Full bank sessions can set +`mode: "bank"`. + +```sqf +private _context = createHashMapFromArray [ + ["mode", "atm"], + ["atmAuthorized", true] +]; + +private _deposit = "forge_server" callExtension ["bank:hot:deposit", [ + getPlayerUID player, + "100", + toJSON _context +]]; + +private _withdraw = "forge_server" callExtension ["bank:hot:withdraw", [ + getPlayerUID player, + "50", + toJSON _context +]]; +``` + +## Transfer + +Transfers are only available from the full bank interface. `fromField` can be +`bank` or `cash`. + +```sqf +private _context = createHashMapFromArray [ + ["mode", "bank"], + ["atmAuthorized", false], + ["fromField", "bank"] +]; + +private _result = "forge_server" callExtension ["bank:hot:transfer", [ + getPlayerUID player, + _targetUid, + "250", + toJSON _context +]]; +``` + +## Checkout Charge + +Checkout charging supports `sourceField: "cash"` or `sourceField: "bank"`. +Set `commit` to `false` to preview the patch without saving. + +```sqf +private _context = createHashMapFromArray [ + ["sourceField", "bank"], + ["commit", true] +]; + +private _result = "forge_server" callExtension ["bank:hot:charge_checkout", [ + getPlayerUID player, + "125", + toJSON _context +]]; +``` + +## PIN Validation + +PIN entry is only valid in ATM mode. + +```sqf +private _context = createHashMapFromArray [["mode", "atm"]]; + +private _result = "forge_server" callExtension ["bank:hot:validate_pin", [ + getPlayerUID player, + "1234", + toJSON _context +]]; +``` + +## Error Handling + +```sqf +private _result = "forge_server" callExtension ["bank:hot:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Bank error: %1", _payload]; +}; + +private _bank = fromJSON _payload; +``` diff --git a/docus/content/3.server-modules/3.cad.md b/docus/content/3.server-modules/3.cad.md new file mode 100644 index 0000000..44d64d7 --- /dev/null +++ b/docus/content/3.server-modules/3.cad.md @@ -0,0 +1,183 @@ +# CAD Usage Guide + +The CAD module stores transient operational state for dispatch activity, +assignments, dispatch orders, support requests, group profiles, grouped views, +and hydrated UI payloads. CAD state is in-memory and follows the active server +or mission lifecycle. + +## Data Model + +Most CAD records are flexible JSON objects. The service normalizes important +IDs and returns structured mutation results for higher-level workflows. + +Common generated IDs: + +- Orders: `cad-order:` +- Requests: `cad-request:` +- Assignments usually share a task ID or order ID. + +## Commands + +### Activity + +| Command | Arguments | Returns | +| --- | --- | --- | +| `cad:activity:append` | `activity_json` | `OK`. | +| `cad:activity:recent` | `limit` | Recent activity array JSON. | + +### Assignments + +| Command | Arguments | Returns | +| --- | --- | --- | +| `cad:assignments:list` | none | Assignment array JSON. | +| `cad:assignments:assign` | `entry_id`, `assignment_json` | Assignment mutation result JSON. | +| `cad:assignments:acknowledge` | `entry_id`, `patch_json` | Assignment mutation result JSON. | +| `cad:assignments:decline` | `entry_id`, `patch_json` | Assignment mutation result JSON and removes assignment. | +| `cad:assignments:upsert` | `entry_id`, `assignment_json` | `OK`. | +| `cad:assignments:delete` | `entry_id` | `OK`. | + +### Orders + +| Command | Arguments | Returns | +| --- | --- | --- | +| `cad:orders:list` | none | Order array JSON. | +| `cad:orders:create` | `order_seed_json` | Dispatch order mutation result JSON. | +| `cad:orders:create_from_context` | `context_json` | Dispatch order mutation result JSON. | +| `cad:orders:close` | `entry_id` | Dispatch order mutation result JSON and removes order/assignment. | +| `cad:orders:upsert` | `entry_id`, `order_json` | `OK`. | +| `cad:orders:delete` | `entry_id` | `OK`. | + +### Requests + +| Command | Arguments | Returns | +| --- | --- | --- | +| `cad:requests:list` | none | Request array JSON. | +| `cad:requests:submit` | `request_json` | Request mutation result JSON. | +| `cad:requests:submit_from_context` | `context_json` | Request mutation result JSON. | +| `cad:requests:close` | `entry_id` | Request mutation result JSON and removes request. | +| `cad:requests:upsert` | `entry_id`, `request_json` | `OK`. | +| `cad:requests:delete` | `entry_id` | `OK`. | + +### Profiles and Views + +| Command | Arguments | Returns | +| --- | --- | --- | +| `cad:profiles:list` | none | Profile array JSON. | +| `cad:profiles:update_from_context` | `context_json` | Profile mutation result JSON. | +| `cad:profiles:upsert` | `entry_id`, `profile_json` | `OK`. | +| `cad:profiles:delete` | `entry_id` | `OK`. | +| `cad:groups:build` | `groups_seed_json` | Group array JSON. | +| `cad:view:hydrate` | `hydrate_seed_json` | Hydrated CAD payload JSON. | + +## Submit a Support Request + +```sqf +private _fields = createHashMapFromArray [ + ["pickup_location", "Grid 123456"], + ["precedence", "urgent"], + ["security", "secure"] +]; + +private _context = createHashMapFromArray [ + ["type", "medevac_9line"], + ["fields", _fields], + ["groupId", "alpha"], + ["groupCallsign", "Alpha 1-1"], + ["submittedByUid", getPlayerUID player], + ["submittedByName", name player], + ["priority", "emergency"], + ["position", getPosATL player], + ["createdAt", diag_tickTime] +]; + +private _result = "forge_server" callExtension ["cad:requests:submit_from_context", [ + toJSON _context +]]; +``` + +Supported priority values are `routine`, `priority`, and `emergency`. Unknown +values normalize to `priority`. + +## Create a Dispatch Order + +```sqf +private _context = createHashMapFromArray [ + ["assigneeGroupId", "bravo"], + ["assigneeGroupCallsign", "Bravo 1-1"], + ["targetGroupId", "alpha"], + ["targetGroupCallsign", "Alpha 1-1"], + ["targetPosition", getPosATL player], + ["createdByUid", getPlayerUID player], + ["createdByName", name player], + ["requestId", "cad-request:1"], + ["requestType", "logreq"], + ["requestTitle", "LOGREQ | Alpha 1-1"], + ["requestSummary", "Ammo resupply requested"], + ["requestFields", createHashMap], + ["note", "Support Alpha 1-1 at current position."], + ["priority", "priority"], + ["createdAt", diag_tickTime] +]; + +private _result = "forge_server" callExtension ["cad:orders:create_from_context", [ + toJSON _context +]]; +``` + +## Assignment Workflow + +```sqf +private _assignment = createHashMapFromArray [ + ["groupId", "bravo"], + ["assigneeGroupCallsign", "Bravo 1-1"], + ["assignedByUid", getPlayerUID player], + ["assignedByName", name player], + ["assignedAt", diag_tickTime], + ["state", "assigned"] +]; + +"forge_server" callExtension ["cad:assignments:assign", [ + "task-123", + toJSON _assignment +]]; + +private _ack = createHashMapFromArray [ + ["state", "acknowledged"], + ["acknowledgedByUid", getPlayerUID player], + ["acknowledgedAt", diag_tickTime] +]; + +"forge_server" callExtension ["cad:assignments:acknowledge", [ + "task-123", + toJSON _ack +]]; +``` + +## Hydrate the CAD UI + +```sqf +private _session = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["orgId", "default"], + ["isDispatcher", true], + ["groupId", "alpha"], + ["isLeader", true] +]; + +private _seed = createHashMapFromArray [ + ["groups", _liveGroups], + ["activeTasks", _activeTasks], + ["session", _session] +]; + +private _result = "forge_server" callExtension ["cad:view:hydrate", [toJSON _seed]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["CAD error: %1", _payload]; +}; +``` diff --git a/docus/content/3.server-modules/4.economy.md b/docus/content/3.server-modules/4.economy.md new file mode 100644 index 0000000..88b6181 --- /dev/null +++ b/docus/content/3.server-modules/4.economy.md @@ -0,0 +1,77 @@ +# Economy Usage Guide + +The economy server addon owns Arma-world service behavior for fuel, medical, +and repair interactions. It does not own money state. Money mutations go +through extension-backed bank and organization hot state before the world +effect is applied. + +## Dependencies + +- `forge_server_common` for logging, formatting, and player lookup. +- `forge_server_bank` for personal medical billing. +- `forge_server_org` for organization-funded services and medical fallback + debt. +- `forge_client_actor` and `forge_client_notifications` for targeted client + responses. + +## Fuel + +Fuel is organization-funded. + +When refueling stops, `fnc_initFEconomyStore.sqf` calculates the fuel delta and +cost, charges the player's organization through `OrgStore chargeCheckout`, and +syncs the organization patch to online members. If organization funds cannot +cover the refuel, the vehicle is rolled back to the fuel level it had when the +session started. + +Garage UI refuel requests use the server `RefuelService` event. The fuel store +calculates missing fuel from the vehicle config `fuelCapacity`, charges the +player's organization, and fills the vehicle only after the organization charge +succeeds. + +## Repair + +Repair is organization-funded. + +Use the repair service event: + +```sqf +[QEGVAR(economy,RepairService), [_target, _unit, _cost]] call CBA_fnc_serverEvent; +``` + +`_cost` is optional. Passing `-1` uses the configured service repair cost. +The target is only repaired after the organization charge succeeds. + +The client garage UI forwards selected nearby vehicle repair requests through +the same event. + +## Medical + +Medical is player-funded first. + +When a heal is requested, `fnc_initMEconomyStore.sqf` uses this billing order: + +1. Charge the player's bank balance when it can cover the medical fee. +2. Otherwise charge the player's cash when it can cover the fee. +3. If neither personal balance can cover the fee, charge organization funds. +4. When organization funds cover the fallback charge, record the same amount as + debt on the player's organization credit line. + +The heal only completes after one of those charges succeeds. If personal +billing is unavailable, the heal does not fall back to organization funds +because the server cannot verify that the player is unable to cover the fee. + +## Medical Debt Repayment + +Medical fallback debt uses the existing organization credit-line repayment +flow. The organization treasury is reduced when the service is rendered, and +the player's credit-line `amount_due` increases by the medical fee. When the +player repays through the bank credit-line repayment action, player bank funds +are moved back into the organization treasury. + +## Hot-Cache Boundary + +The economy addon should stay server-authoritative for world effects such as +vehicle fuel, vehicle repair, healing, respawn placement, and death inventory +movement. Bank and organization balances should continue to mutate through the +extension-backed hot-cache services. diff --git a/docus/content/3.server-modules/5.garage.md b/docus/content/3.server-modules/5.garage.md new file mode 100644 index 0000000..de9ef66 --- /dev/null +++ b/docus/content/3.server-modules/5.garage.md @@ -0,0 +1,212 @@ +# Garage Usage Guide + +The garage module stores physical player vehicles. Each record keeps the +vehicle classname, generated plate UUID, fuel, overall damage, and detailed hit +point damage. + +## Storage Model + +Garage data is persisted through SurrealDB by the server extension. + +```json +{ + "plate-uuid": { + "plate": "plate-uuid", + "classname": "B_Quadbike_01_F", + "fuel": 1.0, + "damage": 0.0, + "hit_points": { + "names": ["hitengine"], + "selections": ["engine_hitpoint"], + "values": [0.0] + } + } +} +``` + +Rules validated by the Rust service: + +- A player garage can contain up to 5 vehicles. +- `garage:add` generates a UUID plate automatically. +- `fuel`, `damage`, and every hit point value must be between `0.0` and `1.0`. +- `hit_points.names`, `hit_points.selections`, and `hit_points.values` must have + the same length. +- `garage:get`, `garage:patch`, and `garage:remove` require an existing garage. +- `garage:add` creates an empty garage automatically when one does not exist. + +## Commands + +All commands are called on the `garage` group. + +| Command | Arguments | Returns | +| --- | --- | --- | +| `garage:create` | `uid` | Empty vehicle map as JSON. | +| `garage:get` | `uid` | Vehicle map as JSON. | +| `garage:add` | `uid`, `vehicle_json` | Updated vehicle map as JSON. | +| `garage:update` | `uid`, `vehicles_json` | Replaced vehicle map as JSON. | +| `garage:patch` | `uid`, `patch_json` | Updated vehicle map as JSON. | +| `garage:remove` | `uid`, `remove_json` | Updated vehicle map as JSON. | +| `garage:delete` | `uid` | `OK`. | +| `garage:exists` | `uid` | `true` or `false`. | + +## Error Handling + +Every command returns a string payload. Always check for the `Error:` prefix +before parsing JSON. + +```sqf +private _result = "forge_server" callExtension ["garage:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Garage error: %1", _payload]; +}; + +private _garage = fromJSON _payload; +``` + +## Add a Vehicle + +`garage:add` requires `classname`, `fuel`, `damage`, and `hit_points`. + +```sqf +private _hitPointData = getAllHitPointsDamage _vehicle; +private _hitPoints = createHashMapFromArray [ + ["names", _hitPointData select 0], + ["selections", _hitPointData select 1], + ["values", _hitPointData select 2] +]; + +private _vehicleData = createHashMapFromArray [ + ["classname", typeOf _vehicle], + ["fuel", fuel _vehicle], + ["damage", damage _vehicle], + ["hit_points", _hitPoints] +]; + +private _result = "forge_server" callExtension ["garage:add", [ + getPlayerUID player, + toJSON _vehicleData +]]; + +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to store vehicle: %1", _payload]; +}; + +private _garage = fromJSON _payload; +``` + +The returned value is a hash map keyed by generated plate. To find the newly +stored vehicle, compare returned keys before and after the add, or search by +classname if your workflow guarantees a unique pending vehicle. + +```sqf +private _storedPlate = ""; +{ + private _vehicleRecord = _garage get _x; + if ((_vehicleRecord get "classname") == typeOf _vehicle) then { + _storedPlate = _x; + }; +} forEach keys _garage; +``` + +## Patch a Vehicle + +`garage:patch` updates selected fields for one plate. The `plate` field is +required. `fuel`, `damage`, and `hit_points` are optional. + +```sqf +private _patch = createHashMapFromArray [ + ["plate", _vehicle getVariable ["forge_garage_plate", ""]], + ["fuel", fuel _vehicle], + ["damage", damage _vehicle] +]; + +private _result = "forge_server" callExtension ["garage:patch", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +## Remove a Vehicle + +`garage:remove` expects JSON with a `plate` field. + +```sqf +private _remove = createHashMapFromArray [ + ["plate", _plate] +]; + +private _result = "forge_server" callExtension ["garage:remove", [ + getPlayerUID player, + toJSON _remove +]]; +``` + +## Spawn a Stored Vehicle + +```sqf +fnc_spawnGarageVehicle = { + params ["_plate"]; + + private _result = "forge_server" callExtension ["garage:get", [getPlayerUID player]]; + private _payload = _result select 0; + + if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to load garage: %1", _payload]; + objNull + }; + + private _garage = fromJSON _payload; + private _vehicleData = _garage getOrDefault [_plate, createHashMap]; + if (_vehicleData isEqualTo createHashMap) exitWith { + hint "Vehicle plate was not found in your garage."; + objNull + }; + + private _vehicle = (_vehicleData get "classname") createVehicle (player getPos [10, getDir player]); + _vehicle setFuel (_vehicleData getOrDefault ["fuel", 1]); + _vehicle setDamage (_vehicleData getOrDefault ["damage", 0]); + _vehicle setVariable ["forge_garage_plate", _plate, true]; + + private _hitPoints = _vehicleData getOrDefault ["hit_points", createHashMap]; + private _names = _hitPoints getOrDefault ["names", []]; + private _values = _hitPoints getOrDefault ["values", []]; + + { + _vehicle setHitPointDamage [_x, _values select _forEachIndex]; + } forEach _names; + + private _remove = createHashMapFromArray [["plate", _plate]]; + "forge_server" callExtension ["garage:remove", [getPlayerUID player, toJSON _remove]]; + + _vehicle +}; +``` + +## Hot State + +The `garage:hot:*` commands keep a runtime copy of a player's garage and write +it back only when `garage:hot:save` runs. + +| Command | Arguments | Returns | +| --- | --- | --- | +| `garage:hot:init` | `uid` | Vehicle map as JSON. | +| `garage:hot:get` | `uid` | Vehicle map as JSON. | +| `garage:hot:override` | `uid`, `vehicles_json` | Vehicle map as JSON. | +| `garage:hot:add` | `uid`, `vehicle_json` | Vehicle map as JSON. | +| `garage:hot:remove_vehicle` | `uid`, `remove_json` | Vehicle map as JSON. | +| `garage:hot:save` | `uid` | Current hot vehicle map as JSON. | +| `garage:hot:remove` | `uid` | `OK`. | + +Use hot state for session-heavy vehicle workflows. Use the durable commands for +simple store/retrieve operations. + +## Best Practices + +- Store the generated plate on spawned vehicles with `setVariable`. +- Use `garage:patch` for frequent fuel and damage syncs. +- Use `garage:update` only when replacing the whole vehicle map intentionally. +- Do not delete the world vehicle until `garage:add` succeeds. +- Treat vehicle maps as hash maps keyed by plate, not arrays. diff --git a/docus/content/3.server-modules/6.locker.md b/docus/content/3.server-modules/6.locker.md new file mode 100644 index 0000000..271502f --- /dev/null +++ b/docus/content/3.server-modules/6.locker.md @@ -0,0 +1,203 @@ +# Locker Usage Guide + +The locker module stores physical player inventory items by classname. It is +separate from the virtual arsenal unlock module documented in +[Owned Storage Usage Guide](/server-modules/owned-storage). + +## Storage Model + +Locker data is persisted through SurrealDB by the server extension. + +```json +{ + "arifle_MX_F": { + "category": "weapon", + "classname": "arifle_MX_F", + "amount": 1 + } +} +``` + +Rules validated by the Rust service: + +- A locker can contain up to 25 unique classnames. +- `category` and `classname` cannot be empty. +- `amount` must be greater than `0`. +- `locker:add` creates an empty locker automatically when one does not exist. +- `locker:get`, `locker:patch`, and `locker:remove` require an existing locker. +- `locker:remove` takes the classname directly, not a JSON object. + +## Commands + +All commands are called on the `locker` group. + +| Command | Arguments | Returns | +| --- | --- | --- | +| `locker:create` | `uid` | Empty item map as JSON. | +| `locker:get` | `uid` | Item map as JSON. | +| `locker:add` | `uid`, `item_json` | Updated item map as JSON. | +| `locker:update` | `uid`, `items_json` | Replaced item map as JSON. | +| `locker:patch` | `uid`, `patch_json` | Updated item map as JSON. | +| `locker:remove` | `uid`, `classname` | Updated item map as JSON. | +| `locker:delete` | `uid` | `OK`. | +| `locker:exists` | `uid` | `true` or `false`. | + +## Error Handling + +Every command returns a string payload. Always check for the `Error:` prefix +before parsing JSON. + +```sqf +private _result = "forge_server" callExtension ["locker:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Locker error: %1", _payload]; +}; + +private _locker = fromJSON _payload; +``` + +## Add an Item + +`locker:add` creates or overwrites one classname entry. + +```sqf +private _item = createHashMapFromArray [ + ["category", "weapon"], + ["classname", "arifle_MX_F"], + ["amount", 1] +]; + +private _result = "forge_server" callExtension ["locker:add", [ + getPlayerUID player, + toJSON _item +]]; + +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to store item: %1", _payload]; +}; + +private _locker = fromJSON _payload; +``` + +## Patch an Amount + +`locker:patch` currently patches the `amount` field for an existing classname. + +```sqf +private _patch = createHashMapFromArray [ + ["classname", "arifle_MX_F"], + ["amount", 5] +]; + +private _result = "forge_server" callExtension ["locker:patch", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +## Remove an Item + +`locker:remove` takes the classname as the second argument. + +```sqf +private _result = "forge_server" callExtension ["locker:remove", [ + getPlayerUID player, + "arifle_MX_F" +]]; +``` + +## Retrieve an Item + +```sqf +fnc_retrieveLockerItem = { + params ["_classname"]; + + private _result = "forge_server" callExtension ["locker:get", [getPlayerUID player]]; + private _payload = _result select 0; + + if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to load locker: %1", _payload]; + false + }; + + private _locker = fromJSON _payload; + private _item = _locker getOrDefault [_classname, createHashMap]; + if (_item isEqualTo createHashMap) exitWith { + hint "Item was not found in your locker."; + false + }; + + private _amount = _item getOrDefault ["amount", 0]; + if (_amount <= 0) exitWith { + hint "Item is out of stock."; + false + }; + + if !(player canAdd _classname) exitWith { + hint "Not enough inventory space."; + false + }; + + player addItem _classname; + + if (_amount > 1) then { + private _patch = createHashMapFromArray [ + ["classname", _classname], + ["amount", _amount - 1] + ]; + "forge_server" callExtension ["locker:patch", [getPlayerUID player, toJSON _patch]]; + } else { + "forge_server" callExtension ["locker:remove", [getPlayerUID player, _classname]]; + }; + + true +}; +``` + +## Replace the Whole Locker + +`locker:update` replaces the whole item map. Use it for explicit bulk syncs, +not single-item changes. + +```sqf +private _items = createHashMapFromArray [ + ["arifle_MX_F", createHashMapFromArray [ + ["category", "weapon"], + ["classname", "arifle_MX_F"], + ["amount", 1] + ]] +]; + +private _result = "forge_server" callExtension ["locker:update", [ + getPlayerUID player, + toJSON _items +]]; +``` + +## Hot State + +The `locker:hot:*` commands keep a runtime copy of a player's locker and write +it back only when `locker:hot:save` runs. + +| Command | Arguments | Returns | +| --- | --- | --- | +| `locker:hot:init` | `uid` | Item map as JSON. | +| `locker:hot:get` | `uid` | Item map as JSON. | +| `locker:hot:override` | `uid`, `items_json` | Item map as JSON. | +| `locker:hot:save` | `uid` | Current hot item map as JSON. | +| `locker:hot:remove` | `uid` | `OK`. | + +Use hot state for session-heavy locker workflows. Use the durable commands for +simple item deposits and withdrawals. + +## Best Practices + +- Keep categories normalized, for example `weapon`, `magazine`, `item`, or + `backpack`. +- Use `locker:patch` for quantity changes. +- Use `locker:remove` when quantity reaches zero. +- Treat the locker response as a hash map keyed by classname. +- Check capacity before bulk operations that may exceed 25 unique items. diff --git a/docus/content/3.server-modules/7.organization.md b/docus/content/3.server-modules/7.organization.md new file mode 100644 index 0000000..26ab7f1 --- /dev/null +++ b/docus/content/3.server-modules/7.organization.md @@ -0,0 +1,232 @@ +# Organization Usage Guide + +The organization module stores organization records, members, assets, fleet +entries, and credit lines. Durable commands manage persisted records directly. +Hot-state commands support the active organization UI workflows. + +## Storage Model + +Core organization: + +```json +{ + "id": "default", + "owner": "server", + "name": "Default Organization", + "funds": 0.0, + "reputation": 0, + "credit_lines": {} +} +``` + +Hot organization: + +```json +{ + "id": "default", + "owner": "server", + "name": "Default Organization", + "funds": 0.0, + "reputation": 0, + "credit_lines": {}, + "assets": {}, + "fleet": {}, + "members": {}, + "pending_invites": {} +} +``` + +Rules validated by the Rust service: + +- `id` must be non-empty and contain only alphanumeric characters or `_`. +- `owner` must be `server` or a 17-digit Steam UID. +- `name` cannot be empty, cannot exceed 100 characters, and cannot contain + control characters. +- `funds`, reputation, and credit line amounts cannot be negative. +- Player registration is rejected when the player already belongs to a + non-default organization. + +## Durable Commands + +| Command | Arguments | Returns | +| --- | --- | --- | +| `org:create` | `org_id`, `org_json` | Organization JSON. | +| `org:get` | `org_id` | Organization JSON. | +| `org:update` | `org_id`, `patch_json` | Updated organization JSON. | +| `org:exists` | `org_id` | `true` or `false`. | +| `org:delete` | `org_id` | `OK`. | +| `org:assets:get` | `org_id` | Asset map JSON. | +| `org:assets:update` | `org_id`, `assets_json` | Updated asset map JSON. | +| `org:fleet:get` | `org_id` | Fleet map JSON. | +| `org:fleet:update` | `org_id`, `fleet_json` | Updated fleet map JSON. | +| `org:members:get` | `org_id` | Member array JSON. | +| `org:members:add` | `org_id`, `member_uid` | `OK`. | +| `org:members:remove` | `org_id`, `member_uid` | `OK`. | + +## Create an Organization + +The command key is authoritative for `id`. + +```sqf +private _org = createHashMapFromArray [ + ["id", _orgId], + ["owner", getPlayerUID player], + ["name", "Spearnet Logistics"], + ["funds", 0], + ["reputation", 0], + ["credit_lines", createHashMap] +]; + +private _result = "forge_server" callExtension ["org:create", [ + _orgId, + toJSON _org +]]; +``` + +## Update Organization Funds + +```sqf +private _patch = createHashMapFromArray [ + ["funds", 5000], + ["reputation", 10] +]; + +private _result = "forge_server" callExtension ["org:update", [ + _orgId, + toJSON _patch +]]; +``` + +Supported durable patch fields are `id`, `owner`, `name`, `funds`, +`reputation`, and `credit_lines`. + +## Assets and Fleet + +Assets are grouped by category, then classname. + +```sqf +private _assets = createHashMapFromArray [ + ["ammo", createHashMapFromArray [ + ["ACE_30Rnd_65x39_caseless_mag", createHashMapFromArray [ + ["classname", "ACE_30Rnd_65x39_caseless_mag"], + ["type", "ammo"], + ["quantity", 20] + ]] + ]] +]; + +"forge_server" callExtension ["org:assets:update", [_orgId, toJSON _assets]]; +``` + +Fleet is keyed by an internal fleet entry ID. + +```sqf +private _fleet = createHashMapFromArray [ + ["B_Truck_01_transport_F_0", createHashMapFromArray [ + ["classname", "B_Truck_01_transport_F"], + ["name", "Transport Truck"], + ["type", "cars"], + ["status", "Ready"], + ["damage", "0%"] + ]] +]; + +"forge_server" callExtension ["org:fleet:update", [_orgId, toJSON _fleet]]; +``` + +## Hot-State Commands + +| Command | Arguments | Returns | +| --- | --- | --- | +| `org:hot:init` | `org_id` | Hot organization JSON. | +| `org:hot:get` | `org_id` | Hot organization JSON. | +| `org:hot:override` | `org_id`, `hot_org_json` | Hot organization JSON. | +| `org:hot:ensure_member` | `context_json` | Hot organization JSON. | +| `org:hot:member_invites` | `member_uid` | Invite array JSON. | +| `org:hot:register` | `context_json` | Register result JSON. | +| `org:hot:invite_member` | `context_json` | Invite result JSON. | +| `org:hot:accept_invite` | `context_json` | Invite decision result JSON. | +| `org:hot:decline_invite` | `context_json` | Invite decision result JSON. | +| `org:hot:assign_credit_line` | `context_json` | Mutation result JSON. | +| `org:hot:repay_credit_line` | `context_json` | Repayment result JSON. | +| `org:hot:charge_checkout` | `context_json` | Mutation result JSON. | +| `org:hot:add_assets` | `context_json`, `assets_json` | Mutation result JSON. | +| `org:hot:add_fleet` | `context_json`, `fleet_json` | Mutation result JSON. | +| `org:hot:leave` | `context_json` | Leave result JSON. | +| `org:hot:disband` | `context_json` | Disband result JSON. | +| `org:hot:save` | `org_id` | Current hot organization JSON and async durable save. | +| `org:hot:remove` | `org_id` | `OK`. | + +## Register from UI Context + +```sqf +private _context = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["orgName", "Spearnet Logistics"], + ["existingOrgId", "default"] +]; + +private _result = "forge_server" callExtension ["org:hot:register", [toJSON _context]]; +``` + +## Invite and Accept + +```sqf +private _invite = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["targetUid", _targetUid], + ["targetName", _targetName], + ["targetOrgId", "default"] +]; + +"forge_server" callExtension ["org:hot:invite_member", [toJSON _invite]]; + +private _decision = createHashMapFromArray [ + ["requesterUid", _targetUid], + ["requesterName", _targetName], + ["orgId", _orgId], + ["existingOrgId", "default"] +]; + +"forge_server" callExtension ["org:hot:accept_invite", [toJSON _decision]]; +``` + +## Credit Line Checkout + +```sqf +private _credit = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["memberUid", _memberUid], + ["memberName", _memberName], + ["amount", 1000] +]; + +"forge_server" callExtension ["org:hot:assign_credit_line", [toJSON _credit]]; + +private _charge = createHashMapFromArray [ + ["requesterUid", _memberUid], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["source", "credit_line"], + ["amount", 250], + ["commit", true] +]; + +"forge_server" callExtension ["org:hot:charge_checkout", [toJSON _charge]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Organization error: %1", _payload]; +}; +``` diff --git a/docus/content/3.server-modules/8.owned-storage.md b/docus/content/3.server-modules/8.owned-storage.md new file mode 100644 index 0000000..bbef274 --- /dev/null +++ b/docus/content/3.server-modules/8.owned-storage.md @@ -0,0 +1,158 @@ +# Owned Storage Usage Guide + +Owned storage covers the `owned:locker` and `owned:garage` extension command +groups. These modules store unlock lists rather than physical item or vehicle +instances. + +Use these modules for virtual arsenal and virtual garage unlocks. Use +[Locker Usage Guide](/server-modules/locker) and +[Garage Usage Guide](/server-modules/garage) for physical inventory and stored +vehicle instances. + +## Owned Locker Model + +```json +{ + "items": ["FirstAidKit"], + "weapons": ["arifle_MX_F"], + "magazines": ["30Rnd_65x39_caseless_black_mag"], + "backpacks": ["B_AssaultPack_rgr"] +} +``` + +Supported owned locker categories: + +- `items` +- `weapons` +- `magazines` +- `backpacks` + +New owned lockers are created with default unlocks from the Rust model. + +## Owned Garage Model + +```json +{ + "cars": ["B_Quadbike_01_F"], + "armor": [], + "helis": [], + "planes": [], + "naval": [], + "other": [] +} +``` + +Supported owned garage categories: + +- `cars` +- `armor` +- `helis` +- `planes` +- `naval` +- `other` + +The durable `owned:garage:remove` command currently accepts `heli` for the +helicopter category. Add, get, and hot remove accept `helis`. + +New owned garages are created with default unlocks from the Rust model. + +## Owned Locker Commands + +| Command | Arguments | Returns | +| --- | --- | --- | +| `owned:locker:create` | `uid` | Full owned locker JSON. | +| `owned:locker:fetch` | `uid` | Full owned locker JSON. | +| `owned:locker:get` | `uid`, `category` | Category classname array JSON. | +| `owned:locker:add` | `uid`, `category`, `classnames_json` | Updated category array JSON. | +| `owned:locker:remove` | `uid`, `category`, `classname` | Updated category array JSON. | +| `owned:locker:delete` | `uid` | `OK`. | +| `owned:locker:exists` | `uid` | `true` or `false`. | + +## Owned Garage Commands + +| Command | Arguments | Returns | +| --- | --- | --- | +| `owned:garage:create` | `uid` | Full owned garage JSON. | +| `owned:garage:fetch` | `uid` | Full owned garage JSON. | +| `owned:garage:get` | `uid`, `category` | Category classname array JSON. | +| `owned:garage:add` | `uid`, `category`, `classnames_json` | Updated category array JSON. | +| `owned:garage:remove` | `uid`, `category`, `classname` | Updated category array JSON. | +| `owned:garage:delete` | `uid` | `OK`. | +| `owned:garage:exists` | `uid` | `true` or `false`. | + +## Add Virtual Arsenal Unlocks + +```sqf +private _classes = ["arifle_MX_F", "hgun_P07_F"]; + +private _result = "forge_server" callExtension ["owned:locker:add", [ + getPlayerUID player, + "weapons", + toJSON _classes +]]; +``` + +## Add Virtual Garage Unlocks + +```sqf +private _classes = ["B_Quadbike_01_F", "B_MRAP_01_F"]; + +private _result = "forge_server" callExtension ["owned:garage:add", [ + getPlayerUID player, + "cars", + toJSON _classes +]]; +``` + +## Remove an Unlock + +```sqf +"forge_server" callExtension ["owned:locker:remove", [ + getPlayerUID player, + "weapons", + "arifle_MX_F" +]]; + +"forge_server" callExtension ["owned:garage:remove", [ + getPlayerUID player, + "cars", + "B_Quadbike_01_F" +]]; +``` + +## Hot-State Commands + +Both owned storage modules support hot state. + +Owned locker: + +| Command | Arguments | Returns | +| --- | --- | --- | +| `owned:locker:hot:init` | `uid` | Full owned locker JSON. | +| `owned:locker:hot:fetch` | `uid` | Full owned locker JSON. | +| `owned:locker:hot:get` | `uid`, `category` | Category array JSON. | +| `owned:locker:hot:override` | `uid`, `locker_json` | Full owned locker JSON. | +| `owned:locker:hot:save` | `uid` | Current hot owned locker JSON and async durable save. | +| `owned:locker:hot:remove` | `uid` | `OK`. | + +Owned garage: + +| Command | Arguments | Returns | +| --- | --- | --- | +| `owned:garage:hot:init` | `uid` | Full owned garage JSON. | +| `owned:garage:hot:fetch` | `uid` | Full owned garage JSON. | +| `owned:garage:hot:get` | `uid`, `category` | Category array JSON. | +| `owned:garage:hot:override` | `uid`, `garage_json` | Full owned garage JSON. | +| `owned:garage:hot:add` | `uid`, `category`, `classnames_json` | Updated category array JSON. | +| `owned:garage:hot:remove_item` | `uid`, `category`, `classname` | Updated category array JSON. | +| `owned:garage:hot:save` | `uid` | Current hot owned garage JSON and async durable save. | +| `owned:garage:hot:remove` | `uid` | `OK`. | + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Owned storage error: %1", _payload]; +}; +``` diff --git a/docus/content/3.server-modules/9.phone.md b/docus/content/3.server-modules/9.phone.md new file mode 100644 index 0000000..6cd0829 --- /dev/null +++ b/docus/content/3.server-modules/9.phone.md @@ -0,0 +1,136 @@ +# Phone Usage Guide + +The phone module stores contacts, messages, and emails for each UID. It is a +server-extension state module backed by SurrealDB. + +## Storage Model + +```json +{ + "contacts": ["76561198000000000", "field_commander"], + "messages": [ + { + "id": "phone-message:sender:receiver:1", + "from": "sender", + "to": "receiver", + "message": "Text body", + "timestamp": 123.45, + "read": false + } + ], + "emails": [ + { + "id": "phone-email:sender:receiver:2", + "from": "sender", + "to": "receiver", + "subject": "Subject", + "body": "Email body", + "timestamp": 123.45, + "read": false + } + ] +} +``` + +Rules validated by the Rust service: + +- UID arguments cannot be empty. +- Message and email bodies cannot be empty. +- Empty email subjects become `No subject`. +- Player messages and emails cannot target `field_commander`. +- `field_commander` can send messages or emails to players. +- Deleting a message or email removes it only from the requesting UID's index. + +## Commands + +| Command | Arguments | Returns | +| --- | --- | --- | +| `phone:init` | `uid` | Full phone payload. | +| `phone:contacts:list` | `uid` | Contact UID array. | +| `phone:contacts:add` | `uid`, `contact_uid` | `true` or `false`. | +| `phone:contacts:remove` | `uid`, `contact_uid` | `true` or `false`. | +| `phone:messages:list` | `uid` | Message array. | +| `phone:messages:thread` | `uid`, `other_uid` | Message array for both participants. | +| `phone:messages:send` | `from_uid`, `to_uid`, `message`, `timestamp` | Message JSON. | +| `phone:messages:mark_read` | `uid`, `message_id` | `true` or `false`. | +| `phone:messages:delete` | `uid`, `message_id` | `true` or `false`. | +| `phone:emails:list` | `uid` | Email array. | +| `phone:emails:send` | `from_uid`, `to_uid`, `subject`, `body`, `timestamp` | Email JSON. | +| `phone:emails:mark_read` | `uid`, `email_id` | `true` or `false`. | +| `phone:emails:delete` | `uid`, `email_id` | `true` or `false`. | +| `phone:remove` | `uid` | `OK`. | + +## Initialize Phone State + +`phone:init` creates phone state if needed and seeds self-contact plus +`field_commander`. + +```sqf +private _result = "forge_server" callExtension ["phone:init", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Phone init failed: %1", _payload]; +}; + +private _phone = fromJSON _payload; +``` + +## Send a Message + +```sqf +private _timestamp = str diag_tickTime; + +private _result = "forge_server" callExtension ["phone:messages:send", [ + getPlayerUID player, + _targetUid, + "Move to checkpoint Alpha.", + _timestamp +]]; +``` + +## Read a Conversation + +```sqf +private _result = "forge_server" callExtension ["phone:messages:thread", [ + getPlayerUID player, + _otherUid +]]; + +private _messages = fromJSON (_result select 0); +``` + +## Send an Email + +```sqf +private _result = "forge_server" callExtension ["phone:emails:send", [ + getPlayerUID player, + _targetUid, + "Supply Request", + "Requesting resupply at grid 123456.", + str diag_tickTime +]]; +``` + +## Mark and Delete Records + +```sqf +"forge_server" callExtension ["phone:messages:mark_read", [ + getPlayerUID player, + _messageId +]]; + +"forge_server" callExtension ["phone:emails:delete", [ + getPlayerUID player, + _emailId +]]; +``` + +## Error Handling + +```sqf +private _payload = (_result select 0); +if (_payload find "Error:" == 0) then { + systemChat format ["Phone error: %1", _payload]; +}; +``` diff --git a/docus/content/4.client-addons/.navigation.yml b/docus/content/4.client-addons/.navigation.yml new file mode 100644 index 0000000..340afa1 --- /dev/null +++ b/docus/content/4.client-addons/.navigation.yml @@ -0,0 +1,2 @@ +title: Client Addons +icon: i-lucide-monitor-smartphone diff --git a/docus/content/4.client-addons/0.index.md b/docus/content/4.client-addons/0.index.md new file mode 100644 index 0000000..eb729e7 --- /dev/null +++ b/docus/content/4.client-addons/0.index.md @@ -0,0 +1,125 @@ +# Client Usage Guide + +Forge Client contains the Arma client-side addons that open player interfaces, +handle browser events, cache client-visible state, and forward authoritative +requests to the server addons. + +Use this guide as the entry point for client-side integration. Domain data, +validation, persistence, rewards, ownership, and checkout behavior remain +server-side responsibilities. + +## Client Responsibilities + +- Open Arma displays and `CT_WEBBROWSER` controls. +- Load browser UI assets from each addon's `ui/_site` folder. +- Receive browser alerts through `JSDialog` handlers. +- Translate browser events into local actions or CBA server events. +- Cache display state in client repositories. +- Push server responses back into browser UIs with `ExecJS`. +- Provide local-only utility state where the feature is intentionally local. + +## Authoritative Boundaries + +Client repositories are view state. They are useful for rendering, local UI +decisions, and short-lived session behavior, but they should not be treated as +durable state. + +Authoritative state lives in: + +- server SQF addons for mission and player workflow ownership +- the `forge_server` extension for durable and hot-state domain logic +- SurrealDB where the extension persists durable domain records + +## Common Runtime Flow + +Most browser-backed client addons follow this shape: + +1. The addon creates a display, finds a browser control, and registers a + `JSDialog` event handler. +2. The browser loads an HTML entrypoint from `ui/_site`. +3. The browser sends JSON alerts with an `event` name and `data` payload. +4. `fnc_handleUIEvents.sqf` parses the alert and routes the event. +5. A bridge object or repository sends a CBA server event when server data is + needed. +6. Server responses are caught in `XEH_postInitClient.sqf`. +7. The bridge sends browser update events back through `ExecJS`. + +Browser alert payload: + +```json +{ + "event": "module::action", + "data": {} +} +``` + +## Open UI Entry Points + +| UI | Entry point | +| --- | --- | +| Actor menu | `call forge_client_actor_fnc_openUI;` | +| Bank | `call forge_client_bank_fnc_openUI;` | +| ATM | `[true] call forge_client_bank_fnc_openUI;` | +| CAD | `call forge_client_cad_fnc_openUI;` | +| Garage | `call forge_client_garage_fnc_openUI;` | +| Virtual garage | `call forge_client_garage_fnc_openVG;` | +| Organization portal | `call forge_client_org_fnc_openUI;` | +| Phone | `call forge_client_phone_fnc_openUI;` | +| Store | `call forge_client_store_fnc_openUI;` | + +Notifications are normally opened during client initialization and then updated +through the notification event/service. + +## Addon Guides + +- [Client Main Usage Guide](/client-addons/main) +- [Client Common Usage Guide](/client-addons/common) +- [Client Actor Usage Guide](/client-addons/actor) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client CAD Usage Guide](/client-addons/cad) +- [Client Garage Usage Guide](/client-addons/garage) +- [Client Locker Usage Guide](/client-addons/locker) +- [Client Notifications Usage Guide](/client-addons/notifications) +- [Client Organization Usage Guide](/client-addons/organization) +- [Client Phone Usage Guide](/client-addons/phone) +- [Client Store Usage Guide](/client-addons/store) + +## Extension Calls + +Client addons should usually call server SQF events, not the `forge_server` +extension directly. The server addon owns validation context and converts the +request into extension commands. + +Example: + +```sqf +[SRPC(bank,requestDeposit), [getPlayerUID player, 100]] call CFUNC(serverEvent); +``` + +Direct extension calls from client code bypass server authorization boundaries +and should be avoided. + +## Browser Bridge Notes + +`forge_client_common_fnc_initWebUIBridge` provides reusable bridge and screen +objects for newer browser UIs. It queues outbound events until a browser screen +is ready, then delivers payloads through: + +```sqf +_control ctrlWebBrowserAction ["ExecJS", format ["ForgeBridge.receive(%1)", _json]]; +``` + +Feature addons still own their event names, request payloads, and response +mapping. + +## Development Checklist + +- Keep feature-specific behavior in the owning addon. +- Send authoritative changes to the server addon. +- Use namespaced browser events such as `bank::deposit::request`. +- Treat `profileNamespace` as local player preference or utility state only. +- Make browser-ready events request the current server state before rendering + stale data. +- Queue or ignore bridge responses when the display is closed. +- Keep mission object setup on the mission/server side and client display logic + on the client side. diff --git a/docus/content/4.client-addons/1.main.md b/docus/content/4.client-addons/1.main.md new file mode 100644 index 0000000..bcdf952 --- /dev/null +++ b/docus/content/4.client-addons/1.main.md @@ -0,0 +1,48 @@ +# Client Main Usage Guide + +The client `main` addon provides the shared mod identity, version metadata, +CBA settings, and macro foundation used by the Forge client addons. + +## Purpose + +Use `forge_client_main` as the foundation dependency for client addons that +need Forge macros, function naming, settings, or mod-level configuration. + +Feature logic should stay in the owning addon. `main` should remain limited to +shared client configuration and compile infrastructure. + +## Key Files + +| File | Purpose | +| --- | --- | +| `script_mod.hpp` | Client mod identity. | +| `script_version.hpp` | Client mod version values. | +| `script_macros.hpp` | Shared client macros. | +| `CfgSettings.hpp` | Client CBA settings. | +| `config.cpp` | Addon config and mod wiring. | + +## Dependency Pattern + +Feature addons normally depend on `forge_client_main` in their `config.cpp`. + +```cpp +class forge_client_example { + requiredAddons[] = { + "forge_client_main" + }; +}; +``` + +## Usage Notes + +- Put domain UI, repositories, and event handling in feature addons. +- Put reusable browser bridge behavior in `forge_client_common`. +- Put server-only behavior in `arma/server/addons`. +- Keep settings in `CfgSettings.hpp` when they apply to the client mod as a + whole or to a client feature toggle. + +## Related Guides + +- [Client Usage Guide](/client-addons) +- [Client Common Usage Guide](/client-addons/common) +- [Development Guide](/getting-started/development) diff --git a/docus/content/4.client-addons/10.phone.md b/docus/content/4.client-addons/10.phone.md new file mode 100644 index 0000000..c9d7525 --- /dev/null +++ b/docus/content/4.client-addons/10.phone.md @@ -0,0 +1,107 @@ +# Client Phone Usage Guide + +The client phone addon provides the in-game phone UI for contacts, SMS +messages, email, and local utility apps such as notes, calendar events, world +clocks, and alarms. + +## Open Phone UI + +```sqf +call forge_client_phone_fnc_openUI; +``` + +The phone UI creates `RscPhone`, loads `ui/_site/index.html`, and routes +browser alerts through `forge_client_phone_fnc_handleUIEvents`. + +## State Ownership + +Contacts, messages, and emails are server-owned and requested through the +server phone addon. + +Local utility app state is stored in `profileNamespace`: + +- notes +- calendar events +- world clocks +- alarms +- theme/preferences + +## Phone Class + +`forge_client_phone_fnc_initClass` creates `GVAR(PhoneClass)`. + +The phone class currently owns local notes, events, and settings helpers. +Contacts, messages, and emails continue to use server-backed request/response +events. + +## Browser Events + +### Session and Preferences + +| Event | Client behavior | +| --- | --- | +| `phone::get::player` | Send player UID to browser with `setPlayerUid`. | +| `phone::get::theme` | Send saved light/dark theme to browser. | +| `phone::set::theme` | Save theme preference to `profileNamespace`. | + +### Contacts + +| Event | Client behavior | +| --- | --- | +| `phone::get::contacts` | Load cached contacts and request server refresh. | +| `phone::refresh::contacts` | Request contacts from server. | +| `phone::add::contact` | Add contact by phone number. | +| `phone::add::contact::by::phone` | Add contact by phone number. | +| `phone::add::contact::by::email` | Add contact by email. | +| `phone::remove::contact` | Remove contact by UID. | + +### Messages + +| Event | Client behavior | +| --- | --- | +| `phone::get::messages` | Request messages from server. | +| `phone::get::message::thread` | Request thread with another UID. | +| `phone::send::message` | Send SMS through server. | +| `phone::mark::message::read` | Mark message read on server. | +| `phone::delete::message` | Delete message on server. | + +### Email + +| Event | Client behavior | +| --- | --- | +| `phone::get::emails` | Request emails from server. | +| `phone::send::email` | Send email through server. | +| `phone::mark::email::read` | Mark email read on server. | +| `phone::delete::email` | Delete email on server. | + +### Local Utility Apps + +| Event | Client behavior | +| --- | --- | +| `phone::get::notes` | Load local notes. | +| `phone::save::note` | Save local note. | +| `phone::delete::note` | Delete local note. | +| `phone::get::events` | Load local calendar events. | +| `phone::save::event` | Save local calendar event. | +| `phone::delete::event` | Delete local calendar event. | +| `phone::get::clocks` | Load local world clocks. | +| `phone::save::clock` | Save local world clock. | +| `phone::delete::clock` | Delete local world clock. | +| `phone::get::alarms` | Load local alarms. | +| `phone::save::alarm` | Save local alarm. | +| `phone::delete::alarm` | Delete local alarm. | +| `phone::toggle::alarm` | Toggle local alarm enabled state. | + +## Usage Rules + +- Send contact, message, and email mutations to the server phone addon. +- Keep local-only utility apps in `profileNamespace` until they are migrated to + server-backed storage. +- Do not treat local phone utility state as shared multiplayer state. +- Validate required UID, phone, email, subject, and message fields before + sending server requests. + +## Related Guides + +- [Phone Usage Guide](/server-modules/phone) +- [Client Notifications Usage Guide](/client-addons/notifications) diff --git a/docus/content/4.client-addons/11.store.md b/docus/content/4.client-addons/11.store.md new file mode 100644 index 0000000..c949562 --- /dev/null +++ b/docus/content/4.client-addons/11.store.md @@ -0,0 +1,92 @@ +# Client Store Usage Guide + +The client store addon provides the storefront browser UI for catalog browsing, +category hydration, payment source display, cart handling, and checkout +requests. + +## Open Store UI + +```sqf +call forge_client_store_fnc_openUI; +``` + +The UI opens `RscStore`, loads `ui/_site/index.html`, and routes browser alerts +through `forge_client_store_fnc_handleUIEvents`. + +## Bridge + +`forge_client_store_fnc_initUIBridge` owns: + +- browser control lookup +- store hydrate requests +- category requests +- checkout requests +- category hydrate/failure responses +- checkout success/failure responses +- store config refresh after successful checkout + +Store currently uses its own `StoreUIBridge.receive(...)` browser bridge rather +than the shared `ForgeBridge.receive(...)` delivery used by newer bridges. + +## Browser Events + +| Event | Client behavior | +| --- | --- | +| `store::ready` | Request store hydrate from the server. | +| `store::category::request` | Request catalog items for a category. | +| `store::checkout::request` | Forward checkout JSON to the server. | +| `store::close` | Close the display. | + +## Browser Response Events + +| Event | Purpose | +| --- | --- | +| `store::hydrate` | Initial storefront/session/config payload. | +| `store::config::hydrate` | Refreshed payment/source config. | +| `store::category::hydrate` | Category catalog payload. | +| `store::category::failure` | Category request failure. | +| `store::checkout::success` | Checkout success payload. | +| `store::checkout::failure` | Checkout failure payload. | + +## Category Requests + +Category requests require a non-empty category value. + +```json +{ + "category": "weapons" +} +``` + +The client lowercases the category before forwarding it to the server store +addon. + +## Checkout Requests + +Checkout requests send a serialized checkout payload: + +```json +{ + "checkoutJson": "{\"items\":[],\"paymentSource\":\"cash\"}" +} +``` + +The client only forwards the checkout data. The server store addon and +extension validate prices, inventory grants, payment source authorization, and +integration with bank, organization, locker, and garage state. + +After a successful checkout, the client asks the server for a fresh store config +payload so payment-source balances and permissions stay current. + +## Authoritative State + +Catalog data, prices, checkout validation, money movement, organization funds, +credit lines, locker grants, garage grants, and persistence are server-owned. + +## Related Guides + +- [Store Usage Guide](/server-modules/store) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client Organization Usage Guide](/client-addons/organization) +- [Client Locker Usage Guide](/client-addons/locker) +- [Client Garage Usage Guide](/client-addons/garage) diff --git a/docus/content/4.client-addons/2.common.md b/docus/content/4.client-addons/2.common.md new file mode 100644 index 0000000..e73fa56 --- /dev/null +++ b/docus/content/4.client-addons/2.common.md @@ -0,0 +1,92 @@ +# Client Common Usage Guide + +The client `common` addon contains shared browser UI bridge declarations and +common client-side browser integration patterns. + +## Purpose + +Use `forge_client_common` when a browser-backed feature UI needs reusable +screen lifecycle behavior: + +- active browser control tracking +- browser ready state +- pending event queues +- `ExecJS` payload delivery +- shared bridge object inheritance through `createHashMapObject` + +Feature addons still own their app-specific events and server RPC mapping. + +## Shared Bridge + +Initialize the bridge declarations with: + +```sqf +private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge; +private _bridgeDeclaration = _webUIDeclarations get "bridgeDeclaration"; +``` + +Feature bridges can inherit from the shared declaration: + +```sqf +GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [ + ["#base", _bridgeDeclaration], + ["#type", "MyUIBridgeBaseClass"], + ["handleReady", compileFinal { + params [["_control", controlNull, [controlNull]]]; + + _self call ["setActiveBrowserControl", [_control]]; + _self call ["sendEvent", ["myAddon::hydrate", createHashMap, _control]]; + }] +]; +``` + +## Event Delivery + +`sendEvent` builds this payload: + +```json +{ + "event": "myAddon::event", + "data": {} +} +``` + +If the browser control is missing or not ready, the payload is queued on the +screen object. When the screen marks ready, `flushPendingEvents` delivers the +queue. + +## Screen Lifecycle + +The shared screen object tracks: + +| Field | Purpose | +| --- | --- | +| `control` | Active browser control. | +| `readyState` | Whether the browser app has sent its ready event. | +| `pendingEvents` | Outbound events waiting for a ready browser. | + +Call `handleClose` or `dispose` when a display closes so stale controls and +queued events are cleared. + +## Current Consumers + +The common bridge pattern is used by the newer bank, CAD, garage, and +organization client bridges. Store currently keeps its own bridge object and +browser bridge function names. + +## Usage Rules + +- Keep bridge inheritance in feature addons thin and explicit. +- Keep shared code generic; do not add bank, CAD, org, or store-specific logic + to `common`. +- Prefer namespaced events such as `garage::sync`. +- Send hash maps or arrays that can be safely serialized with `toJSON`. +- Avoid direct extension calls from the client bridge; send CBA server events. + +## Related Guides + +- [Client Usage Guide](/client-addons) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client CAD Usage Guide](/client-addons/cad) +- [Client Garage Usage Guide](/client-addons/garage) +- [Client Organization Usage Guide](/client-addons/organization) diff --git a/docus/content/4.client-addons/3.actor.md b/docus/content/4.client-addons/3.actor.md new file mode 100644 index 0000000..44aaa29 --- /dev/null +++ b/docus/content/4.client-addons/3.actor.md @@ -0,0 +1,98 @@ +# Client Actor Usage Guide + +The client actor addon owns the player interaction menu and client-side actor +repository. It is the main launcher for nearby player actions and other Forge +client UIs. + +## Open the Actor Menu + +```sqf +call forge_client_actor_fnc_openUI; +``` + +The actor menu opens `RscActorMenu`, loads `ui/_site/index.html`, and routes +browser alerts through `forge_client_actor_fnc_handleUIEvents`. + +## Repository + +`forge_client_actor_fnc_initRepository` creates `GVAR(ActorRepository)`. + +The repository: + +- requests actor initialization from the server +- saves actor state through the server actor addon +- caches client-visible actor fields +- applies position, direction, stance, rank, and loadout on JIP sync when the + relevant settings allow it +- provides nearby interaction actions to the browser UI + +Initialize actor state through the repository: + +```sqf +GVAR(ActorRepository) call ["init", []]; +``` + +Save actor state through the server: + +```sqf +GVAR(ActorRepository) call ["save", [true]]; +``` + +## Nearby Actions + +The menu asks for nearby actions with: + +```text +actor::get::actions +``` + +The repository scans objects within 5 meters and returns actions based on +mission object variables: + +| Variable | Action | +| --- | --- | +| `storeType` | store | +| `isAtm` | ATM | +| `isBank` | bank | +| `isGarage` | garage | +| `garageType` | garage subtype | +| `isLocker` | virtual arsenal action when VA is enabled | +| `deviceType` | device action placeholder | +| nearby player unit | player interaction placeholder | + +The response is pushed into the browser with `updateAvailableActions(...)`. + +## Browser Events + +| Event | Client behavior | +| --- | --- | +| `actor::get::actions` | Refresh nearby actions. | +| `actor::close::menu` | Close actor menu. | +| `actor::open::atm` | Open bank UI in ATM mode. | +| `actor::open::bank` | Open bank UI in bank mode. | +| `actor::open::cad` | Open CAD UI. | +| `actor::open::garage` | Open garage UI. | +| `actor::open::vgarage` | Open virtual garage. | +| `actor::open::org` | Open organization UI. | +| `actor::open::vlocker` | Open ACE arsenal on `FORGE_Locker_Box`. | +| `actor::open::phone` | Open phone UI. | +| `actor::open::store` | Open store UI. | + +Device and player interaction events currently display placeholder feedback. + +## Authoritative State + +Actor persistence is server-owned. The client repository requests and displays +actor data, but actor creation, durable updates, and hot-state behavior are +handled by the server actor addon and extension. + +## Related Guides + +- [Actor Usage Guide](/server-modules/actor) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client CAD Usage Guide](/client-addons/cad) +- [Client Garage Usage Guide](/client-addons/garage) +- [Client Locker Usage Guide](/client-addons/locker) +- [Client Organization Usage Guide](/client-addons/organization) +- [Client Phone Usage Guide](/client-addons/phone) +- [Client Store Usage Guide](/client-addons/store) diff --git a/docus/content/4.client-addons/4.bank.md b/docus/content/4.client-addons/4.bank.md new file mode 100644 index 0000000..20440fc --- /dev/null +++ b/docus/content/4.client-addons/4.bank.md @@ -0,0 +1,84 @@ +# Client Bank Usage Guide + +The client bank addon opens the bank and ATM browser UI, forwards banking +requests to the server bank addon, and pushes account updates back into the +browser. + +## Open Bank UI + +Open full bank mode: + +```sqf +call forge_client_bank_fnc_openUI; +``` + +Open ATM mode: + +```sqf +[true] call forge_client_bank_fnc_openUI; +``` + +The open function creates `RscBank`, sets the bridge mode to `bank` or `atm`, +loads `ui/_site/index.html`, and routes browser events through +`forge_client_bank_fnc_handleUIEvents`. + +## Bridge and Repository + +`forge_client_bank_fnc_initRepository` tracks account load and cached account +state. + +`forge_client_bank_fnc_initUIBridge` owns: + +- active browser control tracking +- bank/ATM mode +- browser ready handling +- account hydrate and sync responses +- deposit, withdrawal, transfer, earnings deposit, credit repayment, and PIN + requests +- browser notice delivery + +## Browser Events + +| Event | Client behavior | +| --- | --- | +| `bank::ready` | Mark browser ready and request hydrate from the server. | +| `bank::refresh` | Request fresh bank hydrate data. | +| `bank::deposit::request` | Forward deposit amount to the server. | +| `bank::withdraw::request` | Forward withdrawal amount to the server. | +| `bank::transfer::request` | Forward target, source field, and amount. | +| `bank::depositEarnings::request` | Request earnings deposit. | +| `bank::repayCreditLine::request` | Request credit-line repayment. | +| `bank::pin::request` | Forward PIN validation request. | +| `bank::close` | Dispose bridge screen state and close the display. | + +## Browser Response Events + +The bridge sends: + +| Event | Purpose | +| --- | --- | +| `bank::hydrate` | Full session/account payload. | +| `bank::sync` | Account patch or sync data. | +| `bank::notice` | UI-visible notice payload. | + +## Request Flow + +Example deposit flow: + +1. Browser sends `bank::deposit::request` with an `amount`. +2. Client bridge calls the server bank request event. +3. Server bank addon validates the request and calls bank hot-state logic. +4. Server response is caught by the client post-init event handlers. +5. Client bridge sends `bank::sync` or `bank::notice` back to the browser. + +## Authoritative State + +Balances, PIN authorization, transfers, checkout charges, credit lines, and +persistence are server-owned. The client should only display account data and +request mutations through server events. + +## Related Guides + +- [Bank Usage Guide](/server-modules/bank) +- [Client Common Usage Guide](/client-addons/common) +- [Client Store Usage Guide](/client-addons/store) diff --git a/docus/content/4.client-addons/5.cad.md b/docus/content/4.client-addons/5.cad.md new file mode 100644 index 0000000..9f612b2 --- /dev/null +++ b/docus/content/4.client-addons/5.cad.md @@ -0,0 +1,100 @@ +# Client CAD Usage Guide + +The client CAD addon provides the map and dispatch UI for groups, active +tasks, task assignment, dispatch orders, support requests, and task +acknowledge/decline workflows. + +## Open CAD UI + +```sqf +call forge_client_cad_fnc_openUI; +``` + +The CAD UI opens `RscMapUI` and loads separate browser controls for: + +- top bar +- bottom bar +- side panel +- dispatcher board + +The native Arma map remains part of the same display. + +## Repository and Bridge + +`forge_client_cad_fnc_initRepository` caches the hydrated CAD payload, +selected mode, dispatch view, session data, groups, tasks, requests, and +assignments. + +`forge_client_cad_fnc_initUIBridge` owns: + +- ready state for side panel, top bar, and dispatcher board +- operations vs dispatch mode +- board vs map dispatch view +- hydrate requests +- task assignment, acknowledge, and decline requests +- dispatch order create/close requests +- support request submit/close requests +- group status, role, and profile requests +- map focus actions + +## Browser Events + +| Event | Client behavior | +| --- | --- | +| `cad::topbar::ready` | Mark top bar ready and push top bar state. | +| `cad::ready` | Mark side panel ready and request hydrate. | +| `cad::dispatcher::ready` | Mark dispatcher board ready and push hydrate data. | +| `cad::mode::set` | Switch between operations and dispatch mode. | +| `cad::dispatchView::set` | Switch dispatch board/map view. | +| `cad::refresh` | Request fresh CAD hydrate data. | +| `cad::tasks::assign` | Assign a task to a group. | +| `cad::tasks::acknowledge` | Acknowledge assigned task. | +| `cad::tasks::decline` | Decline assigned task. | +| `cad::dispatchOrder::create` | Create dispatch order. | +| `cad::dispatchOrder::close` | Close dispatch order. | +| `cad::supportRequest::submit` | Submit support request. | +| `cad::supportRequest::close` | Close support request. | +| `cad::groups::status` | Update group status. | +| `cad::groups::role` | Update group role. | +| `cad::groups::profile` | Update status and role together. | +| `cad::groups::focus` | Center map on a group. | +| `cad::tasks::focus` | Center map on a task. | +| `cad::requests::focus` | Center map on a support request. | +| `map::zoomIn` | Zoom native map in. | +| `map::zoomOut` | Zoom native map out. | +| `map::search` | Placeholder status update. | +| `map::close` | Dispose bridge state and close the display. | + +## Response Events + +The bridge pushes: + +| Event | Purpose | +| --- | --- | +| `cad::hydrate` | Full hydrated CAD payload to the side panel. | +| `cad::assignment::response` | Task assignment/acknowledge/decline result. | +| `cad::group::response` | Group status/role/profile result. | +| `cad::request::response` | Support request result. | + +Dispatcher board controls also receive direct `ExecJS` status and hydrate +calls. + +## Task Compatibility + +CAD task visibility depends on server-side task catalog entries. Tasks created +through Eden Forge task modules or `forge_server_task_fnc_startTask` are the +normal CAD-compatible task sources because they register task catalog data. + +Direct handler or task-function calls only work with CAD when the task catalog +entry already exists. + +## Authorization Notes + +Only dispatcher sessions can enter dispatch mode. If the hydrated session is +not a dispatcher, the bridge forces the UI back to operations mode. + +## Related Guides + +- [CAD Usage Guide](/server-modules/cad) +- [Task Usage Guide](/server-modules/task) +- [Client Common Usage Guide](/client-addons/common) diff --git a/docus/content/4.client-addons/6.garage.md b/docus/content/4.client-addons/6.garage.md new file mode 100644 index 0000000..c05a3ad --- /dev/null +++ b/docus/content/4.client-addons/6.garage.md @@ -0,0 +1,114 @@ +# Client Garage Usage Guide + +The client garage addon provides player vehicle storage UI, vehicle +store/retrieve actions, selected nearby vehicle service requests, vehicle +context building, and the virtual garage view. + +## Open Garage UI + +```sqf +call forge_client_garage_fnc_openUI; +``` + +The garage UI opens `RscGarage`, loads `ui/_site/index.html`, and routes +browser events through `forge_client_garage_fnc_handleUIEvents`. + +## Open Virtual Garage + +```sqf +call forge_client_garage_fnc_openVG; +``` + +The virtual garage resolves the active interaction object near the player, +discovers nearby `garage*` markers placed in Eden, chooses the matching spawn +lane for the selected vehicle type, opens the BIS garage interface, and +restricts the available vehicle lists from the virtual garage repository. When +the BIS garage closes, only the vehicle selected in that virtual garage session +is finalized and spawned onto the resolved lane. + +## Client Services + +| Service | Purpose | +| --- | --- | +| `GarageRepository` | Player garage view state. | +| `VGRepository` | Virtual garage unlock view state. | +| `GarageHelperService` | Vehicle names, hit points, and payload helpers. | +| `GarageContextService` | Nearby/current vehicle context. | +| `GaragePayloadService` | Browser hydrate payload construction. | +| `GarageActionService` | Store/retrieve request handling and selected nearby vehicle refuel/repair request forwarding. | +| `GarageUIBridge` | Browser ready, hydrate, and sync delivery. | + +## Browser Events + +| Event | Client behavior | +| --- | --- | +| `garage::ready` | Mark browser ready and send `garage::hydrate`. | +| `garage::refresh` | Send current garage payload as `garage::sync`. | +| `garage::vehicle::retrieve::request` | Forward retrieve request through the action service. | +| `garage::vehicle::store::request` | Forward store request through the action service. | +| `garage::vehicle::refuel::request` | Forward selected nearby vehicle refuel request to the server economy service. | +| `garage::vehicle::repair::request` | Forward selected nearby vehicle repair request to the server economy service. | +| `garage::close` | Dispose bridge screen state and close the display. | + +## Browser Response Events + +| Event | Purpose | +| --- | --- | +| `garage::hydrate` | Initial vehicle and session payload. | +| `garage::sync` | Refreshed vehicle payload. | +| `garage::service::success` | Browser notice for accepted refuel/repair requests. | +| `garage::service::failure` | Browser notice for rejected refuel/repair requests. | + +Server action responses are handled by the action service and notification +flow. + +## Vehicle Service + +The selected vehicle detail panel includes refuel and repair actions for nearby +world vehicles. Stored records must be retrieved first because server economy +services operate on live vehicle objects, not stored garage records. + +Refuel requests use the server economy `RefuelService` event. Repair requests +use the server economy `RepairService` event. Both services are billed by the +server economy addon through organization funds. + +## Mission Setup + +Garage interactions are normally surfaced through the actor menu when nearby +objects have garage variables such as: + +```sqf +_object setVariable ["isGarage", true, true]; +_object setVariable ["garageType", "cars", true]; +``` + +When using the server garage auto-init flow, editor-placed objects whose +variable names contain `garage` are marked as garage interaction points and +their `garageType` can be inferred from the name. + +Virtual garage spawn lanes are resolved from empty markers placed in Eden. The +marker name should contain `garage` and one of the six supported category names: +`cars`, `armor`, `helis`, `planes`, `naval`, or `other`. Markers are matched to +the nearby interaction object by proximity, and names that include the garage +object's variable name are preferred when multiple garages exist. + +Vehicle spawning is strict by category. If the active garage site does not have +a matching local marker for the vehicle category being retrieved or spawned from +the virtual garage, the request is blocked and the player is shown a message. + +Nearby world vehicles are not used as virtual garage spawn candidates. They are +only checked to determine whether the resolved spawn position is blocked. If +any vehicle is within 5 meters of the spawn marker when the virtual garage is +opened, the session is blocked and the player is shown a warning. + +## Authoritative State + +The client gathers vehicle context and sends store/retrieve requests. Stored +vehicle state, validation, spawning, removal, and persistence are owned by the +server garage addon and extension. + +## Related Guides + +- [Garage Usage Guide](/server-modules/garage) +- [Client Actor Usage Guide](/client-addons/actor) +- [Client Notifications Usage Guide](/client-addons/notifications) diff --git a/docus/content/4.client-addons/7.locker.md b/docus/content/4.client-addons/7.locker.md new file mode 100644 index 0000000..0e923db --- /dev/null +++ b/docus/content/4.client-addons/7.locker.md @@ -0,0 +1,87 @@ +# Client Locker Usage Guide + +The client locker addon manages personal locker display state, local locker +container behavior, and virtual arsenal unlock state. + +## Repositories + +`forge_client_locker_fnc_initRepository` creates `GVAR(LockerRepository)`. + +`forge_client_locker_fnc_initVARepository` creates `GVAR(VARepository)`. + +Initialize locker state: + +```sqf +GVAR(LockerRepository) call ["init", []]; +GVAR(VARepository) call ["init", []]; +``` + +## Locker Container Flow + +The repository searches mission namespace variables whose names contain +`locker` and refer to objects. For each server/mission locker object, it creates +a local `Box_NATO_Equip_F` at the same position and attaches container event +handlers. + +On container open: + +- the local container is cleared +- cached locker items are inserted into the container +- over-capacity warnings are emitted when the item count is above 25 + +On container close: + +- cargo, nested container items, and weapon attachments are read back +- the new locker map is sent to the server with the override request +- the local repository cache is updated + +## Virtual Arsenal Flow + +The virtual arsenal repository creates a local `FORGE_Locker_Box` and requests +virtual arsenal unlocks from the server. + +As sync data arrives, it applies unlocks through ACE Arsenal: + +| Data key | Client behavior | +| --- | --- | +| `items` | Add virtual items. | +| `weapons` | Add virtual weapons. | +| `magazines` | Add virtual magazines. | +| `backpacks` | Add virtual backpacks. | + +The actor menu opens the virtual locker with: + +```sqf +[FORGE_Locker_Box, player, false] spawn ace_arsenal_fnc_openBox; +``` + +## Server Events + +The client repository sends requests for: + +- locker initialization +- locker save +- locker override after container close +- virtual arsenal initialization +- virtual arsenal save + +The server locker addon and extension own the saved locker and virtual arsenal +state. + +## Mission Setup + +Mission locker objects must be placed into `missionNamespace` with a variable +name containing `locker`. The client creates local interactive containers from +those authoritative mission objects. + +Example: + +```sqf +missionNamespace setVariable ["forge_locker_alpha", _lockerObject, true]; +``` + +## Related Guides + +- [Locker Usage Guide](/server-modules/locker) +- [Owned Storage Usage Guide](/server-modules/owned-storage) +- [Client Actor Usage Guide](/client-addons/actor) diff --git a/docus/content/4.client-addons/8.notifications.md b/docus/content/4.client-addons/8.notifications.md new file mode 100644 index 0000000..7ac80c1 --- /dev/null +++ b/docus/content/4.client-addons/8.notifications.md @@ -0,0 +1,74 @@ +# Client Notifications Usage Guide + +The client notifications addon owns the notification HUD, notification sound, +and local notification service used by Forge client and server modules. + +## Runtime Behavior + +The notification display is created during client initialization. The browser +HUD sends: + +```text +notifications::ready +``` + +When that event is received, `NotificationService` initializes and sends a +startup notification. + +## Create a Notification + +Use the notification service when available: + +```sqf +GVAR(NotificationService) call ["create", [ + "success", + "Title", + "Notification text.", + 4000 +]]; +``` + +Arguments: + +| Argument | Purpose | +| --- | --- | +| `_type` | Notification type, such as `success`, `info`, `warning`, or `error`. | +| `_title` | Notification title. | +| `_content` | Notification body text. | +| `_duration` | Display duration in milliseconds. | + +The service dispatches a browser `forge:notify` custom event. + +## CBA Event Surface + +Other addons can use the client notification event: + +```sqf +["forge_client_notifications_recieveNotification", [ + "warning", + "Garage", + "Vehicle spawn position is blocked.", + 3000 +]] call CBA_fnc_localEvent; +``` + +The event payload is: + +```sqf +[_type, _title, _content, _duration] +``` + +## Usage Rules + +- Use the shared notification service instead of opening separate transient + browser UIs. +- Keep server-driven player feedback short and actionable. +- Treat notification state as transient client UI state. +- Do not use notifications as the only record of durable domain changes. + +## Related Guides + +- [Client Usage Guide](/client-addons) +- [Client Garage Usage Guide](/client-addons/garage) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client Store Usage Guide](/client-addons/store) diff --git a/docus/content/4.client-addons/9.organization.md b/docus/content/4.client-addons/9.organization.md new file mode 100644 index 0000000..721a987 --- /dev/null +++ b/docus/content/4.client-addons/9.organization.md @@ -0,0 +1,106 @@ +# Client Organization Usage Guide + +The client organization addon provides the organization portal UI and browser +bridge for login, registration, membership, invites, credit lines, leave and +disband flows, assets, fleet, and treasury display. + +## Open Organization UI + +```sqf +call forge_client_org_fnc_openUI; +``` + +The UI opens `RscOrg`, loads `ui/_site/index.html`, and routes browser alerts +through `forge_client_org_fnc_handleUIEvents`. + +## Repository and Bridge + +`forge_client_org_fnc_initRepository` caches organization portal state. + +`forge_client_org_fnc_initUIBridge` owns: + +- active browser control tracking +- portal hydrate requests +- create/login response routing +- leave and disband requests +- credit-line assignment requests +- invite, accept invite, and decline invite requests +- targeted browser response events + +## Browser Events + +| Event | Client behavior | +| --- | --- | +| `org::ready` | Mark browser ready and request `org::sync`. | +| `org::login::request` | Request portal hydrate as `org::login::success`. | +| `org::create::request` | Validate org name and request creation on server. | +| `org::disband::request` | Request disband on server. | +| `org::leave::request` | Request leave on server. | +| `org::credit::request` | Request credit-line assignment. | +| `org::invite::request` | Request member invite. | +| `org::invite::accept` | Accept invite by org ID. | +| `org::invite::decline` | Decline invite by org ID. | +| `org::close` | Close the display. | + +## Browser Response Events + +| Event | Purpose | +| --- | --- | +| `org::sync` | Full portal sync payload. | +| `org::login::success` | Login hydrate payload. | +| `org::create::success` | Creation hydrate payload. | +| `org::create::failure` | Creation validation or server failure. | +| `org::disband::success` | Requester disband success. | +| `org::disband::failure` | Disband failure. | +| `org::portal::revoked` | Portal state revoked by someone else's disband action. | +| `org::leave::success` | Leave success. | +| `org::leave::failure` | Leave failure. | +| `org::credit::success` | Credit-line request success. | +| `org::credit::failure` | Credit-line request failure. | +| `org::member::creditUpdated` | Targeted member credit-line patch. | +| `org::invite::success` | Invite success. | +| `org::invite::failure` | Invite failure. | +| `org::invite::decision::success` | Invite accept/decline success. | +| `org::invite::decision::failure` | Invite accept/decline failure. | + +## Request Examples + +Create organization request payload: + +```json +{ + "orgName": "Example Logistics" +} +``` + +Credit-line request payload: + +```json +{ + "memberUid": "76561198000000000", + "memberName": "Player Name", + "amount": 2500 +} +``` + +Invite request payload: + +```json +{ + "targetUid": "76561198000000000", + "targetName": "Player Name" +} +``` + +## Authoritative State + +Organization funds, reputation, membership, invites, credit lines, assets, +fleet, and persistence are server-owned. The client portal only displays and +requests changes. + +## Related Guides + +- [Organization Usage Guide](/server-modules/organization) +- [Client Common Usage Guide](/client-addons/common) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client Store Usage Guide](/client-addons/store) diff --git a/docus/content/index.md b/docus/content/index.md new file mode 100644 index 0000000..123ddf7 --- /dev/null +++ b/docus/content/index.md @@ -0,0 +1,172 @@ +--- +seo: + title: Forge Framework Documentation + description: Documentation for the Forge Arma 3 framework, covering architecture, persistence, extension APIs, gameplay modules, and client UIs. +--- + +::u-page-hero +#title +Forge Framework Documentation + +#description +Forge is a persistent Arma 3 framework that combines SQF addons, a Rust +`arma-rs` extension, SurrealDB persistence, shared domain crates, and +browser-backed player interfaces. + +Use these docs to understand the runtime architecture, extension API surface, +server gameplay modules, and client addon integration patterns. + +#links + :::u-button + --- + color: primary + size: xl + to: /getting-started + trailing-icon: i-lucide-arrow-right + --- + Start here + ::: + + :::u-button + --- + color: neutral + icon: simple-icons-github + size: xl + to: https://github.com/InnovativeDevSolutions/forge + variant: outline + --- + View source + ::: +:: + +::u-page-section +#title +What Forge Covers + +#features + :::u-page-feature + --- + icon: i-lucide-boxes + --- + #title + Domain [Modules]{.text-primary} + + #description + Actor, bank, CAD, garage, locker, organization, phone, store, task, and + owned-storage workflows share a consistent service and extension model. + ::: + + :::u-page-feature + --- + icon: i-lucide-server + --- + #title + Rust [Extension]{.text-primary} + + #description + The server extension keeps command parsing thin, routes domain requests into + services, and persists durable state through SurrealDB. + ::: + + :::u-page-feature + --- + icon: i-lucide-database-zap + --- + #title + Durable [Persistence]{.text-primary} + + #description + Repository traits stay storage-agnostic while concrete adapters in the + extension handle schema and database mapping. + ::: + + :::u-page-feature + --- + icon: i-lucide-monitor-smartphone + --- + #title + Browser [UIs]{.text-primary} + + #description + Client addons host web-based interfaces inside Arma displays and synchronize + state through namespaced browser bridge events. + ::: + + :::u-page-feature + --- + icon: i-lucide-arrow-left-right + --- + #title + Transport [Layer]{.text-primary} + + #description + Large payloads move through chunked request and response transport while + smaller commands still use direct `callExtension` paths. + ::: + + :::u-page-feature + --- + icon: i-lucide-wrench + --- + #title + Development [Workflow]{.text-primary} + + #description + The docs cover module boundaries, local validation checks, and where new + domain logic belongs across Rust, SQF, and web UI layers. + ::: +:: + +::u-page-section +#title +Documentation Areas + +#features + :::u-page-feature + --- + icon: i-lucide-rocket + to: /getting-started + --- + #title + [Getting Started]{.text-primary} + + #description + Framework overview, architecture, module reference, and development rules. + ::: + + :::u-page-feature + --- + icon: i-lucide-server-cog + to: /server-extension + --- + #title + Server [Extension]{.text-primary} + + #description + Extension architecture, command surface, and SQF usage examples. + ::: + + :::u-page-feature + --- + icon: i-lucide-layers-3 + to: /server-modules + --- + #title + Server [Modules]{.text-primary} + + #description + Gameplay-domain usage guides for persistence, hot state, and command flows. + ::: + + :::u-page-feature + --- + icon: i-lucide-monitor-smartphone + to: /client-addons + --- + #title + Client [Addons]{.text-primary} + + #description + Browser bridge, client UX entry points, and addon-specific event contracts. + ::: +:: diff --git a/docus/dist/200.html b/docus/dist/200.html new file mode 100644 index 0000000..bae9fea --- /dev/null +++ b/docus/dist/200.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/docus/dist/404.html b/docus/dist/404.html new file mode 100644 index 0000000..7ba1d99 --- /dev/null +++ b/docus/dist/404.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/docus/dist/__nuxt_content/docs/sql_dump.txt b/docus/dist/__nuxt_content/docs/sql_dump.txt new file mode 100644 index 0000000..e8da7ab --- /dev/null +++ b/docus/dist/__nuxt_content/docs/sql_dump.txt @@ -0,0 +1 @@ +H4sIAAAAAAAACux9eXPbOLbvV0Fl3ns980pS7Oxx3771HC+JO4uT2E56UcoFkZDENkUyAGlHmevv/uocACRIgptEtx2P54/pmMK+HJz1d/68t/Nxb/t4jxxvv3izRw72ybvDY7L328HR8RE5dcIgZkF86gXTkPzTc8nx3m/H5P3Hg7fbH38nr/d+H5DxPc6ouxzfIy8OD9/sbb+DTyLmiRMnnH1iXHhhML5HPm1/3Hm1/RF+Pbd9PD2dUzE/PR3fk52cvDv4cLL3r5/JcEjS5u4N7h28O9r7eEwO3h0fFsb3afvNyd4R+edPzpw5ZyJZnLqhI34akCn1BRuQnx4++nT43D3ffn8eR18P6Gz39fdJNHOi18dHH+eJu7F4cxgcvZ489jb3fhqQn84fjh6PNobDzx9fO0efz89/ffot8sTbybtwzh7/6p/QN2d/PJt9PHj24Pzdk8Xvx5svtqHasz+OnFfRizdPw6/f4u+/R8vo14k7+/1p8OHj4vuT5eevXycn+69n/s7+3k9yegsW03uDe7sfD99n21DcAphLaTHa7B1UrNy72It9lt+ISYi7CaXhT5cJh3tRXNow9i1mQXkffS84E3oT3528eQMfYYZGmwE992ZUNYkFd/f2t0/eHJOYJwxKRDSe59sVLCwW/unflz/J08YWPR4mXLD0MMFf9zdHMxbHXjAbipjymLn3R9kcRsuFDxv/UhYhR7LITwM1ffn/P8lS6o9/j+95Dkx/a3zPG/qJ47lsyEPnjMXjezCrn2Al4L/3a3r+SbakNnFrfK8wBNVU7eihwN7y4ZOXj/zf3k4SR7zY5O/3fjvfOTl48vT5hH7743d6sJx+f/nX18N3caiObIcaay3zxsgLXPZttHDtK4zTX0Zy9gsv8BaUn43vDcb3zqmfwOc//xzfm2+O7w1gyV0sV+hkfO9yYFm6L4M/x/ciqAg/nwhG4rkniGAOLBuhgsRzRhbUCwgLYr4kUegFMZmGHH/YD/mMkSmnC3YR8rNRsUH5uxMuJl7AxJb6OfHl73/CRdJFt/mCkofE8T0WxIS6bhgI7OfkN0IDl0x4eCEYH85DETOXeEHM+JQ6TKhGSy0Jxs8ZN1taeAKuMtadcSpnGLiEJvE85F5MY++ckakfXhDYPx76pbYp+ZiIWLedUgds3gkXC2iOhwkuMvw7gldAxCxwWKktMaecubJBh9OYqVGGLvPFgHAWhcKLQ+4xMcDGoFfPNuOjhHNG/d0X2ICbcDrxGRFxyOkM+sXi8we58wGjDYOhGrSQ52MHP5Kd9KPcTs5kVcenQryjC3kSfRrMEjpjwyi8YFzMme8TMffOPPn/w3jOFkyQBY0Z96gv/x763mweM174XCwVUZ8FUBKPuRO6skuH8llIYibi8TgIogXhSUAmiee7WxdsknjjcTAaj8dj/DSkfEFHkdgcjwNsRg8Ym8oGjb9J4r01vod/iXipiA2sy596BLAGp6feLAg5e0sjs4CIaGAsklwgL2CyY/zH1mauJKx3bj56o9o09aDUlH01urT5sNRm1Vp++WI9UkhqhnMGxwWPJfxNXuHf8uIPIzgvMw4VFAVQ3xzKXdVY6ckIWAzUBceaPQPb3Jl7McNXTv4U4vfSW0JzBZHOBS7jIoY7NQ8vyNGH/UF2r+GGDUh6pQYm9SEnB4JMvZjE4YzFc8ZH+ZnVzWISfoOrm5vD29BNfEY+sinjkkbUzGOBhYc8Kwxz+cjOPXZBZnTBIp8uiRsCtRYD4gVTTlM+gMjaipJkhEsTrRkPk0h0mM4FjGFemM8uO2d+GC2AhL9MPLd+Qm5WWh0YxvBZ4TBSpGXUdYGUqsHj2J05DWbwcRImgUuBPJILL56HSUw4m3GGRL7LVFwa0wkVrDCZjKoesTiJaqciZFl3MhSyLEznIBAx9X3zLC1o7MyJfhaDqTcj+IarfXHmYSjUGgD1I9gaQUZxHCBxl2vGuCC4PAsvGE6pA+vBQ591mbZ8xIZOOCtOXL5uexnva8xc1TIYY/nQ+/BswsCzs2VevAHZfn9ARIJvtpzs0Yd9kgg6gyp0EXUbvE+XjIvhQ/vQ5b0StoEv9E8w7F148L0gDnHk1IlDPiATGpwNyM727oDMKLygA+ID08oHJOQzGnjfkXUYkGgeBmyA7ywbjMdBTMWZnFp4ETB3qB5gMoOb0GVyizCAh38oFpTH2EthmjuSS9pG3iY3S8k/Dan6BSa59y3yQy5PlWKvJtxzZ0yyGpIFgvJDETHHm3pOSu5MTgkv5Sh9UOQLKd+JebzwyQhfdjJSLEBEA/JvJ/RDvkXOKf/ncCi5Aiz1r58n1DkDmhO4lp+Hk9m/fp6GQTzEbmwlsl9VyQsG3yuLyp//9XPMvsVDlzmhnJWtfKHIv36+hPnd8umRkcumNPGbZ6jKVc9RFaidpS7Tap65wq1mqmtUzfU/YIou5WfNE6X8rGaWlJ/VTxEKtJtfWrLd5KB4xT28jRNDqgpE3Bnf28opO6Q4wuAp3WUR6Iu2HgxAYZX9Wymjtv6sEe4KVWAE8iEpCnyXFfx8VQMmj3/55RJVMWurEaCRhWsokmqVRc0KokFBw7fVi6qjQu2ktDnw49HD39jz4O2zyclBeLTz4OLt5xdPdr3th9v7j94704unu98+vDs+2909mjhK5dShxloqp82RyZwpzdO+nhwxZatVFVDpUg3LApi9J7v2yBOa7WIuoXiblZCjxYIR2dZfEpFQ31+SORXIXyJfMx4Hxo4KJeuV9CxLEnPqwe9KDCR+OPOcQVlaGo+DOQ1cn3HFt4d4sKhvyIma3SvIyDwJYm/BhqBlUgKc/EL28Uu1wuVPQ+Mir98XUzWCWi/F3p0cgHCA88fDPR4HhAz/O6dcUzyg/snUlpFpEuTqTWEjTlURh/r+nmVFsGSFYJlraKilbL1p6u98IVP9JTdG/57JZcbWeSBAgCRJzYGnRa0qILmKeeVPC23P3Vq3WOsvpatMxAKE4Ygu/ZC66pYxuXQwT0HG98zFh2rmYsjzTlyPMyf2lySe8zCZzYE4wwVPF0Ou9QgINvEpUJCsy3IPoNdSouF9KTTdN0Rb7FHEdMbEeBxw9jVhIsYbz5mIwkAw4syT4EyYozE2JuY0EFHIY0WqKogC7IySaOUBewtb9UZ9kDUe5rW3ZTGvIBPm138np1b3QexNQAlWtSKy/fs0bWx8b0SO52wJoi2Iw9QnEY6YnPwGsu8ZW068ANY4I4HE9agfzhSNPDkYxuEQdpudw1iQgnrBbEQ+z1lA0gsVMObCams1Nqg5cgp6EdOYDYgXo6YdtD/wkCgZHhUs8Pibl2w8DrxAxIy6JJySOExkEUM5nx6rkX29lfLAXG+larCv91HO+NC83rkTWFpv1bvwXAbXBafjxR71U1UEqP+G4eQv5sSm0D4A7ZLnSgE+YFSyMki+1EOEezMeB/IGpqoQfCHTc4xDsQy9eFMkRfMkJ6XMG0rVMA25pMGFJnIUTjcTuMbNSc+JfWd4IuKiNgpHn2vV3BuYS8mAA1skWu1RYdIjcoB6RzhIXChq1IqS5VWvoGSirlBawUTvX7rRTBR00uNxsKCRZHN0U14QJbHaRs3E4M6WLHPHOTol5mHiu3CzgK56Qa2l7j3lguEmqcPF0v4pnyXwMMA60JhQztGixsMFDHNUMlx9ZCL0z+WJzLRPyMl+i4lInDnw5ZrQHOySCyAVQIc9ztxyezvwwpTIgOewctEjNDd536VeTC8WZwJ0ICA4AkX59ejwHRIgIvDRA7u6OopWKoFHfohHUlr0FKkwLH076nt5O8qHxvcm6qwAiRMRdVBrHIOCn3CWCCSQhgGxZt9s53EoeWDZx5a+sZpTQNOB0JbHjNpkmsDG9k3GIu1FakWHdBaEIvacMgNO5FEeLtgi5EugdjmGQ5BEAGFZouFMlp6HIKrDUdQMT6vxmRZVGJua+oTN6bkHuuCMfMpHbJHIMeCGAA/fsh9cWd2Lw0Mh5AEhc+bDM1R1onL2Y7x8JYNyeoZ283ZfoMMpxRiRI2fOFjS1pGRPkpVcWQnefcGd+wLbkVNRRoswcDiLmZVZtOxe69ew0HFqzkbLZGHyH0uHCImZF9iv1f3yySQizAt+hDM0peExg5UdjwNtaKJEG40qWLr0QMptexXGoI6IS5t2xM4Zp74225E5PbdRgnkYW1+NEYGW5ck/YywSJH3ZiRNGSxJOwXCEnGsAXDN1HCbg+sD4YXnkJRsAFQyIoPAKehkBLPgSIP3NOGHmAmfgCThqiWDTxEd1iaLXclT4EKDNjgkSTmMWQKPoH0GEtNWVH6dl5AGHmd1quGqauK0iHaNpZ2sexlvwoI7HQfZhxvJ/h+eMczBdmh9hYXIfOFuE56xfsfIqB1mQx0D9NU9PDmya2guDsBEoFIR8kR5PffikbVayzAanvvPxZJeAbVJe9IqbkXJ2UuKRUz9O2b038mP5ecw4Qnm82DcPqP+EOTQRiqk1RGLkZ/E2RRwkc5RYpCA4HgcCHn7fW3ixQAYu4uE5GOmkOMdcYpX1NCtKLuYeXgrP9+E2KIcfxTsLumCFBSuY1zOxTKpf5UrqwrXn3Djm4uv0qv1txuMC5zoGCpRTSvwJ3+AYJQL+NSB/fvnys/VeiK/Ta3S1WWsq2uGluHHZmQQT/ToEKq8TCpxT9i0GblZrV9KettTJ3KJRxDJlUPa7F5yHZ+wUrdKWn/VhViSlR/J1fVOocHAzBCnt3pb71EIsBLdvm2JKNj6Kw4Wv3mXQQGkKkNXfffNGCs8O8EYBDNfUOmjjgyfaXnro8apv/Z/Km+ULKs5daQf5hcCd2HzwdLQx2hhtbj3b2NiAL+CIRxdMCieyEF4z9Ztmk9RPQBTVL4lgHGqqX3gYxuqXiApxEXK3/IsTBgFz4lPgb8IkPl0I8gt5jCOxnWTcnWujOOYyrufb12YT1vP0q9vCLi0/KrVcfQC6tPu41G718enS7pNSu9WHr0u7T8uunrVHt/TAgPbaU/5jaOCVnEjosyGspqs8w8C1iAbgUSVYpniicnhzzqYd3NVK/m5WQWsH4k5yqlOgkeDeDbzYFByNPCES4IdSbhFlAKW10aLELeFy2laVa7t1+xml1alcL2upL9Kdf9rtmt6df9otm+JtdOO6809r6Z+W94Kp8i3Le8ZcVhnMq6rnjOjw3s893+UsKLjK5S3pRmMPc45yeev6ZbVtuKqFgr34ssaGWdVE0a552WB7qhyKxR51WWV1qGokZ4m4/HJpV35XbY6hEL+sUw5W1S8pDC+rRf9q58e8hkC5L/bmdta311kLp7NunpO50KiSG2WVk57Fm/JH99SrcOXMe0lCGe/t+cM//F/fBOwz/X3Ijx+JSfjq4o/Z8cm7s4AGD+bxa/F+++0LerGhPDo71FjLo/PBqBgfprw6izFmq/pz2sPPyhFsRa2aB6Zq9SvxUWefOtrKc2NGd12AuzFh1JkrNT86ZlSYEqTePOTL4YJGOqJHfSIoDK1uMCp5Qd0n+D/5EEhfHLQ5KB+fQpQg2GHKrmWyiSPDnafYRNGPrdBOZhIlRF4O+HXIhRl2BbFVqSxPXRqBZ8p4HEy84L7nhAs1jOx/BxBMHfEQTIN4c5LAc6SdW9qnx+MAjKbyIhaqH+W8BtCsqNwKZCXT0ppWLZtrczZ/GVOlW9BW+lzHuzl/RnV4lO1KkgNdG8dXGPRO2QQPAVxhWJoe/u8zm4A/G4bCEijlBTNQbsJVtBQnKekc+hCvR9zQSUyHyT6NhncH9e6gXuFBtdpWdLTxULktKHQJHYO8q79iXek7oZ1j4jmjWfR3zI0fUkcWrK5rp5/fJzwKBSt9N31bSz+ajpjWHz2HyeNCfMPynJXJlE/Su/qeUjDFEkLGMg9XV92Gh0g3mH59L981z2VB7MVL6fcXJvGA4ElDVyOp2hpIZy9w6cTCUy9lY1IOHX0rwMDNOB7pUaG/Rufe+1SNsrFankK0qWZcRfDgwSojLrTzkN0zJ71EhSq140OXh/+bbY5tO17Q4KxqN6jjhAlynA4V8/sQAkwm1AfVuhiQ9wfvcp5gKKVMcTMQhgk8gmAbICx9kLmvyoAA7c7YfWcmcsAdN6ZFrcK+QI1u25LVqOsGSuGmVDSLv4OfSsPG7WzvlvZt1xMRxtIrWzLcCyG8WYDupxCp7crL4sTeuRcDoeaMLgbg6TH1EAhB+92i/+DSBRLrEle1yzgBXAXRfdccIG9dN625UmHPHOp227K0Ql0nDnWbNuMl1V54tnt0zuaeY/qLefEc/MFiRg52xYBME+YPiEsXGFaPK+/FKtIONQbd13tGTZSb9kveql5h1WWdbgtv1qnrSparuy+qRIsb8wbxCiqfnpgt0h06Y0vpTIvCEVpUcdMcGrMZcDjo170A6th9b3w9jo5706peYW9knW57Y9ap7QrL1e2NKtFibw4NDImqHTJxJsQAfDQnAFbkRfD2MCoS8Nh0OHO9GKzDQM2U8zYVgsWKqE19xuIVuYKQz7pvW3Olwp6FfNZtw9IKdZ2EfFa3VfBzi316L3E3Chu0Izky3BQB4CUaUWdBPX9VEqYgProud5tqhQXHKt2W3KhS1xEWa1rTI5CWSmuKX6c8DGIieWLp3AC8WAwBZOp1RtYr5bdSP1WNnFPgw8wwqO47ItRAO+5Im2qFHcEq3XbEqFLXERbb0gtTvzHHVJR5YyX+I5iNBs+7DyA3RC282p8B4t0o+qRFl4jy2HO8iAYxcMPOGfLGnF1Q7qo9c9kUPHeR81YxEPkBBOUb2LwHsZxKhy2AGt12IKtR1w2UanwNcHErmCrzqYAwJFzmoXDCiLkpq5UE8Pbo97y8iOceVThGQD3JyUGpRMnrMQz8Zf26F1bw/HQVzihfq5aiwyptGRxS44pWcEC1KwpxbWAaaLOi8r2/yhVdhZ/J12peUYOvKXmgac1JTtcnoay2qj3N8ihbWkuQ04aAmrNtfSnMmtJ7l9ooVRkSZJe6zAmDcLFUEFr6j25taBEjLzd1aUEzwnmmvksLYY7dtDGgnVozgc1Uc3jfjszorPbtKRYmx291qa8e3Bxv0aW+fCzMF9Dm8igVjI1nvzoo//Acbim7aBxeron7Ug16qQABOlaWGEAmrmvHBjrf3Xz1jle3MPguNzdfdYVLl29ghTuXbyAIQVcr7RLqHLzLf+rU3Jo3ON9Y5wuXr26/bxXm2TwCaR558SCPTpoCNq5mMZDVW1sM3oSOXruWyvxS+Ie6T0WOWQrh4M+gjDUAJymYMhMNSBJ7Pgg4GvVFIzvLemC5kXAJkceMGOYOykfzoreDO8nmUsVT1aA+WCUGnL+aiHIDaQWIUIzek3KdjMdLHYParEk1nkvbOSoDVGF6b0NX2ckKKA0RZ0OI2SQXHk9tAGoUCtYE/TTAY99PVtAQLDL6325X9QTa7mnK4NhlQDQBS+XtgrkQTJmDJCeqfhrOTvYThSzKWUQ9LsVyllNsZQGoP+tGVbEU8gHekPtgkSFTj4tYRSnnGpkmEGGAKkvoaomRqFJhRlw2iSVkBAwK3X5kcYcGQQgBl3BawRtl4vn+CicrW7WW61x4GoqrrdgFsxQ5ORgQAZcoxdEpAuh0Pk2lUbQcPdjky4NG677ceIwL9qqN9ChMnEsE2pC6DhVx8wS0N0C7858HDYB6ShhqOceYcW69/KkhWF4GVY6wbxKlBuff4Qjlx6la6zhUTRMtBykfxny/HMI8TeGxMrKrgbJWn0ZKpTtNREV0WKhP6h2iwqckVM+UOUtQfSAFQn0T+gbyFoepBl9C9qVHbvV7SGtoaM2hNCJqoGW9kApPk7xUv5aDhzEuikKwFMa6ukjBfsCYKJz/VuptibE4p5TPNgcE/vPgx45xaju7kvLkHaJjKBMzYGMgkr1yPS0TsC0NQcIiymkcAt8IF1QBo1shWlLruStdlAqseAEvLmXbdwwNfFc2Wx3cGj57NXY6zZVVelpYnPCgEFOtShexmFqQGRkwVtWLldikFp1upGxr5b4ygEOEzYKpq8IGhqCmTvlNtgnsN2mbpZcOBO2XlmWfgS8HFpCeeZj8AZA3AB/MNSDAOuyF7M/hTOLuFJ9I/J7rExYcIL8695FErrWP7ShCzB3oArHEZEHRuQMJdlJ5nMrUAVz+FVEJbThLmC4uIxmdBuMyn9lmu4vfjRXt3HKKfVPN6uUgcVoUO2PLGg26BVGnRVkE2mlRTuHvlOVIGoDrhVyoVAoaWd4RyIiymqadnGBqDZWFBQ+C8aKIineirLS7SQQEn7zafccS6Y2vK5Re2bpC6bWrK1R5HRQsEjoTAjZSh+uQPu71tyEt1rwo7c54WhSd4FqUq78KabGGm4BLlL8IHdcpxwTVDgUYbZfTixZFVaOnjPLAC2ZNBwGqaNdQy1QTfN5hljn3Uqm7SGGzTHfRrosgtSenpsm/KBaixEczdwk6A0/tOBvWyjugwUBPI5v0/ElDhVL0pgVShN3l4cJWJ395wrUa8bNbDm4SAVQW8CYCp4rVEgVVhrpuY5kmUqmKNZAMVSqlBPXFUqJaX6yKL9K0V/GNsnTxsHVa82ZibBRss/LtCLJRuM1WZbT2VPmHtKpST8VLbVfS8fxy98TZlK/latfbbte7SddbuWM0XW9VrPaQqTK1Z0aVabreqljD9Valmq63KtZ0vVWxltdbll7tehuOu/XX2yjYZuXbXW+jcP0dNAq2u4NqTXq6g+W7s9odbLZl36T7CJ7CtXsNBZpuK5RpumJQpknWgDJNokbOMtZR5ID2pfd485xVuSq1hzqJudHIKh3Hgx7szcORxbqMRrrGA9aA10kbA70pb/zmYemCtUTYLNhws3MzyGICOg4/dX3P96HBVnKdpE7WxAscP8FcrDLXQZaf4NyLwbMhH41gC4tTkQm49APiM3rOBhBvNaGBO0Do6YGyGMMqrEevrHRmNZJl85i5SURKOt6rt6uwqQdp9giZrNTAe6YdlamyGxWQKrYAyKH6UBcK116AQtmGO6DLdR65DtdoNfK0cDznuLEtiwsWtC8MoBunnZqvIv9qbXS5zmuDwSvtVkYVbTNRVbT1NFX5hknKUp2nWHWsPuL3mtuxMgkq0o3VqE/REXINyiOt0b3TH4gZ1VG2GtG5cqdzhTlzMPW3xWrCIOgQ3wIK/+dggL+q12HvsbssLLjhhBdLy393KO+cBeGFz9xZDatXrOQyR5qp21ZIIsF4h1k03Ccd8GyGT3dcYRlr3WJxVcEmjrlU9BQsc6dKMdqunh+Kdj20WU5VtGElZamOa6fD11usXlpUJJNFnaRqKdxhBdOaLdYwLdtmFdPCDeuoy3VcSR3Y32Il06JSZOiwOEbN5gmnhRsmrMt1nLB0LtlCrJdy2y8QAgbLMBey2XfW7EMfELSwpcARqvoAF4UCbIIE1lnv/TRfvtXeznJwx817PTFGkDNhc4r4CJ8JBlx23TtsVoVnyge35ibnCtdKtbmSTVcgV7jhCuAkdbhvd7Ecu0qDULcgE2XDuLLCnPmM1hG6QnnIoBQ1TdtsHiJeDepSswBpLcX7YKxs12WQnkdbonEfVcHmDVcFHZ9Rm13TmIAs2XXEMg54y4M0YgvJEdYNRxW3+hFppqYcWdzp4thnuuNjBs38fVyZvuWp04rq1BbheDeP5uWieRvVp2bhKau1QeTK1qvnzJL1+jmzZJN1I1e4ycaRK1xl6Ti0hXwbkcltFX9mXxUaQGtXqzhl5GKL2+2vKtxqf9uYv3IlW+xvS+tVrnC7/W2wZOUW3QTmWXW922wu9tOTZaiJBK1I2OI54xkkds7N/hB+y2Cw8072N4zUlTE4CixeEsjYwExjrpOPdjgAEOWypRyJq88jlkrjbhrKgYLvFEN1LFrlnXBh+i1nUT3TkAPP0s0tW8W+bMlImqNPL22xNxhko2Nu0FsXcKM/vezSTyG/WA2bUZGJzKJfh5/NRDcqC7wZrdh5eIX0aC2GqWvUs2hyFmlqQ5m5fsURGhnYWo1PlW85QBWsZIzQGo5TSrRczrDcnR7wLEtr9vVj6K9OBAq5lou22xQhnamY1wxqckReMxaBhC1YloR5okKfppwxSGify2PP4o76cWum5pIkWo+CW0jxmx92Id9z56EZSZpL+gchE0/xDD88S1+6y1CNjFn8SsDxMvxTJS7WOcq6L1ua2LkoKlhSPMtFcXFULHA8zMI8m3ehEdmC2DxMiylQofcRObwIRJqHNG+8NRI2K+uvGb+cLo+GCtQIzZ0HbI8bxWdExY1OvIAqrEEVL+17E0750rj8dymdbtf07lI63bIp3sbMR3cpnVqmdCrk4qjKuVPIz3E5qAOVr2qkDDR/2QJ2pqq1Kiiay1aB31WtVgeDV6eiCtP0OrYMVCqEtxTvWVVhW0eEFcO7qiq8UDEU5YiIqhovU9fsspt1VZ03qStplVtoVc3DglNXyUerMlWVdsUo+FVULjX4WlyWLElVxY+VJrdSL1s5obyu9rKFAqSyqQqlSD4xV1V2sELaNTMtmEqK1VMen475qYo5h0o5qsrphyzZqXrLQVSRJqqcegnK7Z5/uHAe8LeP9r8Ktvvww6uT5Q5zPoZvDv76sJj+kfzxeiPa/PRs/u2PC5UqqkONtVJFPRy5AGIURiCxqSxRu9kXqatbNU2U0fRwJpV+KOUW2x/bEkVhBQnLI3cIs4SRiMZz6ZblogtqiHhCAcL80twGViCR+aFD/SGq2ETqxE59sqO+5IfyQqYx5kkAUX+pAAtPOzMkTIKt+oDEHYL8G/89CZhBZSgla5VuOUrEHMaJ9zY0UUdxkVjr3PJReAHmR+ZfeYZ5h/JZSKaLmAzlrkBud/yW/ytmIk7/kI4OaUHfi6IlGQ6p7w9jCGuMhfpryii85PAnGe6SCx29acMhyeZ8jXAktuXQ8vJquZTzi9mlrXJu+NxWdGmqnAw+v5Fd2iongF/rGJQMHvJWeYLQKZzqlLxkmbIAhIs7N/E2BdECiJVc160LNkm8m3vWqwZb2hHpXIQ6rYg6Z+DY3Akk6e9b/9F4PB7jfIYALzWKxObNXf+qwVao2BVnMwGJlkrl8GWW9vGF8Tm/e6jrNFgopdP3QHcNLzk4RJ95oJ6d4ou6taq+/o01axcoPUsft89Dz109ODMF6Lbo8MEglYqQMi+pi24ooDARA0Oln6qD9fByjSBYKKJfDgBFcygi5gBU3wqoAMWUdt21+hK0tDzQlE8xh+d2sVibwOVNav1Bli0v5M6cZerrdMHRZAQLXR6r1IkDLU/XNeOPUgPVCmYTK5CcxRCghP+IcoGadbWREtooKerhC4aUQWb0wbMTh3AqyrMsGELiOQU7sh9iGow09eCKs9N41sWpGWCvKSTfgIAWZxhO/mKQti5LwTFQmK5eEIet0GAt9wNVR6mxRuZO7DqnHBCmzcULjQ+AuXnGluBHKAaSz09xN22HLInnIfdg0yCWJDPHVZsupSQzpErZpbRUCr9HSjlUp47MoRuHfjo530sH4Eo3XJnI0LMBQhXyC/yX7PC/0/wCelZZo9ronraL+FiNLfvepKZRGGnJHFc94lxOzpbjhi4yImZ0JpIIZ+RNcVIauzZgDEz34HJOinhMlSuiBl6zJKWhNy9MLpt19aLkUj60XJBp6CSCuSQBlGI5V3iGdY+m00nlnHXhmknns2s1TpgapE84c7agSo4nSeAyG25ZDX4n1q/rDeZQZdRcpUMz5UG5x49oalX4wsXerHvb2FXTagblBOgyAmCF2bU4V7kZ5vvrOL92V0Pncc3Q01vNS4Ee6wkpJzRvii+XvPz62Cl07+33B/ZROEaqWaAVhnSIERz148mDMJfHoygtHP851RjYwyl14DU4qRhSLmOvfd1RDai6gS3KzfXj3vbu272MN2hEvOUZiH/ZxvHRQPEv492KeZj4QP8RtBBEgHCqdFnTkC9S0TqxvXGInygxPyXpquT+dJ3CMgB+K8IijkGE+lIJjYjgsAiPmBXEDpE5I+jJiYpkzKQdhj6jQQF7pGEUh6+LTScOoGVPE5+4TE4MOImsUQkSFoSZbxRILy262uMcDJX/pWKD/7vQ8ZR6fsIN1jDdtPeozIaXEEQ2ufhzGjFBQnkRyTx01H6IEd4l4PBAcau2mfoXdClSJRR0ByfcvuBynMboIs6m3rdUxynZ5xSdMzfUPelLeoPQkyPunYPrz6k8meQX0hZxOMNIlWjDMxbLnJAnB7uKIkjQ4bQLBdpNfkl7E8wHRnkDsYnHgTcl/0xLTUHmzi84+eUXsvEvONfxZzhl/x6PA8gNLpYiZosdkCXgdtJYjlCiS2onQjhAzN0i/3tTDlh3hGO8VCNIxyoRL39BDgKPlC5+E0Gi/4ZNXE/J2/YIrKz9Hd9jiyhevvEC9t6nDpuHvgvy2RaQUXlz11QIr3I211Mb93Oyu4zhSWkMl12beHql2/Ks+mQ1XNgK4daQgE124b3hp2plFAw9iDT/uQrXSGa8VA6USv7PlE8LGkUy42ceKXw8Doqui9Lx09CJENzxgjxaemE+Qw6R1Cagp+fiWGqZlhMMMCbSdKlszrGD5rryOzgSCf/qq/cvJw6VWT/VcJ1IU670HgJN+bniYSSYjxNyyJ+CSVJCIRW02o09r8WEWSw8pc8Zj4NU/2KRtFDApHmxUfKbiPyppE3pZworo4eupPDAX+KQxuMgVfekuyyPBvfEWRXTOg/Bi4rGudP3KoyHRwjwYT17J8IIdsJRYpQBqtLQfYC6uACI4oq+118TFgBOu5twqa6RlB1OHcNcqSPySg8k9S9Ag7a/hJjvc89lNYenGJWRgtOBFhDpZXY7oAfUrEmlRwNfmDrtQ0s4MVxQ5QLshFFTA3lcO1gWrV7A5THETwFdJNlZ7dBJhocHbVxwz9IEAZs8akU15Who1Azwgnrs3HNi68jyp2M3RMJBhUgW5jnxRLoLUN+W28GYB7L5LMuvUji2F2wyTDzzzH5mE5AtrQf2RdEyqURQcFZRcijaX0yZdUTAqhYrLK70MPqY3SKQlfDEY+mffhKW+STe/VPh6cA3kvr9lYgm3ChJjxWxkZnGdGawahVBdUozSacAnEcK7uMxHHqIVVK62exAfNhX7wWsD+6V9H+HOarH4ld6To/QU0gSojPGIry9GOBGc0pdlzmeQElMPR5K8x1y6Xdh6tgtW5uT0qWNX8JUyMNlivA72Y+WR8jqASOJy0BdtPY0BRUDbw93T97snX7c29/7uPduZ2+0cE0BkdMFAwOMUhd4AayzhcaM721rxUL6MEvdgn6XpdYkPS9yL9UanhyQBOMElctKwzU21Ts4CRp5mfdVNgPsoqQTE6oXm7JTHVU5GJnxUz2OiknVQjA3HIGy5u4CFW7h9O4CFW7ZFG+jP/9doELLQIW8L2iVE3TeP/Sy3iOmqhGLl8xlCxtwVXNVduH6QAVeH/1QqcO/rBfoq9qzCPmXdaJZVTslce2yklOuaiLPPV+2Yccqw1aqWLScf/z67ssd/eMNZ+uSa7zF47rKN74Pt+sK3/icrzkUOdre+W3/w7ezD2Hwa5SIr7/v/DbjG+/25/x882DxfeNk/8N08nT41Hs5U27xHWqs5Rb/aFTwylau8QW37FUd49u6fJssv1zjRDBhGMpRN2EoxsAwTI7nLBNEWM4JXAI1gCQ+HgdZMzLhHOYkRi1MFPkQkiy7zGmfBKFJHC5o7Cl/dwEyFwx3HDgh2E7c8AKdk7TLPGRuo84ch5gqcND0qLVfcMpkVzKVcoXc5MzDUDAwtgw5cmhwJhUsHP6EDX1E9vM9/mRDE1FHkPFhyFX09FDa1nTKrF1dAg65cmw6TEvY5FpPyPvhTckyTDCVJ3pVwuRwYgNjNaQHESi31P4MSAiKonkoxQ2YBMrt6K4mi5Tk6cPp1HM86pth26zglGyX+YrhCPM4jsTW/SwKYeSEi/uQB4gq31TOfDjFkLB4Gvp+CNmSChpaWZpE0gWiKK216xJvYiq3geBvREbAX1piu49HteXQdt4c2PQwsgWUC3kWL1R0Oz5Q88qaQ9Mr7FCoN2DB4nno4kVchgkHxV8MhoSb55r8D/LZC9zwAjQl3gUnehsu5NdRbjvIMBFsQv6HeOzbzXVgNqe0nv2s+4KkTuoNGzyBlOVXvrUL6hwejcfBhLOL9D6mE7gf00jfJutuwiCvaR/NkuLVhbsrqXA2pdU3Ntf0i7f7B7JpWCN1O60lp/T7C1mSpHSwVenq9b5Zh+WNFyRwiJ2E+2Qojqbp0VfzLRz9/yFi/sMcGz253o8NrFbLgwBr2rJo7crXtfH29aNQtfE/deWyCehdLIXX7Idc8yn4MoL9SotusWJYUtYNBooGMOmkptVhqZfteByAB/DNe//Uyqopqr/Ozrfu30c/jpE7IcMhuHmTzQdPRxujjdHm1rONjQ0yBNLPCQ9DCMqLKPjWh2F8c5/FK5lp6dQcoyEcLG9t3TsVe6/w/kZxuPAz85sFN1sWN4oFEC2Bskt92MDptyePRq6vq2mDDh5YFMsEob43g4j7lKNLD/gyTNBbACXBtscYBnnVB/hPtZNfxuOABW4UeoH2RMrvI7rOjYOALpiIqMNMdyX1Wzpb+RPokNQvcAKgpvpF7j/+AufhIuRu+RclV56C1TRM4tOFIL+QxzgSyx2RG3ptt8NcxvWYxjabsF68bd0WrudtVX0A1vOpqj4+6/lJVR++1Z2nFJGpObolorc9jZVdXFMGaxDOEVJeICuGFJ/RGqntyPQyLAD1iFs2Qr5hcd6PSatwUj3N0mgwr6kpt/aJcW+61I5CGrITVbBbqZvD9XvMtnWtlAjjyq9SOVG2rSpJwJatiRvmerrOaqxF3XpZy9IFOpA6Mmkml2dbUdEBSandIH2NB0QTFFCTkZQKALXKFJgDsz0B1Ee98hrTxe6+UmIwKhCIFx76cA1dBmlxpOoQtFEQQAUYVwBYyn1GXZ0W862sQHZVBRj6jq5AJMIpv/9G1WihUlyEAtzLwNEFeCUvAL+KeEC+JowvB9Kn8C9Q+aKjmsxapVAaQolZk0bNBG6qpETgS63FVyREug/pGN6/VemIGkD2LfJDzvRPnoi1aJQhQjWo/TwRk3yd1ipJGkVFCaxdfxdsAuR4Pe2nZe7g0MmiGLOuUn+YObyCj1Ewazu8ggyX1i5BXzA41+AYha8LD6kzr33otIpUXi4R8xAH9e9C/7tMnMWhhrEhB7F23ZywGN6JqYfu1+oQTphDE6nPhwOsjx1aboIQff+UP6laduLQgExAb77wwCPzQoom8okDnbpdZMBVAb175rwYhMHw1fHx+6OULFne0R31BhsTjMOM9qTLnJlsLE67yl6hCBXGUWoPWcZb0qv6V/tPUz5J0xmlz+yemuAWIaiF2Lp/v8jBBu80Rd4iRPGegcYmgHqSbQxOFI2GT0pgfK8otfHJIgngqPJPa4u39FrGbn/HkCKj4h/MXvKaCRq4k/CbqSnJnUUZnKm8y/bVyLQtyCvZHKYeF5Lfk7dbqV2Ukep+wYaFz8Z4HNAJJE4l5TuId4X6IiQ+TQJI9lakDsqWoeBv5CW02FCUelNeHfaNOYmMD/OEngSTifvoOfV8mZM4kGtVbu399vGr/Bt85zl3u6Z35zl3y6Z4Gx3Mbq3nHG5ZxJmaFpBeMkK7yYDgb8jxyx/l93/nLvXWP55vbD/a3vu5iopseTH1PefnwunZ+sfjR0/2nm4Xv9fVpPxs6x9Pnj7Ze/7454r1UnUqpgUmD9u04HtxWnsPnj/c3C0Pe39/58WTF4VByY8VvYJRx9YrfC8t5uaLZ4+fl3vdebj37NluoVf5saJXMAPZeoXvxV4fPt/effG43Ouz57u7+/uFXuXH3l0uK7x4qpztKjx7KnGT6917qhBz611+LldVBVR11009cPlFOxb27QLWswdYfw5gHV0fC+50JffHkmedxfnxP8q9rsJBs+T1CMXefp+dzv/gD9/+ehx+CJ+8GW6c8OPfxHa8+/mh94D+Otz5/eTVi2QjePFMOWl2qNHBSfPBSF3nzJ64MfICl31Tvplyjur2pjrKVV00zfQqQwPULXPFLPZkd9hUpQBNNCBgFh1yYRwZOGFoIniojtNQgP+tmcZHBuRJv/Astgx0KJAlCw4s4qwpbJg0rgnOgETtKwWHmoezwtkSqLoXMwRVUUhkuS+FYO0P++kBdjJ1UD2qWxpabCkcOKfsW7xDtQl3RI4W0K7OB00y9ZAMIrOmXTZU1RpJhMbzAbmYez4jPiDE6lgugQpREdMZaFh16i7sIEMGxJjeUZ1FuEHlkq0T4moM/9s4CTIUUn9X2612U39Nw6dVcDF+zELW9Zd0c/tVulzL6K1B3ZKQJTyF/0ednPmpiDpk9VLoyx+hYKLbffOm9pDcuQ3cuQ3cuQ38R7kNgIed1uyiUITP877kMXSINLJcRMQsQrDXK00hUMyeqJ3gdfJE4+8Odr37JRYtF4ytGIn3B2aSjkaDWblRjMge6rSxslWZWnYv/dbcbGERFWunY9xVRJ0MlxKppexOK327pnenlb5lU7ytyttbObG+lYt5qbUydrog21bKFZVKyaL4YX9IK5NqmY9tTrXXj7KgX12BoSpoUMsV3+mSHq5Kb1KpjvsBlCe4BNW6KQwaPnly/oofvDu+2PscPg9f7nw/ePTbmwf0gG2/FU9OnQ+Tj+9C9npHLIUOc25fYz0N2uaoiJZTOow5dq0XbZqFJ6zusSjKH2ferkX1q95RBaEAaOsBeAMVU7Jb3Rks2qIReZ9FwaBjnSd0XnJDRUQ01YD8fYbuwnCxxeNkdc4tKTY402gNQis2ONN4DKKlWuEGOekCjgBiBK7ipXvn4Nu0kn+Ph+96rsVl/cRVuBaXQ7yhShYAVOnBtJUrqgDJy6UBdBHTr0jHyQGMxaojhEvPXF3ECisu8WRrJXJFxPK0QIG9FKmBbhZy4SpA2xR5G9Xx6DEm626/PxCmZxqnF5ndKAMZbw8cJwGO/69F4jZLQbbZxkIyxWxjMZlVtrFYyGeNZTBZbGMppPmNpSAxbGMhh7rNA4dUsFstF0MWbrkkqSlDlsyfnjdoD9GQxxIhUQHM54wkPEziwgtYMJFovFZwjmQumdh077lwPQnveJo+5adlA5D9ligApplS0lxm6chSvU137ZV6ou9TJ8UEUfmTW+uqdBMTlUZZJ1Tu3ADmJkY2APIQd64+S5MyZwmaOzfip1mas4zNnRsJCwmbiymcuzeYz6t8OSjlUO7cZKRzQ6dpojs3gaRC6V/lPzs3EasU0jqZ9J3m8VZO707zeMumeBsVdHeax7ZujXnBvVpzmBPmL+sY/mr8wYIQYEGk1AxRAxqlZpIy5ML1lStBTo5bS4fSoELpqI7M2yLrlZMFFZQVLLEPPVR/a9Wsb6rSVBZ0gFDqrydPfvfOL55P5h/26b579vj8+cPTd8nh9m8n041o+fqPp9O902fv3y6cD0pj2aHGehrLB6O89demsszbgnvRWdpMzjV9WrSWAlyE5K/ae63gJwVILVNw2pAHCAWnnGfRCGLTDOW2J8icBq6fFVVnUZ+WJi8/qflQeeYV0wpfJKrpzVE22rRQUrOREyOt8iPkC6MLIRVKp2Yj+CE8g/+gSgkTEIVn5P/8H/JvVZB4Yu9rQv3jEEtn2p3x+N7lv2DJA1uOLPhZno4ov11hADoxyLt9L0uKdcP0kX/PYq8J17f6Vq2nuVxxo9dzurqszbCEaorhlMXO3FBWkH354aZc4TSNVOKBM5YlDRpM0poyDaqsegSV5qr2whfucbuEVzW5w96EFOPnsXqaMkz+OWPxId9Vgh+WTjw1OjnNG0sW2m3getf6793+9ShB+fCsd8nbH70rS3q39sHtKRWelcwhIyxZlTCJDRWbZFbw240jdnq45BficEZj9oqK+Vsa7fNwsc05XcJSIi3BJVXKd8ZP9Nra0kUOrFVwolgH/WhtZUM+OzDuglJo4H2wt3kg1I4f8tkOC2VVzIebrxDRJWC6v0Us5KwD1H6XWvfAPKXutvoO/2tYH/0/bAJ3NkgnjK8woCRse+5rLz+hfD0asxmGGuhqMJjq8hH3HPYJRQSs8XjDXu5rQoPYi1W7D74YZfS/v+QX4ZzNPQcEBc1hjceBMnAHigEDm1N63GWxOJTEQH9uTxZv9IvS7pas97SscMfW5xTb3tD1X44293v9d6MTdVjvMehEW9bz5a+iTOvlTW1B17p08Lyyg65UsUuvmxstuq0nqp26KxOJtjS5Uzd28tBE0jt1YScI+kXo1JT9xn/pPu2aS217jzq1Xb7BnTnCzatNbbxZvqNX99J+ubPa3srp3Vltb9kUb6Nx885q29Jqm7d/VBlL8zaRyyrVa2W4iamOvazRaFT3n9dyGNbaXoxKq9qUutpf8za0egNs0Zxmt8Bet02tyqRaNFJCscMHx7vO8fK1/+D0xc7Owedvf8U73z+Ev/8+P3t3cRRsn4o/KHv729Ff7y6UTbVDjQ421Yejgr/ZKKDn3gyv2Gi58DFiRU5ZegmIdIfVPstCetPH9zxH7Yg39BPHc9kQJVsxfKhWqHgkLD2XMXtyQ1AN1Y0dfh++/P37p/nyj8XXgD4RH97NkzeRd7LvvI6/h9OX7/76Y/b9++bbw8X7mU4o2KHGOmucR6rJzU05YaycStDsKOcIa+vFbpeGvG3griDzWsoE3bmM52Z0VZbqWoNrl4Ci34YiTvFgDNBSRMfFpNn14PlZSvUZjeeQiBKCtAgu+DfpmnxOfQ8SnAuiELnu8ySAYHzIZ58skEpYUHfBa6MVNk3mzYHuzhKsWPtGe4HC/EgxljS1gVc0Knd7pALPFGL/JBFewCC5Cq6QpizKl3VIZwHkAnQMbBTwsPZsUMTHOeQRZYQsBq2VSBehLo1iWFhESpZ+2mnO8oLiHdYedFUqNa3Q3sTyq0pAm3paD+EwDWccKqudVd8cyl3VcIlgAPzDEDkQPO8ZGVCO1/joNzlpG94zUrdGPJehED8guJBeGAwIWFHCJB7gcaJOTKYe810xwGM1D2O5ZqP8fOrGfgFIt3Fh3NLdu3rYmWO4VD2SaRLAINCTfsq4GJD3B+/0MceBp1pSZ045QLbLIUNLK417QaPCoNHHvHrMqS/6riciOPkpHNMAbp03C4B8iAGJeDj1fCYG8j4wV45NLfHS5RTcoc49diE6jJcuJolPtT9WNuo9JwzCxbJu5EwXQbedhPkDHQsqx7RgLgCupSurLiZ1eCiEPkxQ0PRil1vWYQIO5cMpD4PiWdGO+dXjN934P0lNjaYWA5KmUSZJhCRRzsl0SAinRCl44NS7eBM6DDyizlk6wnTYOhSgethm4IA65l5wzgKkaOn4k8D7mjACSkMJ4K4mIGsb05uwOT33Qt5h5DoN6/BBYfD54IPqKZTDFt6yxQRSfHkR3FZGRQIZGMScgj8eFYLB+Kc+Y/GgfGTgnqYPaId5nLGllTwWIh5q5mGPluBD4YRwQdVi49OqTkoSwEe9T8BfI0sc8tkQRCnmkimjEEPfZSJiQXms4ixyM3mffbPPwAjO2JGUWwzIggkUFOI5Z1QTcbagnq+evikC7wyRf8AWVlp+MQ+jCI6RozPPGoyqDPOoHrgREqJlOBJyZ85ELAXblM5wz0GyPuNU0lFp+lBJOdTseOj7ILB3GP7Up7PCqGVoSfWg80EoxKEx9cPZAFDu9eFXblf4YiFFEQPIBghymBMmQYyPmAwju6BcUsp+xfcyZ1IlQpe5lbwQvS4H3E4UXqTyVI2sk3LqlSLv+uy6XZgyIAueHLPXf+1v/Pp58+Pp78FZ8u63t28fn397kJxvft34w3/x/K+PMfvw13YQh0qQ6lBjHUFqc4QMnxKkpGpF6gpw2VaVoqQiRwrtKEOZnnRG+zY0AukfIweoQSOiEisKrAV1wKMEPLu3DNZUM6QAlZdyqRLVEv8pYmB6yvyq4qnmoQ/GWHUdB4TT4GygcC/Mt6fSBVgKHZCz08+8amDGb+WnQgI0nK32TtfzdC0yRl59Yihc2rnp/CUANvdq/XSky5/hzLSFfzx98vjJ5uZzgOOT/0OjUFpWm1hlYcXYpMb9tJjaV1kS1k7/oHdZ/vLn5oOHj0aPB+TJ02fPRxsDsjHSXiZoxNcHQZZ+vjHayH6URyMby9Hx9rvd/CjwMcxKbGw+UXP6fyJilAcsHi1kAWOA8FCeBgkwOraq+dJ4DrNir/a23xy/+j1fRh1SWQrIYvYTV4b8LRIkvp99z3FeaeuGTwM4Slq9WuDkXJNbS0WG3q7egTX5iI20v7ggdal/o3dLdaXheLfKJdzUZFZyq12xxkFmuZDL167nIa/n1NPDNiDluPH7YFK0a96BR33vgCbK17QJ8hlY3RGrhxVIX59rWoI/68pNhFDJyuWr2PZUtWpSvbD9trnRtsE1feJ62PmMlfg7t95Yq+etF2s9p74e1kpxVjeeVkuO75qp9LO+V18yrTd+8auY6Wvejue9PxmmPPAD7cp1b0TBe7YfshT/AFRJy4DXvf6thLMu66/l2GvaAS05r+Hs3MMicAlldS0roHUEa/hi97ACeavQTb+NWmfSfqBrOahXNHxpz4zwES2t2p0jdbpKE2x5DmuPRajUHON7CBmc04mnCZa1qwblM6k/RwMwdDdhhJLNp0PXm3kxOYoZXUB+4IPdottFoVct1ctuQ1TXU39AJmCrpwFkWZ8wgs7s0t9CMNmr+pF9cyCL8GPIHZGqiUu+HkXkQkOMG99LJwCGMEamAFbJiHyxRdppQ5M5+cBo0wtw4cp+MxujDfJfv2S6avJf5OETxeMDlCYNMuegij5TTk/3h1puzwbA+f/GGZgnC1xy4cW23FGaAxvfazvvInujh4KJIaq6AS7DGNCEkc0Ngiener3H9/bwEJRbKw/BBi5qLFYFsGiRMI3vKXMBIjdOPczJDJnqMCipyuOnCEBsRxvd9n0DMJszDJCQzduPi3LVwVHlHKUwb3S6NfGc0cx5KObGD7olNSRdPf2+re60KP3yEWFdszwe8SR0l9ZOXOsZyYLS1ZJVlJMUKFdC20wgoGREDqYkCJXNCJOAg8lGDo5QooML5O9AQNyQYdJ7bWohXpxuW9thy91uNfKKk4ftnErFenF271MbEM3m2XWI0nVlnSGiR1LFEE8i+bisMUC5V913v4TAmui3ogIZ2BeqQOchusxnLdewrsTha6N/O33A8zSkwdDwvtvBjwDUr8FSB0VLaXm62YONZEo/NRh7BW/pOeMX3ItjFkg6bD7gxsN8k0L+NXRDm3j/pHWYf9Ac3W/YG7HBk8CL38hv1vKmGVKOIBTbx2+sZXNWSCy863FrycwkqS3X1mKpWVJGjI5LKAFFG2RVudT6OChaH/PlDAvkAOWoEjRCztpYjqA2AvTTveZMALU2kqw1AJrn6HEOAsFyAvQAdSyivGzj4GbC2He5AD2F8jden54i+KsvX0+B+y2vbk8B/C0ufk+x+41ko6fA/Xqis34cfy3JWj+Kvw3B6yFqvw297CFav4bc9hCk355arxmu3z18vagG6Tl8vXyj+36H1gz4r3nG1oAB0C0XX8E1Q/+LWUQKLK6URwosrhQjKljcerEG9QSOw6IYxDycSTj5CxJXK4UHRB2Egb/U8nocgsugoUC5STyujP5ox+NeK5vZ4mHtka9Tu92Vr8PVvPl8XYtN74mv65lBqeHsemVQahi8/hiUGr6u3WFfj7Xr/CpeLaZLma73fYfX5+76eBLtDF2RgKzJvFUk1oJM0hEk92EukTTAUCmXVTqZNcSqpcuZLWwlClYIW5HMOadZT25N9tdO3Z4a2+0/G7ZgewFtJ7X/WlbVDyrylBk+i6CVs00oZ/iSxN+tcPhP4+mUqT4EU1fmVdCgsJOXZB7KDFLQYWoCOGMsIpToOGwnjJYQeEizgAGYHqjzINiPQAwThCgAz4MGk7rOBD3XXBRPssDuH8ZwAHMAm9x61gNpxMxiuzFMo7OaGMayviFjlV7P2LKkQR/fC2SmpfxHnC5FxiKcYtikPEcnB7tipb5BlcxlBM+VWEHWXBp1wDvvyA6E2wSxsUJy5cDALZaBk50Wer7aUeFsEa4ytmarQkpqTgTLItgxZHOKkeVB7C9VULNLBEOcB0lJROLMCRVpWL8KGEY6CRQSWtQzTwkUNEwdjE2UTKyuSF2IE5PhmOdMyV1VKVoZ5yEfIkYMZoJEsy58I6/SbzdOYFuRGcpAuG0aVmQXDPEAAarJL2lvgvkg4G4o6QoBs3WpqQdP3Vgt3RYO45dfyMa/wCgafwZbjyWvgglWLS8c7sZWBlat2jdg1I0hNqBq31C56+r2bj1xre3OrxFw06+wUJbPVjmSV4a+3nyge4JXv/GiWyP6fRW2ZsSZQryDS0lG6H42IPgbfFE/yu//zuE9bv3j4fPt3RePfy4AB27949nz3d39/Z9NaDr98dLeKzgK2nqF78Ven+883NvdLve68/T5g73tQq/yY0Wv4PBn6xW+l3rdfPHs8XNLrw/3nj3bLfaKHyt6hfAOW6/wvdjr/tMnu4+elnvdf/ps58lOoVf58fIOM/WHn94dZuotm+JthBa9w0xtjZmaA4yoAy01QCRM3NM2aTJtuS1LbmeV1YuuaJd1lr2qVkrWvku7Fq2qvqFZu6yRH6uqF2VKM0dnb5AjPSOO5AFHOoHiSCC/EjSOBYGlIhnnjwPDYkffUcg28Jt/yDfmL+kh/zV8srn5ZuZOn3zaCY/Y/NPGu8R99TR5cPrp6eMXr8M/NhT6Tocaa6HvbIxwZTWOKQIT9wC/I5GQS/A7pfZtOmqsq/c94qHDBCRfTdESNUbhiBwo6ERA9itga6mNksBbJEq4M6eAd4YZQYhC+1RHSEKlDci5x+OE+oRywQLqp99lU/pXCd2nwNSqdEoasOnrVC11DsEVgFDfqs+W+ctC1HXDAEDaBIkvQuKHAcC0nTNXL410NxDtg2lw9RGvUGeyV/aFWK86/pgiTJEpdajLcJ0Rd09orEe4UlKAEwMDubW0RQPUZogsAMhmk8kla8AxYe5bfDAGBHSegpwcSEuVxkyj4kwQznxUJOZJRByiarSMoFm3KjsSDk3BuqqVEQ4NhJmcFxENTUQ9lSnFg2HJFcIUwNgW4UxEYSAYxgOI0D83V4gFsawmw4Z8J/FxCXMxTlLV5bBMQZ4elD0XYGSHEQjurroySPg8Ju14YJzwqO99lyFYFsf0wDmFQuZZcBMObisS4A7JZjyEMiMCBzNrkkugXAxkCIYQwqdRe9GhUkQA0K3OJ7mYhwJaO6fcQ/0tFqmJCxLGiBDxm8XCUswTkpz8QjIf/IFCJ4ZZaIBiPKxxzHiQQh6qO6wXrOIS680yobRSwD8LllaLk526DAFwIWpCFAbyzQTRKqbWaoWmVUqP1QCrlSa5KgFCWdq0pKjakimqDLSrYoKprVyCqaxgmh5qK/Xu0TpqWQA3IY8ORrk39dnp299O97PG0vJG5iRZ/ILRSDmj5Ermkx5tkccbG/kCZrqiLbKpfrvE/xpoYmaanw6zeHH6IaHuxDtjpxub7WbiUC6a57H5GI6DOdY7VK9x+0Bs877d+DDk2w/vlSdlN35DbjPOl3wlbvwWdA/Nv5Ll7x1krPIBvqYdSZ/8awXgynMaN/5wTq4A5+Pagb0kE3dt2HdXAqxFOhumW0JEabatbnov3u4rfLeMcbzxR9tky68bpKglSFTHvdAM+Y3fCiXyXPcutISK6rYLhrhzTZCLj9uy2VcFK9VtwVIx9pqWa/OKoKWkeNs/qJIS7teII+zhSU2VCj/Iq7rZkrHr/qyWMhj/p72rRUXRdVP11gzU7XxbUQl33XtwJbzm9b+sSnXZSQHYmtXr+lo8aMm+dA0AfNDqlf87oP2Kuk5pioSvnhHrlCGtbcfEZ1TEaDpBS1zIU0NcbU2wXaWGtziMqZ8i4c3QsQRywdKAfGc8LNc+gK4yQ19a1WKQitmiJtYkjqkzB3VBdZmMdbb/vqAz+t0LUmOXipsvFgNXJkjxlgVo5Kf0qWS+rJmVJjkVs+KLsCZibs58r6Z25NOA1fwe0HPqN0w2hISiVTN9r5wCFqihqZ2lmFePY9IU+HeKqQOzkdp64Mz14lM/3T7LaE1/BOLQiDpevCygSj54bCbYE4ROY3SDkee73OhhKcMhNCihCSZMOVCkdznkM5kSDCaB2ZeVp2fIZ+NxsLN3SCD5WAPQYA5n8McJ7StZbL/UFNbFKsLHdjJfCIygSAPJrOsmC5mG5o+yWs7MfKNsw+rgHAM9lba/BxsbuWRGre2wKulfViRdPCeEdNsxc0fkfz0YbGxs6PM6IJv6nqCPzz/Fv+BTPtXhP8W/RvmeZJWXUIOpIf1ZtqZW/i6rv5fR2cUsUOe06gfpblDxKyxHxU8hn1X/cgzrEJ94rrb93llaO4i4udN7TQynvC8/iCn0ztRx/TZQTSdv/Or3Sb9vmyU1/wRdl4bt+pMXFd7aH2YhejdgmkzFNa3CvztnMes9Q5Dmnn6YFeg9KU+OTfxhlqH/lDgZQ/zjLELveWlS1v/HWYPeefS8kHNtD8SVWBArNKzvi3BcHsTyuMxFrJOTAwWeUtL6EB044jkSH8WLIRSB+r7KPY+O9DpERuGhkDicMdCeqZiKOAZAAJEmpCfelFDio4IUUZ7G42BKPb/KX16G0wzh/g4zJYqh2HpBgzOyYzjE3zBQFdQqtwPBzEx4KVptwTM8j1tp+lMPCp7hBZz0nEf1AAz++QKmZ/iAbFrxLlN1d7vZFP38W+DXl7z8a4DsUw//MqyvvU2Ll/9AuvwV1qqoYRrkNEz5wqm3/4D8iVv9Jf+76Uo/IH9+6QdItKBTlG1rnD/9+YYDhTbfi55wQlveqp6wQhvvZE9YoVU3uieUUAs9+E+BBG1H5nrCc29PJPuCdm9BY/uCd28g0X3hvLel8GtCvXd6INZw4sr1VfG+rAkJX/s8rYnv3h0R/2pvugXV/W96eCvMcmac/xBtpwXGNmdc3UfjapG/1TP5bIdELenVpR9ECyuzPhAoJ1BfhBAyzlwV3F5AKSBTn7FYBlHfRAB6rfhdmfu2RDQ2ceA6orGe/wa3oB+Lxz7Ff18Na52dwlr+up611rt9x2J3O/9Xx2VX3Z4r47Rzd++K+Gx9c9fjs9cEauz7jSznUrlCbrgmedLVcMNt2O+emOEavttOS/tita+EB65LvtGWkvfFdJcfgr5Y7Lp3ZE0+uzsvfLX33JI06Xp54R8SJrseyXhVAOu5F+SRflN/B1CPM7ctfLVe+Y96P38sHOv+YKLL1OuqgZzt5GvFjV2Pf+kM41x0SemX8JTVBJ3P6x2e8w3Cc4YQG1uv8L3Y696D5w83dy14zvs7L568KOI548c7FOk7FOk7FOk7FOk7FOkfa2K9o0iXEU8rkaTLKKg5VOgC7GIlKHQBitGCSN0ISJ2vlY/Cqaqaj8wx69sdYKrasTvFmO3Vmh+qmq01SfSNW90fVm9/UL1VSL3d0KtxZiX0aguAcQV69Y+GYlyBYa3woeHH93S2++zzt2e/7X449l88cdxPJyx4+tvh2cHsr/j5k5f0+1ePxw9On3+9UCDWHWqsBWK9OYqpOFMY1sdUnPUBYQ1NlhGsi60XrXyw9VCzCErMaSA8jERVOLmyEIsppj+TmcwwWZmCf8ZoV13Y96bMWYJ9QGMzixHSTxF7vg8Bm4Js8wUdYlSnTtgos6+pzGpgD1SAvNIVkMee40VwsEa2SeRQqKkNuZnyBVW35j4WE/dhUsqGiQZJHBjOlH1jToKPEyAkY662YEZeHBzhzwiRPANgd8QfljUUOC9km6fOGXw3Bz0gEy9wgSCNAyyPUati7kUDQqPIX2IFvBr3IaiVswvKXQ247DOa9STXCVNWUt2aDlwpL85Htboui8AzM3A81gGD29TWnTKtpdPyeZtK8LR1q6HSIrSvoIKnWpeH2OA2xR0frsBpEMbe1HPwhcqCdQvqRrgWZjzsLlwTC+jy+J7C7taQ2mgOn/rsmwdY00ZidpH3kg1AzQNg1ghPLpjyuh2PA3kSiGO0u8Q0rIFgmDQ35Nlp08607Y8AnK8Dt2HBsNBuQyEJJs2a2iogLdQVBWvHbrol6RIfZrOVcNVbLXW9f29I8kpw1dXw03fxtOM75OIfFLn41sLlXkEI7mWd2csxMheZeYyw7A+AaQEPyRZnopwf2pqouVg7zazQIdUwdqlezy3J1bZMEr0tWeD8yyuTRndMxJwbQ3NybCh+ak3HnBuK5CZs6C6QA2O9hUoi4C5aj7MCiwbHWQFJgsKrW1jdddbVZcAir7a0vR20lBPbAoFg3fVLW6tYw4wTWiSx1LEUAV5WGjtnAG614lpe3bAkh/njLirIfKeKZ111bT9iK5rzXWlIMofYloUId11K2dKVXSY10DUI5hG2QESM8vUai4Uy+jXTFpdNE8G2PNBYKOS2lRblHbsgmKaecYIqp5UWRo1mndds7TFc2a5YmS/5Jg7pUL04Q3yzJCt2gr8RSvQTvSd/u3E+SPKdbeckLjXNqY/eLhMxD5dkhzpzVva4NvXOpTqgGmYBWyyJSEAfRhxoZFRuRVLJBmf3zi5nNt5G+p2pvnWhIY5ruJlJ5YRo1zS53ePghjtvt9jhnly3W52Pnpy21zpdPbl0287mf4o7d79Xbn2376oLu75/d/G6r+nH3eDICsafIR3iVLR0CtXegpWfErTwbGup9YY8Jp2OgMFttqa48G+1GFLL8qX0BCj71IrnMWscvcJvIj1fe5HXJ/J93DE7SS9t8HoU+ktnOnptXqtXcG5LuC07GudOpYtmtghOkTiA4Mt0mCdYIi15WdHTWBfRoZ1C6m6oyCD1VFcIyiIBW8SI7GjLpvyRcLYIIfGsWgQ0fuYaYBVgLlLyV3RSEsht/KRI5M2hjelGZza5K4vIrAmT749rLqlfOvPNaQs3n3duuWk98c9XE7VWw0TXH5g1afAPQ4L7vgfrcdh9PbR2Ntl2B9djkStenZaaW5kt0fMFwHnF2j3Jg9TdsX4WwPsoQCB9kt4QhA/jjLpLov0MiBdXvBbKu0ZDl6s/btwLse45LCiUG+mylY/WimQjfOafxQCqf91omn1Vy3g1/PPaxLw7r1s0O/dLaMtKjVXOVomHBeconrd1wH+pF9iYWUv6Fjs/m3oiZBkvCsRDuXPivqFvoyQjyk0c5fF9+bnC11I6KUY8PPfc1J1LtQqnzpXFsO32flqYsKXJD85lUxY0eVVJxX1jId87Z6jBri+GCriGUvNQxBIpvLbUeVz29XqrfE5dJrwZ3FhMFyJZM+msSbyATMOEkwu6rFvP8b09lwXKE1agjyukQAn5kCbxHOUZbK+Ys6TO1RBtC9PAORUx5fFx5m8KrUt9ZR+to1e8TiuDbUecDbWPKnNT71RyAdGnnEXKcAne2tK3FW5DxtwqZ1VwQfQEwPDMCfsWoTsuvMnaEVYKaFL0HI8DqViOQ6JfYvbNEzE85AsaDdMKO9u75NwT3sTzIV8MCI3V2ZB2PQ5kQN6IJHDQ3Ao0W+5Q7tqEXPsrZ4uKtwgSJsUQQY1e2l4ISKNLwC7wCSKHKtf0MjUwHH7G9yCpTNOKgENu3fyNeReSQJWJhbsM6MJzUh/sBQ3oDDPtBFLKnrGAcTjn8u6r4w6kFEjh1MPR0ph4IHWLpYjZYqjrKKoZxIRT5KQwpxQlcJTyR1JeJhgAzLqCKDrUHYKkTmM1PeWAtL1LdvKfC5qI7V0yX7pcosQKuMPgpGROpbwrcI/QO2Q0Y7HUfcInZVlTxJtsK6f1RMDWzynoE4q+OoAjK3nK1LU6EWTCphANAWODtRbz8EIWxfEZbKU5jXT6kKnKXLH2NGeLGG1MmEMTweB0LQm4rsyQooXWrFKtiE4fhMs6RC9O/eGFAvPKrfNA0eP8VZG+7a4nEOULf+RhMptjIUXRLPSg4lKYV6BqHYuVxuOgQvfVej3zx+CNt/CUx7UXGGNoOgbdifyWzIhl9IHox/njfUGFIRaZz4Ev2MWccSZ9zFXLRLA4Vb2pq5B7FkDinCQx7LcbMimS6ZfWfBXgwgTw7OKa00h+jekEFkZaemzHpAvx38LOC9dustT5v3BeSzJZRsCV2m5M8UGGiSYiwYfBDbF1vWCZGJpf3jQIBqirXC54Z0iOpgEJU6ORMSa4bfDylMf04uAIdxr6OmIx+KYwPTygYUoV6oXBfRCRE85+VuQhrNyLqcdFXJX/bOKJoX6ahhFn+B4JgM6+p8ZD3tJI8rTvcz/nz/0hTAq6RWpmBBSJKq1xKyYpPx8d60KTOFzQ2HNwrzTRqF/NHWwpTwbT0R/AzdGkoRNByPNdLp5WHw+G5FBoxsmD3lufYBXj1LqblLVHL6scIYMMgWqZqLlIyOdBSQGgU/jpYFc/bPB9H3oiheAhcgiswIUnySUca7ABCKGPW7czi6d8ToFOSL7HN6lBqMDhLeFcNCbmYcRHeAJTiT0x9ZgrZ0fJOQ0836fGqUsfXhXPhmFpVHHazHYSq04Jjn608tH19EMYcTZlHIiuXHHkHI2HUx4hkV1YPYWBqpCx15IecfUrsvSaquuPcNs0Ndcva4qbX8G6MZcFOjhR4STBer7VX/K7Y7nh6kTJCKVUEBtOqSOj4OL5iKAmQR5drDZAcgY8KhwrD96dOObeJImZCnoTy8CBBVK8OXicntMgzkSZEHIxhUkkg+rUaEqnafucen7KUqacVuu3eP/w48u9U7kYp9vGRdySI0wvPYwT0z9AvstYGOlem2S6XBe7qcBs70MFh2V4qpi/E7vs1o2S8bNe4tBy2nOV9r5Ffii8c50DVXIHkRaorO9sroH3PIyZEzO3FUNaGHCqb+gy5B3KZ6Gsg28lceBDGu66DBwhRTb5XYfedRjYq1R30WVcqpaxkM2rdzQPQ2Cxuy/eq0/HlQfq1afjlY6P1CMpkUBfZJWClQUCSD2HfGlwRi4oRgrHoGkQVmFXsJSeGLLOOpy5TXOnnoEhFjdMxUf6fTiCH3IGY93vibC9fu0eA4zQTKOIDdFWTXlgxE7LMcpbncnqWq2RqgCk7I7R+IboJRUQWSiyXezSQd7zQugKshaBIZHBzahkr1pwRDcIudk0eyh2quBOBFwQAKEobut0I2eqBrtrKLaP30BWb5fxTbOqfBa2yB7k+95R7RTb3/O9hRcgowZsUQix8Ax0WA48EEbhKrOyMk3AE6MRJeHebg7w+j6Q/3n4JcMybnAqSI2+MLB4n3q+bDXL35IvcSR5QVnoYblQis6JKSM2LM1wvABZT8PNykK5zh5YikFQO4rbsshz6WwJP6dlN8zNKxjNzZ2RV04bwCTb2nCxb6K9qz+TVP6C9OPMVX291ve9tV7O9UxUra72eu4GnQjD+i4EvZCV9f0NrjTxST1JW9NPtxVF7NSHHXW5nqB26sB+xRvpcac+7Fe+BTnv1Iv94je8Bp16sNOA7iO1X/SNzu3Yb3HFU9ap5Wp/+dxL2KlNixtQh4e0wvVdMZNDVKZJTv2VUm7syE+r8+gVqjtk1VN9b6prkI6tqEdPFTGoSQfpZhkm5AJUE5ldlSirauQnwmZW3Uk1m+NxYLOmKhWzYBEFCcBfSncoT6Qa9sR3ATmIUW5o2rX6T+nad7Z320Kf/M08eOo+YDC+f5o/nCrk4s0BeTjIVTn9DrH4kpIgXRyQ4dPHA/IQ/oV49Ol/nhtc6IPHdfxgE+enjsvt5vuKm9JbZNYVbOn6XKM6EOvzifbjtB5z2P4wVtBOSdGGyrsspZ/KooYWHSsNrfG3kOhtAOmGrhclV4uCO4aiRQB9lsQ5O5VyfSI0c98kJwe7I5JF1k+xR8M5w6oes7hn7NjskR2oKKhiDItlhSYJ+A0+FGwBuQwdtbbH8JEcZR8LWi5sErDYkHkUYGqyPFcbhhdPEMqytR4EyvJdbiljigp+ValbVtdK8rZ2q6V8u7pVAqVkQ4X84r4PhYd2a4wVlw/2glGRwMH0AiKYEwauGJFddQSpsNnfhptaIQvGuyAc4vLLRn9GdZjiDDRoYQzHDaycSxKEwfA746E6O+lGY1toJy4ZJ6QWnhzs7WJ5LsftetMp46jeK4/QYy6eMzVONABOGJnhsVdePJWHaqAtT+NxcLC3K7uTbkwyE5v0kgm0EwCCALjhRSD9BND2I70DtQZd3UClRC93/HBDn2e9A/YLJVsdKtQBRatkTzv6203hYzq5EZcwGbT7cNnzVzruGs6xSdDZa9kAXWjq6KbxMVe7rOtxSH/jptzls2nKZyM9GXfATcBMfoLvKy5TbUKbG3bqb3F6mlX3aT3W/vIuqct1J3W55ZlAbvn07hKd3LIp3sZ8IHeJTlomOjGByatSZphg5Za0JKIxL4nI16vCQatqpQobzWzTBoNT1Z4NGsdsqwAWUdVMAUAin3pFxQxXZ11JI4xrIwcbks6Y0YS5nSmH21RuUTkEx2ypxgW8qsUat/BcwpacX2llupacr2lutWzeWpXrZfPgMlsr2JKq2inYly7rNaqVF6qsZb2s0x5WtVPSKF7WqEwqB1NQo/SdVMfwq10rf0iv6UOqs4d0y6sD4y6l1SlnVanIqtPX0vyNqVUqEuvInDXw22t3wv0j7+jx7x8eHu79Gk4e8g2HfXr5+8734PUfX4fiZPJ0f/p514lPVF6dDjXWyavzYASJQFRaHUxT1UNaHUyOVUqrU2zdFuoNNQt7r1IfUUdqkSbUp4EDfpqM8gBcYwfk/cE75f+OB4U6KkpXAtSqnCDzELgR2NLt9wdm6po502cHegcDdHpKwNrgQoSUtHGcHGxBShjQmg8wnMLl9GIgO51C/qU085NM9iTH9P7gHejCPRe5lSov2ziEZE1mNpQj+cmeEAUXE88+BNYyLsC27qaBPUcJ54z6uy/U4PW1SLPRtPUy/XuTeyQdcnoEKkW8LKwSraV549NimOcGi21ubGyMNrJfHCrm8pcHj3M/6IMlf8z9FHmBauzBw0fZZ+PYqVp/frnLLDJunckiuUsochMSiuCVuvH7YF71a96BVqlHuuyAysr19+0A5GpWw5T08WoWqohKtvZCIfG+poXC5+Jq1qkIRLz2OqVv2TWt1ZWt1NO+Vwqe9uu6eQ8ePrqaVXrW9yrlOJ1reir+7Oqm/LzNKuQzRBmpICG8TvHvqTBAPoILiUoz2D4uNklxtDxBpAuYB76v50yGtmF0mdQOEqrSRTVEGOo3Gy3pAXjpTBhBLLKGivqpqQT10iQ213IAUYaGV05F4+oyGb42FOGkhq4382ISJIuJFack4Rh1XB4MjFZlxYBWFQYQCOMSLwjENhQelZxYBd7gyh6G+ZRfut8fL/UXroujQ/C/1JRMz54t5Qw0U5G4530qXOL6dkwoYuxb8+AKPb9YtT+JkbDOemAsZ8WCnESKEqw6PDywTfl9LCtSmVzFnq4MfX8LoDstR9gq6VfzCA9fG91br6M8uUMaDNW9VQhYCpwjINv6c1lXVJ5xRl4xz6t28UeIRE+Q8JzxC+7FMQsyqA9NbsGV9gY6A2m1Vzu066Q1yLXWngwI/MtaRGtOzODWP03FSekHU3FS+lGpTgbI7eR/KqpPEIW9F6xtkzzmkFxrols1uK8+kTceXrvVGekJXLvxhPUU/lB9PnvKOlM83etHNFjvxvrRrpU3a/3o1op7uX68au2tXhMou6uzWyEotW+gXks8as/kqofg1T4CIO2XtUws14xQbfDoTa04BQ7+VRgPEUbrR+Xh52G85QXeeowyAXdQjN2AsIQwzrJ/dOH+YCh/N8sOfQJ/xqVh8CoEmbXGhgLB1UgUhYL/1iLsgEgkssvVeHgYtTJWrjNuutD8t/13BSP+d89MW19v4dTUpp0aqtvbNkVtMW/oUoQJd9hp7QwlCEd9mXVWYXzvWA12xXzF6aSlT8Cp9hG4hduqtaSnUv23Oq3U2sN153ap9SMIHwpgGqtMS9Bycvs2j+EOOGEEMT7EqbJIYWIjoJzSOkL7q4xL5v26Ci1NDhwic5zRLBf6W50cmN5UiNXLkRFS50i7SwkJRXlyAFpkAI9G9ZmC9J3TYAZ486CuqY5yRHo4BIz1jOyj2lb+gkv6OXsQcjPYPn5LBEM/sBQ63naj4sW21Md/Z+4WMRIXk/0EEe+Ds6wdBDhnsTW8Gjx4tnKuJzcO182SSqSNdglmNk7TXNF4MS7lGc4toywLS2lV5qh97SoemXxNW5UOFNw0HYgywSVNUGPJ4qNP2ypDTE9qlzE+bjfEm6qIanWcelJEVR/GnjRQNUd5PRXUj5PSrc8bur62qgclRjWIk0Ed1kdUK1/cNVHUukdjbxYd/3rWetVEe/dLNXvQUfWh/bJrkvM0uwfktDVPjgUSp16dlglipqRTsrap7xL6Ajk3miKEp44L05RPgoxBfEodZoWC5+FiH/i9zLeATOxINYaLgtXCmXko3DbmSrOOjdwVGnnzpbIFLjfXn1EtJ8a35XFOpbR+4rkm1/Pgju1Zke3JHZOr43uyQ9aT8a3hiK5ni+v8VhadLvt9KsvMzJXcvPXZoB6eSTs7lL/1a7JCFqKxprmuh3e3fGEb3l2tBBxKpaDyetHRQzvqY/4V3skFF2H+9ySKQh5b89Cj6hTv2FYu2qXuPS1VKmowxsERi606uYUEGIOm7RkIMmckKBBxdu6xC+QbpLoIOD+YnKDnAPb5w7/nxlo2Petq9eq1JavTiqLeuZPS5MHju6e55dPcvOM9vdC28/KfopK4gmtw0zUT2RW80ZoJ6zsXecEwi31V8VsH78gn41v+lYNfJYwzeGyCqIn1wZcTVPnA//6Yj0ON1rJHYp8zwXWj9A8f3XJS37gDa4TA9ksAy8T/yo7G+hJdD9SvOpWIeSzX96Vcj/yVif9thJ9c/YBlUJ025+A8TmsDcGPvOJfo/NWMc2mMEDWZv6B6Ux4aVfpGE8Er3bz1+OQrwOwsBsD3S4TL1O6qEUHtZHDVE70eubzs2kQxILffzSjzxy0v6h2k6fVBmpZ6hZhnW6/wvdjr/tMnu4+elnvdf/ps58lOoVf58Q5I9cef3h2Q6i2b4m3EG70DUm0JpFqANasEosxDneUAG0sB+5WQjaUg/hz4ZznSuBL8sxx9nAPFtIQgVSJjWsKS8nCUNt/WalBKm79rDiQz9eCoRMc0PD5q7FGVa1O0UV3WaPuqGilqAPsG1+wTRbBnEMF+MAS7wXHCiEpwnGU0xgo4zv8ISEY7gKcEx4SfxMHhb3vL7/7LD/tz99nXkz/C78efj+PkzdMnv8fRx9f7x88fP+eHR0/33yr8zg411sHvfDhyqKvgOwG0uAf0ToBJLoF3Ftq24TFAkSrY1jBi8o2hvsJVhRACnTRdbrYXL0HLR4XwZgFGWg6yEiF3GRcDbfLWOdDEgMC7GkF2tKkHWeHl38wlYF/GJPGw4fOlK3PCnxwQJR6KEY5YjsYTxAuGC7YI+RJPyDT08bQZR1ErUoIsjVuGLFsVu2AAiWPEggEanl/BtyHkSt7eJRzeY1e62k199s2DNw0FWxVRIe+Owh4iAagEfO87E8RbwNJQjMI92JVAtTIkA9LQ8cSJMbHXQqfblNoXGc0x92Zzxoc+O2e+EddR8kEIFwtI1MkCJtfzYFfU5lk7xH3bsjrvuUPc1a3/ErCZgcP+W2sEsvof1T5XtaDOQW0b29mJIolIqO8viZhjdlKJI3ywC/4QOBgiYUCsPhu5gONCmPH8Ya6sPtCy7Hb6148SkuxQd0vPYQtS/QVNUUS6dJu4rFzE0QoD4sxhQVMAnW8mycuCsj5i3ZTiEIq2oTSm74t1N7MDpDbU/PBD7Wk28C3fE5b1CSCp6L3Cx2y+xfVarWv574YNRCvwaW0YZNpkReimMe4C1Vt7Bs5ZEF74zJ01BeA1T6MObOrqZuAyR+pWr2/06oWCKEZBsrGtMSmZROOqD1ZP5Cy3GS0At4xxd4znLNAzyUxJUnao/v0jUTE5/i4EDGe5Ou1SHbbC2cOyp4Ixt+JS7OZ42j6udW54p2AISS3c9WOtD3y/uoH6oVj1sLcaVo6wYLH7K5MXNeaeKIs8HVdHVNRo/156ooUxSVE+pn/9SDRFz6ELVVEzXZ2upJ2KZGLhVgs1VOmK26oH08M1LQyrP4pyFWNcj5jUjShHRVR/q46yJ/JRdwT6ISDpiP9eEqL1N6gJR9WNchZV33EvPsnvPxJZ0fPqQlbUnFcnK2mnEmujv/urR9bD/TXG2MvNUO1d4c1IR3xlN6P9WFDJKbYmiec39SCL1jGkL1GDuvJpg9u6pRSsDWNRpeoG80prakEXqn2tiuqZQu4kfKWGdKiUw1opqNIo4a+EkiOlOv6of71xrpcSBqdlgFHkOWdJdOqHjrSipT7NL7nnIpjn4yflWKMIdGcuKEqzCgmfqWTw+bKCOQkHtWVaEr+wykjibhFSaJhIm14wl51T5/Q5KiVKY5FLo7zc5B/5AnjMD4zIG+pHc1puCMthekHQQKWlt6E02VRZ5fPLgAcoZu6L5UlrfGWj0rtmqOWIe2F+pdmCwa44S8sWgrEr3XEYSSi2j99YG5b74G4r307Xo7PT2HPOIEdiP2FmjfxiLgjhh4sqaHMle4of63Shewola0EOegr5biIm/ykx371HJNYhMLegsOvHlNXS5x6ivduQ9x5CwLu9DmuGh6/0uHTqs+bSt3qbOnVWc+/bPG2d+qoBX2/xMnbqqgaQvelh7dSPJbCoM95TMdNTz3hP5av/d7AMnV5WO/VYL+TrQZlWFGO+Ut8IJV8wl+gzT9DLRrpyWHQ5YRJLA1ylSKuujiphT9OUXSeFV3kSgGkSuDrVfeoiYodmyHdT4cii3SeH2iNH+m7k07WQVDV/KH+8cRJWNwlF2gwYe1l8fCacnodlzjxXvvyKvIBadhlDIqSU+qmQYYzSnSQZWe99d/mhi+STVmkh9ygqYE7ZdOqxTEH9dJzjbPxwxtnX6sLo9JiWfnP48uPeB/I/pGalVM2jZLGg3Hi7theLEJVeUQSZwmUpCZNkbWDfYItyJ66QjSeMjQFqRUU6PkJj4igwYf3GjWyyffGpNb9ch2BYY5j8scXCvxNXpCUV6kki7EzDepIPW1HA9YMpV6Gf68edd6O+60maK9DunsTNFpS/J2mz9bvRl/jZ5tnpSwbt/Gr1JYuu+uj1JZe2ejP7kkvXenJ7E1ibX+w7gfVmCKxtWJkfQVwtyHWZW9RQe/0XXZzJ5/SHGyfPZcNvKdKV9Ii9i3KqZieZKavTQmjShe1XOW+FiqlJ5XTNccGA1+UeWNy4c6y85HTE2XDzwcOxBU8qq29NuUCds7YAi4W5ZQ7ZFnHM/LXTxhj1GmWllZfR8CXvtpbO2c0Xldpe0Z6kpYYL/oNLSR2IS0+yUhvS1JOA1EzYepKMGsjieuJQZ07o+dUyQmU+oy9y34PAY6NwPYgz1sdmTTFlhRwcj652Z8u3tv0z2pdY0eYVXlO0WPURX0Maqey2H/Gph6zGD642q7FFkOiVu+k0FvsdX5d0PGhKaHzWtcHuyYylryPIOkOMuvdUMmP5HYPPMfD+4AaKXioZXktuvTFvfFoy5DOTfVPwQmWW3hPa2qjTICAW9kpOgZ54w6iba8dmAwG31S5ypvaH8b1zySmKonQBwALHVJzpksaXoi8mrrYqpv7qz1CT8+GVt1RfBJj0DRcxWh3FnuSLxoPck4TRcA16kidqLlFP8kOPjls1bIj9Aq8nLnR+k69Wo1mj0GymS7264VWQtb7sH81UsTfnuyqiuq6o8ANJClf5XNwmWOx61OKe0aqB6WsGq76pz3F/AM/lu3vVEMz2F3nFbVrvkb5sAjC+5Uiwt3x6d0C3t2yKtxEP9g7otiXQrQn0VwnfaoD/5cBXG2Fkd8wSztzzXc6C/AAyxDmjkYdmI9sGJl0Ftlll1TwAWhlJqKriYYo0ZEMLqaqVIYjk0GUtEAFVLdhgAy6/mK1VBw1XghRXBhLbcIZLjvJNaMMl53n7LhluGlUtWl03cgjGFr1jJYKxRRfZN15vL8ihfQOH9o0baocN7Ybk61C3BORbQmatwPH9T4dntUP8In4u/PJp+534vLf/6Pnhi0fxHxcL/9MfG+++773842BKj4bBtycH09e+tzc52L9QCL8daqyD8PtoxJwwCBdLhfK7J//qA+lXNVxG+7X0YUP8VfXV0hPqumEgEZy3+YICpfLdFKh2wub03As5Hq1pwvwBWTDXc6ivTwFnEfW4zB4vAaPFiBzExA0xiCmGpskiDNhSHosReYt/aDQSQWbheBzEcx4mszlhWm8xBK4EQKMByRo6CvmMBt53CWEyD2N1yiZsGnJJ6XDo43HAplMQXD1BaBT5HnOrcH4ZQKSywPGYAq7ZzX3BOhaA3GKWXEP/cuog1q7KmQuL5oczSPs7UDJojP+G+Sg8bj8Mz5JIj7BNF5idNOsgYlwgDVAbQyae7xvZeNs0GfKZ0aK50v+/vXdhbhtH2oX/Cr+89dbOnpIc27l7z5wqXzPOxInHl2Rm4pQKJiGJMUUqJGXHmfJ//6q7ARIkAYoUKVvWaqt2N6ZI3NFodD/9dLc/8R2eLAg6m2VNfeZ5l+Rzc/hlXKlG2wPhBdbBIBR16kPkMq/7Qez2XYqxj5SmEjyfOxa9d3HhhzwaB37EIxMjMKximu2DSZHRGZ5hEsviGBR4lT8POZDpQIGY2DkOxpEuJLDv2z3Xd+MDsUMhcQJfQ7sPdsRmnj3xWMxJNEJ5lsO9mMHIXFz4dhDFHUGFTq/Q2vnXv7LttOQmKjbhYzjAWkUpMiGAEqQINO+3vk3lZ0qlwyIOILGn63NrxEeXPIRd3s++CMMUWTbz/SDGZoN8geJojDr472s+dG0PT4cw8Dzc4fYVFJ/0nfis3dgaMse6gUEm2njpMYpiBhGbhfl4yzAfxfmhqDA50IB+HosXMq84Pif4wSktcjEt/Bp4B5G3G0vDAxj6lU4XHln+gH4HeHGmi3bg992BbkFMuLfLxsxW4kSV6QXHoHaCSXD0Xc+LMhVhxlXWj8VwZyZF5Ia48KOJbXPuRAZhSHJckgHSv7PDeyIkfbXNcS6GXJwP8kDBQd1aHFPxlz/2337aPvlFnIod6qRYCP/uWF96JGI6Vm/iQ7qCHuzGr1/RyG7t7mz3YHfTutqHvi2ikXdOncwFU+cWOZYhthKsmTGpqmvWMaNNU9wX3Q3x/iQSgo62EDLgyxUkFhSUDrntYXtS65Pcw/QGd8q3hJXfEBktic4Ta5CIlH4Q3jCg+CezOHcsn7Pw8jbZhKJdicwRwhh1G25FgL4kiaLff+JMpQ14JP/INkw8ho6SgJCnc98No1h/PjFryOmTJAao7Iw6MpxRYkbcSKoXdHuQOznQpRGgbDO5Awv1OZF8hIS7G8OZYaXHRaJecJ5XKS6efIyHPLxxI3mU5Yq3WTQ0FKst7rBv+dyFMlNFSrau8LmU0ppjr1gyjr7ufExLFOpTkuWEskhYyXphI0zVwiKhYFl4xhuPfzvkjhtbIAYS5SezqHEl4Baxg9EY+PAisUcCn1tB34qHQTKwUbpB4KSXo3Nx4csV4EbWxGfXzPWA1pGOd6wi0f2hh8n5XhwLKIvbLHc6kwJhXfPQ7UPGGBYrnRaVQnqNONBPrn5jdWEAu7BJbxFaqu4zaw8G9yT9Tb/tkvnCuUhkFP/hRjHtiMJkdFFjSmu98MGwQ0pFVnULOYsmlEA95M7E5qnqk4g+/M13eAh7mHS23OpXKtUQpONy6jkTqeG4Phi+oB+Umiez86zPqeYlxh77kUg2/AK3s7avFt0GO3Li8E057UCuARStQvtzfaH/acfEMLGQiMhm9pB3L8F2DdGPBMQL4u4uPLd2kufmazDdf6NhMIFrb8zkxbjLJvEQovoYGirgskFXY7pd4u4Y0taUJwApudnzoIM7Ai99cDNhNz6Mh81hhEidcziLh5brw9kQQASnDwODnNfWjvbyK1M3yVaDYcL1J7gj8FrN1SmCC3H+Up0MXXKvk2O8clguV/dWDssl6+Iy+vVWDsuqDsuMfbIk42TGrpm3fZm+O5jknZzSKGD64iQxGmguMqaPjtKbznQtbUohBc0tn/MzryCU5fzMKw2qt6s1q3l7RvMWbeYak3k9H5cYnoKfS+uTMPi6/jsdE3oPV+I/gl+9d+5Gfzh89vGTPzg/uRm8eB6uP/s0ePfK6/41/BC++XSyGbG/PnhvP+4LL1eNL5p4uV6skX1EOLmk/bW5j4uKLbq4ijXoVHthtMmlPx3eRigxxHVEqOnRmrXP7KG8el9xPpY22MSMC5Y2iJ7tKCkUx2AAts7PD/c6YvnBVRSuuw4bMZmy1OExc8HGPXTh7jcOXD8WLxguNbncy0hRmM2zrLV5A5IFzUI8jFyw8SQ3gFPgQ2He3o6844ntlazntYrGWGB+n7c1lhC2AMrE8e1ORODGVoK9TX6jx8VXO8qLycylL+/0/pgw59K94r31jd5B/gs8IPHljbV19QeaNPppPfvT0I17OLNRtqn0K1Qvfvgi3ub+wM3RpVuCXBlMi+jiSj+gt3tDN8ZKNJ8RY6T4ZH1t/av49Q7/H/73TmuUJi7/B7FKq29GR78/D2ip1wX+blYplAZJ3m91744/3Iq9pqylkvfTsqeVnL65Ve21hthn4xBMH4Sdo4NDZRAeqv/TSuyznzvznqtmsVqtzEEquhZ+HvIi9YEn40X7k9FPgQL3Mw+XUSSqhnNoPuOUJ9NvYZzEIflAI7U+r5F61f5IKTrDIzln8nGSxkGYPgzpnJFy9EAj8KWdilNBmKp2LfeoIQtnS5OlaKfLMmN53fqh520jTxDSysSJ+8EiTlrayMrSu3aob6Wbh7wvNYhSNpZcu9xKOv2dDoNz8eQELDOQw8B10FAhbv0nkyiWxjM5cxpo68WTbWkgEVYUAkH4MXN9azIGF+OL1HZSDvikEraYIzIAJuaTyGJoOhFWFDaJgxGLwTrj3U4DkQpVTJ98IVVAZOoFfs3DWzC/WGR8wb1gjWA0LsFGF99w7mtKEsvRiE7dkL9PaW960K8lh52+7cqbWUlrziKhfJLu8Ysn1L0hu+Yq+Mjj/iAeVpuyAY/NDRXvICy0vH3iTcrGKtoGKCQ35BbzU+CEsCLWXE0UtBNhSRB5L1dsZjkRiALgLYndF6s1oYPTsK67jhrCld1k255nyTcxUQjUxR2JzzGNhNwGEE0he/sIUqKKka+USH2iy9e7j9Mj7akjNrZYVDdpZWZl1m7BpzbqpqU3vW7DvhH9N6TQPB+TvG5llCiFbAuNjYw5oRHF0lJzpSiZubVYwH0MbCLKZm4qlXAfba2U8VazW5onuxUNQEEbNW4A+ByF5Ax02P0+8yKutLEhfUkitFBzEFLeCkmGWsyK4hDOLBHxtmZtezcAirMhpIJiUrQngGC7oH6MQ953fyD8EZ2EYxYiJFpOdGcxwPGz880o0pqYZnTEW0i3UZWApHW6FuE5m87YorRRaBi/YqwHUeeI9xcR9n8f09eMGGYO7DP5u1O7pExFwpd5c9voWdpmX9PNuNvu6haRt522Ox1FAtjKW9WUWsFxuqwrzl+RVMFxLGZ9ko/UU2LaFUVcdiLNeZBx8OhVhbp33bILYvayukhny9CNj6GJSLTxKzA0bnveb+JhtIe9tHpiRjInhvyyavL1xBXfydUqZU2evVP1xhu+2ch+k7riDe9vauk/Re/EEFTpSwba0LEAYfOxnxSUS8MuQA2EVDG8lAIcOgKhYngxC3dQuhm1w2yqbKJMXgXNEZRPraAMozZPxXzo4IZgV1Kl8AFhfuKAsEdSm19yJaP2Pm5JdagoBVpieK0mQ1oieq0hgVoifq0mv5rpELXVkAfTISqL5ZYy5FUQ6m1xwpadCW1xwk47UtpihC0/kVa0sPXO2haSTBiO6hZSSuhP+oZJI2ZIEjLf9C+aNHPz4Gktbt15X2YNWSEaalANE0jUvtNuzneHb5bs8Kq32gwenmyXYFZG5yeEH1hDiJMH8/IVvyUvcQ7bvmadBbQEwJ7p8xsPQlNxOhL7dAfjyMH/lVRxxW8jGfoAd9KUgoE5TgcMuBT0ZF1CccmBZ7l96zaYYIwtct9ZgwkLmR9zdBZPfPf7hFsQ1gRmUlH9It5maYCO0a9Nchj+C5Mjrwt57eKEIg9+TSYXqCx6P/4jXoct+UvuXXijoC/8GzZnTmX4N4y8ryDSrXwL04pwG9zBNsSACJxI0aSFvneYR7zZBaMdEuoas9380tDWWml+mTCutOapIxqaIFHil6xyg12QWEFzlsFjIlqsYxtUUBMWeWkVRpk+JlEmDjafJ3JY609KQPrAhAbfWW6E9GdocXTW7sWeiNiHhNlnAcUxcZdVM6klYUWdZE/A7vnEQhf5Rr6kWjVNZk/5Qsqdry2b3to0qdHaq2tUE18tesbSCjPdUjKhFtdJS0apti7zJaaoKWu02YnR0DHVtgJePDDa3nrN7FMtXbH1hqj8tm9ocJqSVYbQMPlz9QSf1jtYMyBD/mOMHD3YlRu4qbIqR+ginmDUrxmOMPx3q+eHGOK6B4j8bNFPkCojPYcjJJmnZodBw9w1bcvQOVgp88uv+VWiBSFabqZMln4zgT9FiCKtGCRFwPtWVpSeIuUYs07JcJMTqA8v55BYFNpI0BWJ0/01sVmMWchGES2EVJGSMi1zxZ4jzClTz1SkmryLz+JNnmIPxeJEu/XWUFlIcPntw8TzVOtOviPl1kSd+UK4whTjxcdwTxCMfaHp6WTl51fVkJUpxo32v0+YdxZkPygbE+iuXCIUO3LDBNMksPZYrk9WRBlQIAxBNYbkOlmA2cYazCjUctmkX2ToDI+Pg8j6srGOGUf33FAupn/L5iQVRTxGzvFCdcrAZnX8DX0pwsM+rRxVkV/Xl1TtJiNnG/N26oZSdcxPaVTeg6dfQUnJ6ISHUtMqimUqnvovmk1Mnu5phaj+8C9f1W5mbKrK4P2WOM1xOr70fnSSyoSY6Anr06Hv8B9Jy1KjFPVPL+GmqCgG7SKppMmRqzstcyddZoTkqCxq6sPSo6e5old2cC0wnvW+TtTmNuY5uETv264wq6LQ3H7QWM1obmnInsgtAFtqewYKocEtQzUMgqG6M7cBbqVF7a0B+iWzyOsrfw2BMW3oji3AYRosdL3IqL/Q55vlfEO/we9VqW6Ir2lHJ28Iv2lPpW8BlNPGjWB2YE7roJopmk6rl5WGaJ827jq1mqAXWy1cleo0Yr4o3029GlRb1TerMo0vgbVuBQYNSHeHrFPsfBWiZ1MUokbX21oN0etL93M7rtPO+Rrpn+llj3Jxr1VaSbig1m4N/NzIlZzk7bBO45R6MoNhNJKLDIN46/9IRhBJyQE0vhazwokfuyPIIjW+hfQ2TEmVIslCfMe6CV1YUL4bUzYSzJCDvCGltUYsJTWZ+NHjI/SATkDOpwcj1IAGPCShB9QPtM0hEUnPzOkwhSyjtbbOlYCktVYKhovEDTUnrozW2iv2ce0luAvM2n6MlO+tEHakg9cuaUcOEg6ZGVOa+j5CsjGxZnfI2XXK0yOh2NGaJZM5OpMQrwGJoO0HkLw5ciGbGGH1n4Y8Dl1+zdP81KaUk5c8irtjJOe3ZQbeHR7F1nH6DL/TEpVRPlNoVZ6VHXjKwa6bAtUjAoEUV5hyt9HTedFwVSHBokwEmGQPzGpwf0QKeFIBMbdqzcITFh+kPkkOpRC5dwAHj7kFhoHHM+vPRQJ/hGQW6dQunuwFaPQgdpg0PUFSBJyZnrlRaXB7Pn9iWsUZqG9qmyLYFDLkIEpjDsSFEdrDQMNLk/YW81CNIR8hOqOhVdYaUuF1LPwNnogf6fk/mdxIW//z7M323s6L/+SS7Gz9z+s3e3sHB/9R07jIh3f6WoErXFcrPM/X+mb32f7edrHW3VdvNve3c7XSQ0OtwByrqxWe52vd33zzbGOvWOvBwe7Oy51crfTQUCsQZepqheeFvm7svH7xRtPXZ/uvX+/l+4oPDbUCJ6SuVnier/Xg1cu95680fX31evflbr6v+PBuldXs0XdvldVsybq4jMm/VlnNKmY1y+W8MaXoyuXBUTN9paydpo93FV5PMyuc6es8U5xaRo4xyFREjkVILaEQW2QqoxBvlM3VlodSm7O25eHVajkmNKFxWgwIw3wmNmHpKUnAJq0/dyV3BNPn+XuDmrutlXxQraeDymaDqpdujXpUyLamS49lSLb2WHJk6dOjycRj8OP+b72bnc2/fnt+s3vTPduI4mj/02jv+/rP+My/HL//9ueb1xsvz/vHzz9diexoNb5okh3t5ZoX2Fc8FNnR3uMfbWRHo2KL2dGKNegsqfT1lJlP0hFbbsxHmB86mWLMoofBhhEHkBMYEcJghFfJazeMJ8yzWBhxSKU+8aE6WZkT2GjR5OBtJ0TYl4snjDo3DHkfu5df7AHc5LvikKCefsTLvTwQch1OL/ENc6uJ8Vy63GosdPse7x39SfnPssnVbBbzAeahlinTbjgbB/7F9NxquXLVtyn1OL26sUpLdlczLZk6so8kX8wc8pIlS3PhU2KJLbNKS/aAczDHPbMAKcmEQH2opGQNcbWGAaibKKVSYq655UkRilQxQcrmC0lYk2yXaalSVNFmzDmS2XyITPDBcn7JKf/FlCrSFSMzhFxya4BACyDoYdosKJVynNBAlGXmEENVOTPH9MpKM5SIdypkKBFvTs1QIjT5Sk3LFBazK46XpXQtWI4bcjv2boXjg6KUg8tv3L7vtCTU4kealkQMd9O0JHDBmdFvm1mLtas/bFxxQzwA9HxKIormg9M8FQneQKflIWne0HtJQtK8mc0zkKjHyNya+XDJR0QDVslH/muTjyhieVGTjwjTUq3kI0KJemy84HOcvmZBmqvkIzMGXs6+pptRdjye5CPTtmpZ8hG/C6evknrEtw7xgXpCVL2BAZPgNQ8R4RzhZSu9hnA/Dm8XUeCj9lExDYZire7krNVZkr2Mvbqjs1dn308t1hDd1QqNkjJLdTmUcEksUEoLaM+Sn1vTV2FLZFBT13BLLIEVd0BLhIGF/bOiCKwhFh4BQaAQSa3xA1Yu5N6D9uegKGoC9uetyxki85uI+obh+fXD2Oe7qTXR9k01OgHt8rvS+n6X0kb71rbqxCnV7NQ4A5viTrxbC58K83Lx0p8x+BNFNFgIVLN2iulYQDWwDndzE+3uRava3YpkuR2lqH1lpUQ1KiyHZkpQQ4KjtuVa8Sbd9ipvzoLUgrqi14Oa8BkXFaCKdMbqHV6ibatf46c6EFkk0GZ2AClWhIdtEWX4rOurJtWwRjwsvjBta2yaS9wWNp+ZUKE4Lw2F67QtSOGn+U0oglJz2/DhtwqwEMo2kwX1kAwPWgLczLHYDgludXP7YpHginaXk+CSe66E77Vcr8+8KgxC8pMce5qCgC/hv8UyZiS+xXWh5yyT8JQc3+3U3pPeA53ChhVJfVTFaD3bFfHt/50yg0nL3cgKJjHQcERxYF9Vbqzbt/4/yQFmMx9M4ulgT6v5A6CKfARrp5D2aMzsIjmwcbCoauY42I207vw6FwPy/6wNTdqturca+R+dMpw2IbnUZF5XJ022qktGOPleZpM00P1KWW/wxVR03Fnci3hmVJqcfNqqlaFJ61UmCt35C8xHazwJmh/y086RBXZz3tcB19w1uuKkbXBVa3zqNzduqwdBQ8u29QgZaadbORsYuNtSplowetfVxRoauhuocg3M443X9HKQz86g49Y6bPU7f4qKXKsGPVFsdQ27VmV6CTHrGtKkW55pDd1/yuW6V49a1Zk3ap2bS60q9Zt55nnVn+D153W+idQNNKnlV7qF50s13zZrFa7fmnUvq7Wq1J/GNe66tWozH8RVrsq1qjJv6PqXK/NOvYeLeq2WGoRAes+vVZpZI5+7maDW9bQlVf/5fGXHc73sEAaQWiUVBUU5ry8RFHKwe3eRnrAr48yUkB30YH1G8sL3SRTaNM9YhhFRVBMpNIgyboUYK128SUIyUM+1gdx34l0RESOIElC9Ie7B4+gnsOwh8wdpoOYCuAYyl6WoIhIiT8JQxdBYHUprEtNlgAutsE2skV9bRV+IBTILvDZafI9hhXXQEvyizipq7iasvgab2xHrruDmNkHz+m8G4kh2TzN7X+0DcL7X+aIW0LpQaMGw14LHfEN/rc+LpIbmvSne8mYU/GJ8Z6Xgl6wANSn4lVofLwW/0olZKfibx4834N9vp/I2yPfLwsPbaWUbBPHNI6oXhB1ebNra5PA4AA4fB5EbR7Tn3XjohOyGefMhiP8dJJDQKFxkGAlHzHN/cqcj7gUMW1ZcUil9k37JjdiA/USRW7Yo5a84CsVXQM6NmX1Vj3degweHvnyfMD9249v8LaZicRnEIYrdpMCQM8SY/+RhYGJ6j1NawZBH48CPEKPIEsr3lPG9gDhPy9rFIHabjZkNFYvodLy0pakEgKkmtkbs1uI/gH1eIdtBQbAikF8RyK8I5FcE8isC+RWB/GPnWV8RyP/3EMhLsHopfbzErmvI49MIwynk8WnUoY48floz8sEs2TLyyHtzKXk0/l0l94G5PJNLYXFI6Fuj3W7Iuu0bubNrctBThwoc9DoScgMH/QIxkZsHxURBL9nd4cfbk92N7uXPze2rXfbHztXJj3D9ebT/l//99cYgHMXbN7d7n/a+b19fsSNBQV/jiyYU9K/WgnDAfPcnSl5BRP9RedQGHb1aRZGU3lSbzsKolpRbFpmfKBFB1LFGfHTJw6hjsSjicdSx+h4HmK8P3DYuj4j20w6548YWGEmjNWsvb6YYMR9aldK7i+ITns61iwv/Nyk80u+iyXgchHT7hS1/nevA+aFiJWmHkX4XbsRqJVsVvZXf7pVg3kUmCyKFF4rbRUIID/8CSv8wfSe14qevZKnlJWBPXU3Z9/sTOJzxg/W19fR5yMeTOHl/y1J+onXRw3VBP/6zYqWvwUrvOmXvLQYLuFx+D8wAXpENv/rY0w5a+OEXO/txEOFXH/3HwYCvFZqPgwq/+lSQ3H8gHvz1tfX5DFNFwvzqw6Qcgw81VvMZqUo5AOqMVEYreKhkK3UzIeQxGdpiDZkQ4NK70innqFOmv9I1pfhcXFvyj8X1pvjDmPuO6w96rn8NxJ4r5XWlvK6U15XyulJeV8rrSnldKa8Prbw2Y25rYRiEnvVoBiAfBdlcsKBC+Wj6n0NZtzAAUnV+PENQSW2uMwT5S8JjuctuVNL155LWL4/ilOkUZLo8P/C7lNEO/Uoi6x+C1Zk3HjJ/MuKhawMKE7zAPIz0WYN6etBn7q1ETVZaUCwr1VIpRxGzNl51HXfggiubs5F1frg3pSJzTsGOfCDQlhvr60rnhHuN3hCjcXHhw7/CwFNenFJ/ogYBXDY97AveO4swDpHSSp8PGLjeinBSis+wQj5wo5igJ8CQEHLIs8cdgrnC2pDR4F7ImQO4Uy/wBxEwzjAME/Ql+ChjJTFl6hMo6G42Y590OuYy9z2CQIUgHFRLsReEg14ZTh9+/6ZF6WdcxDXB8dC86SEMSdtarrlScrtpA1Mlb1zQsKGVsqHpR6lhQrTqbayUMq5SG2fIGgcNIK2xwXLahgIQ7z7DFInaW1lSVNaUNcWatBYVzAZDdQDfN6u8lZHCoqYMVL9JW4Ui2mCojrAEi2HAbYMWTM8WOm2wqKTeXNI2qi2tFOY0n8Zqz3Q6/wDXGGSsUXgi42+AZNRYqjLoJpnN8YrfgiLCJvEwCN0Y1RcM4tGEETlZRXGRSAmCcFCRksAViW3gk0Mnm4gh8dp0dDG12XezwdqnY85Cn8fW+wA0PNeOLgppHhIHDjB7ZX7JunAKP+fdOHkeulY4CxTVKkNYQOOU5ygIwsHiMxRMXRQt8RNollRzGoKqC7I5CUG95dycgkC/GZrTD5RspWakBHU24uyWxrtZ6A/my1im4RtoV8C0QFGQyqeG5ARF8VarwOIunsJ2QBpj5hDvCttDqu9lznHrQPHQLNLpWyc5krLxX6yvTzkIN9bbO9x0bDz6w22V/8gsrJM5a+mE0894s0NtiTMe6RZy88NtNhn6ECmOkjvMKcU7cCdheqDtgKnlIouFOut0qUUwtW/rfk6t0tqLu2Iz1vIrZJ3GUAhcvorv5V2m6W0rn50ZjSpd5jtd4V5LbD5EaHGgON2SUZO/h9yC2MyxoEEQRFcd4u7E+VnUPHzU76r0c6NRoNHTSnjntnf3e8/WT3yn9/LFj2dvejYDpvwo6o3YoHJJZaxe0yrQJ9HAMKiUGUx0S/+uJMug9zfXM5k2tER3dYRP1jBIMkiIj2Tr0zsLfnpWWUht8ddVWYYtEtc1WsTtkNo13gLtMN1V2UDNL55Tt1/zE3omej39AV27GM2pXJt1Pw+paPmeWtzn85VpBXWEPAhulHILMd9y/ZiHEO5LNnsIA721Uv/3Ih2r1MJqp+pO7yyc2Fe99Y1eHDI/Aj2sd9Bbr3fSagSDvuDCSaexV53J1y0sQf9JVgbYLIz070Fk7SRK3zwBT7z+VYeN4FhLXl3/X3yv6SGbcSnp1yO+suBHbIVF1dIJO/OSbJMutvaCbpE/ttp2aJE+tmQztXOgVtiK7RyrUzby6sBt/8CtK9+m8cXm8E1Aj4DEKY8U4VSRh9Xkos+H0M3ipq9GxjrvFlRkZJ3mfB8Gcc8M+GqrsdyPJiHvkad/SouRNuWHCerRVosE6CCF3JY1yYxQuHhyiCXMDvogtljwJDYcmRNRiCUMpzO2hUakjakSI9OsOcy2+TgW89RGcxxuuxFx0zRpl8NtkPeL1zAWRe7A7ynG0kaNOxKm2YatCvmY3bbWqBMoDc6Yhq0C3POA92zgsw0m0yT6vQwUc5xeEhRTozWz4AtbbLIMY2ne4jKcX0sN9vh0nvDyyX4PJTSVIG50SfrT7O3YozIatqQCbbpJm1GZ0wvHMvpaGOTxSRxRUNVM4qMOzrAZhlAexl1gqOtO3K6YgosnmVMW+evOD61d+evC2a1EuytarkL+fcKhZ+cSsjUV5pd88iG5YcNdW/suXmEKUDD15w+1QYOIlXf9wce07Iss6UR7CImMmkbXMnkdE+O84AanSquhJZNT9bXUGlJi6kpsCQuoX8ctAf/q7IKWMIHV9lAza9ISJy6qJxoMJw7dIRCvQNcdOmrkzdJ3rG3xeOHOGGr6ozhikqIOI0FZ8TEc7HLhfcZoqOwHMVwO4qStveRv3Wtp+3rpA92L1Q6ruusve2vPLkL67WvhHEwunLPOnmlENJNmHJQpk1bviK87alnjQnbU5Ogs+LFeZQOuTvUHPdWrCp6WTvRysdUS2n+a0GvuGaosMlfeo1nPgtljAlrvdVEK1DymatVWIgmmnnK1KqoiFdrZRBslEqG5dNsoEQXt3yA2Wgj+2Zhv9M9mMfpnnsqHOdzVceMutKmbGrHvKNgVuDigv9Zuat5etOuDoAyZ2/Wh7SsBydRUNCR/615TNnb6IPtiJtEwRI80UWaLjp/cZRR/Kd4DyAsy+y3AMAhtj30UTEJbxdVkO2oe2M0X+ZjhYDRyxY+w/5uMet6FlBty/HXBrxBVNuFjvUI0P/qq6AotKvYlGkO58Gnp9jBNdLV0f9AJvmZ3hsUPD56vQJ/9jtF614sCoNZZ0/DiUP2oauvO0IJ+fc/mg7LbQpVztq27g+6YbnhTKD3lG9wgZpIxm/M1Fmw2NxbU0V8Mt5B8akVoRj6N4sLdPMbs1guYY/2aOH0g0MqOrXXoq9u3fkle6bsQjnohOrWFI/rrr9b6vy3+w40/u/HQ+keol9FtFPPRLmS+7kMS85gGO0NUgMO1Zf3vhpAYohoc47uFVhTLx6yZijjLiDfXEZvOVzNF8i67rVaJ0FcpyZciZ/eSd2+VknzJuriMmbtXKcnvLSV5kUjaVEiRXDqT2txAXmlMdG4gtFTLLCHSMhVbQq6VSYZeIFkxZkQvEK9ok31XGD9d8Fo2IbkJumtOSG6C86rlagBapgI1oK3cHGs8NiUzrPHitJLWXkl43lYy57ZzOTdO5VwvTbpaTiFZujk5tiFl+lJnyNYnWs/mMIdX/np+/e3b/vE79vzw08vn8d67m8+no/7b7x+HnmNffTg73rvdPB6/HZ1tPBfp1mt80STd+us1oLRyukL4y3zrptzyMydcVyvRZFw31ZenpqIXRTmWDaGfEc6VnqrL2aKM94L9Xc+mRS8OWIhGBnyRJyYisTAuLnykworWrLMhj7hYyBGtZGviQz2WB4z1VsjiIQ+teMh8azy8jVybeZYb8xGwz1/zoWt7HCwrfhQz3+ZJpomkk+cRhz4ptQDV8rUbxhPmWSyMONCFQGfkM2q8aEa0Zp1HPCEYYzQRw5D3cSryu12OEEbz4L/zE0AjV7lAOZJQ4Fumm9GLJ9ijdHD8a+7HQUg5SnBIoToxVlZhpHJmN1pc1A81Lz0tFtGnTHL6xUoTGvORyIeJNpcDN4zibdf5nWy2X9McmjecjQNffZeFbt/jvaM/Mwwo6L5iA/YzTemJb2v5lC49Zl/liMXgn6AHj5l9pRaw09uOIrhBHMM34SCUoJZVDs+qOTxxsh8or9GXdipOMx6qS7XlPjX0fbcwVXK3LctkqbLioSer9QyhqbhblumaIqwfegZbTyyanjfLMoPF07LtSWuEdjEUashSl1LporplkbolWWFdHtXIUSfOwK8l76TCt+wtddeXvaeurVy/PvCbTI+I95YsUI51Ax42aeQW6jVZSJIUfahwlmqmpBAXNVOhHC+uZioJuxLt748Jcy7dKw5cZXmFk4WjQCSz/6I8HnLPjYqPxx5LdVPluc+umVd8HMCVSj5e6ZvVpSpO4fII1OwCfOgzsHWVk/bQQ03Xw2txJCweTf9b14GEVHw0A9B62nQS/4+m/60nQ6dz7sH635CdoIk+KUyYs+iT4owrUwClYC17RwqfsneSDVr2klzEZe/Iic6NCjhMJENQuaU6ZQLCHMgiUZ9NLESQ3Bl9bpGO6JBDmxIrbDwEWzE8tINxnKr0t2vWtuNgXAJ5XIDZiCoVhRvKzqWk0Gja1IM5aNrCBpwl+syYgR8h16fix6iW1ljLzngw8bzs1a0uR5bajj6HvC0P3ozp5KOTMspPudI1bF7ilzTNyYy8lmprp2czrdpa0xuysdPy6MqiWuhUJUKytvp1Lz2qlNR5Pgll1WZUyn89vRl1k19rge0ZO4ZOugpTxmOVruJIbUW6CkVmphUo2tGGdG2hGY9EuorWLpd0zSt5j1+6ih49tHQVzVgk6cocpyuQHF2B7ugKDVgkbHMc65OAemwL+Me5fKGS3fheqQygCRySZukgChRKNxxM/N7x+ithRW5OTJnXszIJPDWh1TIMPgeryCf5FH1Z/DSfsw56A9t0uxF8Jbw3La6G5vHuhrXUPLJdsxKbR7IX13FDAsvyAEhVkglt0SjIJDTsscgxjfdL5u85Otk+Tl1iLQkzRa2pI8ykz25ZJFm9YV9icaZbDwsuztS1+OhkGaneEIRCIkyynpMB1BeCa3Hk1kyHo7hfNNSWNBpHKmdqMAlpbj5NRJ9BfCysCGxlBpvzE7UgEvQx5g01HL0A06+9ZvKrPpFM3hHa7mFSlF2tbKlmNEMtLZUit0jT00NDOFQuDRowBlU4R2rnn0scZjtBPBTWPBnxkoSdiDAl8Mlh4QVv20fFx7L12OyxotkVU9zdg6MJWrIgPq9qSfeaWmabu1FqpOYrbSwVZzC5tj+0FVIAaSc5k/8n36AW8v/k21nDMlzZjvpVJ0LE4fHYRIhodksipAVvSlsipKWmLLQIUdrZhgih4qaLkJaGdik9UanM6QF+f5lcUu2KfWURtSX2C1MwD7G/4rKry2WX0cxXZHaLT2ZXecKamSVWbHYPzma35MRrS969Fa/cknVxGenXVrxyFXnldPQsJnYuHWWLyvKlC6gtLysbZFssqxAyUKlpetY1A0y2UgP1JZZCw4w0c2VwMVPpebhGlcLzEI67UvepmXku71KdFyteU444I/uUap3DS596b9OwSbVMJqVwSdVkelNpuYpUb2ZWLg3XW2uDM1+qLT1jW44GDd7xj9efr7/8+/nZp8g/vDn/7vTXP/Gr18MPg8/vP3sbL9+ffGaDjy/50fG6oGyr8UUTyrY3a+Nh4EuqtmP4dxsUbVhokZqtUH7e0QQha/htjtwPusTsGAn9IvhcEPfxEXM9ojTjzB5a54d7a9ZhbLmRxS4ufNHZdFkQQZ8oGw5R7liXt9YpGF6Yt7djCAjLsZlCS3PMpZWsF/dMuCDGTCFdePXyxcuNjTev1+V/UgRU3+We0xPbhnzAKgGYGPWkLLRlSJuGoB5z6FdkZMD5F19tRRyK3Aq5zd1rHm5tqMAK+hiC89LP6YPiW3GQviNLK74lqk1fPYMM7Wj4L5bojngUs9GY3t7YfLb2/EX2lRDcEvgrAbDptzv8f2WIaCnWGyD8pjA8m/Mdnmhy+Y3bcfrqafog+6YcMnptHxo7p2FcsXBcVGfhkPt6WZg4ilKp5Z51KvasepPz0nLpyEMSgf9gi2wu7CFWbaNwRVoOKeXKurdzdHAoiBudhxrX6kt82hHe+h6dC1tIvXnBY3bhZ0Yc/w88ARXpSupNQBws/vAnmtUDT0AlwpS6EyB154WfhVSnf+BpyCe8bGcfJPr0fU4EZGMS7SUNfj4jtpFP39fKkOH94oGWrbzRNAD/lozCXd2SK1456ueFbF3NFJfmR6JkbsxNy9z4L1czTYaQB5btGyst86FnYKVmPvQMzEXPlEbIhZ+G0/k0tPYszEXNnIf+3P4UKIbnB56FQuLplbI/dcgqq7nLrOxvVlTJ6yv7mxV18rp0rJuVdF0DH+sJ+tivmecSvv7yNiXeBJ+sa/MSRtaLJxABymRMj2Uz3w9i65JbGAkrfbTp60dktEg9wiAsXF7hy314LL4RR1JkXXI7GOkoUz8ElnJupaykaXkUwJo4qVUftWhLDKnfdWynGpdCsYYq30BNFmhvaTPAPU6tiAMRWhsVG78HbFquP7CY/DL5UHC1RpYbW4Hv3aZkqiH/PuERfnZ+uPevf0WW6zv8RxKWkPOkZ8NWHx/FH15XmgWBEb5BIMRrhG9Q1dL7twWglZmCTKgAi/ZYyG5nb0LT2CQqp9c+M9pMvWmBHm8hOiR3/cwrJBGnM62OpPp4KE7pmccTea11o5lrI+J/LiHAfczC2LXdMfPjaPaWg/Cc0m6Qf73SxsdB+e+Kpd1QgKIWGnpfM1At100AcvWazpEorbcYS74GIeQi94cO65k3MF2YZtu+oup72QIZZUr3grzz1d4gNAIzbQ8xAK1sDixrIZZS842xAH25t3hV0O9c5rk/eZfs04gbJZ31MPnNIjjrKf2m3oDKlEbU0JEbOhKqIIFS3b7lc+5wh/LWcg4JpLnX7wqtwhp7kyjJm1v55rBIEbW1yeqUgSOiIQ1HEDHmVA1AbT1wl9YANNHqM9fjTmnYrtpQ/PBXvEkRF514faHje+c4hc2Cg+cQgZy3rLTLw1UM9Z13fLOeW7Hhup4ds3WnRjdXLSLvDmp3TorEZFW3q+EgATWqy7qJro8eBTDNMOsog7RZJDGd6FXWr1YUh5bjskEvdu2rM3fEGxPS6u5aVYkZe2Q9O3cdlZbxCCK+4sCyh9y+GgeuH1vb3njI1lScek+BqC8oZWONCWiAP19catrSldFMtM6VnTa7KpsJxMprenahmTZb2RHNpORU9lsGUtAOfIjjYxTlR9ZYBqJwN/PDwsnDpgtZGMIqCzk0e51DtFBKe5s0JrHpK0fRL3lN598LLd7aHs9miuNcWWrVuWwmwerryHlIWbuCvyi6ZlqipXqTT7gwVW3yrX16tCxSQrW3NVODIAmmd2udkEPuIsddfZL66aCl+CqLrUHoOuD/f/7iZUZdKqgdi681tTkBiyxSZtY2zJzX+qXTXDOqufCaq066ZdtMU5qi2oCZuMt8p0sG1m4I5CfSvX0EhC5gzUPPOrdO5I+LIrxmPIBT23hliSW+PXRm4fLXWbIr14yfqfUumPxqbw4WWWip87/silAry7r5/a6FydQT9StbavZAqQqy9ZGzhupV3opG3njI/Wquh2XgCjXfDmaXZ3UHem5ModOnacUQ+sgZQgu1AlJZVys8z9e6v/nm2cZesdaDg92dlzu5WumhoVaAdOtqhef5Wg9evdx7/kpT66vXuy9387XiwxUb6uPv3ooNdcm6uIykoSs21IpsqDleOhMFZY6rTmWxnM6DqWe/NCGkTKWYUFN3BaNv6iw3difnQM8yhWpcTWayUI37qdiixAxd3qDENH1XxT5kKstoM2qTe7RVmsUZWBbrEYtiSwuEohouSQ2R6AIQSupJQgXxJvzGvXeHfw35m7+eH5+cHR2vf/+t++bz3zt8Y+d0s793HEf749895/Tk54dDQQ5a44sa5KDP12zP5X7cZY4T+NHTNZ9duwPcFmu3Iw+auosvWNv4QjJ/YhbpHTmlF09cW0yC2/UmtuuAnPLdOAi70YiFMfZfDE8y9cYWFOY/0xRRTEkP4Gfvw419+eLoZvv98Hx9c6f342D/27t3H9/+8bH34Xhn/fbT7tXnzdPLT/vvXouBrvFFg4FeX6OYKSJhFR1rgYVV1FKgYS3WkIWvXjw5APOVJd7DveL6RMC7HY6YJQqOXIdb1AegzY2tYMx9YWqyXD/mYZ/ZPAKrE8oqbl2GwU3EQ4tfQ3RWx7KZPeSyuGs3cjGtDewp2o79ILxhoWOxSTwMQjdmsQtJJ30RdYbxbNAq2lyiLYX0hecRt+KhG1k4BhajnnA/Dm8twlbAflc7BY0f0LG9Zu0FI+b6lsNiBl0RYY1u4HesMQ8jN4q5b/OOFXJoa9RBTuIwGrpj6gRiOIIJxCEO2bUbhBBNx1w/lSdYZ8gjyGbqXrqeG7s8MnDRimbm387M7EnhR3Os5UeYM5xVx41g7ihqsQgz3j3rfd7f2Tn5+Pl0/0QCmQM/DgNPE0z4HswucrrPDy1IsxxHFDeIkhXnCuIFizVN3Ke9yI0ljryPFtpiFSfEkJDUwjwewpIYhsFkMNSU++50z2VeMBDl0prURUKehcyPPJDs2QUL6yKAXHzMs5gNSwBjK3d3tuUKpPeKJe7iQhcjLBHfvlhzVsjHQQSSUZl2Jah0Eg1l+WLaeYSHDbUnHeXIugFgaLHn+z+4/e7UGLUaBtewArFjXYzvnMSwdGRLb4Y85Lhp+pzFk5DDeeiifHMDn3neLX1rivrMbN/uJWjqLEwW7bb6q7Wj/JrdxrvFwbJYyK1rl9+IxKXA8n2LDycR70883NghMpm4/qAjpu788OLCd7jtwhEuDv5oGIRx13OvgXecR3i4y/3asS4nMXT/Fl6beI4loopjxPFDWi4oUGbl0qZQzXaShhVqg3EsjYUWE3/6x4EUtdCnkUtNhKYLgXsThFd9L7hJxU9homEGNfEDqq+Ctkaq4EBlsmdQWUKhbzkkFr1g4NqFmhIFSFk7aaFCbEZJyaKsRDs2xg4Hfjec+IBc60Jf0zDiwLdO6AfrAH/IDv9REMVyo3SFniY2XzKqHgwenhPRkI2TCPVANyugV+KHSSxHIj87aG2GB3JjCilJCy3kAzgxQlIopwopFChSVGkk1TCVUWBPBuFt/XZ29J6ON3G6gdCdJmbLy4abUCTy0JGYRUnDfF2kEDRZNB/y7hnOEzhPxVtKMHSnJNrdt3s0EOeH+yRn0ZMhighBKsI6wwbSWAeTWDzERhX7uG1dhq4Dke4YimahuBDy5Vb0mhUEPCxqXz6BflguSACK3ylWcpqX3SCgbDYBQ6OrG8E/93/rjYMohlszSb20p6Z5wl5Qg+WkTTC9oTy78MAwH475IyK7f3bUM1bOl9whi8V7T8svoS2nC9fWFp3XKcYJ/oVLEN/8525FQV6Dtk/u8MUmDspN/QOTB7VOnigF6ENMwj91eWpmoJPJHf9wuexO3C4ebF082YQCiVeY80NrH290x+IXCgGtSylyfljgDNlPL4rVeUMunmzbMShq3J/IEvXhqIAMsUgHI42kx+DLHhx30Ofzw/+k1eoq2mH+Vd0qLpl/Vb2G7bOj8gq+gAHnq9W0nt3tvbodsZlTvXzKMVW3CpHxuXItMqPVoI3aPr2dUtvHcMB89ycaJKxxEMbMq1tlEA6q9+6YzHb1akBbX/U6wGFRuw607BbqyOkxH4LY7bs2o7s76GE+QDXgBgtfcQeuJIBVFZeDxM9B4wtKJSJGSLUCCJTUqEDJ9JXSSe16KuiuDMYcvEKQaU5ehvFS8VY8MV0Lv1w8YVTQMOR9LCpnOkUDk2oTOoILVtbkl1e2pxRJ969MoeLm1ahYlHaZUklyNir0EmWiUiYIyYbdh6ND7fv2XrMCpXxQypRJ8JoUS8nRMsWKRIONilXXdtbamN1TjSoJFGGWqSMj5RpVId0Oadm6rGQ1C41IYCmFogjLF6pFOUqrSBdEmhjZFCm6Sw+1ljBhuRA2qUk0QTmGklGxGklbO7LPVTQAXVz4qbXGcUNux94tWtcypnYwNSU8f5R2zwfnI5m90a2KBlnFZE8my0KivqLRfv8HG409XvWOeQ8Yzy+nJ8e7v4Bk6YjO7JGp4N96WoOOtbG+/lVoRbsH5x92f6HBQ+PFQsbozaWLhUN4DxeUughgkZOZypY+J4dbl7djFkXJiiMLqpABihH5whcGXNgFl9xi14Gr2GFy+y0xAqLFpOsHsTx6pY1jh2wpH+gXtenafSMVUTwKUf8ApeEzvzw/pJKkhYqs7JEV8kmEVk9htMHW2yHn4BEKBAkl2F19fsND1byPrujvEz4BTsdJjGMgzTtg/PQUo2NSogs1Mue2Q5qLw8HsHEbSiJM4TBZop/WExdSy49D7zC/FzGzjPZ5QtcJchWBaFW2Lnksa9zVBof3L/278W6BuwZazmGEg99Llwk48EO4ceZLErueBUIel4kpjJ9hwo45k+kzWjTRnk1Hz4sIfsfHY9QeGfefwa+4FY6Dl7KJHlNjNUB6kP1m76U9mn8jvnI+lK6objbkN+kfqXnV9mSsW2UyhbzqjrJ/zK1v2kPkQt6pxKhe/B6cyjsyY2dzJOwqjCbg4dc5NEK5bWw6J1a0tMapG2y54FzSljMOg73r8g2yAkDEsEi4u4RMah7zPQ3BPg2U769QDP5+GS5ddJVb/LsoN2SU5/zA0Nrh3/FgOERV4yfug8yTuNvBvxwy8OyxmxZr+ADkGzaJdJKVhaiVHI3usuE3dyLK9INKZ2HFFSKeYsOVHPJ6MrYDKEL89lS1GIICfOIFkFeTNuvDFV+JXeDuxiRcB9kuOGV7y7q0g0UvWxWVEDi8tJHoVoTTvCKW2QedGAJoRQW4CpamQZjNEyFSsGTaUB7gXQCNlWPcCkORuqg/KVJzeL3VntP8ae5qxCd+VGY+MSPC8Qelu6pXYVJT+mnw3XdU3FWhQ/yVYvWUsartQ1ClI1ClA94wR0YRwngZxf+xYXS1yW0Ci4ad3Z1d/fnvbO41f/9i/ev9hf7f/7U3/r5+Bv/Hx79Eef3UZett/7vhnrxyJ2q7xRQPU9sYa+FiyoO28k6UhchsqMMK3NQ6dzN3+LL2/aGjO0T1Ed0aULol1CqdoyELuQFiD5ToA8oxvOxYYjUCAgH1EYqEJGBUDu4uwB4yYHQZWH6Uxmi4mUZoAhpZqBndnsBaMJ+E4iESHj+UfRVi3yZgtjHJqN6lrSsscPoarqm/fKvhvdY8ISJdoNvYs6lj9iU9GGZ+NEFSaDgD4+wOn64FAg63YdwcTgSIvIOyF5QUvnNJ4GcVwy9VYL8pnUHxNqHLLc0cugFLjAC7gNJOJVVVpkjDSj8auB1jkfsiiOJzY0CrDpFzx2y5YHYS99Hd+ax3Qn7NhLeDjAtoinezZMrSQcOyNAmdtONZQw4vdo67tGkTkonSxF6bWIPcMbvU6GSlkL3DN6as5zUyteLN6Dbv9walYuKXdULd4jeJpqa3ZupJJn6E3SGgEjnXjhsJ4qPeTpbu1O2ZxzENfGg+TXXwsn5caOROHP5UIBqLqUsSVplFt9pe0xzUY2O3xeN72dKw5i5bg5F5LOEbglHZD7lA81Zev1q/JT5LJqzgmF+gpxLRlJXQjOCIPZlif0vfmpEmGkWvOJzJt3Jtzv9Wm3y7SvN2VUviQ7qL42EhfUV1rWgP/8SSWMQHnh51MyIeI00xh8XBKun4SmZJVK7JFKp430m2FzVn1HEyRBRIEY4ikmUibOIXRlBfMwhETBumnTMQx6stF87aUwvrCivIcJlna0G8thsx7Qge30yOKUSDCzTDw0BofB5a8NCRjGgeDgcdN0T0hh1ApJwNjOqFnzYFMJRGLDwVfGtAwQxhMGHPnqXLdLfqzstiPle9gubq38h0sWReX1cS+lB1r27KdGB1Mlsrj1CqhvRWbvlNuyndTrjRmI2nxmnNn0rRMhWS0r7uSI9zMmJI91lVCkeQi6voNbEptmJTqWF0RKG0yvRZNbAaKkXb63pI9TWtQJWslzdXLAfe+nXbf25snr47fXN++ODt49eK9c/rjt4Pfw4/n8auTGyd6FQ2OhD21xhdN7KnrRImStagWwLkNTarEVmSyqeqgwCajKtHKaGbb9bsDCHulF84PybqYEM6cHp0CWCqhnUHKGZpswu5ImA4bj1MgEe5sMMJ7HPxciVX+Jgg9CEOwAfYt1gzzWDgyWVbRhSVGwVXip0TXDytaLe4BBVgljGTxgHxVW13A4qVUReeHSVR58Z53EtlJCA4A/AjDaY7ufkrcMqAEyE/S0OiLC78ye4ahT9mI7OwFNp/VAZxFXYWegGJ9ADv2McdZkELdy4maIIJHXrhvfJE8UXicwAaeBuckbCvqxi2Y5d/nd6Dk6oiIOcrRX771cLxSXgdfsYGkT3P7u/A7bneLNnvhR9r3OtaHEX+aQgFN/AokFMRaT0K9rF16UBUHna4MF6PXxcdK1svi8L39tH3yC9aG7/87Z0At7hAy6gkUIsRuQRwCSU8hKKV8pGSawnAy5N4YCV8u/CnrCsS1608wB9MkStaYYI4QC+ypAn7NEr8YMOdyUlW0+b460cNn2Q1DRCRIIJeZPwKwphQgx5nJnckZs6/EdKdPxbko7Vgze2WI63xrwOOtLXI6axwaPCUzgRADhdrGQGsTJREJMnNt7Zyy1CTcIoYWRQw4YfAke4q3KDrD0tbVrzMqq5Ndc1GFgt6Ng8pSR3WhZJeT1EEka4r8a9EXTNru/GAhyxQCE5xEw1KPgJQ2qR/yaFh/psSHZW0QCU7S+jGOhSquXyFznKQyredM1gN3ABKG/mR02bSqra3L260tERt3z7UKds0pteJbs0wg5IwuGdITfEGtCTgfjXtInhYiw0vy16LvobTdpvWbpO1qtH7VyrZkqjZjnfS75BLCZGnJ8NeUqL6T1GsQ5KdHp4lCOGv34Kap9E/fO+RwFe9g7BX4mGetkYhjS/omiGJlfdmqtGtYyaqmZlNb4NVLWpl5HUna1iYrl5aQQRjhAsLfWlpCWFbpAqLa2lo+hn6JxUN1VVg6RBEo7kddsFDQOqJ707m4N23j80VfVPIGptMplLvEDCuJwYkDHxvUu7T02SdUX7yYzyYV0IaTtxLz4OSuqrMOk+SSMo9TtqIGW0BfU2bImtZF+qq8npsHT73Hzzpy+HXpyCm1zD5shmoyw9aoIhyzxHZhHrPUrDnLaOHXpaOFb8w+ToYKMuM0YxWEvzBWcYY/q1VY3Ae566RkpGX4nHDiZfE5JxOvHJ+Dx6FQmRMLimJAsUaTWPCBZFHfGttbDuWiIaFFQ3gNu5uIhY8lF+zIBS7nBBKbMeWIFArFxuwFxJiBAbgiqBYbn42iZVHi3Zl4sSvMFxkO2LTMT8SUwRPMGCi7HSo3cQREEwxfFe4fodX1Xe4BsyOG2GInfAeAT8n9ljD29wXR0TH0qzbDh2CaWQFslrB7K4DNknVxGXEoK4BNRYBNzvdcGjeZ+qPvylyI5pxHObfincnTZQT7qN4vXbikvCNNC5TcT9+zh67nhNzPpXEyuXmUkp9lEw4ZXD93Wmu/qZhdxR+gs3CavjtSbKAFq5LpI01yJJ0xwfS5zsBw97WIgBK6bDkC6mRSwGK1iIBqAgxpGReig4XUQkfpcy+Z0TLl+KhHAJnRg6fW02xN6x/O4tM3f61/nGz+fby+9+2P099Hz87ONkb23zffo5Nv/vaL76/Gvd53JxDwqRpfNIFPbawhQiELnyrQEDaET2EVRviUjvSwY4BPYUlasBz80A8DP1bzx+CCYDFkRqDHEHoJk8hiPgCu/uGtE8qsPOwWsfdRMAltnuZlsFmYxoxkc/MoccpluCnRfRU3Jfq80LipIjXuY8BN6VutxU2dH2I8uwEvldAJN8ZL5XINKfS/U/BSaV9q4KUuBX0gwUUklWA1GE5aIcBwclSEAJcpBSflMpdYXhBcTYr5ZGgP087jiRFCA2oSe9T8hkyRNb0MUdvTPnO9SajwhZkLjSa2zaOowifUIRGZKnz/FuvDVhSFQFKhRGjks2SQLEhhSROgMXPjCCn1iisEX5dTk1D3ra2tCQBUPkwtZOAgxUXHfBVYXCxaxwmoFCxIIG8TNLGkmoQPGqOYFszng5NKrrZbswsxu5bRk5jaLetEblNtcr2qDH8m4Ig41tyYj4j4k1ny8xkqFouzpOIDwdSRbBDM65Mx1M5Qryei9rN17cJjlcXPbIxOWQdpe2oXmmAR4nNZcY25B2goxCIqDobIgquoOE/F3e+pkDlKJqSaw4/fl9R9QtKMO1I9eirUIxG33mCFG+vclUJbLvHZu5dUJoR4SWUS+yXebLKFhNDXVJY7Wxr0LKnM3DNZmTzA1Mq0W0kOVzc9TzNDdJI9ZsemMYykp8Jilh9AIuRxfJsIJ6K1qMpzcL9ZoGQb00RQN5yB5BDB86tcTxWzDCUDufDpnuQEV2/oHBI43ZkvKeLi6wU3PLSZzFaXbCZBnytotJDVIM55TynNwIWf8Z/mt74QFvmtL2WIcevnVXBMJmcxqJsytysKw0IngJOtfBdRvjfa/v9c0H+eoJol/9j68rUj/y3OxVM8FpMX5D9sFg3lv+9WQqSmEFGnZOEFyT9lr53t3/6dNPGieqG07OZQMC7hOZSb3Q7zaPg8CsVtOody7xb9WEHEjDg8xMkipTXyr6vJW1TbK/OdTLaXa4lRGYcuEEJarg93JTihBiFDA3rOvppJzNERBSoZ1AnejUlFLDXBD6ZjvoIkImBgo2xIpuzJaIJhOiNMRyW0YdFVpB6YdJkmM45q27m48MURZkWB7E9X9OeSeQzcaZRcmYeCOj4iej5h3TEl9MrQ2GJndEmuT+mHgvKNlyQMBk+GP5lFNe/8KPD5rQWBC9Dw7LACQaGDRJ52yB03tmCdRXKwk0kU4y3/FH2V2ewLgZWG/s4ZWKTkVdImVJpW3NyTgt1Dwqo55fOqnH1shatawu6tcFVL1sVlhB8tLa5qlfRg3kkP9LWC8q+rFZ4Xal3ffr69X6x1f//goDDCO9s7+3uv54OXSzEHpXi5FIeQxaqR29eMUZMu5ub4Nl0ZBV/OtMIK/p0MpK1o1jamciiaujMlFa1kxpKKljNz4gqh8VfLWXEqrwdzgaG1ArBpDV+Twmtq4c+wrSb8meZKUI4/W2TMkR54JkBd8FvvdfB8+JL91T04eX7014fr53vv9i//3hutb/+28+z3k23/cHN47G7au4eHAnhW44sGwLPNNWJWzQLPitSqDZFnIpGLCXqmpXI12Up05N0pra9YIEkqDQGyUBaGwGM43PZYKHOJo9mDyskk3ZDfqRYRQfc35+wHmU4hE3CSHlSGP0mG3/NDC1IdpMlJIcYIM4hantvn9q3tpTTJpdAhZqNsyyOI4pDZV5AUMA+5kS9SrsFIMYyk74xFtBOxPlMC1NxLuXEQuTJF5lVh6pGolyLsR84wTqtIH+j6Qw6iGulXjCgvIjX6jUXDIzb+iF8ml+aqaTbZeJxmsRTZFom3CI1YJ8e7VnluTWp/V8WLiewAOthYgkNwfxIyQ7ecwWa3QBlhx6F7DUbJ3g3k1d1TW/qrVYQOmpPxAogwKYw6rpRm/aqrYcBj9B4UXoeHi4ilbHW0mjHkz2GsjVlsBXzNspkvd68C5KINoSzyBVreSIB2dCuHfYdFggkN5otStBy4PsSnq+LmIAxG22HIbiEPMKZhwHzA/3PJgJIMs/8WhhHcncqreBrjq/C/mhbA4+w3BGA9QTQdfplpoJo0YsxCNoqsL/iZTHAsv8E/Pkw8r2N9Uf76KnIVp6X0Iu71adViQRGPt/GMEVeGXbXcL7IaKsZchu8QBIy+gv8b3WIGhxTORA1VB7xjFYu/+3px4S9kSuk2FlXz9BgVl2TzdBl1F3Tz9BkVt0OzBBttbKYaDXiZW3CI+Hrv+vzYYzYfBp4DvogtuK6Rv7NW6a+M3Wuyy+u04HWNFrQiI+o07o22cShh6hSzsV4o52tpmhbUObupepwgZK29rMqsDzxIR0rA1ieuhz5oN1pspBCX00sQoWR2k+ed5FVwytKb/9ytkD/VkT9cAVovMOQnN/Utt7fZAdfCLODqfaBJ+Oeu0WFbDxBz2Bc32qz1wY0sRHH4A0hxBLwuaG4g7Ig0D7gRmRaQb00wRpMJhCwCa9ZnkU3JEs/BfBXJojTGGG8SDY/JdqGGe0lDRCRqwVpNV3usqZsYYcTtnup/nz4t2rrEhSfTBTLDJLFfM2Rs5J7TetiEVGaKFKBaW1INjD1OjQTb5Ar/POTIN6muFyD8HjKEvsYYuEVWqdpkYLk5z9X8cRJjgmtp67lhLvBTC7QSValyC+fWOGRw1qw2UkR3RRgOhvnp0hSCZTp9RVgFhbnawiCeCDBRUcw8LkdcWjfF9pAmKoBTeRxWmQmLTFiprh340WTEQ4lFpsfWbvpYY6olS6qwTQmDKexRNQGGCFtDaNnu9p5ENUkQWgYWJWy/MsbNygfrXXE+TqP1srZAKi4XjqcmgjUGzc3KsIVcWKIi1RJZyHQHahYxQfAfY8+13dhArCVTwYIrdMB9Hrr2fyyHWK6Y46ijGIQDTGZLrsfENIm5aiH8UEdGPSUxHrJU0EgBUVeyiGSwfrFAmsqtrejWt03FIg/ZkEVDMJBG0GQGV1eR4hrsQJfcilife7cqjt1AJx4HEAhnqmv7OnAdy3FDWBApXhITr6dmpswq+w9h6CmrC9pyc1yJjzOT3hxwdDacPKo7Z3vvnuBt94D3WyHolrB7KwTdknVxWYFmS9uxFYJungi6trFssyVXzHm2jWxvWW/3XYlt01RE3t55V3oJNzakcDG/K78PGVFnxTvSQpKdiWvazJCZ2oiZWvAxKtyEH9NhhsoBZE17OwtASAsMk6Ar+O12401w/mr7/e/nvRHb/Hxw/v3Py9618zPu/fXqr/h5/6a78elVb8C83SsBDKvxRQNg2LM1ZsdBmMWFbcOjFmFhWIURFVaorQQUhiWJqcV8YmgbJD5nmJqQ0W1/xP0J4fiUOcSPEdAnMtXfrlmHMZgroBTMC+qxiW8PRVCaz1kIqXSoeCqZQD+UBAX5e5Cjjq5rh6W0ZPGQi4GAxinkZFA5jcER/rAoeIciBgWb/+goyvSt1oZp0vLCxVNCVYaTJefq4dI7pv2qQVeWrn1puUj/LvEeGioGJFK2hOkpBHH00o/K8gimjS1FMyZkCDR9rgTOiUjLLEtUEVfIrrn8lOjilYSU0iSkyB0N65k9BEATSZprN3IvPbmUiBK+8Akbjz2XRxZ2D6HJZLLCf0ZoROxYIdr6iD+TOQBuD3zr3eGxBcY2MgqTayLkHr9mgGuWORSZ5wU3lhsXKk4A1UK2qTJTCjhBZ5GelAUKNQWaaBq34tQtgETTrj8FTQArRwAJvi4uWqheBwpyDpNplC/3RzRlsHtFj0G9fJzTZuiEAQhCW7crtiuJ8Q+0nbfls6IsJY0IQu8V1UZu+alA4i/KrNPN46s6S7icZJIY0QbdNNCn2XmoMPDmCjRneCp5rMhmfiTcQ9RJ17deQDJ38OtSCsp4EvpRMhAAgQPXMjAZE6OA9C5ds9AFT+zsftlPooSCa5ZmrRmh3Rmq5nknpgjNr+oSdaPtWJO6ZvvsqE4ZO+h5yBdyqT6tUMpb4RvIlzPIPp9aEr2vHx5JZzG5jNXfK7TuvYj3z5d47YbxBBL8hBEHaKE4WvGw/rQNVw2R9Kd6ZQ6/dm1DB+g3WctYRf8Zi5cCRN5rJn6iJ6SvaK5UudK1O0+EBQKkbII0hq6f0yYMXr3JGOhMtq+Z68HwCDmmsKEuGd2pTp6Z2CBzwroGxEHUgoABSE6JN5ZcJcT9mV586hcPN6WtLaaTHHi/vUTH4yF4xbfPjqwRGEJnrORSK1ryteA/m1Rj6/I9Yi3o8jyctdyBQaZh0UIYzV76dWnxUjLRS7PWEYQDQ/kZGEeDTngGyYqVbO/uJ6I10LE1H3w8ebvfI+nc2wl+XNRNOJ5pjCHVMjZFZkGYtezs0ZwtOxJh4jpg0Z4Q+WkadlVIC8BGCpiRoCFFelt9zh1wIs2BHonsWCpHkRtlKYosxZqnqGrpHd53ZKNBxSPBRGxLlxNpAEQTA92bJyFIdosOEMGRNAxianciqAEHdXHhk6EkQSYVL/cCoyNwIw/Dp0RmyifpcK5wIAtFynQPdFJKrj5zGpe6hSo8XSWpQFZAmGXs3goIs2RdXFa8yFJ2bC6UQ3l/YinxUN7HeGdwCZlBBqrbyGyLNH2ft0+2TWW0sAQ/LTisW/ZXq+7qWjgNbI0JpqHRVMtRGovvyddiOgReAsESfBJ9Ptzj2/bL3/fe9oNzf/B5o+dtH21/Pvnz9eDlh41XP95urH/aOLMFpKPGFw0gHc/XQOfPIjrySn9DQAdUYMRzaC4YBVOhRODDq2INoL8dTYX40HfQWpR6ITspcTK8ATQ1KTdTjoM/LVeQ5oI1Eqz8djDxY3lZtOAASUyUqR++DMVBPVdzy1F3D/O9xN/6E89LzVEL5FYroiSglY8O2qFtdMFkQqYjYXpcoEkgZ5+G6+URzEW9tmvdBQHtEBGfZUaNnES2cCkhcibicaQyIsGkWtpop8vkK32UHZmsRehvOykHhf1NuNRp3sqgNMlo1c44iImI82gewtZiw2YB9iSt0eJ6KCw1EaIYjosHM+BfHPkcAnI19PCVq62bBbE2lRnzr55KYTCF6ExSAhbxO2IMZCY6JAIDVI45a6FDw9lBD5gTshvmdaCVftQHdn3OQh+hO8l7ghg+5IK1kNbb8eEH5dgztt8PYrASK2Rqy+Q9gzk05go8ggtkdh7J008Jx5onD5S1o3POnDGQfHd4+Ms6McdD3YrEgqiQKlC8abERLs5ZcwVStXKZVqg3XdHtVC13RYWqYxYOeNyRjJ4ItxPJorEls472vtiOFTJD5nfuDCtpzG53cbcDh0+VZJT4chcO51Q+1K537PoVRvj48IOS1UJuo9qVGTJP7lGguzzLBQ8C+W7o0ncfmSkzaolsCved2bE+80ldSUNpzOR4ALcNmatSHlH1cx5SLSKiOw8FSkqN7SFGn8OpN5NcoyOqWMX5YYKhFafY1EyKYlF2+15wI91xtFMO8El2kvd/sNHY44m4hK/kRAc6FUMuHlwSBj1TK6eRvAEAL0znqyYJZYpkl2clrUYKYM/fcOWZllBfdHKB97nLcJI3KBIYXfqclDiogE6rxHuKXALGclW4j80m4D4RflVxux8HUdwFnU5wwpKOG0bTOls+zinVgF6rz60u5LqCe34WiGSK7m/i/N4ROYk6KDRzGZfkoaZmC7KHcHxFia4nkgBREFJpoh/Vix4Ng4nnUG4p6e6Xux92pihPzvZoEotgJwn8LdAe3L/PO/VSt+CeFiQXd1OIp1fu05X7dOU+XblPl8XLuHKf1nGfJob8Ur9pYtwv5mspGODK07cUjHKPI5tLVrU2O0JVdftROGYbup5a9Twljqda/lioyuSOLWpR5d7YhXXEaZ2w5OGEX97Ep2Fv8/WH/Z/vnr/ff80mb7ofu5vb0U3vmcN/P3+z8+q5PbkKX47H58IHW+OLBj7YF2s2c3LJVrIoyaaZVphjTrNSwGOa/K/wpibTzoiNExwuXvRFnh04LcZwQUGbO5DMQUBZx4L/s1gUuQOfLNXJh0Ho4JUnmozHQZjmLafVAN8hxvfKD2487gz4U2BjALPWTRBegcwpDanHQVB9sQTPXxwPnyaNA3MW3LNXrc1ajx4Nf1no/BEb0/xABh8R2QwAcSBOjwteHIxVLPX+xMHYumTFoO7LII6DkfYnBJCMmc+9oo9GLFsQXAELkyCQTCd9Op22wxHDjRLyERKMjCGJVEDUthEbZSyW2gu1VAVQkVDTwqRaAo6RLj1MaUYhMV364HwKVodGCjuig9MmbGzgCY24x214Dh4yZS9fu/ymI+2LApIvJYIQBJntDTs7kQlRDX+g2oG67kAlQxGKrHS2O5ZYLJ2MbFPmOltSMOaSFeY6SkdB7zaEEuA1WBCZASu8Kn1BRhdeQZgq4lE0XchIYxFZ8Stc60/Jlm78KCeiISpy5MbTvsIFgOM9gfkPPNHGcRj0Xa/kQxipfmBPktjbJfNR2szZ2oqD8SULy12VYlUqrkpQkpLHiTO9onEd6y2rL90RZu9o3frSzVRed37T5Ts9o6MU24Dgnq2Ia3xZpzcu7IZLHt8gzXa6szNaTs2QwUzPP7n8prz2pBrs+VNY/yAg6k9tJb8zyPQmo4kCfWuL5JDGD4TPLUaqXxxYjI6CWatJRZzO55T8KOQiJ9VxxsqE+NQ4I4VcbVSJnOaPIHq3tkj2asJu8XlOUW5al97HShG+zWoSh4NYY/A3HA6atY7P8+p+09pKO9awLtJgIB4TjjCNOxKvqJZ6zs1aBZyOUyqAV2YtXhy5xhqo8QK15gFmboDk+rPWh6e3Zla4T/elMYToNpMLFauYZZ9KxaRyJbOvsxEbb239DILRoUaS/h0EI3mngLpcf5aSP040mzFfdDCp3WqyrRaLVhJNyXVFtpy6FVTEhcwCCNECQaoDQMhUtWAIEFy65QAQ3bUuscolul/d7ZJeSGDr0BgWG3CWvbs81Vl2Qh5NvNnEdFnVbxUB/RTk29P0CjJLhaE8fMxVnuZuTEpF+aD9vN6b5uzwosAKuc1hk4q8BUXLSSZTriLHkwxnPuI3DKYGEI+QmnnMYvfS9dxYoIVxtnazz7PthiWEGh4icvAVgM0gPgNygJETH1cVviYTcXM/Dl3I33GGjFOkBIFBQEIO9h3uU9QNfShwAHpEBxkHqLIevI7WgShmYQzlS3NSyIX12A/CEfNg/Se99kQ9hBOMrEtuswkJEuAeGADQIsz2QWrNuYnEGRJIFmguDm6KYkcYDUIxwIJJ6B8YRUnXl6nj4sKHkbq1mCdy2PxwIyMEIwMo6fpBLHEY2+oP1gf6IdvujxIcIlahsOJQGlY66LLXIEskaUqkibT7uBGOcCwS0lB5HRWQ3w9wiOEJsOwK7I1y6ZL3LK3MnivMJGUuqE9ZkCsKbdfpNrofxMoKXLKE3VuBS5asi8uIwViBS+qAS6RjshRbIp2V+lj8jFdoelh+xlPUNrSkMqSkFEqiU0NNBelUUw2sJKsLTYGVZPWjOcFKmnnUW3GoT/Gn18vNwBxjYoa8ClWOMHkcUAMt3ATBHPDD8dX34WHvOBiduDu9Fx+GwfZ6//D5uvsbe/v75svxX9+He29Hb6Jvm+62QJvU+KIB2uTlmmD1ywBOihRaDTEnVIkRdqKl7CpYV8RyEGyHuRUhCBqu+dC1PY48eMSJ2JHPMLw0CPnTkMMV81qSn8LES7+1YHtISuEhUualCyItCwf5R0zZsF1/IBbLkOf4EhNXjebOghJfjo2KRpEDstCAFGr4o8OkGJqthaUkzJplyJSEb7jVjA7ZePBpGR2UTtWIB8f1J5ZrV6XSw0X4SazjtH+PZCV+evsoV6JstnYl5oTKBPL4Cp5xyDfVdwcTSFJk4jXd7Q9oGmWOai+wZSxPAMQIaGHjoJvf+E/HIQeppSSZSKGdO4enshFIttNntgBuhDyKQ9eOZd5rJjmZE3nqgY0qjZ/O9Umh5NEvV8njQ1I5m/H0NHk4m9FdfN+62Z1GPQOmKjpE4ORSTovayI1Pb8sq+JRbOj6wW85WEfXmN+6NeZiOWL4+MduYDbhjDV2I53N9qU9Jx8IQS6njEqXad+ngNVZPhGFPBZFtsvbEeV27umNqrrE6efuRkAnZPUgCF4cTVDFqV0psZ8Y6T7N6TALBEaQTRCph0GlC3p9w7ykEf7th8qnAZbv+oHZbFZydYWjQQt2RI9RJOS8kycT00OzHhuGS2a3rMU1gOmlzquzUe1ePmTptjAEAhHm25YYRYkKu4xrJu2s2R6xIaBct5AqcAoU1r6agEbxv4nxo0iK8KFRoDtFtz7cttGGrNKZ0x6etzIRZcDvwg9FtOw0FkdKooRmZ1HZDF5pIYkFQAkVRkxstkcArmTMSW+Tgq08YkZMjBVwiyivuJLU1qIGWDSDEbJtHGtTOTpYACUxJzLb5GBaq9tCso7oUmtFnrjfR0fhrmhHyb7RfSpqRuzKcJvz0RL0iuKXQ1Z2jss9KKpxQqLvv0gXh4sIHE5dBJRcTI3VyWulSAczq1JnrTCIC5Mw6PGauJ9DFrm97E7DqCNFFtwvstGTgTLk5Ly78myD0kqKiNQqvh0/sAGLNRpMIjvTk8HCsvhviI3LlZyUMxjHQZUK4njkgFkBTSVorEkN1YKToEHDSWwxWWvD/n2SkcGQJDEFevGksDPihMpYXTwRtBwSFqgvh4sKvUSp8qi11J4iHVjIEsGIuXS9dMGJ8lNLJFCdPv0w6j/7Ed0yoBHl9jXg8GdPKORKZs07pUXYE3yq3zoSINQSuFwBteLdWNMHbqJM/iGViTkRSJItGJvcaQlY7efuSqbqsaGIPLRYtEOdjT6QTi3gs84GJ1H0y4xXmgQNzPP0v5oIzfqVkt8Lv4H9tFkZpKQuZEG+2UZBitkqdm9XrrDyGBfmcu5MzPJMkpOv7xA0hLWhq1hGvpUYb15fWHzJF992BFZG+JIw3T9GUk5hwEK6DMjAKvGvuzCGDS8ZGD/DgKH/5Ti45kRVpr7CJ7L648FNTPl4aUyaxDlmp0OYe8lFwDXyIaFnI8d4g4U1BamX8BwuQtEW1u7aRu0RJAlOSJrtmoapGkDW8fVB/WaGOVqijJYPk/Bd0cRnBOSvUUR3UkeKDLgUeKX7pu2l+xNKC8r7FuzI3j6mkguvncRDjFO7MptIK9+g78+3JVEbuRvUoCHZmRni0CPCoie+oBY2iD03oKJ0OWA6QeqSIGC1iSgKS4LeDb389Dw9fh6/Gl/Z37m//9fP7wI3/PH7z/S/n+iY8i3/3bp3nH1+zm9cCNFXjiwagqVdrlB8wC5oqJghsCJqiSoygKW1CQtOFjMoSS2TEfEAC4H0pgISo4ldJASpuXHDblL+J6WWuD4FIwjtGE5xPXC38yxkqfxODiZvep9QnajfKUC/UthLKEmNmiLeftk9+oRFMv8oljK7fgE/bdZugfqGvPjG5uz+5nCgc2wUyTelHk1J8kHEGMoWjUeTLVzSJFDtf9vaiGaHq97eZAaruaBncU0KgJBtZYb0WwmQ32eM6+mvK1J7gxknVTHFIBPgYM1u1o94MwXuGv1iiYm1ukyR5s+R3Cnkf4uoCaWtfg6A/izNbsg4/ldWKTUHvdSw3lpsOMEhCihUr3Al+9D5sn33s7X+fuOPegaw6TmmYEtsZZgWIYyJASuUgaoNJbuCwaPP/6CtvY/LmUkaqIRetTT8CgmyPM7CI5WlwRPIU0Xs35iMyh7tg6IKjW7LipcUVmYrAEGWzMbMhPvNG5iOAYvjIjaGUJPwQarCIfM+NLHYZXHNr80WB6CrTZ8ofX9Zpm4WDoGP5PILKlI5Df+iAueFsDJOAE4CMUNhAgE1gjGCRBwm4tviNHBqMjQeqsHx6CYqxhL9hHEKIRVUY2A1zo2wAnAEomgLYE9KvvI9MXIzEAansOnkL2hZHp2nT5Y9YtQ3ifDEvdH1ic5W7BzaK/hSPdMlOMs3bjlIif4uFoXsNmC9IJTIeey6PkoKkTwYSsYv+zhwhvweVXXEZdNw+fAdXn4ZPxknVHXylhgeYVvGUQsVLtagQBuwnkL+XF5y8VivZgn01hsRN5UUnr+n80GdZD1wKI5Vfiz0KO3GBFJov+U3TEdepjtVnXsS/kgvCYjbviR2TwHh3gh+LqLO00iWDYiE8GiraRQAQzFwZ4mKS0SfAMZQ4yKcROMqDT2rHIqv6V+1bEbsucu9JxUEKf9aPBYOkcnoVvspLyikNyL8uWqKDROCIZW5qGfcU+LOEcnKdHvyaK1g+kVpDv/uRTs9KURVjD33uqG0UTx9R2QepGmZymyR6IhADgMYlxh4wrOUqYiaNhTwD6QRM8AHXiuZDBxmC3EEfzZi+Ev1VapqGtC8LJJ/yo1p0TdM1VdxPmTceMrojiEcfhbK8sH7+efTQyPYzV/+uXLbKNasZfwS6tbvCnifiddDTfSpNfPfgPl55dpeweyvP7pJ1cRkdoCvPbkXPbtbKPpUIws17UA3mQlNBBhPi3VRLiNH9qbWO3JnvHaaCcneRdr2oLfo9GztpZvPR1PJdUk0m36VOvyn3XT6cY0rrfpSuPfjtz8HLd4e/satJ93f3vb3x4vblKy94tj/59rn397eXf51NTg+Pdr2bF9fRkXA/1viigfvx9VoGjZf1QhrheA2dkZkqjT7JMjCgyQKQKVlmkrkRZiL1R+u3871O9kkEYh0yD1BGCFgW2d+Fu3oSERCUeANFxQRGRdEgVGuTu3Lix+6Id1OzIl4R6Km1kxobC13MNEauYjehNbScSQh3XdGgrCWBrrgCgnJx4f92vpdNLau9h35RLqIke76qF8fMYMvwRN3tj77NXv8q3PdKasiZPD6TX4HJFJ9uJMksnY7m8q+urGzUQjJqPFLwxYyMIGE8GWdmwRRajhPSZZl1LpY28W2zzOLOT/a5iLvQrj50oSTR8AtkRkC/omZkVfeioCEnB+PFhW9ZFuLcZRwV/KA8PsMjIfdQrcKiKGzljefr6+sXF/4Cu3prDlEzZ69hgOsU+sxYaGZ66hT53FikeXLrlP9CW75YGnUKelkoKO8VT31X4WCC/sSZHVGyhNbjMHt0The4DTJjfTvmHRmopBGZaaQjsswUX3D9fmD+VXiD5Qtafl0ehoG0yFZ3LPWE3ljeO3inTqFCg5pSLMyDVZMIoudMQin1NcHDcKbLNygwx/PcCILjHKNPTB4NCREueHAlIYCB6wczU/cTYNEkgjxVmQTe+UPtktHdqCsi48SBtrNNdyHrVD7OufAheIc0MaL5lVGFGo2NGrBAZ5piGxYgrYxG0gu5DVDHzGFeONzk2s+dY0qEmfJUwnRzAVduZF3iZcLJnHbP5GlHB8juzja62VB5xVlZxFOw0aC2cxzmpqSd4zA7oe2ch9WXQ/Pz8Vk752P5UtQKMFLaJUmIu0iBsl96dDLSMdNJ7tYdKxHkXxdxj1VttsGNRXfyEO6xJOfp+n1CD8x+dHl1iYYAM9PfYFw/igFuFfQRwgF31iTzYhwyP3IJCZemek3u0mlFv3M+lsT/DgCFfIlR73PuINt7NAT+TYTbIRId9LFiQWegb+caSnQdUdoaeVidH2ahyGkxewGG78PhlrNBkO0BufgpnB86DpMAzkcngKyNlj1k/kDB08zZqZgxAWVsLo28fWrwaRkZZ81iIcluptBiVuG6RWKkQpbyDcl3Vn7JlV9yuZx2/wVdXEb33covWdUvWTCnG31mBRP73XSbrTFaVG/HvSu/MBtLK16i70zKmKmMjII2J59iC96VtpwrtfyMmXab3I0l7qZyr+Ni+Zy0nsiclw9J5F8M30d/78d/r796+479vb3/dvz6xcn3t9t/2n+evd877o3dzfHNbyfrrwNJIl/9iwYOyTdrKudT1h/5UWWDas8dqVZo9Eaa6i5xRmbIqzRJBzK/Q7IA5sENA6Y19dSl2awsLxi4fkfkCQsFfc2Ijy55GA3dccdy/Ws3hpAJO+SOG1twPYw6lseBlYpSoTtudAkVYKaBDqQw4BB42/c4j0WMbchZNAlvpySOxzD97MippPPZ4Vpo6vkgHDw63nldm7WmlXK2+Y9hYpJvRDWfWJuZx0MMAapINS/7UYNn3pCbJhP4m81DUzUAVzZGH/5LAXu6PZsxCdSsRyE8hlrg3CgNVBBYdDneIoEjWCrsK+FgybwvmigJpZMgrUIAICo0T1HEJBSPOLu6UhOJYkl5Ulaw48ZdJaP1iEI1DO+TDOsIukwr+RPqEplS6Jm5iJiFAw6qTEqKLPojwV1LRQ8dhIO63NCSFbe4O7GwmZiY8UtcPyWsvTI7fG5Zal2OaoEZ92PdRtHaLmnVJ6KDwxMZw4szg4SfY0iHrwQu1mmA2CQVxkVup5mrwp1ZoSLawTNXQ7u6Qj367V+3OtrxFaojbUhIiFlrIdGjCVRURRJo47BcDvdmrUaIM40fOCvnZq6oNF/9fwkHtSrPcuOAaarlEQ5hx/UJofUiKlfPezxTcykdZpVhxlp2pZRqqSIjp3RSUUqiCXgOcREVn80sIY39EzucALwoI8WrM1dl7OGevCPN1hdaUiCsroOrNJBfSdKiqI2WeAt2eRSMeOBzi3sR/9e/oqSjrG7eD/UkMC9LPAFmHERRuHEIqfAZB1AeLmVrPTlU5Ck9Y0dkXWXLvVDXjP2iw0nWeZ7leVCz1wv1VRxm6hGK+J5ZDxzjeB7SQTPjEMrijUMoip9x1JTj0oW4ien9oPM7SazYsFtpvdM6mKtX7a/BrYvLqcspJDhx7NIi20+eZm/1wvScuYjKhSlkflX8xLcIFMD52lv+QagSoFSCcIBNuLh4soUPRA8tOCCj2LURnnpx4d9pTTDQ2AeywahvRke/Pw9opv5phEcyFEpjJSZQ++74w61H78oRLXk5LXhasembW9Vem9rQPvu5Q68WZ7p6k5vAswzl3untZTpRv9A7ig6Ic9dJ99Srly9ebmy8eb0u/5PCBdMvsttQ5IyTD9OX2QgImujFzRcIDlttzYpbM52ahd+cxSXTcpObQSxbm4zHISrV3fjA8/C87XkQAuU+5+Ayig5FQ4UImx0oW+80OcxYqRf7ICGLeZ2DhL4oPUhWx0X1nZFOwMILqOU/LpS1vfCzMdtxMYdz4K4MTt4kE9DHQgowgECMJ3F1AIRAOWD2uQTnkE/wI8DkSIiUYQQTJmJEcAuLeSTQFAm/nALg1l7050oKpZoCBATDDFb5Oq3wLBzHDkajJHiZxmMXH60w3Y8J9Lzk3Vthupesi8sIfV5aTDdO2TjkolugtltrqBp0LPwNnogf6fk/mU299T/P3mzv7bz4T251bP3P6zd7ewcH/1Hrlw8NtYIWp6sVnudrfbP7bH9vu1jr7qs3m/vbuVrpoaFW0Md0tcLzQq0bO69fvNHU+mz/9eu9fK340FAr3G11tcLzfK0Hr17uPX9VrPXg1evdl7u5WunhfLJDFSCjpamdCjDSLLJdiwScSk6WRQc+jjxPRV+RuZt5/9GjyNPUAli6Xaz0LFDpWlEJao9MQQlmRb48JmFpoOfacIZsjAC88eIFDzefH++Mjtjh5vs/vsVu+PPHu+HR8cl7J/hz/fP+9btvf/zoHscDW0Qz1PjiSefJ+fHe9tl+GsgAbCfW6f6ZwFT+iszA1uff9k/2LdexfrX+ZQ+5fRVNRhjz8C+sEsxdT77+/0GMKO7suQYA \ No newline at end of file diff --git a/docus/dist/__nuxt_content/landing/sql_dump.txt b/docus/dist/__nuxt_content/landing/sql_dump.txt new file mode 100644 index 0000000..7342896 --- /dev/null +++ b/docus/dist/__nuxt_content/landing/sql_dump.txt @@ -0,0 +1 @@ +H4sIAAAAAAAACr1YbVPbSBL+K136wl6VBLuXDZfjaj8YbBYHxxC/BBJEUe1RW5rzaEY7M7Ixqfz3q5ZkG5OXw9zefkgFS5qZnqe7n366b4KTQac16sCoddzrQPcU+hcj6Fx3h6Mh3AmjPWl/J/XUwE8ygVHnegSXg+671uAjnHc+hhAHljBZxgEcX1z0Oq0+P3LelsKXlj6QddLoOIAPrcHJWWvAb+ffenh3l6HL7u7ioD5k3O++H3f+9i+IIlhvF4RBtz/sDEbQ7Y8untj3odUbd4bw057ISMxcmd8p1InU6V4IU1SOQtjzn5YX5xN/fPXLx8N/pxfpUr2yeZRm5dvxWzfpnZx10+PLh+51ezrbC2Fv/mr/9f7PUfRpaHtvzLte2psdXvbzs8NPr39dLNu9s2lL9VT7df/98vpcpq/Kf3R52dvzC3E6uHr96eTyn73zq4t0cP5+ev9pLlU0zs9Gv/b6H/rY7xz2H7p79Q1z8hiEQXtwcbnxxFMvNNf5CpLneLBZ+10neukVbXtkYiq38tf8MyEnrCz8V56je0/6a4fylR4t1ziXKTarKwvandPWuDcCb0viLwr02fYWjszTj/c+f9mrI4zyPzGAVvCsY6h5cCB1Qvf7ecJu5X+f48AvC4qDozjIpZY52lkchHEwR1Xy45ubOCijAlOKMrImDsLPX8KbOPCUFwo98YM4mEdOGX/UoH4UB3HwJYyDU2NTglOLOS2MnUHbiDIn7Rvcbr+70ZZzmu1u4qCoj19tLB0gFJx9jm8NLZsjvILp+jyfoQdh8onU5GD4/hQwSYx2ISAMSufjWMcBbyxMQqu90eYYWcfmxQGsoyGEYWktoWofb84UFILL0FICiclRahAWPfEBOoljPbFm4chGExQzSqBQuCQLUnuyUxTk9hsQ1hcbOwKfkSNIjHDgDZQ6Ies86oRfgC21lzkBWpFJT1UUhBsroXXZBVdWu4dxrB3ZOVlIMSc+HHKTlKqxD4SSDFuFSWVUaivPQIHek9WVed93kpJ65h67p4wmpffsMv5KGGVs9bqwHFfLKq6cfKgj5F5Vv72pfh2k5L3UaeQ8Wk9J/c6iVPxQiiYOZKRKIROK0FqziKxMM1+H2pDXQUaWGki/Z4ym0ltUPzIm875wRwcHqfRZOdkXJj/oam3m6OWc2jQfGlUyTu5gynFYLV2b6GReKKpMdlG9Q5NQVqL21Tem9Epqqi3/IGkBzpRWsOm3jfFVxjkSdQrsknRXHPR1gpwYrk0/SrQpIUfQEzdWhzev6s+/9sDE3POy59vVrhOkTjhX4MozCp3rY16RDW9176N1wNzywnd1zP4wFr9FGHHQEt7YECaoZyGctNohpGgxpRCUETOyIRibopYPVdiHUGRGc0Z7w0nl0c1WiWwWmpKIX2BKwOQyVWbh6uQHBPZ2w0KcclJQlWGbvMxNQmqdT8+DuE7eXTBmUnsBwp1NydsZ41FG0LDM5rYzosIx8+aMQoHWcTXymdQhWFN6ciu+tPRHSc475h/TEJYUK4ZqiNZBUlqcKALn0TNDWlOm2YaRdwQ2QY8TdBQ9YLFTCDdW7I7w5aZivADjARXGSW/sEpgTvWMcltCEY4SpNs5LAYtMKuJYFJY8ASZYeLKMLdeOONYbD2WoE8ZTZJRjhfUKFMixKKROd8Q0N5otjFyO1leJtAuyx3WhfAGy4+5LmOHkUelzkBnnYUGTiO+fPKrPILWTCdXKIpGOa6ir0HJLLTJrNFeQWG+HpcacXIGCEmgEAEysTFICmpP2bkdk61qnaOo3Be+5uI4salcY+xJW6LFYeQG2PeTaU+BSGUwc5Ga+gUZkpWYl1KR9BaUlVxjNwmdtbBXIjGuOSpFdMQnHvVQKStZH0pJYXeuxfhOo1GNCYxXHWnxX2BeWtMh2ogeakzIFK9wXwH3VFJUXcnClFwUX/EbkwcSUOkErmUyVEahgjkomtcSrm8qaZRcsm0DTIo51Q8vKpFLAhJTRqQMU1jhXSeaQZXSzjCYw7kKlaWtw/3fxstUhQMsS/p/ki2UB4H8sQZ9r9o6O/r0+B4arc3b296ajYn/PJS3CJw1BEwKWpmTrNqWi+EcBallTvUiQRMKkW8A1jx81zs93+LCWDn+tZlmvfYLaSrCsGqgKNG4bS8eyj+6Rtf2uqNUJEr36Fmb5Stv+BYi9XEf/3rSPUcMONRxpKRNyMDV2uyHOjK91WtNlNqBWgvlPEBWPQKwb2Kiu4rtg2JT/3TFsNUftDOHxlhAIV733+BpIe7uEwkjtGz6u7hO5goScSlGLBlZ13qLwK6a9rXAQcXD0eT3uqk7jvpY4rttU8ATq6O8hT7s2f6/69pvbL19Wc6B6IlQNo/Z4gMX/H6wGROvN/8s8J3wyVTt6yuccKjzEqPd5Oq4J6/LF1LidllvRtTXqcOGPRxvjLsNV3aqafPEfD68PtR2/+UUbOr/MBvnicNjKxtc66x4+3E8uMCqjN5cPXTz7WTTTzB1WBGEwvmzz+HJ7mDvsjKAaLMNv1YAQrs46gw7IBH6Drwe8mxnq7X8A6Goc29EWAAA= \ No newline at end of file diff --git a/docus/dist/_nuxt/-nV3O3Hd.js b/docus/dist/_nuxt/-nV3O3Hd.js new file mode 100644 index 0000000..767ee53 --- /dev/null +++ b/docus/dist/_nuxt/-nV3O3Hd.js @@ -0,0 +1 @@ +const o={or:"या",error:{title:"पृष्ठ नहीं मिला",description:"हमें खुशी है, लेकिन आप जो पृष्ठ खोज रहे हैं वह मौजूद नहीं है।"}},a={copy:{page:"पृष्ठ कॉपी करें",link:"Markdown पृष्ठ कॉपी करें",view:"Markdown के रूप में देखें",gpt:"ChatGPT में खोलें",claude:"Claude में खोलें"},links:"समुदाय",toc:"इस पृष्ठ पर",menu:"मेनू",report:"समस्या की रिपोर्ट करें",edit:"इस पृष्ठ को संपादित करें"},e={copyLogo:"लोगो कॉपी करें",copyWordmark:"वर्डमार्क कॉपी करें",downloadLogo:"लोगो डाउनलोड करें",downloadWordmark:"वर्डमार्क डाउनलोड करें",brandAssets:"ब्रांड एसेट्स",logoCopied:"लोगो कॉपी हो गया",wordmarkCopied:"वर्डमार्क कॉपी हो गया",logoDownloaded:"लोगो डाउनलोड हो गया",wordmarkDownloaded:"वर्डमार्क डाउनलोड हो गया",copyLogoFailed:"लोगो कॉपी नहीं हो सका",copyWordmarkFailed:"वर्डमार्क कॉपी नहीं हो सका"},n={title:"AI से पूछें",placeholder:"सवाल पूछें...",tooltip:"AI से सवाल पूछें",tryAsking:"सवाल पूछने की कोशिश करें",askAnything:"कुछ भी पूछें...",clearChat:"चैट हटाएँ",close:"बंद करें",expand:"विस्तार करें",collapse:"छोटा करें",thinking:"सोच रहे हैं...",askMeAnything:"कुछ भी पूछें",askMeAnythingDescription:"डॉक्यूमेंट नेविगेट करने, अवधारणाओं को समझने और जवाब खोजने में मदद पाएँ।",faq:"अक्सर पूछे जाने वाले सवाल",chatCleared:"रीफ़्रेश करने पर चैट साफ़ हो जाती है",lineBreak:"लाइन ब्रेक",explainWithAi:"AI से समझाएँ",toolListPages:"लिस्ट किए गए डॉक्यूमेंट पेज",toolReadPage:"पढ़ें",loading:{searching:"डॉक्यूमेंट खोजना",reading:"दस्तावेज़ों के माध्यम से पढ़ना",analyzing:"कंटेंट का विश्लेषण करना",finding:"सबसे अच्छा जवाब ढूँढना",finished:"इस्तेमाल किए गए स्रोत"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/2h0Q0JkN.js b/docus/dist/_nuxt/2h0Q0JkN.js new file mode 100644 index 0000000..cf08205 --- /dev/null +++ b/docus/dist/_nuxt/2h0Q0JkN.js @@ -0,0 +1 @@ +import{a0 as g,a1 as f,aQ as b,e as r,ac as t,s as e,af as v,B as y,ab as x,q as d,c as u,am as p,o as h}from"./B3fabVUf.js";const k={slots:{base:["relative text-xl text-highlighted font-bold mt-8 mb-3 scroll-mt-[calc(32px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(32px+var(--ui-header-height))] [&>a]:focus-visible:outline-primary [&>a>code]:border-dashed hover:[&>a>code]:border-primary hover:[&>a>code]:text-primary [&>a>code]:text-lg/6 [&>a>code]:font-bold","[&>a>code]:transition-colors"],leading:["absolute -ms-8 top-0.5 opacity-0 group-hover:opacity-100 group-focus:opacity-100 p-1 bg-elevated hover:text-primary rounded-md hidden lg:flex text-muted","transition"],leadingIcon:"size-4 shrink-0",link:"group lg:ps-2 lg:-ms-2"}},C=["id"],q=["href"],_={__name:"ProseH3",props:{id:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const l=a,i=g(),s=f("prose.h3",l),{headings:n}=b().public?.mdc||{},o=u(()=>p({extend:p(k),...i.ui?.prose?.h3||{}})()),m=u(()=>l.id&&typeof n?.anchorLinks=="object"&&n.anchorLinks.h3);return(c,B)=>(h(),r("h3",{id:a.id,class:t(o.value.base({class:[e(s)?.base,l.class]}))},[a.id&&m.value?(h(),r("a",{key:0,href:`#${a.id}`,class:t(o.value.link({class:e(s)?.link}))},[v("span",{class:t(o.value.leading({class:e(s)?.leading}))},[y(x,{name:e(i).ui.icons.hash,class:t(o.value.leadingIcon({class:e(s)?.leadingIcon}))},null,8,["name","class"])],2),d(c.$slots,"default")],10,q)):d(c.$slots,"default",{key:1})],10,C))}};export{_ as default}; diff --git a/docus/dist/_nuxt/4YIHfatS.js b/docus/dist/_nuxt/4YIHfatS.js new file mode 100644 index 0000000..b728358 --- /dev/null +++ b/docus/dist/_nuxt/4YIHfatS.js @@ -0,0 +1 @@ +import{a0 as n,a1 as i,e as p,q as c,ac as u,s as d,c as m,am as t,o as f}from"./B3fabVUf.js";const _={base:"py-3 px-4 text-sm align-top border-e border-b first:border-s border-muted [&_code]:text-xs/5 [&_p]:my-0 [&_p]:leading-6 [&_ul]:my-0 [&_ol]:my-0 [&_ul]:ps-4.5 [&_ol]:ps-4.5 [&_li]:leading-6 [&_li]:my-0.5",variants:{align:{left:"text-left",center:"text-center",right:"text-right"}},defaultVariants:{align:"left"}},b={__name:"ProseTd",props:{align:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(s){const e=s,a=n(),r=i("prose.td",e),l=m(()=>t({extend:t(_),...a.ui?.prose?.td||{}}));return(o,g)=>(f(),p("td",{class:u(l.value({align:e.align,class:[d(r)?.base,e.class]}))},[c(o.$slots,"default")],2))}};export{b as default}; diff --git a/docus/dist/_nuxt/AFG10c_a.js b/docus/dist/_nuxt/AFG10c_a.js new file mode 100644 index 0000000..5e10698 --- /dev/null +++ b/docus/dist/_nuxt/AFG10c_a.js @@ -0,0 +1 @@ +import{c as q,s as e,Z as G,Q as le,$ as be,a0 as H,aF as Ve,a2 as ye,aG as We,a4 as ie,o as s,e as w,B as v,p as b,q as I,a as k,ab as X,ac as f,ad as Ne,m as B,f as x,af as O,ah as M,ag as K,F as R,r as Y,ai as He,aH as V,W as Ee,D as ze,aj as Se,a7 as ke,a8 as Ae,aa as Oe,aw as fe,ax as pe,an as de,ao as he,a9 as Pe,v as J,aI as Ge,_ as Xe,a1 as Q,a3 as Be,aJ as Ye,aK as Je,aL as Qe,al as $e,am as F,P as ne,aM as Ze,aN as _e,d as se,aO as xe,aP as et,aQ as tt,aR as at,aS as oe,ak as re,aT as Ie,aU as De,w as Ue,aV as it,aW as lt,aX as nt,aY as st,X as ot,aZ as rt,a_ as ct,a$ as ut,b0 as Ke,b1 as me,b2 as dt,az as qe,b3 as gt,b4 as ft,b5 as pt,b6 as Te,b7 as Ce,b8 as ht,b9 as mt,ba as vt,bb as bt}from"./B3fabVUf.js";import{_ as yt}from"./DJxuwfoz.js";import{u as kt,_ as xt}from"./n8vERajx.js";import{_ as It}from"./Dq00p3Sb.js";import"./BN_7HF1G.js";function wt(t){const g=q(()=>e(t)),a=q(()=>new Intl.Collator("en",{usage:"search",...g.value}));return{startsWith:(l,i)=>i.length===0?!0:(l=l.normalize("NFC"),i=i.normalize("NFC"),a.value.compare(l.slice(0,i.length),i)===0),endsWith:(l,i)=>i.length===0?!0:(l=l.normalize("NFC"),i=i.normalize("NFC"),a.value.compare(l.slice(-i.length),i)===0),contains:(l,i)=>{if(i.length===0)return!0;l=l.normalize("NFC"),i=i.normalize("NFC");let p=0;const m=i.length;for(;p+m<=l.length;p++){const r=l.slice(p,p+m);if(a.value.compare(i,r)===0)return!0}return!1}}}function Lt(){const{contains:t,startsWith:g}=wt({sensitivity:"base"});function a(l,i){return t(l,i)?t(i,l)?0:g(l,i)?1:2:null}function h(l,i,p){if(typeof l!="object"||l===null)return a(String(l),i);let m=null;for(const r of p){const d=G(l,r);if(d==null)continue;const y=Array.isArray(d)?d.map(String):[String(d)];for(const S of y){const A=a(S,i);if(A!==null&&(m===null||Ar.score-d.score),m.map(({item:r})=>r)}function u(l,i,p){return i?l.map(m=>{const r=[];for(const d of m){if(d==null)continue;if(p.isStructural?.(d)){r.push({item:d,score:-1});continue}const y=h(d,i,p.fields);y!==null&&r.push({item:d,score:y})}return r.sort((d,y)=>d.score-y.score),r.map(({item:d})=>d)}).filter(m=>m.some(r=>!p.isStructural?.(r))):l}return{score:a,scoreItem:h,filter:o,filterGroups:u}}const Fe={__name:"UDropdownMenuContent",props:{items:{type:null,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0},sub:{type:Boolean,required:!1},labelKey:{type:null,required:!0},descriptionKey:{type:null,required:!0},checkedIcon:{type:null,required:!1},loadingIcon:{type:null,required:!1},externalIcon:{type:[Boolean,String],required:!1,skipCheck:!0},size:{type:null,required:!1},filter:{type:[Boolean,Object],required:!1},filterFields:{type:Array,required:!1},ignoreFilter:{type:Boolean,required:!1},searchTerm:{type:String,required:!1},class:{type:null,required:!1},ui:{type:null,required:!0},uiOverride:{type:null,required:!1},loop:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1}},emits:["update:searchTerm","escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","closeAutoFocus"],setup(t,{emit:g}){const a=t,h=g,o=le(),{t:u,dir:l}=be(),i=H(),{filterGroups:p}=Lt(),m=J(""),r=q({get:()=>a.searchTerm??m.value,set:$=>{m.value=$,h("update:searchTerm",$)}}),d=de(()=>he(a.filter,{placeholder:u("dropdownMenu.search"),variant:"none"})),y=Ve(de(()=>a.portal)),S=ye(We(a,"sub","items","portal","labelKey","descriptionKey","checkedIcon","loadingIcon","externalIcon","size","filter","filterFields","ignoreFilter","searchTerm","class","ui","uiOverride"),h),A=()=>Pe(o,["default"]),[j,D]=ie(),U=q(()=>l.value==="rtl"?i.ui.icons.chevronLeft:i.ui.icons.chevronRight),L=q(()=>a.items?.length?Ge(a.items)?a.items:[a.items]:[]),_=$=>!!$.type&&["label","separator"].includes($.type),Z=q(()=>{if(!a.filter||a.ignoreFilter||!r.value)return L.value;const $=Array.isArray(a.filterFields)&&a.filterFields.length?a.filterFields:[a.labelKey];return p(L.value,r.value,{fields:$,isStructural:_})}),E=q(()=>Z.value.some($=>$.some(W=>!_(W))));return($,W)=>(s(),w(R,null,[v(e(j),null,{default:b(({item:c,active:P,index:n})=>[I($.$slots,c.slot||"item",{item:c,index:n,ui:t.ui},()=>[I($.$slots,c.slot?`${c.slot}-leading`:"item-leading",{item:c,active:P,index:n,ui:t.ui},()=>[c.loading?(s(),k(X,{key:0,name:t.loadingIcon||e(i).ui.icons.loading,"data-slot":"itemLeadingIcon",class:f(t.ui.itemLeadingIcon({class:[t.uiOverride?.itemLeadingIcon,c.ui?.itemLeadingIcon],color:c?.color,loading:!0}))},null,8,["name","class"])):c.icon?(s(),k(X,{key:1,name:c.icon,"data-slot":"itemLeadingIcon",class:f(t.ui.itemLeadingIcon({class:[t.uiOverride?.itemLeadingIcon,c.ui?.itemLeadingIcon],color:c?.color,active:P}))},null,8,["name","class"])):c.avatar?(s(),k(Ne,B({key:2,size:c.ui?.itemLeadingAvatarSize||t.uiOverride?.itemLeadingAvatarSize||t.ui.itemLeadingAvatarSize()},c.avatar,{"data-slot":"itemLeadingAvatar",class:t.ui.itemLeadingAvatar({class:[t.uiOverride?.itemLeadingAvatar,c.ui?.itemLeadingAvatar],active:P})}),null,16,["size","class"])):x("",!0)]),e(G)(c,a.labelKey)||o[c.slot?`${c.slot}-label`:"item-label"]||e(G)(c,a.descriptionKey)||o[c.slot?`${c.slot}-description`:"item-description"]?(s(),w("span",{key:0,"data-slot":"itemWrapper",class:f(t.ui.itemWrapper({class:[t.uiOverride?.itemWrapper,c.ui?.itemWrapper]}))},[O("span",{"data-slot":"itemLabel",class:f(t.ui.itemLabel({class:[t.uiOverride?.itemLabel,c.ui?.itemLabel],active:P}))},[I($.$slots,c.slot?`${c.slot}-label`:"item-label",{item:c,active:P,index:n},()=>[M(K(e(G)(c,a.labelKey)),1)]),c.target==="_blank"&&t.externalIcon!==!1?(s(),k(X,{key:0,name:typeof t.externalIcon=="string"?t.externalIcon:e(i).ui.icons.external,"data-slot":"itemLabelExternalIcon",class:f(t.ui.itemLabelExternalIcon({class:[t.uiOverride?.itemLabelExternalIcon,c.ui?.itemLabelExternalIcon],color:c?.color,active:P}))},null,8,["name","class"])):x("",!0)],2),e(G)(c,a.descriptionKey)||o[c.slot?`${c.slot}-description`:"item-description"]?(s(),w("span",{key:0,"data-slot":"itemDescription",class:f(t.ui.itemDescription({class:[t.uiOverride?.itemDescription,c.ui?.itemDescription]}))},[I($.$slots,c.slot?`${c.slot}-description`:"item-description",{item:c,active:P,index:n},()=>[M(K(e(G)(c,a.descriptionKey)),1)])],2)):x("",!0)],2)):x("",!0),O("span",{"data-slot":"itemTrailing",class:f(t.ui.itemTrailing({class:[t.uiOverride?.itemTrailing,c.ui?.itemTrailing]}))},[I($.$slots,c.slot?`${c.slot}-trailing`:"item-trailing",{item:c,active:P,index:n,ui:t.ui},()=>[c.children?.length?(s(),k(X,{key:0,name:U.value,"data-slot":"itemTrailingIcon",class:f(t.ui.itemTrailingIcon({class:[t.uiOverride?.itemTrailingIcon,c.ui?.itemTrailingIcon],color:c?.color,active:P}))},null,8,["name","class"])):c.kbds?.length?(s(),w("span",{key:1,"data-slot":"itemTrailingKbds",class:f(t.ui.itemTrailingKbds({class:[t.uiOverride?.itemTrailingKbds,c.ui?.itemTrailingKbds]}))},[(s(!0),w(R,null,Y(c.kbds,(T,C)=>(s(),k(He,B({key:C,size:c.ui?.itemTrailingKbdsSize||t.uiOverride?.itemTrailingKbdsSize||t.ui.itemTrailingKbdsSize()},{ref_for:!0},typeof T=="string"?{value:T}:T),null,16,["size"]))),128))],2)):x("",!0)]),v(e(V).ItemIndicator,{"as-child":""},{default:b(()=>[v(X,{name:t.checkedIcon||e(i).ui.icons.check,"data-slot":"itemTrailingIcon",class:f(t.ui.itemTrailingIcon({class:[t.uiOverride?.itemTrailingIcon,c.ui?.itemTrailingIcon],color:c?.color}))},null,8,["name","class"])]),_:2},1024)],2)])]),_:3}),v(e(V).Portal,fe(pe(e(y))),{default:b(()=>[(s(),k(Ee(t.sub?e(V).SubContent:e(V).Content),B({"data-slot":"content",class:t.ui.content({class:[t.uiOverride?.content,a.class]})},e(S)),{default:b(()=>[t.filter?(s(),k(e(V).Filter,{key:0,modelValue:r.value,"onUpdate:modelValue":W[1]||(W[1]=c=>r.value=c),"as-child":""},{default:b(()=>[v(yt,B({autofocus:"",autocomplete:"off",size:t.size},d.value,{"data-slot":"input",class:t.ui.input({class:t.uiOverride?.input}),onChange:W[0]||(W[0]=ze(()=>{},["stop"]))}),null,16,["size","class"])]),_:1},8,["modelValue"])):x("",!0),I($.$slots,"content-top",{sub:t.sub??!1}),!r.value||E.value?(s(),w("div",{key:1,role:"presentation","data-slot":"viewport",class:f(t.ui.viewport({class:t.uiOverride?.viewport}))},[(s(!0),w(R,null,Y(Z.value,(c,P)=>(s(),k(e(V).Group,{key:`group-${P}`,"data-slot":"group",class:f(t.ui.group({class:t.uiOverride?.group}))},{default:b(()=>[(s(!0),w(R,null,Y(c,(n,T)=>(s(),w(R,{key:`group-${P}-${T}`},[n.type==="label"?(s(),k(e(V).Label,{key:0,"data-slot":"label",class:f(t.ui.label({class:[t.uiOverride?.label,n.ui?.label,n.class]}))},{default:b(()=>[v(e(D),{item:n,index:T},null,8,["item","index"])]),_:2},1032,["class"])):n.type==="separator"?(s(),k(e(V).Separator,{key:1,"data-slot":"separator",class:f(t.ui.separator({class:[t.uiOverride?.separator,n.ui?.separator,n.class]}))},null,8,["class"])):n?.children?.length?(s(),k(e(V).Sub,{key:2,open:n.open,"default-open":n.defaultOpen},{default:b(()=>[v(e(V).SubTrigger,{as:"button",type:"button",disabled:n.disabled,"text-value":e(G)(n,a.labelKey),"data-slot":"item",class:f(t.ui.item({class:[t.uiOverride?.item,n.ui?.item,n.class],color:n?.color}))},{default:b(()=>[v(e(D),{item:n,index:T},null,8,["item","index"])]),_:2},1032,["disabled","text-value","class"]),v(Fe,B({sub:"",class:n.ui?.content,ui:t.ui,"ui-override":t.uiOverride,portal:t.portal,items:n.children,align:"start","align-offset":-4,"side-offset":3,"label-key":t.labelKey,"description-key":t.descriptionKey,"checked-icon":t.checkedIcon,"loading-icon":t.loadingIcon,"external-icon":t.externalIcon,size:t.size,filter:n.filter,"filter-fields":n.filterFields||t.filterFields,"ignore-filter":n.ignoreFilter??t.ignoreFilter},{ref_for:!0},n.content),Se({_:2},[Y(A(),(C,N)=>({name:N,fn:b(z=>[I($.$slots,N,B({ref_for:!0},z))])}))]),1040,["class","ui","ui-override","portal","items","label-key","description-key","checked-icon","loading-icon","external-icon","size","filter","filter-fields","ignore-filter"])]),_:2},1032,["open","default-open"])):n.type==="checkbox"?(s(),k(e(V).CheckboxItem,{key:3,"model-value":n.checked,disabled:n.disabled,"text-value":e(G)(n,a.labelKey),"data-slot":"item",class:f(t.ui.item({class:[t.uiOverride?.item,n.ui?.item,n.class],color:n?.color})),"onUpdate:modelValue":n.onUpdateChecked,onSelect:n.onSelect},{default:b(()=>[v(e(D),{item:n,index:T},null,8,["item","index"])]),_:2},1032,["model-value","disabled","text-value","class","onUpdate:modelValue","onSelect"])):(s(),k(ke,B({key:4,ref_for:!0},e(Ae)(n),{custom:""}),{default:b(({active:C,...N})=>[v(e(V).Item,{"as-child":"",disabled:n.disabled,"text-value":e(G)(n,a.labelKey),onSelect:n.onSelect},{default:b(()=>[v(Oe,B({ref_for:!0},N,{"data-slot":"item",class:t.ui.item({class:[t.uiOverride?.item,n.ui?.item,n.class],color:n?.color,active:C})}),{default:b(()=>[v(e(D),{item:n,active:C,index:T},null,8,["item","active","index"])]),_:2},1040,["class"])]),_:2},1032,["disabled","text-value","onSelect"])]),_:2},1040))],64))),128))]),_:2},1032,["class"]))),128))],2)):x("",!0),r.value&&!E.value?(s(),w("div",{key:2,"data-slot":"empty",class:f(t.ui.empty({class:t.uiOverride?.empty}))},[I($.$slots,"empty",{searchTerm:r.value},()=>[M(K(e(u)("dropdownMenu.noMatch",{searchTerm:r.value})),1)])],2)):x("",!0),I($.$slots,"default"),I($.$slots,"content-bottom",{sub:t.sub??!1})]),_:3},16,["class"]))]),_:3},16)],64))}},$t={slots:{content:"min-w-32 bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-dropdown-menu-content-transform-origin) flex flex-col",input:"border-b border-default",empty:"text-center text-muted",viewport:"relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",arrow:"fill-bg stroke-default",group:"p-1 isolate",label:"w-full flex items-center font-semibold text-highlighted",separator:"-mx-1 my-1 h-px bg-border",item:"group relative w-full flex items-start select-none outline-none before:absolute before:z-[-1] before:inset-px before:rounded-md data-disabled:cursor-not-allowed data-disabled:opacity-75",itemLeadingIcon:"shrink-0",itemLeadingAvatar:"shrink-0",itemLeadingAvatarSize:"",itemTrailing:"ms-auto inline-flex gap-1.5 items-center",itemTrailingIcon:"shrink-0",itemTrailingKbds:"hidden lg:inline-flex items-center shrink-0",itemTrailingKbdsSize:"",itemWrapper:"flex-1 flex flex-col text-start min-w-0",itemLabel:"truncate",itemDescription:"truncate text-muted",itemLabelExternalIcon:"inline-block size-3 align-top text-dimmed"},variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},active:{true:{item:"text-highlighted before:bg-elevated",itemLeadingIcon:"text-default"},false:{item:["text-default data-highlighted:text-highlighted data-[state=open]:text-highlighted data-highlighted:before:bg-elevated/50 data-[state=open]:before:bg-elevated/50","transition-colors before:transition-colors"],itemLeadingIcon:["text-dimmed group-data-highlighted:text-default group-data-[state=open]:text-default","transition-colors"]}},loading:{true:{itemLeadingIcon:"animate-spin"}},size:{xs:{label:"p-1 text-xs gap-1",item:"p-1 text-xs gap-1",empty:"p-2 text-xs",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemTrailingIcon:"size-4",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"sm"},sm:{label:"p-1.5 text-xs gap-1.5",item:"p-1.5 text-xs gap-1.5",empty:"p-2.5 text-xs",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemTrailingIcon:"size-4",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"sm"},md:{label:"p-1.5 text-sm gap-1.5",item:"p-1.5 text-sm gap-1.5",empty:"p-2.5 text-sm",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemTrailingIcon:"size-5",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"md"},lg:{label:"p-2 text-sm gap-2",item:"p-2 text-sm gap-2",empty:"p-3 text-sm",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemTrailingIcon:"size-5",itemTrailingKbds:"gap-1",itemTrailingKbdsSize:"md"},xl:{label:"p-2 text-base gap-2",item:"p-2 text-base gap-2",empty:"p-3 text-base",itemLeadingIcon:"size-6",itemLeadingAvatarSize:"xs",itemTrailingIcon:"size-6",itemTrailingKbds:"gap-1",itemTrailingKbdsSize:"lg"}}},compoundVariants:[{color:"primary",active:!1,class:{item:"text-primary data-highlighted:text-primary data-highlighted:before:bg-primary/10 data-[state=open]:before:bg-primary/10",itemLeadingIcon:"text-primary/75 group-data-highlighted:text-primary group-data-[state=open]:text-primary"}},{color:"secondary",active:!1,class:{item:"text-secondary data-highlighted:text-secondary data-highlighted:before:bg-secondary/10 data-[state=open]:before:bg-secondary/10",itemLeadingIcon:"text-secondary/75 group-data-highlighted:text-secondary group-data-[state=open]:text-secondary"}},{color:"success",active:!1,class:{item:"text-success data-highlighted:text-success data-highlighted:before:bg-success/10 data-[state=open]:before:bg-success/10",itemLeadingIcon:"text-success/75 group-data-highlighted:text-success group-data-[state=open]:text-success"}},{color:"info",active:!1,class:{item:"text-info data-highlighted:text-info data-highlighted:before:bg-info/10 data-[state=open]:before:bg-info/10",itemLeadingIcon:"text-info/75 group-data-highlighted:text-info group-data-[state=open]:text-info"}},{color:"warning",active:!1,class:{item:"text-warning data-highlighted:text-warning data-highlighted:before:bg-warning/10 data-[state=open]:before:bg-warning/10",itemLeadingIcon:"text-warning/75 group-data-highlighted:text-warning group-data-[state=open]:text-warning"}},{color:"error",active:!1,class:{item:"text-error data-highlighted:text-error data-highlighted:before:bg-error/10 data-[state=open]:before:bg-error/10",itemLeadingIcon:"text-error/75 group-data-highlighted:text-error group-data-[state=open]:text-error"}},{color:"primary",active:!0,class:{item:"text-primary before:bg-primary/10",itemLeadingIcon:"text-primary"}},{color:"secondary",active:!0,class:{item:"text-secondary before:bg-secondary/10",itemLeadingIcon:"text-secondary"}},{color:"success",active:!0,class:{item:"text-success before:bg-success/10",itemLeadingIcon:"text-success"}},{color:"info",active:!0,class:{item:"text-info before:bg-info/10",itemLeadingIcon:"text-info"}},{color:"warning",active:!0,class:{item:"text-warning before:bg-warning/10",itemLeadingIcon:"text-warning"}},{color:"error",active:!0,class:{item:"text-error before:bg-error/10",itemLeadingIcon:"text-error"}}],defaultVariants:{size:"md"}},qt={__name:"UDropdownMenu",props:$e({size:{type:null,required:!1},items:{type:null,required:!1},checkedIcon:{type:null,required:!1},loadingIcon:{type:null,required:!1},externalIcon:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},labelKey:{type:null,required:!1,default:"label"},descriptionKey:{type:null,required:!1,default:"description"},filter:{type:[Boolean,Object],required:!1,default:!1},filterFields:{type:Array,required:!1},ignoreFilter:{type:Boolean,required:!1,default:!1},disabled:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0}},{searchTerm:{type:String,default:""},searchTermModifiers:{}}),emits:$e(["update:open"],["update:searchTerm"]),setup(t,{emit:g}){const a=t,h=g,o=le(),u=Xe(t,"searchTerm",{type:String,default:""}),l=H(),i=Q("dropdownMenu",a),p=ye(Be(a,"defaultOpen","open","modal"),h),m=de(()=>he(a.content,{side:"bottom",sideOffset:8,collisionPadding:8})),r=de(()=>he(a.arrow,{rounded:!0})),d=()=>Pe(o,["default"]),y=q(()=>F({extend:F($t),...l.ui?.dropdownMenu||{}})({size:a.size}));return(S,A)=>(s(),k(e(Qe),fe(pe(e(p))),{default:b(({open:j})=>[o.default?(s(),k(e(Ye),{key:0,"as-child":"",class:f(a.class),disabled:t.disabled},{default:b(()=>[I(S.$slots,"default",{open:j})]),_:2},1032,["class","disabled"])):x("",!0),v(Fe,B({"search-term":u.value,"onUpdate:searchTerm":A[0]||(A[0]=D=>u.value=D),class:y.value.content({class:[!o.default&&a.class,e(i)?.content]}),ui:y.value,"ui-override":e(i)},m.value,{items:t.items,portal:t.portal,"label-key":t.labelKey,"description-key":t.descriptionKey,"checked-icon":t.checkedIcon,"loading-icon":t.loadingIcon,"external-icon":t.externalIcon,size:t.size,filter:t.filter,"filter-fields":t.filterFields,"ignore-filter":t.ignoreFilter}),Se({default:b(()=>[t.arrow?(s(),k(e(Je),B({key:0},r.value,{"data-slot":"arrow",class:y.value.arrow({class:e(i)?.arrow})}),null,16,["class"])):x("",!0)]),_:2},[Y(d(),(D,U)=>({name:U,fn:b(L=>[I(S.$slots,U,fe(pe(L)))])}))]),1040,["search-term","class","ui","ui-override","items","portal","label-key","description-key","checked-icon","loading-icon","external-icon","size","filter","filter-fields","ignore-filter"])]),_:3},16))}},Tt={base:"relative",variants:{size:{xs:"",sm:"",md:"",lg:"",xl:""},orientation:{horizontal:"inline-flex -space-x-px",vertical:"flex flex-col -space-y-px"}}},Ct={__name:"UFieldGroup",props:{as:{type:null,required:!1},size:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const g=t,a=H(),h=Q("fieldGroup",g),o=q(()=>F({extend:F(Tt),...a.ui?.fieldGroup||{}}));return Ze(_e,q(()=>({orientation:g.orientation,size:g.size}))),(u,l)=>(s(),k(e(ne),{as:t.as,"data-orientation":t.orientation,class:f(o.value({orientation:t.orientation,class:[e(h)?.base,g.class]}))},{default:b(()=>[I(u.$slots,"default")]),_:3},8,["as","data-orientation","class"]))}},zt=se({__name:"DocsPageHeaderLinks",setup(t){const g=xe(),a=et(),h=tt().app?.baseURL||"/",{copy:o,copied:u}=at(),{t:l}=oe(),i=q(()=>`${window?.location?.origin}${h}raw${g.path}.md`),p=[[{label:l("docs.copy.link"),icon:"i-lucide-link",onSelect(){o(i.value)}},{label:l("docs.copy.view"),icon:"i-simple-icons:markdown",target:"_blank",to:i.value},{label:l("docs.copy.gpt"),icon:"i-simple-icons:openai",target:"_blank",to:`https://chatgpt.com/?hints=search&q=${encodeURIComponent(`Read ${i.value} so I can ask questions about it.`)}`},{label:l("docs.copy.claude"),icon:"i-simple-icons:anthropic",target:"_blank",to:`https://claude.ai/new?q=${encodeURIComponent(`Read ${i.value} so I can ask questions about it.`)}`}],[{label:"Copy MCP Server URL",icon:"i-lucide-link",onSelect(){o(`${window?.location?.origin}${h}mcp`),a.add({title:"Copied to clipboard",icon:"i-lucide-check-circle"})}},{label:"Add MCP Server",icon:"i-simple-icons:cursor",target:"_blank",to:"/mcp/deeplink"}]];async function m(){const r=await $fetch(`/raw${g.path}.md`);o(r)}return(r,d)=>{const y=re,S=qt,A=Ct;return s(),k(A,{size:"sm"},{default:b(()=>[v(y,{label:e(l)("docs.copy.page"),icon:e(u)?"i-lucide-check":"i-lucide-copy",color:"neutral",variant:"soft",ui:{leadingIcon:"text-neutral size-3.5"},onClick:m},null,8,["label","icon"]),v(S,{size:"sm",items:p,content:{align:"end",side:"bottom",sideOffset:8}},{default:b(()=>[v(y,{icon:"i-lucide-chevron-down",color:"neutral",variant:"soft",class:"border-l border-muted"})]),_:1})]),_:1})}}}),St=Object.assign(zt,{__name:"DocsPageHeaderLinks"}),At={slots:{root:"relative border-b border-default py-8",container:"",wrapper:"flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4",headline:"mb-2.5 text-sm font-semibold text-primary flex items-center gap-1.5",title:"text-3xl sm:text-4xl text-pretty font-bold text-highlighted",description:"text-lg text-pretty text-muted",links:"flex flex-wrap items-center gap-1.5"},variants:{title:{true:{description:"mt-4"}}}},Ot={__name:"UPageHeader",props:{as:{type:null,required:!1},headline:{type:String,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},links:{type:Array,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const g=t,a=le(),h=H(),o=Q("pageHeader",g),u=q(()=>F({extend:F(At),...h.ui?.pageHeader||{}})({title:!!g.title||!!a.title}));return(l,i)=>(s(),k(e(ne),{as:t.as,"data-slot":"root",class:f(u.value.root({class:[e(o)?.root,g.class]}))},{default:b(()=>[t.headline||a.headline?(s(),w("div",{key:0,"data-slot":"headline",class:f(u.value.headline({class:e(o)?.headline}))},[I(l.$slots,"headline",{},()=>[M(K(t.headline),1)])],2)):x("",!0),O("div",{"data-slot":"container",class:f(u.value.container({class:e(o)?.container}))},[O("div",{"data-slot":"wrapper",class:f(u.value.wrapper({class:e(o)?.wrapper}))},[t.title||a.title?(s(),w("h1",{key:0,"data-slot":"title",class:f(u.value.title({class:e(o)?.title}))},[I(l.$slots,"title",{},()=>[M(K(t.title),1)])],2)):x("",!0),t.links?.length||a.links?(s(),w("div",{key:1,"data-slot":"links",class:f(u.value.links({class:e(o)?.links}))},[I(l.$slots,"links",{},()=>[(s(!0),w(R,null,Y(t.links,(p,m)=>(s(),k(re,B({key:m,color:"neutral",variant:"outline"},{ref_for:!0},p),null,16))),128))])],2)):x("",!0)],2),t.description||a.description?(s(),w("div",{key:0,"data-slot":"description",class:f(u.value.description({class:e(o)?.description}))},[I(l.$slots,"description",{},()=>[M(K(t.description),1)])],2)):x("",!0),I(l.$slots,"default")],2)]),_:3},8,["as","class"]))}},Pt={slots:{root:"grid grid-cols-1 sm:grid-cols-2 gap-8",link:["group block px-6 py-8 rounded-lg border border-default hover:bg-elevated/50 focus-visible:outline-primary","transition-colors"],linkLeading:["inline-flex items-center rounded-full p-1.5 bg-elevated group-hover:bg-primary/10 ring ring-accented mb-4 group-hover:ring-primary/50","transition"],linkLeadingIcon:["size-5 shrink-0 text-highlighted group-hover:text-primary","transition-[color,translate]"],linkTitle:"font-medium text-[15px] text-highlighted mb-1 truncate",linkDescription:"text-sm text-muted line-clamp-2"},variants:{direction:{left:{linkLeadingIcon:["group-active:-translate-x-0.5"]},right:{link:"text-end",linkLeadingIcon:["group-active:translate-x-0.5"]}}}},Bt={key:1,class:"hidden sm:block"},Dt=Object.assign({inheritAttrs:!1},{__name:"UContentSurround",props:{as:{type:null,required:!1},prevIcon:{type:null,required:!1},nextIcon:{type:null,required:!1},surround:{type:Array,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const g=t,{dir:a}=be(),h=H(),o=Q("contentSurround",g),[u,l]=ie({props:{link:Object,icon:String,direction:String}}),i=q(()=>F({extend:F(Pt),...h.ui?.contentSurround||{}})()),p=q(()=>g.prevIcon||(a.value==="rtl"?h.ui.icons.arrowRight:h.ui.icons.arrowLeft)),m=q(()=>g.nextIcon||(a.value==="rtl"?h.ui.icons.arrowLeft:h.ui.icons.arrowRight));return(r,d)=>(s(),w(R,null,[v(e(u),null,{default:b(({link:y,icon:S,direction:A})=>[y?(s(),k(ke,{key:0,to:y.path,raw:"","data-slot":"link",class:f(i.value.link({class:[e(o)?.link,y.ui?.link,y.class],direction:A}))},{default:b(()=>[I(r.$slots,"link",{link:y,ui:i.value},()=>[O("div",{"data-slot":"linkLeading",class:f(i.value.linkLeading({class:[e(o)?.linkLeading,y.ui?.linkLeading]}))},[I(r.$slots,"link-leading",{link:y,ui:i.value},()=>[v(X,{name:y.icon||S,"data-slot":"linkLeadingIcon",class:f(i.value.linkLeadingIcon({class:[e(o)?.linkLeadingIcon,y.ui?.linkLeadingIcon],direction:A}))},null,8,["name","class"])])],2),O("p",{"data-slot":"linkTitle",class:f(i.value.linkTitle({class:[e(o)?.linkTitle,y.ui?.linkTitle]}))},[I(r.$slots,"link-title",{link:y,ui:i.value},()=>[M(K(y.title),1)])],2),O("p",{"data-slot":"linkDescription",class:f(i.value.linkDescription({class:[e(o)?.linkDescription,y.ui?.linkDescription]}))},[I(r.$slots,"link-description",{link:y,ui:i.value},()=>[M(K(y.description),1)])],2)])]),_:2},1032,["to","class"])):(s(),w("span",Bt," "))]),_:3}),t.surround?(s(),k(e(ne),B({key:0,as:t.as},r.$attrs,{"data-slot":"root",class:i.value.root({class:[e(o)?.root,g.class]})}),{default:b(()=>[v(e(l),{link:t.surround[0],icon:p.value,direction:"left"},null,8,["link","icon"]),v(e(l),{link:t.surround[1],icon:m.value,direction:"right"},null,8,["link","icon"])]),_:1},16,["as","class"])):x("",!0)],64))}}),Ut={base:"mt-8 pb-24 space-y-12"},Kt={__name:"UPageBody",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const g=t,a=H(),h=Q("pageBody",g),o=q(()=>F({extend:F(Ut),...a.ui?.pageBody||{}}));return(u,l)=>(s(),k(e(ne),{as:t.as,class:f(o.value({class:[e(h)?.base,g.class]}))},{default:b(()=>[I(u.$slots,"default")]),_:3},8,["as","class"]))}},Ft={slots:{root:"flex flex-col gap-3",title:"text-sm font-semibold flex items-center gap-1.5",list:"flex flex-col gap-2",item:"relative",link:"group text-sm flex items-center gap-1.5 focus-visible:outline-primary",linkLeadingIcon:"size-5 shrink-0",linkLabel:"truncate",linkLabelExternalIcon:"size-3 absolute top-0 text-dimmed"},variants:{active:{true:{link:"text-primary font-medium"},false:{link:["text-muted hover:text-default","transition-colors"]}}}},Rt={__name:"UPageLinks",props:{as:{type:null,required:!1,default:"nav"},title:{type:String,required:!1},links:{type:Array,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const g=t,a=le(),h=H(),o=Q("pageLinks",g),u=q(()=>F({extend:F(Ft),...h.ui?.pageLinks||{}})());return(l,i)=>(s(),k(e(ne),{as:t.as,"data-slot":"root",class:f(u.value.root({class:[e(o)?.root,g.class]}))},{default:b(()=>[t.title||a.title?(s(),w("p",{key:0,"data-slot":"title",class:f(u.value.title({class:e(o)?.title}))},[I(l.$slots,"title",{},()=>[M(K(t.title),1)])],2)):x("",!0),O("ul",{"data-slot":"list",class:f(u.value.list({class:e(o)?.list}))},[(s(!0),w(R,null,Y(t.links,(p,m)=>(s(),w("li",{key:m,"data-slot":"item",class:f(u.value.item({class:[e(o)?.item,p.ui?.item]}))},[v(ke,B({ref_for:!0},e(Ae)(p),{custom:""}),{default:b(({active:r,...d})=>[v(Oe,B({ref_for:!0},d,{"data-slot":"link",class:u.value.link({class:[e(o)?.link,p.ui?.link,p.class],active:r})}),{default:b(()=>[I(l.$slots,"link",{link:p,active:r,ui:u.value},()=>[I(l.$slots,"link-leading",{link:p,active:r,ui:u.value},()=>[p.icon?(s(),k(X,{key:0,name:p.icon,"data-slot":"linkLeadingIcon",class:f(u.value.linkLeadingIcon({class:[e(o)?.linkLeadingIcon,p.ui?.linkLeadingIcon],active:r}))},null,8,["name","class"])):x("",!0)]),p.label||a["link-label"]?(s(),w("span",{key:0,"data-slot":"linkLabel",class:f(u.value.linkLabel({class:[e(o)?.linkLabel,p.ui?.linkLabel],active:r}))},[I(l.$slots,"link-label",{link:p,active:r},()=>[M(K(p.label),1)]),p.target==="_blank"?(s(),k(X,{key:0,name:e(h).ui.icons.external,"data-slot":"linkLabelExternalIcon",class:f(u.value.linkLabelExternalIcon({class:[e(o)?.linkLabelExternalIcon,p.ui?.linkLabelExternalIcon],active:r}))},null,8,["name","class"])):x("",!0)],2)):x("",!0),I(l.$slots,"link-trailing",{link:p,active:r})])]),_:2},1040,["class"])]),_:2},1040)],2))),128))],2)]),_:3},8,["as","class"]))}},Mt={key:0,class:"space-y-6"},jt=se({__name:"DocsAsideRightBottom",setup(t){const a=xe().path,h=H(),{t:o}=oe(),{isEnabled:u,open:l}=Ie(),i=q(()=>u.value&&h.assistant?.explainWithAi!==!1),p=q(()=>h.assistant?.icons?.explain||"i-lucide-brain");return(m,r)=>{const d=De,y=Rt,S=re;return e(h).toc?.bottom?.links?.length||e(i)?(s(),w("div",Mt,[v(d,{type:"dashed"}),e(h).toc?.bottom?.links?.length?(s(),k(y,{key:0,title:e(h).toc?.bottom?.title||e(o)("docs.links"),links:e(h).toc?.bottom?.links},null,8,["title","links"])):x("",!0),e(h).toc?.bottom?.links?.length&&e(i)?(s(),k(d,{key:1,type:"dashed"})):x("",!0),e(i)?(s(),k(S,{key:2,icon:e(p),label:e(o)("assistant.explainWithAi"),size:"sm",variant:"link",class:"p-0 text-sm",color:"neutral",onClick:r[0]||(r[0]=A=>e(l)(`Explain the page ${e(a)}`,!0))},null,8,["icon","label"])):x("",!0)])):x("",!0)}}}),Re=Object.assign(jt,{__name:"DocsAsideRightBottom"});function Vt(){const t=J(),g=J([]),a=J([]);function h(u){u.forEach(l=>{const i=l.target.id;i&&(l.isIntersecting?g.value=[...g.value,i]:g.value=g.value.filter(p=>p!==i))})}function o(u){u.forEach(l=>{t.value&&t.value.observe(l)})}return Ue(g,(u,l)=>{u.length===0?a.value=l:a.value=u}),it(()=>t.value=new IntersectionObserver(h)),lt(()=>t.value?.disconnect()),{visibleHeadings:g,activeHeadings:a,updateHeadings:o}}const Wt={slots:{root:"sticky top-(--ui-header-height) z-10 bg-default/75 lg:bg-[initial] backdrop-blur -mx-4 px-4 sm:px-6 sm:-mx-6 lg:ms-0 overflow-y-auto max-h-[calc(100vh-var(--ui-header-height))]",container:"pt-4 sm:pt-6 pb-2.5 sm:pb-4.5 lg:py-8 border-b border-dashed border-default lg:border-0 flex flex-col",top:"",bottom:"hidden lg:flex lg:flex-col gap-6",trigger:"group text-sm font-semibold flex-1 flex items-center gap-1.5 py-1.5 -mt-1.5 focus-visible:outline-primary",title:"truncate",trailing:"ms-auto inline-flex gap-1.5 items-center",trailingIcon:"size-5 transform transition-transform duration-200 shrink-0 group-data-[state=open]:rotate-180 lg:hidden",content:"relative data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] overflow-hidden focus:outline-none",list:"min-w-0",listWithChildren:"ms-3",item:"min-w-0",itemWithChildren:"",link:"group relative text-sm flex items-center focus-visible:outline-primary py-1",linkText:"truncate",indicator:"",indicatorLine:"",indicatorActive:""},variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},highlightColor:{primary:{indicatorActive:"bg-primary"},secondary:{indicatorActive:"bg-secondary"},success:{indicatorActive:"bg-success"},info:{indicatorActive:"bg-info"},warning:{indicatorActive:"bg-warning"},error:{indicatorActive:"bg-error"},neutral:{indicatorActive:"bg-inverted"}},active:{false:{link:["text-muted hover:text-default","transition-colors"]}},highlight:{true:""},highlightVariant:{straight:"",circuit:""},body:{true:{bottom:"mt-6"}}},compoundVariants:[{color:"primary",active:!0,class:{link:"text-primary"}},{color:"secondary",active:!0,class:{link:"text-secondary"}},{color:"success",active:!0,class:{link:"text-success"}},{color:"info",active:!0,class:{link:"text-info"}},{color:"warning",active:!0,class:{link:"text-warning"}},{color:"error",active:!0,class:{link:"text-error"}},{color:"neutral",active:!0,class:{link:"text-highlighted"}},{highlight:!0,highlightVariant:"straight",class:{list:"ms-2.5 ps-4 border-s border-default",item:"-ms-px",indicator:"absolute ms-2.5 transition-[translate,height] duration-200 h-(--indicator-size) translate-y-(--indicator-position) w-px rounded-full",indicatorLine:"hidden",indicatorActive:"w-full h-full"}},{highlight:!0,highlightVariant:"circuit",class:{list:"ps-6.5",item:"-ms-px",itemWithChildren:"ps-px",indicator:"absolute ms-2.5 start-0 top-0 rtl:-scale-x-100",indicatorLine:"absolute inset-0 bg-(--ui-border)",indicatorActive:"absolute w-full h-(--indicator-size) translate-y-(--indicator-position) transition-[translate,height] duration-200 ease-out"}}],defaultVariants:{color:"primary",highlightColor:"primary",highlightVariant:"straight"}},Nt=["href","onClick"],Me=Object.assign({inheritAttrs:!1},{__name:"UContentToc",props:{as:{type:null,required:!1,default:"nav"},trailingIcon:{type:null,required:!1},title:{type:String,required:!1},color:{type:null,required:!1},highlight:{type:Boolean,required:!1},highlightColor:{type:null,required:!1},highlightVariant:{type:null,required:!1},links:{type:Array,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1}},emits:["update:open","move"],setup(t,{emit:g}){const a=t,h=g,o=le(),u=ye(Be(a,"as","open","defaultOpen"),h),{t:l}=be(),i=nt(),p=H(),m=Q("contentToc",a),{activeHeadings:r,updateHeadings:d}=Vt(),[y,S]=ie({props:{links:Array,level:Number}}),[A,j]=ie(),[D,U]=ie(),L=q(()=>F({extend:F(Wt),...p.ui?.contentToc||{}})({color:a.color,highlight:a.highlight,highlightVariant:a.highlightVariant,highlightColor:a.highlightColor||a.color}));function _(n){const T=encodeURIComponent(n);i.push(`#${T}`),h("move",n)}function Z(n){return n.flatMap(T=>[T,...T.children?Z(T.children):[]])}function E(n,T=0){return n.flatMap(C=>[{link:C,level:T},...C.children?E(C.children,T+1):[]])}const $=1.75,W=q(()=>{if(!r.value?.length)return;const T=Z(a.links||[]).findIndex(C=>r.value.includes(C.id));return{"--indicator-size":`${$*r.value.length}rem`,"--indicator-position":T>=0?`${T*$}rem`:"0rem"}}),c=q(()=>{if(!a.highlight||a.highlightVariant!=="circuit"||!a.links?.length)return;const n=E(a.links),C=$*16,N=n.length*C,z=.5,ee=10.5;let te="",ce=z,ue=0;n.forEach((we,ge)=>{const ae=we.level>0?ee:z,Le=ue+C;ge===0&&(te+=`M${ae} ${ue}`,ce=ae),ae!==ce&&(te+=` L${ae} ${ue+6}`,ce=ae),te+=` L${ce} ${Le-(ge`);return{width:"0.75rem",height:`${n.length*$}rem`,maskImage:`url("data:image/svg+xml,${je}")`}}),P=st();return P.hooks.hook("page:loading:end",()=>{const n=Array.from(document.querySelectorAll("h2, h3"));d(n)}),P.hooks.hook("page:transition:finish",()=>{const n=Array.from(document.querySelectorAll("h2, h3"));d(n)}),(n,T)=>(s(),w(R,null,[v(e(y),null,{default:b(({links:C,level:N})=>[O("ul",{class:f(N>0?L.value.listWithChildren({class:e(m)?.listWithChildren}):L.value.list({class:e(m)?.list}))},[(s(!0),w(R,null,Y(C,(z,ee)=>(s(),w("li",{key:ee,class:f(z.children&&z.children.length>0?L.value.itemWithChildren({class:[e(m)?.itemWithChildren,z.ui?.itemWithChildren]}):L.value.item({class:[e(m)?.item,z.ui?.item]}))},[O("a",{href:`#${z.id}`,"data-slot":"link",class:f(L.value.link({class:[e(m)?.link,z.ui?.link,z.class],active:e(r).includes(z.id)})),onClick:ze(te=>_(z.id),["prevent"])},[I(n.$slots,"link",{link:z},()=>[O("span",{"data-slot":"linkText",class:f(L.value.linkText({class:[e(m)?.linkText,z.ui?.linkText]}))},K(z.text),3)])],10,Nt),z.children?.length?(s(),k(e(S),{key:0,links:z.children,level:N+1},null,8,["links","level"])):x("",!0)],2))),128))],2)]),_:3}),v(e(A),null,{default:b(({open:C})=>[I(n.$slots,"leading",{open:C,ui:L.value}),O("span",{"data-slot":"title",class:f(L.value.title({class:e(m)?.title}))},[I(n.$slots,"default",{open:C},()=>[M(K(t.title||e(l)("contentToc.title")),1)])],2),O("span",{"data-slot":"trailing",class:f(L.value.trailing({class:e(m)?.trailing}))},[I(n.$slots,"trailing",{open:C,ui:L.value},()=>[v(X,{name:t.trailingIcon||e(p).ui.icons.chevronDown,"data-slot":"trailingIcon",class:f(L.value.trailingIcon({class:e(m)?.trailingIcon}))},null,8,["name","class"])])],2)]),_:3}),v(e(D),null,{default:b(()=>[t.highlight?(s(),w("div",{key:0,"data-slot":"indicator",class:f(L.value.indicator({class:e(m)?.indicator})),style:ot({...W.value,...c.value||{}})},[O("div",{"data-slot":"indicatorLine",class:f(L.value.indicatorLine({class:e(m)?.indicatorLine}))},null,2),W.value?(s(),w("div",{key:0,"data-slot":"indicatorActive",class:f(L.value.indicatorActive({class:e(m)?.indicatorActive}))},null,2)):x("",!0)],6)):x("",!0),I(n.$slots,"content",{links:t.links},()=>[v(e(S),{links:t.links,level:0},null,8,["links"])])]),_:3}),v(e(ut),B({...e(u),...n.$attrs},{"default-open":t.defaultOpen,"data-slot":"root",class:L.value.root({class:[e(m)?.root,a.class]})}),{default:b(({open:C})=>[O("div",{"data-slot":"container",class:f(L.value.container({class:e(m)?.container}))},[o.top?(s(),w("div",{key:0,"data-slot":"top",class:f(L.value.top({class:e(m)?.top}))},[I(n.$slots,"top",{links:t.links})],2)):x("",!0),t.links?.length?(s(),w(R,{key:1},[v(e(rt),{"data-slot":"trigger",class:f(L.value.trigger({class:"lg:hidden"}))},{default:b(()=>[v(e(j),{open:C},null,8,["open"])]),_:2},1032,["class"]),v(e(ct),{"data-slot":"content",class:f(L.value.content({class:[e(m)?.content,"lg:hidden"]}))},{default:b(()=>[v(e(U))]),_:1},8,["class"]),O("p",{"data-slot":"trigger",class:f(L.value.trigger({class:"hidden lg:flex"}))},[v(e(j),{open:C},null,8,["open"])],2),O("div",{"data-slot":"content",class:f(L.value.content({class:[e(m)?.content,"hidden lg:flex"]}))},[v(e(U))],2)],64)):x("",!0),o.bottom?(s(),w("div",{key:2,"data-slot":"bottom",class:f(L.value.bottom({class:e(m)?.bottom,body:!!o.top||!!t.links?.length}))},[I(n.$slots,"bottom",{links:t.links})],2)):x("",!0)],2)]),_:3},16,["default-open","class"])],64))}}),Ht={key:0,class:"lg:hidden sticky top-(--ui-header-height) z-10 bg-default/75 backdrop-blur -mx-4 p-2 border-b border-dashed border-default flex justify-between"},Et=se({__name:"DocsAsideMobileBar",props:{links:{}},setup(t){const{subNavigationMode:g,sidebarNavigation:a,currentSection:h}=Ke(),{t:o}=oe(),u=me("contentNavigation"),l=me("contentToc"),i=J(!1),p=J(!1);return(m,r)=>{const d=re,y=gt,S=dt,A=Re,j=Me;return e(g)?(s(),w("div",Ht,[v(S,{open:e(i),"onUpdate:open":r[0]||(r[0]=D=>qe(i)?i.value=D:null),direction:"left",title:e(h)?.title,handle:!1,inset:"",side:"left",ui:{content:"w-full max-w-2/3"}},{body:b(()=>[v(y,{navigation:e(a),highlight:e(u).highlight??!0,"highlight-color":e(u).highlightColor,variant:e(u).variant??"link",color:e(u).color,"default-open":"","trailing-icon":"i-lucide-chevron-right",ui:{linkTrailingIcon:"group-data-[state=open]:rotate-90"}},null,8,["navigation","highlight","highlight-color","variant","color"])]),default:b(()=>[v(d,{label:e(o)("docs.menu"),icon:"i-lucide-text-align-start",color:"neutral",variant:"link",size:"xs","aria-label":e(o)("docs.menu")},null,8,["label","aria-label"])]),_:1},8,["open","title"]),v(S,{open:e(p),"onUpdate:open":r[1]||(r[1]=D=>qe(p)?p.value=D:null),direction:"right",handle:!1,inset:"",side:"right","no-body-styles":"",ui:{content:"w-full max-w-2/3"}},{body:b(()=>[t.links?.length?(s(),k(j,{key:0,highlight:e(l).highlight??!0,"highlight-color":e(l).highlightColor,"highlight-variant":e(l).highlightVariant,color:e(l).color,links:t.links,open:!0,"default-open":"",ui:{root:"!mx-0 !px-1 top-0 overflow-visible",container:"!pt-0 border-b-0",trailingIcon:"hidden",bottom:"flex flex-col"}},{bottom:b(()=>[v(A)]),_:1},8,["highlight","highlight-color","highlight-variant","color","links"])):x("",!0)]),default:b(()=>[v(d,{label:e(o)("docs.toc"),"trailing-icon":"i-lucide-chevron-right",color:"neutral",variant:"link",size:"xs","aria-label":e(o)("docs.toc")},null,8,["label","aria-label"])]),_:1},8,["open"])])):x("",!0)}}}),Gt=Object.assign(Et,{__name:"DocsAsideMobileBar"}),Xt=se({__name:"DocsAsideRight",props:{page:{}},setup(t){const g=t,a=q(()=>g.page?.body?.toc?.links||[]),{shouldPushContent:h}=Ie(),{subNavigationMode:o}=Ke(),u=H(),{t:l}=oe(),i=me("contentToc");return(p,m)=>{const r=Re,d=Me,y=Gt;return s(),w("div",null,[e(a).length&&!e(h)?(s(),k(d,{key:0,highlight:e(i).highlight??!0,"highlight-color":e(i).highlightColor,"highlight-variant":e(i).highlightVariant,color:e(i).color,title:e(u).toc?.title||e(l)("docs.toc"),links:e(a),class:f({"hidden lg:block":e(o)})},{bottom:b(()=>[v(r)]),_:1},8,["highlight","highlight-color","highlight-variant","color","title","links","class"])):x("",!0),v(y,{links:e(a)},null,8,["links"])])}}}),Yt=Object.assign(Xt,{__name:"DocsAsideRight"});function ve(t,g,a){if(!(!t?.length||!g)){for(const h of t)if(h.children){for(const u of h.children){const l=u.stem?.endsWith("/index");if(u.path===g&&!l)return h.title}const o=ve(h.children,g);if(o)return o}}}const Jt=t=>{const g=void 0;g&&g.node.res.setHeader("x-nitro-prerender",[g.node.res.getHeader("x-nitro-prerender"),t].filter(Boolean).join(","))},Qt={class:"flex items-center gap-2 text-sm text-muted"},ia=se({__name:"[...slug]",async setup(t){let g,a;const h=xe(),{locale:o,isEnabled:u,t:l}=oe(),i=H(),p=ft("navigation"),{shouldPushContent:m}=Ie(),r=q(()=>u.value?`docs_${o.value}`:"docs"),[{data:d},{data:y}]=([g,a]=pt(()=>Promise.all([Te(Ce(h.path),()=>ht(r.value).path(h.path).first(),"$FMwJADWsY_"),Te(`${Ce(h.path)}-surround`,()=>mt(r.value,h.path,{fields:["description"]}))])),g=await g,a(),g);if(!d.value)throw vt({statusCode:404,statusMessage:"Page not found",fatal:!0});const S=d.value.seo?.title||d.value.title,A=d.value.seo?.description||d.value.description,j=J(ve(p?.value,d.value?.path)),D=q(()=>bt(p?.value,d.value?.path||""));kt({title:S,description:A,type:"article",modifiedAt:d.value.modifiedAt,breadcrumbs:D}),Ue(()=>p?.value,()=>{j.value=ve(p?.value,d.value?.path)||j.value});const U=q(()=>i.github?i.github:null),L=q(()=>{if(U.value)return[U.value.url,"edit",U.value.branch,U.value.rootDir,"content",`${d.value?.stem}.${d.value?.extension}`].filter(Boolean).join("/")});return Jt(`/raw${h.path}.md`),(_,Z)=>{const E=re,$=St,W=Ot,c=xt,P=De,n=Dt,T=Kt,C=Yt,N=It;return e(d)?(s(),k(N,{key:`page-${e(m)}`},{right:b(()=>[v(C,{page:e(d)},null,8,["page"])]),default:b(()=>[v(W,{title:e(d).title,description:e(d).description,headline:e(j),ui:{wrapper:"flex-row items-center flex-wrap justify-between"}},{links:b(()=>[(s(!0),w(R,null,Y(e(d).links,(z,ee)=>(s(),k(E,B({key:ee,size:"sm"},{ref_for:!0},z),null,16))),128)),v($)]),_:1},8,["title","description","headline"]),v(T,null,{default:b(()=>[e(d)?(s(),k(c,{key:0,value:e(d)},null,8,["value"])):x("",!0),e(U)?(s(),k(P,{key:1},{default:b(()=>[O("div",Qt,[v(E,{variant:"link",color:"neutral",to:e(L),target:"_blank",icon:"i-lucide-pen",ui:{leadingIcon:"size-4"}},{default:b(()=>[M(K(e(l)("docs.edit")),1)]),_:1},8,["to"]),e(U)?.url?(s(),w(R,{key:0},[O("span",null,K(e(l)("common.or")),1),v(E,{variant:"link",color:"neutral",to:`${e(U).url}/issues/new/choose`,target:"_blank",icon:"i-lucide-alert-circle",ui:{leadingIcon:"size-4"}},{default:b(()=>[M(K(e(l)("docs.report")),1)]),_:1},8,["to"])],64)):x("",!0)])]),_:1})):x("",!0),v(n,{surround:e(y)},null,8,["surround"])]),_:1})]),_:1})):x("",!0)}}});export{ia as default}; diff --git a/docus/dist/_nuxt/B2gqyXxK.js b/docus/dist/_nuxt/B2gqyXxK.js new file mode 100644 index 0000000..83d0330 --- /dev/null +++ b/docus/dist/_nuxt/B2gqyXxK.js @@ -0,0 +1,9 @@ +import{bK as q,bL as M,bM as R,G as U,H as B,bN as E,bO as _,d as D,o as g,a as x,p as m,q as W,m as P,s as a,W as I,bP as N,bQ as O,c as C,a0 as j,a1 as V,a4 as z,ar as G,e as A,B as f,bR as H,F as X,v as F,bS as $,bT as Q,bU as S,bV as Z,ac as k,f as T,bW as K,aQ as J,am as L,bX as Y}from"./B3fabVUf.js";var ee=0;function te(s){const i=new WeakMap,r=q();function c(n){if(s.mode!=="popLayout")return;const d=n.offsetParent,y=d instanceof HTMLElement&&d.offsetWidth||0,l={height:n.offsetHeight||0,width:n.offsetWidth||0,top:n.offsetTop,left:n.offsetLeft,right:0};l.right=y-l.width-l.left;const p=s.anchorX==="left"?`left: ${l.left}px`:`right: ${l.right}px`,h=`pop-${ee++}`;n.dataset.motionPopId=h;const e=document.createElement("style");r.value.nonce&&(e.nonce=r.value.nonce),i.set(n,e),document.head.appendChild(e),e.sheet&&e.sheet.insertRule(` + [data-motion-pop-id="${h}"] { + position: absolute !important; + width: ${l.width}px !important; + height: ${l.height}px !important; + top: ${l.top}px !important; + ${p} !important; + } + `)}function v(n){const d=i.get(n);d&&(i.delete(n),M.render(()=>{document.head.removeChild(d)}))}return{addPopStyle:c,removePopStyle:v}}var oe=0;function ae(s){const i=String(oe++),r=new Map,{addPopStyle:c,removePopStyle:v}=te(s);function n(e){const t=[],o=E.get(e);o&&e.getAttribute(_.motionAttribute)===i&&t.push(o);const u=Array.from(e.querySelectorAll(`[${_.motionAttribute}="${i}"]`));for(const w of u){const b=E.get(w);b&&t.push(b)}return t}function d(e,t){const o=r.get(e);o&&(o.remaining.delete(t),o.remaining.size===0&&l(o))}const y={initial:s.initial,custom:s.custom,presenceId:i,onMotionExitComplete:d};R(y),U(()=>{y.initial=void 0});function l(e){v(e.el),e.states.forEach(t=>{t.getSnapshot(t.options,!1)}),e.done(),r.delete(e.el),e.el?.isConnected?e.states[0]?.didUpdate():e.states.forEach(t=>{t.unmount()}),s.onExitComplete?.()}function p(e,t){n(e).forEach(o=>{o.setActive("exit",!1),o.getSnapshot(o.options,!0)}),t()}function h(e,t){y.custom=s.custom;const o=e,u=n(o);if(u.length===0){t(),s.onExitComplete?.();return}const w={remaining:new Set(u),states:u,done:t,el:o};r.set(o,w),c(o),u.forEach(b=>{b.presenceContainer=o,b.setActive("exit",!0),b.getSnapshot(b.options,!1)}),u[0]?.didUpdate()}return B(()=>{r.forEach(e=>{e.states.forEach(t=>{t.unmount()})}),r.clear()}),{enter:p,exit:h}}var ne=D({name:"AnimatePresence",inheritAttrs:!0,__name:"AnimatePresence",props:{mode:{default:"sync"},initial:{type:Boolean,default:!0},as:{},custom:{},onExitComplete:{},anchorX:{default:"left"}},setup(s){const i=s,{enter:r,exit:c}=ae(i),v=C(()=>i.mode!=="wait"?{tag:i.as}:{mode:i.mode==="wait"?"out-in":void 0});return(n,d)=>(g(),x(I(n.mode==="wait"?N:O),P(v.value,{appear:"",css:!1,onLeave:a(c),onEnter:a(r)}),{default:m(()=>[W(n.$slots,"default")]),_:3},16,["onLeave","onEnter"]))}}),se=ne;const ie={slots:{base:"rounded-md w-full",overlay:"fixed inset-0 bg-default/75 backdrop-blur-sm will-change-opacity",content:"fixed inset-0 flex items-center justify-center cursor-zoom-out focus:outline-none",zoomedImage:"w-full h-auto max-w-[95vw] max-h-[95vh] object-contain rounded-md"},variants:{zoom:{true:"will-change-transform"},open:{true:""}},compoundVariants:[{zoom:!0,open:!1,class:"cursor-zoom-in"}]},le=["onClick"],ue=Object.assign({inheritAttrs:!1},{__name:"ProseImg",props:{src:{type:String,required:!0},alt:{type:String,required:!0},width:{type:[String,Number],required:!1},height:{type:[String,Number],required:!1},class:{type:null,required:!1},zoom:{type:Boolean,required:!1,default:!0},ui:{type:Object,required:!1}},setup(s){const i=s,r=j(),c=V("prose.img",i),[v,n]=z(),[d,y]=z(),l=F(!1),p=C(()=>L({extend:L(ie),...r.ui?.prose?.img||{}})({zoom:i.zoom,open:l.value})),h=C(()=>K(i.src,J().app.baseURL)),e=C(()=>`${h.value}::${Y()}`);return i.zoom&&G(window,"scroll",()=>{l.value=!1}),(t,o)=>(g(),A(X,null,[f(a(v),null,{default:m(()=>[(g(),x(I(a($)),P({src:h.value,alt:s.alt,width:s.width,height:s.height},t.$attrs,{class:p.value.base({class:[a(c)?.base,i.class]})}),null,16,["src","alt","width","height","class"]))]),_:1}),f(a(d),null,{default:m(()=>[(g(),x(I(a($)),P({src:h.value,alt:s.alt},t.$attrs,{class:p.value.zoomedImage({class:[a(c)?.zoomedImage]})}),null,16,["src","alt","class"]))]),_:1}),s.zoom?(g(),x(a(H),{key:0,open:l.value,"onUpdate:open":o[0]||(o[0]=u=>l.value=u),modal:!1},{default:m(({close:u})=>[f(a(Q),{"as-child":""},{default:m(()=>[f(a(S),{"layout-id":e.value,"as-child":"",transition:{type:"spring",bounce:.15,duration:.5,ease:"easeInOut"}},{default:m(()=>[f(a(n))]),_:1},8,["layout-id"])]),_:1}),f(a(Z),null,{default:m(()=>[f(a(se),null,{default:m(()=>[l.value?(g(),x(a(S),{key:0,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},class:k(p.value.overlay({class:[a(c)?.overlay]}))},null,8,["class"])):T("",!0),l.value?(g(),A("div",{key:1,class:k(p.value.content({class:[a(c)?.content]})),onClick:u},[f(a(S),{"as-child":"","layout-id":e.value,transition:{type:"spring",bounce:.15,duration:.5,ease:"easeInOut"}},{default:m(()=>[f(a(y))]),_:1},8,["layout-id"])],10,le)):T("",!0)]),_:2},1024)]),_:2},1024)]),_:1},8,["open"])):(g(),x(a(n),{key:1}))],64))}});export{ue as default}; diff --git a/docus/dist/_nuxt/B3fabVUf.js b/docus/dist/_nuxt/B3fabVUf.js new file mode 100644 index 0000000..2999e23 --- /dev/null +++ b/docus/dist/_nuxt/B3fabVUf.js @@ -0,0 +1,41 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AFG10c_a.js","./DJxuwfoz.js","./n8vERajx.js","./BN_7HF1G.js","./Dq00p3Sb.js","./DzNJTbjO.js","./vaS8Rkl_.js","./Cf5i2Hk_.js","./Jc8Ntx_l.js","./CCiWmQwn.js","./CgQMWAWA.js","./DewHeYIb.js","./B6bUjJBd.js","./C-sCiTCq.js","./jpB_SM9d.js","./C5B99YjC.js","./Bnc4fItI.js","./B91fwRQf.js","./BnW3dU0n.js","./BLnzyn6S.js","./LZNkr4Qo.js","./C3Ly8WAT.js","./CG1YvYVw.js","./BnHu5O7o.js","./DXQrCARz.js","./C0AA5UMg.js","./CxBf5103.js"])))=>i.map(i=>d[i]); +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const u of r)if(u.type==="childList")for(const a of u.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&o(a)}).observe(document,{childList:!0,subtree:!0});function n(r){const u={};return r.integrity&&(u.integrity=r.integrity),r.referrerPolicy&&(u.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?u.credentials="include":r.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function o(r){if(r.ep)return;r.ep=!0;const u=n(r);fetch(r.href,u)}})();function bd(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Xe={},fu=[],io=()=>{},mg=()=>!1,Ja=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Zi=e=>e.startsWith("onUpdate:"),Bt=Object.assign,Ed=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},r2=Object.prototype.hasOwnProperty,ot=(e,t)=>r2.call(e,t),De=Array.isArray,pu=e=>Iu(e)==="[object Map]",gg=e=>Iu(e)==="[object Set]",ip=e=>Iu(e)==="[object Date]",u2=e=>Iu(e)==="[object RegExp]",_e=e=>typeof e=="function",pt=e=>typeof e=="string",Dn=e=>typeof e=="symbol",Qe=e=>e!==null&&typeof e=="object",Cd=e=>(Qe(e)||_e(e))&&_e(e.then)&&_e(e.catch),vg=Object.prototype.toString,Iu=e=>vg.call(e),a2=e=>Iu(e).slice(8,-1),xd=e=>Iu(e)==="[object Object]",Xi=e=>pt(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Or=bd(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ji=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},s2=/-\w/g,Ft=Ji(e=>e.replace(s2,t=>t.slice(1).toUpperCase())),i2=/\B([A-Z])/g,Lo=Ji(e=>e.replace(i2,"-$1").toLowerCase()),Qi=Ji(e=>e.charAt(0).toUpperCase()+e.slice(1)),hu=Ji(e=>e?`on${Qi(e)}`:""),Vt=(e,t)=>!Object.is(e,t),ya=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:n})},l2=e=>{const t=parseFloat(e);return isNaN(t)?e:t},bg=e=>{const t=pt(e)?Number(e):NaN;return isNaN(t)?e:t};let lp;const el=()=>lp||(lp=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function mn(e){if(De(e)){const t={};for(let n=0;n{if(n){const o=n.split(d2);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function U(e){let t="";if(pt(e))t=e;else if(De(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Fe=e=>pt(e)?e:e==null?"":De(e)||Qe(e)&&(e.toString===vg||!_e(e.toString))?Cg(e)?Fe(e.value):JSON.stringify(e,xg,2):String(e),xg=(e,t)=>Cg(t)?xg(e,t.value):pu(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,r],u)=>(n[Rl(o,u)+" =>"]=r,n),{})}:gg(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Rl(n))}:Dn(t)?Rl(t):Qe(t)&&!De(t)&&!xd(t)?String(t):t,Rl=(e,t="")=>{var n;return Dn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Wt;class wg{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Wt,!t&&Wt&&(this.index=(Wt.scopes||(Wt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Wt=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,o;for(n=0,o=this.effects.length;n0)return;if(Ea){let t=Ea;for(Ea=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;ba;){let t=ba;for(ba=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=n}}if(e)throw e}function _g(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function kg(e){let t,n=e.depsTail,o=n;for(;o;){const r=o.prevDep;o.version===-1?(o===n&&(n=r),Bd(o),v2(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=r}e.deps=t,e.depsTail=n}function $c(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Sg(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Sg(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ta)||(e.globalVersion=Ta,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!$c(e))))return;e.flags|=2;const t=e.dep,n=ct,o=Vn;ct=e,Vn=!0;try{_g(e);const r=e.fn(e._value);(t.version===0||Vt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ct=n,Vn=o,kg(e),e.flags&=-3}}function Bd(e,t=!1){const{dep:n,prevSub:o,nextSub:r}=e;if(o&&(o.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=o,e.nextSub=void 0),n.subs===e&&(n.subs=o,!o&&n.computed)){n.computed.flags&=-5;for(let u=n.computed.deps;u;u=u.nextDep)Bd(u,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function v2(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Vn=!0;const Tg=[];function Fo(){Tg.push(Vn),Vn=!1}function Po(){const e=Tg.pop();Vn=e===void 0?!0:e}function cp(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ct;ct=void 0;try{t()}finally{ct=n}}}let Ta=0;class y2{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class tl{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ct||!Vn||ct===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ct)n=this.activeLink=new y2(ct,this),ct.deps?(n.prevDep=ct.depsTail,ct.depsTail.nextDep=n,ct.depsTail=n):ct.deps=ct.depsTail=n,Fg(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const o=n.nextDep;o.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=o),n.prevDep=ct.depsTail,n.nextDep=void 0,ct.depsTail.nextDep=n,ct.depsTail=n,ct.deps===n&&(ct.deps=o)}return n}trigger(t){this.version++,Ta++,this.notify(t)}notify(t){Dd();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ad()}}}function Fg(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)Fg(o)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const pi=new WeakMap,Ir=Symbol(""),Nc=Symbol(""),Fa=Symbol("");function Gt(e,t,n){if(Vn&&ct){let o=pi.get(e);o||pi.set(e,o=new Map);let r=o.get(n);r||(o.set(n,r=new tl),r.map=o,r.key=n),r.track()}}function Bo(e,t,n,o,r,u){const a=pi.get(e);if(!a){Ta++;return}const s=i=>{i&&i.trigger()};if(Dd(),t==="clear")a.forEach(s);else{const i=De(e),c=i&&Xi(n);if(i&&n==="length"){const l=Number(o);a.forEach((d,p)=>{(p==="length"||p===Fa||!Dn(p)&&p>=l)&&s(d)})}else switch((n!==void 0||a.has(void 0))&&s(a.get(n)),c&&s(a.get(Fa)),t){case"add":i?c&&s(a.get("length")):(s(a.get(Ir)),pu(e)&&s(a.get(Nc)));break;case"delete":i||(s(a.get(Ir)),pu(e)&&s(a.get(Nc)));break;case"set":pu(e)&&s(a.get(Ir));break}}Ad()}function b2(e,t){const n=pi.get(e);return n&&n.get(t)}function nu(e){const t=He(e);return t===e?t:(Gt(t,"iterate",Fa),xn(e)?t:t.map(Un))}function nl(e){return Gt(e=He(e),"iterate",Fa),e}function ro(e,t){return fo(e)?Du(ur(e)?Un(t):t):Un(t)}const E2={__proto__:null,[Symbol.iterator](){return ql(this,Symbol.iterator,e=>ro(this,e))},concat(...e){return nu(this).concat(...e.map(t=>De(t)?nu(t):t))},entries(){return ql(this,"entries",e=>(e[1]=ro(this,e[1]),e))},every(e,t){return bo(this,"every",e,t,void 0,arguments)},filter(e,t){return bo(this,"filter",e,t,n=>n.map(o=>ro(this,o)),arguments)},find(e,t){return bo(this,"find",e,t,n=>ro(this,n),arguments)},findIndex(e,t){return bo(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return bo(this,"findLast",e,t,n=>ro(this,n),arguments)},findLastIndex(e,t){return bo(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return bo(this,"forEach",e,t,void 0,arguments)},includes(...e){return $l(this,"includes",e)},indexOf(...e){return $l(this,"indexOf",e)},join(e){return nu(this).join(e)},lastIndexOf(...e){return $l(this,"lastIndexOf",e)},map(e,t){return bo(this,"map",e,t,void 0,arguments)},pop(){return Qu(this,"pop")},push(...e){return Qu(this,"push",e)},reduce(e,...t){return dp(this,"reduce",e,t)},reduceRight(e,...t){return dp(this,"reduceRight",e,t)},shift(){return Qu(this,"shift")},some(e,t){return bo(this,"some",e,t,void 0,arguments)},splice(...e){return Qu(this,"splice",e)},toReversed(){return nu(this).toReversed()},toSorted(e){return nu(this).toSorted(e)},toSpliced(...e){return nu(this).toSpliced(...e)},unshift(...e){return Qu(this,"unshift",e)},values(){return ql(this,"values",e=>ro(this,e))}};function ql(e,t,n){const o=nl(e),r=o[t]();return o!==e&&!xn(e)&&(r._next=r.next,r.next=()=>{const u=r._next();return u.done||(u.value=n(u.value)),u}),r}const C2=Array.prototype;function bo(e,t,n,o,r,u){const a=nl(e),s=a!==e&&!xn(e),i=a[t];if(i!==C2[t]){const d=i.apply(e,u);return s?Un(d):d}let c=n;a!==e&&(s?c=function(d,p){return n.call(this,ro(e,d),p,e)}:n.length>2&&(c=function(d,p){return n.call(this,d,p,e)}));const l=i.call(a,c,o);return s&&r?r(l):l}function dp(e,t,n,o){const r=nl(e),u=r!==e&&!xn(e);let a=n,s=!1;r!==e&&(u?(s=o.length===0,a=function(c,l,d){return s&&(s=!1,c=ro(e,c)),n.call(this,c,ro(e,l),d,e)}):n.length>3&&(a=function(c,l,d){return n.call(this,c,l,d,e)}));const i=r[t](a,...o);return s?ro(e,i):i}function $l(e,t,n){const o=He(e);Gt(o,"iterate",Fa);const r=o[t](...n);return(r===-1||r===!1)&&ul(n[0])?(n[0]=He(n[0]),o[t](...n)):r}function Qu(e,t,n=[]){Fo(),Dd();const o=He(e)[t].apply(e,n);return Ad(),Po(),o}const x2=bd("__proto__,__v_isRef,__isVue"),Pg=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Dn));function w2(e){Dn(e)||(e=String(e));const t=He(this);return Gt(t,"has",e),t.hasOwnProperty(e)}class Mg{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,o){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,u=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return u;if(n==="__v_raw")return o===(r?u?$g:qg:u?Lg:Rg).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const a=De(t);if(!r){let i;if(a&&(i=E2[n]))return i;if(n==="hasOwnProperty")return w2}const s=Reflect.get(t,n,rt(t)?t:o);if((Dn(n)?Pg.has(n):x2(n))||(r||Gt(t,"get",n),u))return s;if(rt(s)){const i=a&&Xi(n)?s:s.value;return r&&Qe(i)?Mo(i):i}return Qe(s)?r?Mo(s):_t(s):s}}class Og extends Mg{constructor(t=!1){super(!1,t)}set(t,n,o,r){let u=t[n];const a=De(t)&&Xi(n);if(!this._isShallow){const c=fo(u);if(!xn(o)&&!fo(o)&&(u=He(u),o=He(o)),!a&&rt(u)&&!rt(o))return c||(u.value=o),!0}const s=a?Number(n)e,Cs=e=>Reflect.getPrototypeOf(e);function k2(e,t,n){return function(...o){const r=this.__v_raw,u=He(r),a=pu(u),s=e==="entries"||e===Symbol.iterator&&a,i=e==="keys"&&a,c=r[e](...o),l=n?jc:t?Du:Un;return!t&&Gt(u,"iterate",i?Nc:Ir),Bt(Object.create(c),{next(){const{value:d,done:p}=c.next();return p?{value:d,done:p}:{value:s?[l(d[0]),l(d[1])]:l(d),done:p}}})}}function xs(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function S2(e,t){const n={get(r){const u=this.__v_raw,a=He(u),s=He(r);e||(Vt(r,s)&&Gt(a,"get",r),Gt(a,"get",s));const{has:i}=Cs(a),c=t?jc:e?Du:Un;if(i.call(a,r))return c(u.get(r));if(i.call(a,s))return c(u.get(s));u!==a&&u.get(r)},get size(){const r=this.__v_raw;return!e&&Gt(He(r),"iterate",Ir),r.size},has(r){const u=this.__v_raw,a=He(u),s=He(r);return e||(Vt(r,s)&&Gt(a,"has",r),Gt(a,"has",s)),r===s?u.has(r):u.has(r)||u.has(s)},forEach(r,u){const a=this,s=a.__v_raw,i=He(s),c=t?jc:e?Du:Un;return!e&&Gt(i,"iterate",Ir),s.forEach((l,d)=>r.call(u,c(l),c(d),a))}};return Bt(n,e?{add:xs("add"),set:xs("set"),delete:xs("delete"),clear:xs("clear")}:{add(r){const u=He(this),a=Cs(u),s=He(r),i=!t&&!xn(r)&&!fo(r)?s:r;return a.has.call(u,i)||Vt(r,i)&&a.has.call(u,r)||Vt(s,i)&&a.has.call(u,s)||(u.add(i),Bo(u,"add",i,i)),this},set(r,u){!t&&!xn(u)&&!fo(u)&&(u=He(u));const a=He(this),{has:s,get:i}=Cs(a);let c=s.call(a,r);c||(r=He(r),c=s.call(a,r));const l=i.call(a,r);return a.set(r,u),c?Vt(u,l)&&Bo(a,"set",r,u):Bo(a,"add",r,u),this},delete(r){const u=He(this),{has:a,get:s}=Cs(u);let i=a.call(u,r);i||(r=He(r),i=a.call(u,r)),s&&s.call(u,r);const c=u.delete(r);return i&&Bo(u,"delete",r,void 0),c},clear(){const r=He(this),u=r.size!==0,a=r.clear();return u&&Bo(r,"clear",void 0,void 0),a}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=k2(r,e,t)}),n}function ol(e,t){const n=S2(e,t);return(o,r,u)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?o:Reflect.get(ot(n,r)&&r in o?n:o,r,u)}const T2={get:ol(!1,!1)},F2={get:ol(!1,!0)},P2={get:ol(!0,!1)},M2={get:ol(!0,!0)},Rg=new WeakMap,Lg=new WeakMap,qg=new WeakMap,$g=new WeakMap;function O2(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function I2(e){return e.__v_skip||!Object.isExtensible(e)?0:O2(a2(e))}function _t(e){return fo(e)?e:rl(e,!1,D2,T2,Rg)}function Pn(e){return rl(e,!1,B2,F2,Lg)}function Mo(e){return rl(e,!0,A2,P2,qg)}function Br(e){return rl(e,!0,_2,M2,$g)}function rl(e,t,n,o,r){if(!Qe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const u=I2(e);if(u===0)return e;const a=r.get(e);if(a)return a;const s=new Proxy(e,u===2?o:n);return r.set(e,s),s}function ur(e){return fo(e)?ur(e.__v_raw):!!(e&&e.__v_isReactive)}function fo(e){return!!(e&&e.__v_isReadonly)}function xn(e){return!!(e&&e.__v_isShallow)}function ul(e){return e?!!e.__v_raw:!1}function He(e){const t=e&&e.__v_raw;return t?He(t):e}function _d(e){return!ot(e,"__v_skip")&&Object.isExtensible(e)&&yg(e,"__v_skip",!0),e}const Un=e=>Qe(e)?_t(e):e,Du=e=>Qe(e)?Mo(e):e;function rt(e){return e?e.__v_isRef===!0:!1}function R(e){return Ng(e,!1)}function Me(e){return Ng(e,!0)}function Ng(e,t){return rt(e)?e:new R2(e,t)}class R2{constructor(t,n){this.dep=new tl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:He(t),this._value=n?t:Un(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,o=this.__v_isShallow||xn(t)||fo(t);t=o?t:He(t),Vt(t,n)&&(this._rawValue=t,this._value=o?t:Un(t),this.dep.trigger())}}function jg(e){e.dep&&e.dep.trigger()}function f(e){return rt(e)?e.value:e}function ke(e){return _e(e)?e():f(e)}const L2={get:(e,t,n)=>t==="__v_raw"?e:f(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return rt(r)&&!rt(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Vg(e){return ur(e)?e:new Proxy(e,L2)}class q2{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new tl,{get:o,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=o,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function es(e){return new q2(e)}function mt(e){const t=De(e)?new Array(e.length):{};for(const n in e)t[n]=zg(e,n);return t}class $2{constructor(t,n,o){this._object=t,this._defaultValue=o,this.__v_isRef=!0,this._value=void 0,this._key=Dn(n)?n:String(n),this._raw=He(t);let r=!0,u=t;if(!De(t)||Dn(this._key)||!Xi(this._key))do r=!ul(u)||xn(u);while(r&&(u=u.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=f(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&rt(this._raw[this._key])){const n=this._object[this._key];if(rt(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return b2(this._raw,this._key)}}class N2{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Ye(e,t,n){return rt(e)?e:_e(e)?new N2(e):Qe(e)&&arguments.length>1?zg(e,t,n):R(e)}function zg(e,t,n){return new $2(e,t,n)}class j2{constructor(t,n,o){this.fn=t,this.setter=n,this._value=void 0,this.dep=new tl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ta-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&ct!==this)return Bg(this,!0),!0}get value(){const t=this.dep.track();return Sg(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function V2(e,t,n=!1){let o,r;return _e(e)?o=e:(o=e.get,r=e.set),new j2(o,r,n)}const ws={},hi=new WeakMap;let _r;function z2(e,t=!1,n=_r){if(n){let o=hi.get(n);o||hi.set(n,o=[]),o.push(e)}}function U2(e,t,n=Xe){const{immediate:o,deep:r,once:u,scheduler:a,augmentJob:s,call:i}=n,c=C=>r?C:xn(C)||r===!1||r===0?tr(C,1):tr(C);let l,d,p,h,m=!1,g=!1;if(rt(e)?(d=()=>e.value,m=xn(e)):ur(e)?(d=()=>c(e),m=!0):De(e)?(g=!0,m=e.some(C=>ur(C)||xn(C)),d=()=>e.map(C=>{if(rt(C))return C.value;if(ur(C))return c(C);if(_e(C))return i?i(C,2):C()})):_e(e)?t?d=i?()=>i(e,2):e:d=()=>{if(p){Fo();try{p()}finally{Po()}}const C=_r;_r=l;try{return i?i(e,3,[h]):e(h)}finally{_r=C}}:d=io,t&&r){const C=d,w=r===!0?1/0:r;d=()=>tr(C(),w)}const y=ho(),E=()=>{l.stop(),y&&y.active&&Ed(y.effects,l)};if(u&&t){const C=t;t=(...w)=>{C(...w),E()}}let b=g?new Array(e.length).fill(ws):ws;const v=C=>{if(!(!(l.flags&1)||!l.dirty&&!C))if(t){const w=l.run();if(r||m||(g?w.some((B,x)=>Vt(B,b[x])):Vt(w,b))){p&&p();const B=_r;_r=l;try{const x=[w,b===ws?void 0:g&&b[0]===ws?[]:b,h];b=w,i?i(t,3,x):t(...x)}finally{_r=B}}}else l.run()};return s&&s(v),l=new Dg(d),l.scheduler=a?()=>a(v,!1):v,h=C=>z2(C,!1,l),p=l.onStop=()=>{const C=hi.get(l);if(C){if(i)i(C,4);else for(const w of C)w();hi.delete(l)}},t?o?v(!0):b=l.run():a?a(v.bind(null,!0),!0):l.run(),E.pause=l.pause.bind(l),E.resume=l.resume.bind(l),E.stop=E,E}function tr(e,t=1/0,n){if(t<=0||!Qe(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,rt(e))tr(e.value,t,n);else if(De(e))for(let o=0;o{tr(o,t,n)});else if(xd(e)){for(const o in e)tr(e[o],t,n);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&tr(e[o],t,n)}return e}function ts(e,t,n,o){try{return o?e(...o):e()}catch(r){Ru(r,t,n)}}function Hn(e,t,n,o){if(_e(e)){const r=ts(e,t,n,o);return r&&Cd(r)&&r.catch(u=>{Ru(u,t,n)}),r}if(De(e)){const r=[];for(let u=0;u>>1,r=nn[o],u=Ma(r);u=Ma(n)?nn.push(e):nn.splice(K2(t),0,e),e.flags|=1,Hg()}}function Hg(){mi||(mi=Ug.then(Kg))}function Pa(e){De(e)?mu.push(...e):Qo&&e.id===-1?Qo.splice(uu+1,0,e):e.flags&1||(mu.push(e),e.flags|=1),Hg()}function fp(e,t,n=to+1){for(;nMa(n)-Ma(o));if(mu.length=0,Qo){Qo.push(...t);return}for(Qo=t,uu=0;uue.id==null?e.flags&2?-1:1/0:e.id;function Kg(e){try{for(to=0;to{o._d&&xi(-1);const u=vi(t);let a;try{a=e(...r)}finally{vi(u),o._d&&xi(1)}return a};return o._n=!0,o._c=!0,o._d=!0,o}function no(e,t,n,o){const r=e.dirs,u=t&&t.dirs;for(let a=0;a1)return n&&_e(t)?t.call(o&&o.proxy):t}}function Lu(){return!!(We()||Rr)}const W2=Symbol.for("v-scx"),G2=()=>Ue(W2);function Ze(e,t){return ns(e,null,t)}function Gg(e,t){return ns(e,null,{flush:"post"})}function Yg(e,t){return ns(e,null,{flush:"sync"})}function ye(e,t,n){return ns(e,t,n)}function ns(e,t,n=Xe){const{immediate:o,deep:r,flush:u,once:a}=n,s=Bt({},n),i=t&&o||!t&&u!=="post";let c;if(zr){if(u==="sync"){const h=G2();c=h.__watcherHandles||(h.__watcherHandles=[])}else if(!i){const h=()=>{};return h.stop=io,h.resume=io,h.pause=io,h}}const l=zt;s.call=(h,m,g)=>Hn(h,l,m,g);let d=!1;u==="post"?s.scheduler=h=>{kt(h,l&&l.suspense)}:u!=="sync"&&(d=!0,s.scheduler=(h,m)=>{m?h():kd(h)}),s.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,l&&(h.id=l.uid,h.i=l))};const p=U2(e,t,s);return zr&&(c?c.push(p):i&&p()),p}function Y2(e,t,n){const o=this.proxy,r=pt(e)?e.includes(".")?Zg(o,e):()=>o[e]:e.bind(o,o);let u;_e(t)?u=t:(u=t.handler,n=t);const a=qu(this),s=ns(r,u.bind(o),n);return a(),s}function Zg(e,t){const n=t.split(".");return()=>{let o=e;for(let r=0;re.__isTeleport,Tr=e=>e&&(e.disabled||e.disabled===""),Z2=e=>e&&(e.defer||e.defer===""),pp=e=>typeof SVGElement<"u"&&e instanceof SVGElement,hp=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Vc=(e,t)=>{const n=e&&e.to;return pt(n)?t?t(n):null:n},X2={name:"Teleport",__isTeleport:!0,process(e,t,n,o,r,u,a,s,i,c){const{mc:l,pc:d,pbc:p,o:{insert:h,querySelector:m,createText:g,createComment:y}}=c,E=Tr(t.props);let{dynamicChildren:b}=t;const v=(B,x,_)=>{B.shapeFlag&16&&l(B.children,x,_,r,u,a,s,i)},C=(B=t)=>{const x=Tr(B.props),_=B.target=Vc(B.props,m),S=zc(_,B,g,h);_&&(a!=="svg"&&pp(_)?a="svg":a!=="mathml"&&hp(_)&&(a="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(_),x||(v(B,_,S),fa(B,!1)))},w=B=>{const x=()=>{yr.get(B)===x&&(yr.delete(B),Tr(B.props)&&(v(B,n,B.anchor),fa(B,!0)),C(B))};yr.set(B,x),kt(x,u)};if(e==null){const B=t.el=g(""),x=t.anchor=g("");if(h(B,n,o),h(x,n,o),Z2(t.props)||u&&u.pendingBranch){w(t);return}E&&(v(t,n,x),fa(t,!0)),C()}else{t.el=e.el;const B=t.anchor=e.anchor,x=yr.get(e);if(x){x.flags|=8,yr.delete(e),w(t);return}t.targetStart=e.targetStart;const _=t.target=e.target,S=t.targetAnchor=e.targetAnchor,O=Tr(e.props),H=O?n:_,N=O?B:S;if(a==="svg"||pp(_)?a="svg":(a==="mathml"||hp(_))&&(a="mathml"),b?(p(e.dynamicChildren,b,H,r,u,a,s),Id(e,t,!0)):i||d(e,t,H,N,r,u,a,s,!1),E)O?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ds(t,n,B,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const J=t.target=Vc(t.props,m);J&&Ds(t,J,null,c,0)}else O&&Ds(t,_,S,c,1);fa(t,E)}},remove(e,t,n,{um:o,o:{remove:r}},u){const{shapeFlag:a,children:s,anchor:i,targetStart:c,targetAnchor:l,target:d,props:p}=e;let h=u||!Tr(p);const m=yr.get(e);if(m&&(m.flags|=8,yr.delete(e),h=!1),d&&(r(c),r(l)),u&&r(i),a&16)for(let g=0;g{e.isMounted=!0}),mo(()=>{e.isUnmounting=!0}),e}const kn=[Function,Array],ev={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:kn,onEnter:kn,onAfterEnter:kn,onEnterCancelled:kn,onBeforeLeave:kn,onLeave:kn,onAfterLeave:kn,onLeaveCancelled:kn,onBeforeAppear:kn,onAppear:kn,onAfterAppear:kn,onAppearCancelled:kn},tv=e=>{const t=e.subTree;return t.component?tv(t.component):t},Q2={name:"BaseTransition",props:ev,setup(e,{slots:t}){const n=We(),o=Qg();return()=>{const r=t.default&&Sd(t.default(),!0);if(!r||!r.length)return;const u=nv(r),a=He(e),{mode:s}=a;if(o.isLeaving)return Nl(u);const i=mp(u);if(!i)return Nl(u);let c=Oa(i,a,o,n,d=>c=d);i.type!==bt&&lr(i,c);let l=n.subTree&&mp(n.subTree);if(l&&l.type!==bt&&!jn(l,i)&&tv(n).type!==bt){let d=Oa(l,a,o,n);if(lr(l,d),s==="out-in"&&i.type!==bt)return o.isLeaving=!0,d.afterLeave=()=>{o.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,l=void 0},Nl(u);s==="in-out"&&i.type!==bt?d.delayLeave=(p,h,m)=>{const g=ov(o,l);g[String(l.key)]=l,p[oo]=()=>{h(),p[oo]=void 0,delete c.delayedLeave,l=void 0},c.delayedLeave=()=>{m(),delete c.delayedLeave,l=void 0}}:l=void 0}else l&&(l=void 0);return u}}};function nv(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==bt){t=n;break}}return t}const eC=Q2;function ov(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Oa(e,t,n,o,r){const{appear:u,mode:a,persisted:s=!1,onBeforeEnter:i,onEnter:c,onAfterEnter:l,onEnterCancelled:d,onBeforeLeave:p,onLeave:h,onAfterLeave:m,onLeaveCancelled:g,onBeforeAppear:y,onAppear:E,onAfterAppear:b,onAppearCancelled:v}=t,C=String(e.key),w=ov(n,e),B=(S,O)=>{S&&Hn(S,o,9,O)},x=(S,O)=>{const H=O[1];B(S,O),De(S)?S.every(N=>N.length<=1)&&H():S.length<=1&&H()},_={mode:a,persisted:s,beforeEnter(S){let O=i;if(!n.isMounted)if(u)O=y||i;else return;S[oo]&&S[oo](!0);const H=w[C];H&&jn(e,H)&&H.el[oo]&&H.el[oo](),B(O,[S])},enter(S){if(w[C]===e)return;let O=c,H=l,N=d;if(!n.isMounted)if(u)O=E||c,H=b||l,N=v||d;else return;let J=!1;S[ea]=$=>{J||(J=!0,$?B(N,[S]):B(H,[S]),_.delayedLeave&&_.delayedLeave(),S[ea]=void 0)};const G=S[ea].bind(null,!1);O?x(O,[S,G]):G()},leave(S,O){const H=String(e.key);if(S[ea]&&S[ea](!0),n.isUnmounting)return O();B(p,[S]);let N=!1;S[oo]=G=>{N||(N=!0,O(),G?B(g,[S]):B(m,[S]),S[oo]=void 0,w[H]===e&&delete w[H])};const J=S[oo].bind(null,!1);w[H]=e,h?x(h,[S,J]):J()},clone(S){const O=Oa(S,t,n,o,r);return r&&r(O),O}};return _}function Nl(e){if(rs(e))return e=An(e),e.children=null,e}function mp(e){if(!rs(e))return Jg(e.type)&&e.children?nv(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&_e(n.default))return n.default()}}function lr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,lr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Sd(e,t=!1,n){let o=[],r=0;for(let u=0;u1)for(let u=0;un.value,set:u=>n.value=u})}return n}function gp(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const yi=new WeakMap;function gu(e,t,n,o,r=!1){if(De(e)){e.forEach((g,y)=>gu(g,t&&(De(t)?t[y]:t),n,o,r));return}if(So(o)&&!r){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&gu(e,t,n,o.component.subTree);return}const u=o.shapeFlag&4?qd(o.component):o.el,a=r?null:u,{i:s,r:i}=e,c=t&&t.r,l=s.refs===Xe?s.refs={}:s.refs,d=s.setupState,p=He(d),h=d===Xe?mg:g=>gp(l,g)?!1:ot(p,g),m=(g,y)=>!(y&&gp(l,y));if(c!=null&&c!==i){if(vp(t),pt(c))l[c]=null,h(c)&&(d[c]=null);else if(rt(c)){const g=t;m(c,g.k)&&(c.value=null),g.k&&(l[g.k]=null)}}if(_e(i))ts(i,s,12,[a,l]);else{const g=pt(i),y=rt(i);if(g||y){const E=()=>{if(e.f){const b=g?h(i)?d[i]:l[i]:m()||!e.k?i.value:l[e.k];if(r)De(b)&&Ed(b,u);else if(De(b))b.includes(u)||b.push(u);else if(g)l[i]=[u],h(i)&&(d[i]=l[i]);else{const v=[u];m(i,e.k)&&(i.value=v),e.k&&(l[e.k]=v)}}else g?(l[i]=a,h(i)&&(d[i]=a)):y&&(m(i,e.k)&&(i.value=a),e.k&&(l[e.k]=a))};if(a){const b=()=>{E(),yi.delete(e)};b.id=-1,yi.set(e,b),kt(b,n)}else vp(e),E()}}}function vp(e){const t=yi.get(e);t&&(t.flags|=8,yi.delete(e))}let yp=!1;const ou=()=>{yp||(console.error("Hydration completed but contains mismatches."),yp=!0)},tC=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",nC=e=>e.namespaceURI.includes("MathML"),As=e=>{if(e.nodeType===1){if(tC(e))return"svg";if(nC(e))return"mathml"}},lu=e=>e.nodeType===8;function oC(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:u,parentNode:a,remove:s,insert:i,createComment:c}}=e,l=(v,C)=>{if(!C.hasChildNodes()){n(null,v,C),gi(),C._vnode=v;return}d(C.firstChild,v,null,null,null),gi(),C._vnode=v},d=(v,C,w,B,x,_=!1)=>{_=_||!!C.dynamicChildren;const S=lu(v)&&v.data==="[",O=()=>g(v,C,w,B,x,S),{type:H,ref:N,shapeFlag:J,patchFlag:G}=C;let $=v.nodeType;C.el=v,G===-2&&(_=!1,C.dynamicChildren=null);let I=null;switch(H){case Lr:$!==3?C.children===""?(i(C.el=r(""),a(v),v),I=v):I=O():(v.data!==C.children&&(ou(),v.data=C.children),I=u(v));break;case bt:b(v)?(I=u(v),E(C.el=v.content.firstChild,v,w)):$!==8||S?I=O():I=u(v);break;case Qs:if(S&&(v=u(v),$=v.nodeType),$===1||$===3){I=v;const W=!C.children.length;for(let K=0;K{_=_||!!C.dynamicChildren;const{type:S,props:O,patchFlag:H,shapeFlag:N,dirs:J,transition:G}=C,$=S==="input"||S==="option";if($||H!==-1){J&&no(C,null,w,"created");let I=!1;if(b(v)){I=Iv(null,G)&&w&&w.vnode.props&&w.vnode.props.appear;const K=v.content.firstChild;if(I){const de=K.getAttribute("class");de&&(K.$cls=de),G.beforeEnter(K)}E(K,v,w),C.el=v=K}if(N&16&&!(O&&(O.innerHTML||O.textContent))){let K=h(v.firstChild,C,v,w,B,x,_);for(;K;){Bs(v,1)||ou();const de=K;K=K.nextSibling,s(de)}}else if(N&8){let K=C.children;K[0]===` +`&&(v.tagName==="PRE"||v.tagName==="TEXTAREA")&&(K=K.slice(1));const{textContent:de}=v;de!==K&&de!==K.replace(/\r\n|\r/g,` +`)&&(Bs(v,0)||ou(),v.textContent=C.children)}if(O){if($||!_||H&48){const K=v.tagName.includes("-");for(const de in O)($&&(de.endsWith("value")||de==="indeterminate")||Ja(de)&&!Or(de)||de[0]==="."||K&&!Or(de))&&o(v,de,null,O[de],void 0,w)}else if(O.onClick)o(v,"onClick",null,O.onClick,void 0,w);else if(H&4&&ur(O.style))for(const K in O.style)O.style[K]}let W;(W=O&&O.onVnodeBeforeMount)&&pn(W,w,C),J&&no(C,null,w,"beforeMount"),((W=O&&O.onVnodeMounted)||J||I)&&$v(()=>{W&&pn(W,w,C),I&&G.enter(v),J&&no(C,null,w,"mounted")},B)}return v.nextSibling},h=(v,C,w,B,x,_,S)=>{S=S||!!C.dynamicChildren;const O=C.children,H=O.length;for(let N=0;N{const{slotScopeIds:S}=C;S&&(x=x?x.concat(S):S);const O=a(v),H=h(u(v),C,O,w,B,x,_);return H&&lu(H)&&H.data==="]"?u(C.anchor=H):(ou(),i(C.anchor=c("]"),O,H),H)},g=(v,C,w,B,x,_)=>{if(Bs(v.parentElement,1)||ou(),C.el=null,_){const H=y(v);for(;;){const N=u(v);if(N&&N!==H)s(N);else break}}const S=u(v),O=a(v);return s(v),n(null,C,O,S,w,B,As(O),x),w&&(w.vnode.el=C.el,il(w,C.el)),S},y=(v,C="[",w="]")=>{let B=0;for(;v;)if(v=u(v),v&&lu(v)&&(v.data===C&&B++,v.data===w)){if(B===0)return u(v);B--}return v},E=(v,C,w)=>{const B=C.parentNode;B&&B.replaceChild(v,C);let x=w;for(;x;)x.vnode.el===C&&(x.vnode.el=x.subTree.el=v),x=x.parent},b=v=>v.nodeType===1&&v.tagName==="TEMPLATE";return[l,d]}const bp="data-allow-mismatch",rC={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function Bs(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(bp);)e=e.parentElement;const n=e&&e.getAttribute(bp);if(n==null)return!1;if(n==="")return!0;{const o=n.split(",");return t===0&&o.includes("children")?!0:o.includes(rC[t])}}el().requestIdleCallback;el().cancelIdleCallback;function uC(e,t){if(lu(e)&&e.data==="["){let n=1,o=e.nextSibling;for(;o;){if(o.nodeType===1){if(t(o)===!1)break}else if(lu(o))if(o.data==="]"){if(--n===0)break}else o.data==="["&&n++;o=o.nextSibling}}else t(e)}const So=e=>!!e.type.__asyncLoader;function Ae(e){_e(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,hydrate:u,timeout:a,suspensible:s=!0,onError:i}=e;let c=null,l,d=0;const p=()=>(d++,c=null,h()),h=()=>{let m;return c||(m=c=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),i)return new Promise((y,E)=>{i(g,()=>y(p()),()=>E(g),d+1)});throw g}).then(g=>m!==c&&c?c:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),l=g,g)))};return L({name:"AsyncComponentWrapper",__asyncLoader:h,__asyncHydrate(m,g,y){let E=!1;(g.bu||(g.bu=[])).push(()=>E=!0);const b=()=>{E||y()},v=u?()=>{const C=u(b,w=>uC(m,w));C&&(g.bum||(g.bum=[])).push(C)}:b;l?v():h().then(()=>!g.isUnmounted&&v())},get __asyncResolved(){return l},setup(){const m=zt;if(Fd(m),l)return()=>_s(l,m);const g=v=>{c=null,Ru(v,m,13,!o)};if(s&&m.suspense||zr)return h().then(v=>()=>_s(v,m)).catch(v=>(g(v),()=>o?q(o,{error:v}):null));const y=R(!1),E=R(),b=R(!!r);return r&&setTimeout(()=>{b.value=!1},r),a!=null&&setTimeout(()=>{if(!y.value&&!E.value){const v=new Error(`Async component timed out after ${a}ms.`);g(v),E.value=v}},a),h().then(()=>{y.value=!0,m.parent&&rs(m.parent.vnode)&&m.parent.update()}).catch(v=>{g(v),E.value=v}),()=>{if(y.value&&l)return _s(l,m);if(E.value&&o)return q(o,{error:E.value});if(n&&!b.value)return _s(n,m)}}})}function _s(e,t){const{ref:n,props:o,children:r,ce:u}=t.vnode,a=q(e,o,r);return a.ref=n,a.ce=u,delete t.vnode.ce,a}const rs=e=>e.type.__isKeepAlive,aC={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=We(),o=n.ctx;if(!o.renderer)return()=>{const b=t.default&&t.default();return b&&b.length===1?b[0]:b};const r=new Map,u=new Set;let a=null;const s=n.suspense,{renderer:{p:i,m:c,um:l,o:{createElement:d}}}=o,p=d("div");o.activate=(b,v,C,w,B)=>{const x=b.component;c(b,v,C,0,s),i(x.vnode,b,v,C,x,s,w,b.slotScopeIds,B),kt(()=>{x.isDeactivated=!1,x.a&&ya(x.a);const _=b.props&&b.props.onVnodeMounted;_&&pn(_,x.parent,b)},s)},o.deactivate=b=>{const v=b.component;Ei(v.m),Ei(v.a),c(b,p,null,1,s),kt(()=>{v.da&&ya(v.da);const C=b.props&&b.props.onVnodeUnmounted;C&&pn(C,v.parent,b),v.isDeactivated=!0},s)};function h(b){jl(b),l(b,n,s,!0)}function m(b){r.forEach((v,C)=>{const w=Zc(So(v)?v.type.__asyncResolved||{}:v.type);w&&!b(w)&&g(C)})}function g(b){const v=r.get(b);v&&(!a||!jn(v,a))?h(v):a&&jl(a),r.delete(b),u.delete(b)}ye(()=>[e.include,e.exclude],([b,v])=>{b&&m(C=>pa(b,C)),v&&m(C=>!pa(v,C))},{flush:"post",deep:!0});let y=null;const E=()=>{y!=null&&(Ci(n.subTree.type)?kt(()=>{r.set(y,ks(n.subTree))},n.subTree.suspense):r.set(y,ks(n.subTree)))};return $e(E),Gr(E),mo(()=>{r.forEach(b=>{const{subTree:v,suspense:C}=n,w=ks(v);if(b.type===w.type&&b.key===w.key){jl(w);const B=w.component.da;B&&kt(B,C);return}h(b)})}),()=>{if(y=null,!t.default)return a=null;const b=t.default(),v=b[0];if(b.length>1)return a=null,b;if(!Vr(v)||!(v.shapeFlag&4)&&!(v.shapeFlag&128))return a=null,v;let C=ks(v);if(C.type===bt)return a=null,C;const w=C.type,B=Zc(So(C)?C.type.__asyncResolved||{}:w),{include:x,exclude:_,max:S}=e;if(x&&(!B||!pa(x,B))||_&&B&&pa(_,B))return C.shapeFlag&=-257,a=C,v;const O=C.key==null?w:C.key,H=r.get(O);return C.el&&(C=An(C),v.shapeFlag&128&&(v.ssContent=C)),y=O,H?(C.el=H.el,C.component=H.component,C.transition&&lr(C,C.transition),C.shapeFlag|=512,u.delete(O),u.add(O)):(u.add(O),S&&u.size>parseInt(S,10)&&g(u.values().next().value)),C.shapeFlag|=256,a=C,Ci(v.type)?v:C}}},sC=aC;function pa(e,t){return De(e)?e.some(n=>pa(n,t)):pt(e)?e.split(",").includes(t):u2(e)?(e.lastIndex=0,e.test(t)):!1}function uv(e,t){sv(e,"a",t)}function av(e,t){sv(e,"da",t)}function sv(e,t,n=zt){const o=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(al(t,o,n),n){let r=n.parent;for(;r&&r.parent;)rs(r.parent.vnode)&&iC(o,t,n,r),r=r.parent}}function iC(e,t,n,o){const r=al(t,e,o,!0);Ht(()=>{Ed(o[t],r)},n)}function jl(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function ks(e){return e.shapeFlag&128?e.ssContent:e}function al(e,t,n=zt,o=!1){if(n){const r=n[e]||(n[e]=[]),u=t.__weh||(t.__weh=(...a)=>{Fo();const s=qu(n),i=Hn(t,n,e,a);return s(),Po(),i});return o?r.unshift(u):r.push(u),u}}const qo=e=>(t,n=zt)=>{(!zr||e==="sp")&&al(e,(...o)=>t(...o),n)},Pd=qo("bm"),$e=qo("m"),iv=qo("bu"),Gr=qo("u"),mo=qo("bum"),Ht=qo("um"),lC=qo("sp"),cC=qo("rtg"),dC=qo("rtc");function lv(e,t=zt){al("ec",e,t)}const cv="components";function Ep(e,t){return fv(cv,e,!0,t)||e}const dv=Symbol.for("v-ndc");function Rt(e){return pt(e)?fv(cv,e,!1)||e:e||dv}function fv(e,t,n=!0,o=!1){const r=on||zt;if(r){const u=r.type;{const s=Zc(u,!1);if(s&&(s===t||s===Ft(t)||s===Qi(Ft(t))))return u}const a=Cp(r[e]||u[e],t)||Cp(r.appContext[e],t);return!a&&o?u:a}}function Cp(e,t){return e&&(e[t]||e[Ft(t)]||e[Qi(Ft(t))])}function yt(e,t,n,o){let r;const u=n,a=De(e);if(a||pt(e)){const s=a&&ur(e);let i=!1,c=!1;s&&(i=!xn(e),c=fo(e),e=nl(e)),r=new Array(e.length);for(let l=0,d=e.length;lt(s,i,void 0,u));else{const s=Object.keys(e);r=new Array(s.length);for(let i=0,c=s.length;i{const u=o.fn(...r);return u&&(u.key=o.key),u}:o.fn)}return e}function P(e,t,n={},o,r){if(on.ce||on.parent&&So(on.parent)&&on.parent.ce){const c=Object.keys(n).length>0;return t!=="default"&&(n.name=t),D(),k(Ce,null,[q("slot",n,o&&o())],c?-2:64)}let u=e[t];u&&u._c&&(u._d=!1),D();const a=u&&pv(u(n)),s=n.key||a&&a.key,i=k(Ce,{key:(s&&!Dn(s)?s:`_${t}`)+(!a&&o?"_fb":"")},a||(o?o():[]),a&&e._===1?64:-2);return!r&&i.scopeId&&(i.slotScopeIds=[i.scopeId+"-s"]),u&&u._c&&(u._d=!0),i}function pv(e){return e.some(t=>Vr(t)?!(t.type===bt||t.type===Ce&&!pv(t.children)):!0)?e:null}function as(e,t){const n={};for(const o in e)n[hu(o)]=e[o];return n}const Uc=e=>e?zv(e)?qd(e):Uc(e.parent):null,Ca=Bt(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Uc(e.parent),$root:e=>Uc(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ev(e),$forceUpdate:e=>e.f||(e.f=()=>{kd(e.update)}),$nextTick:e=>e.n||(e.n=Oe.bind(e.proxy)),$watch:e=>Y2.bind(e)}),Vl=(e,t)=>e!==Xe&&!e.__isScriptSetup&&ot(e,t),fC={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:o,data:r,props:u,accessCache:a,type:s,appContext:i}=e;if(t[0]!=="$"){const p=a[t];if(p!==void 0)switch(p){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return u[t]}else{if(Vl(o,t))return a[t]=1,o[t];if(r!==Xe&&ot(r,t))return a[t]=2,r[t];if(ot(u,t))return a[t]=3,u[t];if(n!==Xe&&ot(n,t))return a[t]=4,n[t];Hc&&(a[t]=0)}}const c=Ca[t];let l,d;if(c)return t==="$attrs"&&Gt(e.attrs,"get",""),c(e);if((l=s.__cssModules)&&(l=l[t]))return l;if(n!==Xe&&ot(n,t))return a[t]=4,n[t];if(d=i.config.globalProperties,ot(d,t))return d[t]},set({_:e},t,n){const{data:o,setupState:r,ctx:u}=e;return Vl(r,t)?(r[t]=n,!0):o!==Xe&&ot(o,t)?(o[t]=n,!0):ot(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(u[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,props:u,type:a}},s){let i;return!!(n[s]||e!==Xe&&s[0]!=="$"&&ot(e,s)||Vl(t,s)||ot(u,s)||ot(o,s)||ot(Ca,s)||ot(r.config.globalProperties,s)||(i=a.__cssModules)&&i[s])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ot(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function qt(){return mv().slots}function hv(){return mv().attrs}function mv(e){const t=We();return t.setupContext||(t.setupContext=Hv(t))}function Ia(e){return De(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function gv(e,t){const n=Ia(e);for(const o in t){if(o.startsWith("__skip"))continue;let r=n[o];r?De(r)||_e(r)?r=n[o]={type:r,default:t[o]}:r.default=t[o]:r===null&&(r=n[o]={default:t[o]}),r&&t[`__skip_${o}`]&&(r.skipFactory=!0)}return n}function vv(e,t){return!e||!t?e||t:De(e)&&De(t)?e.concat(t):Bt({},Ia(e),Ia(t))}function yv(e){const t=We(),n=zr;let o=e();La(),n&&yu(!1);const r=()=>{qu(t),n&&yu(!0)},u=()=>{We()!==t&&t.scope.off(),La(),n&&yu(!1)};return Cd(o)&&(o=o.catch(a=>{throw r(),Promise.resolve().then(()=>Promise.resolve().then(u)),a})),[o,()=>{r(),Promise.resolve().then(u)}]}let Hc=!0;function pC(e){const t=Ev(e),n=e.proxy,o=e.ctx;Hc=!1,t.beforeCreate&&xp(t.beforeCreate,e,"bc");const{data:r,computed:u,methods:a,watch:s,provide:i,inject:c,created:l,beforeMount:d,mounted:p,beforeUpdate:h,updated:m,activated:g,deactivated:y,beforeDestroy:E,beforeUnmount:b,destroyed:v,unmounted:C,render:w,renderTracked:B,renderTriggered:x,errorCaptured:_,serverPrefetch:S,expose:O,inheritAttrs:H,components:N,directives:J,filters:G}=t;if(c&&hC(c,o,null),a)for(const W in a){const K=a[W];_e(K)&&(o[W]=K.bind(n))}if(r){const W=r.call(n,n);Qe(W)&&(e.data=_t(W))}if(Hc=!0,u)for(const W in u){const K=u[W],de=_e(K)?K.bind(n,n):_e(K.get)?K.get.bind(n,n):io,le=!_e(K)&&_e(K.set)?K.set.bind(n):io,ut=F({get:de,set:le});Object.defineProperty(o,W,{enumerable:!0,configurable:!0,get:()=>ut.value,set:Ve=>ut.value=Ve})}if(s)for(const W in s)bv(s[W],o,n,W);if(i){const W=_e(i)?i.call(n):i;Reflect.ownKeys(W).forEach(K=>{Pt(K,W[K])})}l&&xp(l,e,"c");function I(W,K){De(K)?K.forEach(de=>W(de.bind(n))):K&&W(K.bind(n))}if(I(Pd,d),I($e,p),I(iv,h),I(Gr,m),I(uv,g),I(av,y),I(lv,_),I(dC,B),I(cC,x),I(mo,b),I(Ht,C),I(lC,S),De(O))if(O.length){const W=e.exposed||(e.exposed={});O.forEach(K=>{Object.defineProperty(W,K,{get:()=>n[K],set:de=>n[K]=de,enumerable:!0})})}else e.exposed||(e.exposed={});w&&e.render===io&&(e.render=w),H!=null&&(e.inheritAttrs=H),N&&(e.components=N),J&&(e.directives=J),S&&Fd(e)}function hC(e,t,n=io){De(e)&&(e=Kc(e));for(const o in e){const r=e[o];let u;Qe(r)?"default"in r?u=Ue(r.from||o,r.default,!0):u=Ue(r.from||o):u=Ue(r),rt(u)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>u.value,set:a=>u.value=a}):t[o]=u}}function xp(e,t,n){Hn(De(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function bv(e,t,n,o){let r=o.includes(".")?Zg(n,o):()=>n[o];if(pt(e)){const u=t[e];_e(u)&&ye(r,u)}else if(_e(e))ye(r,e.bind(n));else if(Qe(e))if(De(e))e.forEach(u=>bv(u,t,n,o));else{const u=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(u)&&ye(r,u,e)}}function Ev(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:u,config:{optionMergeStrategies:a}}=e.appContext,s=u.get(t);let i;return s?i=s:!r.length&&!n&&!o?i=t:(i={},r.length&&r.forEach(c=>bi(i,c,a,!0)),bi(i,t,a)),Qe(t)&&u.set(t,i),i}function bi(e,t,n,o=!1){const{mixins:r,extends:u}=t;u&&bi(e,u,n,!0),r&&r.forEach(a=>bi(e,a,n,!0));for(const a in t)if(!(o&&a==="expose")){const s=mC[a]||n&&n[a];e[a]=s?s(e[a],t[a]):t[a]}return e}const mC={data:wp,props:Dp,emits:Dp,methods:ha,computed:ha,beforeCreate:en,created:en,beforeMount:en,mounted:en,beforeUpdate:en,updated:en,beforeDestroy:en,beforeUnmount:en,destroyed:en,unmounted:en,activated:en,deactivated:en,errorCaptured:en,serverPrefetch:en,components:ha,directives:ha,watch:vC,provide:wp,inject:gC};function wp(e,t){return t?e?function(){return Bt(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function gC(e,t){return ha(Kc(e),Kc(t))}function Kc(e){if(De(e)){const t={};for(let n=0;n{let l,d=Xe,p;return Yg(()=>{const h=e[r];Vt(l,h)&&(l=h,c())}),{get(){return i(),n.get?n.get(l):l},set(h){const m=n.set?n.set(h):h;if(!Vt(m,l)&&!(d!==Xe&&Vt(h,d)))return;const g=o.vnode.props;g&&(t in g||r in g||u in g)&&(`onUpdate:${t}`in g||`onUpdate:${r}`in g||`onUpdate:${u}`in g)||(l=h,c()),o.emit(`update:${t}`,m),Vt(h,m)&&Vt(h,d)&&!Vt(m,p)&&c(),d=h,p=m}}});return s[Symbol.iterator]=()=>{let i=0;return{next(){return i<2?{value:i++?a||Xe:s,done:!1}:{done:!0}}}},s}const wv=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ft(t)}Modifiers`]||e[`${Lo(t)}Modifiers`];function EC(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||Xe;let r=n;const u=t.startsWith("update:"),a=u&&wv(o,t.slice(7));a&&(a.trim&&(r=n.map(l=>pt(l)?l.trim():l)),a.number&&(r=n.map(l2)));let s,i=o[s=hu(t)]||o[s=hu(Ft(t))];!i&&u&&(i=o[s=hu(Lo(t))]),i&&Hn(i,e,6,r);const c=o[s+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,Hn(c,e,6,r)}}const CC=new WeakMap;function Dv(e,t,n=!1){const o=n?CC:t.emitsCache,r=o.get(e);if(r!==void 0)return r;const u=e.emits;let a={},s=!1;if(!_e(e)){const i=c=>{const l=Dv(c,t,!0);l&&(s=!0,Bt(a,l))};!n&&t.mixins.length&&t.mixins.forEach(i),e.extends&&i(e.extends),e.mixins&&e.mixins.forEach(i)}return!u&&!s?(Qe(e)&&o.set(e,null),null):(De(u)?u.forEach(i=>a[i]=null):Bt(a,u),Qe(e)&&o.set(e,a),a)}function sl(e,t){return!e||!Ja(t)?!1:(t=t.slice(2).replace(/Once$/,""),ot(e,t[0].toLowerCase()+t.slice(1))||ot(e,Lo(t))||ot(e,t))}function zl(e){const{type:t,vnode:n,proxy:o,withProxy:r,propsOptions:[u],slots:a,attrs:s,emit:i,render:c,renderCache:l,props:d,data:p,setupState:h,ctx:m,inheritAttrs:g}=e,y=vi(e);let E,b;try{if(n.shapeFlag&4){const C=r||o,w=C;E=En(c.call(w,C,l,d,h,p,m)),b=s}else{const C=t;E=En(C.length>1?C(d,{attrs:s,slots:a,emit:i}):C(d,null)),b=t.props?s:wC(s)}}catch(C){xa.length=0,Ru(C,e,1),E=q(bt)}let v=E;if(b&&g!==!1){const C=Object.keys(b),{shapeFlag:w}=v;C.length&&w&7&&(u&&C.some(Zi)&&(b=DC(b,u)),v=An(v,b,!1,!0))}return n.dirs&&(v=An(v,null,!1,!0),v.dirs=v.dirs?v.dirs.concat(n.dirs):n.dirs),n.transition&&lr(v,n.transition),E=v,vi(y),E}function xC(e,t=!0){let n;for(let o=0;o{let t;for(const n in e)(n==="class"||n==="style"||Ja(n))&&((t||(t={}))[n]=e[n]);return t},DC=(e,t)=>{const n={};for(const o in e)(!Zi(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function AC(e,t,n){const{props:o,children:r,component:u}=e,{props:a,children:s,patchFlag:i}=t,c=u.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&i>=0){if(i&1024)return!0;if(i&16)return o?Ap(o,a,c):!!a;if(i&8){const l=t.dynamicProps;for(let d=0;dObject.create(Bv),kv=e=>Object.getPrototypeOf(e)===Bv;function BC(e,t,n,o=!1){const r={},u=_v();e.propsDefaults=Object.create(null),Sv(e,t,r,u);for(const a in e.propsOptions[0])a in r||(r[a]=void 0);n?e.props=o?r:Pn(r):e.type.props?e.props=r:e.props=u,e.attrs=u}function _C(e,t,n,o){const{props:r,attrs:u,vnode:{patchFlag:a}}=e,s=He(r),[i]=e.propsOptions;let c=!1;if((o||a>0)&&!(a&16)){if(a&8){const l=e.vnode.dynamicProps;for(let d=0;d{i=!0;const[p,h]=Tv(d,t,!0);Bt(a,p),h&&s.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}if(!u&&!i)return Qe(e)&&o.set(e,fu),fu;if(De(u))for(let l=0;le==="_"||e==="_ctx"||e==="$stable",Od=e=>De(e)?e.map(En):[En(e)],SC=(e,t,n)=>{if(t._n)return t;const o=A((...r)=>Od(t(...r)),n);return o._c=!1,o},Fv=(e,t,n)=>{const o=e._ctx;for(const r in e){if(Md(r))continue;const u=e[r];if(_e(u))t[r]=SC(r,u,o);else if(u!=null){const a=Od(u);t[r]=()=>a}}},Pv=(e,t)=>{const n=Od(t);e.slots.default=()=>n},Mv=(e,t,n)=>{for(const o in t)(n||!Md(o))&&(e[o]=t[o])},TC=(e,t,n)=>{const o=e.slots=_v();if(e.vnode.shapeFlag&32){const r=t._;r?(Mv(o,t,n),n&&yg(o,"_",r,!0)):Fv(t,o)}else t&&Pv(e,t)},FC=(e,t,n)=>{const{vnode:o,slots:r}=e;let u=!0,a=Xe;if(o.shapeFlag&32){const s=t._;s?n&&s===1?u=!1:Mv(r,t,n):(u=!t.$stable,Fv(t,r)),a=t}else t&&(Pv(e,t),a={default:1});if(u)for(const s in r)!Md(s)&&a[s]==null&&delete r[s]},kt=$v;function PC(e){return Ov(e)}function MC(e){return Ov(e,oC)}function Ov(e,t){const n=el();n.__VUE__=!0;const{insert:o,remove:r,patchProp:u,createElement:a,createText:s,createComment:i,setText:c,setElementText:l,parentNode:d,nextSibling:p,setScopeId:h=io,insertStaticContent:m}=e,g=(T,M,V,te=null,X=null,z=null,ue=void 0,oe=null,ee=!!M.dynamicChildren)=>{if(T===M)return;T&&!jn(T,M)&&(te=Z(T),Ve(T,X,z,!0),T=null),M.patchFlag===-2&&(ee=!1,M.dynamicChildren=null);const{type:Q,ref:fe,shapeFlag:ie}=M;switch(Q){case Lr:y(T,M,V,te);break;case bt:E(T,M,V,te);break;case Qs:T==null&&b(M,V,te,ue);break;case Ce:N(T,M,V,te,X,z,ue,oe,ee);break;default:ie&1?w(T,M,V,te,X,z,ue,oe,ee):ie&6?J(T,M,V,te,X,z,ue,oe,ee):(ie&64||ie&128)&&Q.process(T,M,V,te,X,z,ue,oe,ee,Ee)}fe!=null&&X?gu(fe,T&&T.ref,z,M||T,!M):fe==null&&T&&T.ref!=null&&gu(T.ref,null,z,T,!0)},y=(T,M,V,te)=>{if(T==null)o(M.el=s(M.children),V,te);else{const X=M.el=T.el;M.children!==T.children&&c(X,M.children)}},E=(T,M,V,te)=>{T==null?o(M.el=i(M.children||""),V,te):M.el=T.el},b=(T,M,V,te)=>{[T.el,T.anchor]=m(T.children,M,V,te,T.el,T.anchor)},v=({el:T,anchor:M},V,te)=>{let X;for(;T&&T!==M;)X=p(T),o(T,V,te),T=X;o(M,V,te)},C=({el:T,anchor:M})=>{let V;for(;T&&T!==M;)V=p(T),r(T),T=V;r(M)},w=(T,M,V,te,X,z,ue,oe,ee)=>{if(M.type==="svg"?ue="svg":M.type==="math"&&(ue="mathml"),T==null)B(M,V,te,X,z,ue,oe,ee);else{const Q=T.el&&T.el._isVueCE?T.el:null;try{Q&&Q._beginPatch(),S(T,M,X,z,ue,oe,ee)}finally{Q&&Q._endPatch()}}},B=(T,M,V,te,X,z,ue,oe)=>{let ee,Q;const{props:fe,shapeFlag:ie,transition:ge,dirs:Be}=T;if(ee=T.el=a(T.type,z,fe&&fe.is,fe),ie&8?l(ee,T.children):ie&16&&_(T.children,ee,null,te,X,Ul(T,z),ue,oe),Be&&no(T,null,te,"created"),x(ee,T,T.scopeId,ue,te),fe){for(const et in fe)et!=="value"&&!Or(et)&&u(ee,et,null,fe[et],z,te);"value"in fe&&u(ee,"value",null,fe.value,z),(Q=fe.onVnodeBeforeMount)&&pn(Q,te,T)}Be&&no(T,null,te,"beforeMount");const Le=Iv(X,ge);Le&&ge.beforeEnter(ee),o(ee,M,V),((Q=fe&&fe.onVnodeMounted)||Le||Be)&&kt(()=>{Q&&pn(Q,te,T),Le&&ge.enter(ee),Be&&no(T,null,te,"mounted")},X)},x=(T,M,V,te,X)=>{if(V&&h(T,V),te)for(let z=0;z{for(let Q=ee;Q{const oe=M.el=T.el;let{patchFlag:ee,dynamicChildren:Q,dirs:fe}=M;ee|=T.patchFlag&16;const ie=T.props||Xe,ge=M.props||Xe;let Be;if(V&&br(V,!1),(Be=ge.onVnodeBeforeUpdate)&&pn(Be,V,M,T),fe&&no(M,T,V,"beforeUpdate"),V&&br(V,!0),(ie.innerHTML&&ge.innerHTML==null||ie.textContent&&ge.textContent==null)&&l(oe,""),Q?O(T.dynamicChildren,Q,oe,V,te,Ul(M,X),z):ue||K(T,M,oe,null,V,te,Ul(M,X),z,!1),ee>0){if(ee&16)H(oe,ie,ge,V,X);else if(ee&2&&ie.class!==ge.class&&u(oe,"class",null,ge.class,X),ee&4&&u(oe,"style",ie.style,ge.style,X),ee&8){const Le=M.dynamicProps;for(let et=0;et{Be&&pn(Be,V,M,T),fe&&no(M,T,V,"updated")},te)},O=(T,M,V,te,X,z,ue)=>{for(let oe=0;oe{if(M!==V){if(M!==Xe)for(const z in M)!Or(z)&&!(z in V)&&u(T,z,M[z],null,X,te);for(const z in V){if(Or(z))continue;const ue=V[z],oe=M[z];ue!==oe&&z!=="value"&&u(T,z,oe,ue,X,te)}"value"in V&&u(T,"value",M.value,V.value,X)}},N=(T,M,V,te,X,z,ue,oe,ee)=>{const Q=M.el=T?T.el:s(""),fe=M.anchor=T?T.anchor:s("");let{patchFlag:ie,dynamicChildren:ge,slotScopeIds:Be}=M;Be&&(oe=oe?oe.concat(Be):Be),T==null?(o(Q,V,te),o(fe,V,te),_(M.children||[],V,fe,X,z,ue,oe,ee)):ie>0&&ie&64&&ge&&T.dynamicChildren&&T.dynamicChildren.length===ge.length?(O(T.dynamicChildren,ge,V,X,z,ue,oe),(M.key!=null||X&&M===X.subTree)&&Id(T,M,!0)):K(T,M,V,fe,X,z,ue,oe,ee)},J=(T,M,V,te,X,z,ue,oe,ee)=>{M.slotScopeIds=oe,T==null?M.shapeFlag&512?X.ctx.activate(M,V,te,ue,ee):G(M,V,te,X,z,ue,ee):$(T,M,ee)},G=(T,M,V,te,X,z,ue)=>{const oe=T.component=UC(T,te,X);if(rs(T)&&(oe.ctx.renderer=Ee),HC(oe,!1,ue),oe.asyncDep){if(X&&X.registerDep(oe,I,ue),!T.el){const ee=oe.subTree=q(bt);E(null,ee,M,V),T.placeholder=ee.el}}else I(oe,T,M,V,X,z,ue)},$=(T,M,V)=>{const te=M.component=T.component;if(AC(T,M,V))if(te.asyncDep&&!te.asyncResolved){W(te,M,V);return}else te.next=M,te.update();else M.el=T.el,te.vnode=M},I=(T,M,V,te,X,z,ue)=>{const oe=()=>{if(T.isMounted){let{next:ie,bu:ge,u:Be,parent:Le,vnode:et}=T;{const Qt=Rv(T);if(Qt){ie&&(ie.el=et.el,W(T,ie,ue)),Qt.asyncDep.then(()=>{kt(()=>{T.isUnmounted||Q()},X)});return}}let tt=ie,gt;br(T,!1),ie?(ie.el=et.el,W(T,ie,ue)):ie=et,ge&&ya(ge),(gt=ie.props&&ie.props.onVnodeBeforeUpdate)&&pn(gt,Le,ie,et),br(T,!0);const at=zl(T),cn=T.subTree;T.subTree=at,g(cn,at,d(cn.el),Z(cn),T,X,z),ie.el=at.el,tt===null&&il(T,at.el),Be&&kt(Be,X),(gt=ie.props&&ie.props.onVnodeUpdated)&&kt(()=>pn(gt,Le,ie,et),X)}else{let ie;const{el:ge,props:Be}=M,{bm:Le,m:et,parent:tt,root:gt,type:at}=T,cn=So(M);if(br(T,!1),Le&&ya(Le),!cn&&(ie=Be&&Be.onVnodeBeforeMount)&&pn(ie,tt,M),br(T,!0),ge&&Ge){const Qt=()=>{T.subTree=zl(T),Ge(ge,T.subTree,T,X,null)};cn&&at.__asyncHydrate?at.__asyncHydrate(ge,T,Qt):Qt()}else{gt.ce&>.ce._hasShadowRoot()&>.ce._injectChildStyle(at,T.parent?T.parent.type:void 0);const Qt=T.subTree=zl(T);g(null,Qt,V,te,T,X,z),M.el=Qt.el}if(et&&kt(et,X),!cn&&(ie=Be&&Be.onVnodeMounted)){const Qt=M;kt(()=>pn(ie,tt,Qt),X)}(M.shapeFlag&256||tt&&So(tt.vnode)&&tt.vnode.shapeFlag&256)&&T.a&&kt(T.a,X),T.isMounted=!0,M=V=te=null}};T.scope.on();const ee=T.effect=new Dg(oe);T.scope.off();const Q=T.update=ee.run.bind(ee),fe=T.job=ee.runIfDirty.bind(ee);fe.i=T,fe.id=T.uid,ee.scheduler=()=>kd(fe),br(T,!0),Q()},W=(T,M,V)=>{M.component=T;const te=T.vnode.props;T.vnode=M,T.next=null,_C(T,M.props,te,V),FC(T,M.children,V),Fo(),fp(T),Po()},K=(T,M,V,te,X,z,ue,oe,ee=!1)=>{const Q=T&&T.children,fe=T?T.shapeFlag:0,ie=M.children,{patchFlag:ge,shapeFlag:Be}=M;if(ge>0){if(ge&128){le(Q,ie,V,te,X,z,ue,oe,ee);return}else if(ge&256){de(Q,ie,V,te,X,z,ue,oe,ee);return}}Be&8?(fe&16&&ze(Q,X,z),ie!==Q&&l(V,ie)):fe&16?Be&16?le(Q,ie,V,te,X,z,ue,oe,ee):ze(Q,X,z,!0):(fe&8&&l(V,""),Be&16&&_(ie,V,te,X,z,ue,oe,ee))},de=(T,M,V,te,X,z,ue,oe,ee)=>{T=T||fu,M=M||fu;const Q=T.length,fe=M.length,ie=Math.min(Q,fe);let ge;for(ge=0;gefe?ze(T,X,z,!0,!1,ie):_(M,V,te,X,z,ue,oe,ee,ie)},le=(T,M,V,te,X,z,ue,oe,ee)=>{let Q=0;const fe=M.length;let ie=T.length-1,ge=fe-1;for(;Q<=ie&&Q<=ge;){const Be=T[Q],Le=M[Q]=ee?Do(M[Q]):En(M[Q]);if(jn(Be,Le))g(Be,Le,V,null,X,z,ue,oe,ee);else break;Q++}for(;Q<=ie&&Q<=ge;){const Be=T[ie],Le=M[ge]=ee?Do(M[ge]):En(M[ge]);if(jn(Be,Le))g(Be,Le,V,null,X,z,ue,oe,ee);else break;ie--,ge--}if(Q>ie){if(Q<=ge){const Be=ge+1,Le=Bege)for(;Q<=ie;)Ve(T[Q],X,z,!0),Q++;else{const Be=Q,Le=Q,et=new Map;for(Q=Le;Q<=ge;Q++){const Kt=M[Q]=ee?Do(M[Q]):En(M[Q]);Kt.key!=null&&et.set(Kt.key,Q)}let tt,gt=0;const at=ge-Le+1;let cn=!1,Qt=0;const yn=new Array(at);for(Q=0;Q=at){Ve(Kt,X,z,!0);continue}let Qn;if(Kt.key!=null)Qn=et.get(Kt.key);else for(tt=Le;tt<=ge;tt++)if(yn[tt-Le]===0&&jn(Kt,M[tt])){Qn=tt;break}Qn===void 0?Ve(Kt,X,z,!0):(yn[Qn-Le]=Q+1,Qn>=Qt?Qt=Qn:cn=!0,g(Kt,M[Qn],V,null,X,z,ue,oe,ee),gt++)}const vr=cn?OC(yn):fu;for(tt=vr.length-1,Q=at-1;Q>=0;Q--){const Kt=Le+Q,Qn=M[Kt],ap=M[Kt+1],sp=Kt+1{const{el:z,type:ue,transition:oe,children:ee,shapeFlag:Q}=T;if(Q&6){ut(T.component.subTree,M,V,te);return}if(Q&128){T.suspense.move(M,V,te);return}if(Q&64){ue.move(T,M,V,Ee);return}if(ue===Ce){o(z,M,V);for(let ie=0;ieoe.enter(z),X);else{const{leave:ie,delayLeave:ge,afterLeave:Be}=oe,Le=()=>{T.ctx.isUnmounted?r(z):o(z,M,V)},et=()=>{z._isLeaving&&z[oo](!0),ie(z,()=>{Le(),Be&&Be()})};ge?ge(z,Le,et):et()}else o(z,M,V)},Ve=(T,M,V,te=!1,X=!1)=>{const{type:z,props:ue,ref:oe,children:ee,dynamicChildren:Q,shapeFlag:fe,patchFlag:ie,dirs:ge,cacheIndex:Be,memo:Le}=T;if(ie===-2&&(X=!1),oe!=null&&(Fo(),gu(oe,null,V,T,!0),Po()),Be!=null&&(M.renderCache[Be]=void 0),fe&256){M.ctx.deactivate(T);return}const et=fe&1&&ge,tt=!So(T);let gt;if(tt&&(gt=ue&&ue.onVnodeBeforeUnmount)&&pn(gt,M,T),fe&6)Ne(T.component,V,te);else{if(fe&128){T.suspense.unmount(V,te);return}et&&no(T,null,M,"beforeUnmount"),fe&64?T.type.remove(T,M,V,Ee,te):Q&&!Q.hasOnce&&(z!==Ce||ie>0&&ie&64)?ze(Q,M,V,!1,!0):(z===Ce&&ie&384||!X&&fe&16)&&ze(ee,M,V),te&&ht(T)}const at=Le!=null&&Be==null;(tt&&(gt=ue&&ue.onVnodeUnmounted)||et||at)&&kt(()=>{gt&&pn(gt,M,T),et&&no(T,null,M,"unmounted"),at&&(T.el=null)},V)},ht=T=>{const{type:M,el:V,anchor:te,transition:X}=T;if(M===Ce){Dt(V,te);return}if(M===Qs){C(T);return}const z=()=>{r(V),X&&!X.persisted&&X.afterLeave&&X.afterLeave()};if(T.shapeFlag&1&&X&&!X.persisted){const{leave:ue,delayLeave:oe}=X,ee=()=>ue(V,z);oe?oe(T.el,z,ee):ee()}else z()},Dt=(T,M)=>{let V;for(;T!==M;)V=p(T),r(T),T=V;r(M)},Ne=(T,M,V)=>{const{bum:te,scope:X,job:z,subTree:ue,um:oe,m:ee,a:Q}=T;Ei(ee),Ei(Q),te&&ya(te),X.stop(),z&&(z.flags|=8,Ve(ue,T,M,V)),oe&&kt(oe,M),kt(()=>{T.isUnmounted=!0},M)},ze=(T,M,V,te=!1,X=!1,z=0)=>{for(let ue=z;ue{if(T.shapeFlag&6)return Z(T.component.subTree);if(T.shapeFlag&128)return T.suspense.next();const M=p(T.anchor||T.el),V=M&&M[Xg];return V?p(V):M};let ce=!1;const se=(T,M,V)=>{let te;T==null?M._vnode&&(Ve(M._vnode,null,null,!0),te=M._vnode.component):g(M._vnode||null,T,M,null,null,null,V),M._vnode=T,ce||(ce=!0,fp(te),gi(),ce=!1)},Ee={p:g,um:Ve,m:ut,r:ht,mt:G,mc:_,pc:K,pbc:O,n:Z,o:e};let Te,Ge;return t&&([Te,Ge]=t(Ee)),{render:se,hydrate:Te,createApp:bC(se,Te)}}function Ul({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function br({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Iv(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Id(e,t,n=!1){const o=e.children,r=t.children;if(De(o)&&De(r))for(let u=0;u>1,e[n[s]]0&&(t[o]=n[u-1]),n[u]=o)}}for(u=n.length,a=n[u-1];u-- >0;)n[u]=a,a=t[a];return n}function Rv(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Rv(t)}function Ei(e){if(e)for(let t=0;te.__isSuspense;let Gc=0;const IC={name:"Suspense",__isSuspense:!0,process(e,t,n,o,r,u,a,s,i,c){if(e==null)RC(t,n,o,r,u,a,s,i,c);else{if(u&&u.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}LC(e,t,n,o,r,a,s,i,c)}},hydrate:qC,normalize:$C},Rd=IC;function Ra(e,t){const n=e.props&&e.props[t];_e(n)&&n()}function RC(e,t,n,o,r,u,a,s,i){const{p:c,o:{createElement:l}}=i,d=l("div"),p=e.suspense=qv(e,r,o,t,d,n,u,a,s,i);c(null,p.pendingBranch=e.ssContent,d,null,o,p,u,a),p.deps>0?(Ra(e,"onPending"),Ra(e,"onFallback"),c(null,e.ssFallback,t,n,o,null,u,a),vu(p,e.ssFallback)):p.resolve(!1,!0)}function LC(e,t,n,o,r,u,a,s,{p:i,um:c,o:{createElement:l}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const p=t.ssContent,h=t.ssFallback,{activeBranch:m,pendingBranch:g,isInFallback:y,isHydrating:E}=d;if(g)d.pendingBranch=p,jn(g,p)?(i(g,p,d.hiddenContainer,null,r,d,u,a,s),d.deps<=0?d.resolve():y&&(E||(i(m,h,n,o,r,null,u,a,s),vu(d,h)))):(d.pendingId=Gc++,E?(d.isHydrating=!1,d.activeBranch=g):c(g,r,d),d.deps=0,d.effects.length=0,d.hiddenContainer=l("div"),y?(i(null,p,d.hiddenContainer,null,r,d,u,a,s),d.deps<=0?d.resolve():(i(m,h,n,o,r,null,u,a,s),vu(d,h))):m&&jn(m,p)?(i(m,p,n,o,r,d,u,a,s),d.resolve(!0)):(i(null,p,d.hiddenContainer,null,r,d,u,a,s),d.deps<=0&&d.resolve()));else if(m&&jn(m,p))i(m,p,n,o,r,d,u,a,s),vu(d,p);else if(Ra(t,"onPending"),d.pendingBranch=p,p.shapeFlag&512?d.pendingId=p.component.suspenseId:d.pendingId=Gc++,i(null,p,d.hiddenContainer,null,r,d,u,a,s),d.deps<=0)d.resolve();else{const{timeout:b,pendingId:v}=d;b>0?setTimeout(()=>{d.pendingId===v&&d.fallback(h)},b):b===0&&d.fallback(h)}}function qv(e,t,n,o,r,u,a,s,i,c,l=!1){const{p:d,m:p,um:h,n:m,o:{parentNode:g,remove:y}}=c;let E;const b=NC(e);b&&t&&t.pendingBranch&&(E=t.pendingId,t.deps++);const v=e.props?bg(e.props.timeout):void 0,C=u,w={vnode:e,parent:t,parentComponent:n,namespace:a,container:o,hiddenContainer:r,deps:0,pendingId:Gc++,timeout:typeof v=="number"?v:-1,activeBranch:null,isFallbackMountPending:!1,pendingBranch:null,isInFallback:!l,isHydrating:l,isUnmounted:!1,effects:[],resolve(B=!1,x=!1){const{vnode:_,activeBranch:S,pendingBranch:O,pendingId:H,effects:N,parentComponent:J,container:G,isInFallback:$}=w;let I=!1;w.isHydrating?w.isHydrating=!1:B||(I=S&&O.transition&&O.transition.mode==="out-in",I&&(S.transition.afterLeave=()=>{H===w.pendingId&&(p(O,G,u===C?m(S):u,0),Pa(N),$&&_.ssFallback&&(_.ssFallback.el=null))}),S&&!w.isFallbackMountPending&&(g(S.el)===G&&(u=m(S)),h(S,J,w,!0),!I&&$&&_.ssFallback&&kt(()=>_.ssFallback.el=null,w)),I||p(O,G,u,0)),w.isFallbackMountPending=!1,vu(w,O),w.pendingBranch=null,w.isInFallback=!1;let W=w.parent,K=!1;for(;W;){if(W.pendingBranch){W.effects.push(...N),K=!0;break}W=W.parent}!K&&!I&&Pa(N),w.effects=[],b&&t&&t.pendingBranch&&E===t.pendingId&&(t.deps--,t.deps===0&&!x&&t.resolve()),Ra(_,"onResolve")},fallback(B){if(!w.pendingBranch)return;const{vnode:x,activeBranch:_,parentComponent:S,container:O,namespace:H}=w;Ra(x,"onFallback");const N=m(_),J=()=>{w.isFallbackMountPending=!1,w.isInFallback&&(d(null,B,O,N,S,null,H,s,i),vu(w,B))},G=B.transition&&B.transition.mode==="out-in";G&&(w.isFallbackMountPending=!0,_.transition.afterLeave=J),w.isInFallback=!0,h(_,S,null,!0),G||J()},move(B,x,_){w.activeBranch&&p(w.activeBranch,B,x,_),w.container=B},next(){return w.activeBranch&&m(w.activeBranch)},registerDep(B,x,_){const S=!!w.pendingBranch;S&&w.deps++;const O=B.vnode.el;B.asyncDep.catch(H=>{Ru(H,B,0)}).then(H=>{if(B.isUnmounted||w.isUnmounted||w.pendingId!==B.suspenseId)return;La(),B.asyncResolved=!0;const{vnode:N}=B;Yc(B,H),O&&(N.el=O);const J=!O&&B.subTree.el;x(B,N,g(O||B.subTree.el),O?null:m(B.subTree),w,a,_),J&&(N.placeholder=null,y(J)),il(B,N.el),S&&--w.deps===0&&w.resolve()})},unmount(B,x){w.isUnmounted=!0,w.activeBranch&&h(w.activeBranch,n,B,x),w.pendingBranch&&h(w.pendingBranch,n,B,x)}};return w}function qC(e,t,n,o,r,u,a,s,i){const c=t.suspense=qv(t,o,n,e.parentNode,document.createElement("div"),null,r,u,a,s,!0),l=i(e,c.pendingBranch=t.ssContent,n,c,u,a);return c.deps===0&&c.resolve(!1,!0),l}function $C(e){const{shapeFlag:t,children:n}=e,o=t&32;e.ssContent=_p(o?n.default:n),e.ssFallback=o?_p(n.fallback):q(bt)}function _p(e){let t;if(_e(e)){const n=jr&&e._c;n&&(e._d=!1,D()),e=e(),n&&(e._d=!0,t=Yt,Nv())}return De(e)&&(e=xC(e)),e=En(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function $v(e,t){t&&t.pendingBranch?De(e)?t.effects.push(...e):t.effects.push(e):Pa(e)}function vu(e,t){e.activeBranch=t;const{vnode:n,parentComponent:o}=e;let r=t.el;for(;!r&&t.component;)t=t.component.subTree,r=t.el;n.el=r,o&&o.subTree===n&&(o.vnode.el=r,il(o,r))}function NC(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Ce=Symbol.for("v-fgt"),Lr=Symbol.for("v-txt"),bt=Symbol.for("v-cmt"),Qs=Symbol.for("v-stc"),xa=[];let Yt=null;function D(e=!1){xa.push(Yt=e?null:[])}function Nv(){xa.pop(),Yt=xa[xa.length-1]||null}let jr=1;function xi(e,t=!1){jr+=e,e<0&&Yt&&t&&(Yt.hasOnce=!0)}function jv(e){return e.dynamicChildren=jr>0?Yt||fu:null,Nv(),jr>0&&Yt&&Yt.push(e),e}function re(e,t,n,o,r,u){return jv(je(e,t,n,o,r,u,!0))}function k(e,t,n,o,r){return jv(q(e,t,n,o,r,!0))}function Vr(e){return e?e.__v_isVNode===!0:!1}function jn(e,t){return e.type===t.type&&e.key===t.key}const Vv=({key:e})=>e??null,ei=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?pt(e)||rt(e)||_e(e)?{i:on,r:e,k:t,f:!!n}:e:null);function je(e,t=null,n=null,o=0,r=null,u=e===Ce?0:1,a=!1,s=!1){const i={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Vv(t),ref:t&&ei(t),scopeId:Wg,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:u,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:on};return s?(Ld(i,n),u&128&&e.normalize(i)):n&&(i.shapeFlag|=pt(n)?8:16),jr>0&&!a&&Yt&&(i.patchFlag>0||u&6)&&i.patchFlag!==32&&Yt.push(i),i}const q=jC;function jC(e,t=null,n=null,o=0,r=null,u=!1){if((!e||e===dv)&&(e=bt),Vr(e)){const s=An(e,t,!0);return n&&Ld(s,n),jr>0&&!u&&Yt&&(s.shapeFlag&6?Yt[Yt.indexOf(e)]=s:Yt.push(s)),s.patchFlag=-2,s}if(GC(e)&&(e=e.__vccOpts),t){t=xe(t);let{class:s,style:i}=t;s&&!pt(s)&&(t.class=U(s)),Qe(i)&&(ul(i)&&!De(i)&&(i=Bt({},i)),t.style=mn(i))}const a=pt(e)?1:Ci(e)?128:Jg(e)?64:Qe(e)?4:_e(e)?2:0;return je(e,t,n,o,r,a,u,!0)}function xe(e){return e?ul(e)||kv(e)?Bt({},e):e:null}function An(e,t,n=!1,o=!1){const{props:r,ref:u,patchFlag:a,children:s,transition:i}=e,c=t?j(r||{},t):r,l={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Vv(c),ref:t&&t.ref?n&&u?De(u)?u.concat(ei(t)):[u,ei(t)]:ei(t):u,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ce?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:i,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&An(e.ssContent),ssFallback:e.ssFallback&&An(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return i&&o&&lr(l,i.clone(l)),l}function Ke(e=" ",t=0){return q(Lr,null,e,t)}function Y(e="",t=!1){return t?(D(),k(bt,null,e)):q(bt,null,e)}function En(e){return e==null||typeof e=="boolean"?q(bt):De(e)?q(Ce,null,e.slice()):Vr(e)?Do(e):q(Lr,null,String(e))}function Do(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:An(e)}function Ld(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(De(t))n=16;else if(typeof t=="object")if(o&65){const r=t.default;r&&(r._c&&(r._d=!1),Ld(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!kv(t)?t._ctx=on:r===3&&on&&(on.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else _e(t)?(t={default:t,_ctx:on},n=32):(t=String(t),o&64?(n=16,t=[Ke(t)]):n=8);e.children=t,e.shapeFlag|=n}function j(...e){const t={};for(let n=0;nzt||on;let wi,yu;{const e=el(),t=(n,o)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(o),u=>{r.length>1?r.forEach(a=>a(u)):r[0](u)}};wi=t("__VUE_INSTANCE_SETTERS__",n=>zt=n),yu=t("__VUE_SSR_SETTERS__",n=>zr=n)}const qu=e=>{const t=zt;return wi(e),e.scope.on(),()=>{e.scope.off(),wi(t)}},La=()=>{zt&&zt.scope.off(),wi(null)};function zv(e){return e.vnode.shapeFlag&4}let zr=!1;function HC(e,t=!1,n=!1){t&&yu(t);const{props:o,children:r}=e.vnode,u=zv(e);BC(e,o,u,t),TC(e,r,n||t);const a=u?KC(e,t):void 0;return t&&yu(!1),a}function KC(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,fC);const{setup:o}=n;if(o){Fo();const r=e.setupContext=o.length>1?Hv(e):null,u=qu(e),a=ts(o,e,0,[e.props,r]),s=Cd(a);if(Po(),u(),(s||e.sp)&&!So(e)&&Fd(e),s){if(a.then(La,La),t)return a.then(i=>{Yc(e,i)}).catch(i=>{Ru(i,e,0)});e.asyncDep=a}else Yc(e,a)}else Uv(e)}function Yc(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Qe(t)&&(e.setupState=Vg(t)),Uv(e)}function Uv(e,t,n){const o=e.type;e.render||(e.render=o.render||io);{const r=qu(e);Fo();try{pC(e)}finally{Po(),r()}}}const WC={get(e,t){return Gt(e,"get",""),e[t]}};function Hv(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,WC),slots:e.slots,emit:e.emit,expose:t}}function qd(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Vg(_d(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ca)return Ca[n](e)},has(t,n){return n in t||n in Ca}})):e.proxy}function Zc(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function GC(e){return _e(e)&&"__vccOpts"in e}const F=(e,t)=>V2(e,t,zr);function qe(e,t,n){try{xi(-1);const o=arguments.length;return o===2?Qe(t)&&!De(t)?Vr(t)?q(e,null,[t]):q(e,t):q(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&Vr(n)&&(n=[n]),q(e,t,n))}finally{xi(1)}}function YU(e,t,n,o){const r=n[o];if(r&&YC(r,e))return r;const u=t();return u.memo=e.slice(),u.cacheIndex=o,n[o]=u}function YC(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let o=0;o0&&Yt&&Yt.push(e),!0}const ZC="3.5.32";let Xc;const kp=typeof window<"u"&&window.trustedTypes;if(kp)try{Xc=kp.createPolicy("vue",{createHTML:e=>e})}catch{}const Kv=Xc?e=>Xc.createHTML(e):e=>e,XC="http://www.w3.org/2000/svg",JC="http://www.w3.org/1998/Math/MathML",wo=typeof document<"u"?document:null,Sp=wo&&wo.createElement("template"),QC={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t==="svg"?wo.createElementNS(XC,e):t==="mathml"?wo.createElementNS(JC,e):n?wo.createElement(e,{is:n}):wo.createElement(e);return e==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:e=>wo.createTextNode(e),createComment:e=>wo.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>wo.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,r,u){const a=n?n.previousSibling:t.lastChild;if(r&&(r===u||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===u||!(r=r.nextSibling)););else{Sp.innerHTML=Kv(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const s=Sp.content;if(o==="svg"||o==="mathml"){const i=s.firstChild;for(;i.firstChild;)s.appendChild(i.firstChild);s.removeChild(i)}t.insertBefore(s,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ho="transition",ta="animation",Au=Symbol("_vtc"),Wv={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Gv=Bt({},ev,Wv),ex=e=>(e.displayName="Transition",e.props=Gv,e),tx=ex((e,{slots:t})=>qe(eC,Yv(e),t)),Er=(e,t=[])=>{De(e)?e.forEach(n=>n(...t)):e&&e(...t)},Tp=e=>e?De(e)?e.some(t=>t.length>1):e.length>1:!1;function Yv(e){const t={};for(const N in e)N in Wv||(t[N]=e[N]);if(e.css===!1)return t;const{name:n="v",type:o,duration:r,enterFromClass:u=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:i=u,appearActiveClass:c=a,appearToClass:l=s,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,m=nx(r),g=m&&m[0],y=m&&m[1],{onBeforeEnter:E,onEnter:b,onEnterCancelled:v,onLeave:C,onLeaveCancelled:w,onBeforeAppear:B=E,onAppear:x=b,onAppearCancelled:_=v}=t,S=(N,J,G,$)=>{N._enterCancelled=$,Yo(N,J?l:s),Yo(N,J?c:a),G&&G()},O=(N,J)=>{N._isLeaving=!1,Yo(N,d),Yo(N,h),Yo(N,p),J&&J()},H=N=>(J,G)=>{const $=N?x:b,I=()=>S(J,N,G);Er($,[J,I]),Fp(()=>{Yo(J,N?i:u),eo(J,N?l:s),Tp($)||Pp(J,o,g,I)})};return Bt(t,{onBeforeEnter(N){Er(E,[N]),eo(N,u),eo(N,a)},onBeforeAppear(N){Er(B,[N]),eo(N,i),eo(N,c)},onEnter:H(!1),onAppear:H(!0),onLeave(N,J){N._isLeaving=!0;const G=()=>O(N,J);eo(N,d),N._enterCancelled?(eo(N,p),Jc(N)):(Jc(N),eo(N,p)),Fp(()=>{N._isLeaving&&(Yo(N,d),eo(N,h),Tp(C)||Pp(N,o,y,G))}),Er(C,[N,G])},onEnterCancelled(N){S(N,!1,void 0,!0),Er(v,[N])},onAppearCancelled(N){S(N,!0,void 0,!0),Er(_,[N])},onLeaveCancelled(N){O(N),Er(w,[N])}})}function nx(e){if(e==null)return null;if(Qe(e))return[Hl(e.enter),Hl(e.leave)];{const t=Hl(e);return[t,t]}}function Hl(e){return bg(e)}function eo(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Au]||(e[Au]=new Set)).add(t)}function Yo(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[Au];n&&(n.delete(t),n.size||(e[Au]=void 0))}function Fp(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ox=0;function Pp(e,t,n,o){const r=e._endId=++ox,u=()=>{r===e._endId&&o()};if(n!=null)return setTimeout(u,n);const{type:a,timeout:s,propCount:i}=Zv(e,t);if(!a)return o();const c=a+"end";let l=0;const d=()=>{e.removeEventListener(c,p),u()},p=h=>{h.target===e&&++l>=i&&d()};setTimeout(()=>{l(n[m]||"").split(", "),r=o(`${Ho}Delay`),u=o(`${Ho}Duration`),a=Mp(r,u),s=o(`${ta}Delay`),i=o(`${ta}Duration`),c=Mp(s,i);let l=null,d=0,p=0;t===Ho?a>0&&(l=Ho,d=a,p=u.length):t===ta?c>0&&(l=ta,d=c,p=i.length):(d=Math.max(a,c),l=d>0?a>c?Ho:ta:null,p=l?l===Ho?u.length:i.length:0);const h=l===Ho&&/\b(?:transform|all)(?:,|$)/.test(o(`${Ho}Property`).toString());return{type:l,timeout:d,propCount:p,hasTransform:h}}function Mp(e,t){for(;e.lengthOp(n)+Op(e[o])))}function Op(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Jc(e){return(e?e.ownerDocument:document).body.offsetHeight}function rx(e,t,n){const o=e[Au];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ip=Symbol("_vod"),ux=Symbol("_vsh"),ax=Symbol(""),sx=/(?:^|;)\s*display\s*:/;function ix(e,t,n){const o=e.style,r=pt(n);let u=!1;if(n&&!r){if(t)if(pt(t))for(const a of t.split(";")){const s=a.slice(0,a.indexOf(":")).trim();n[s]==null&&ti(o,s,"")}else for(const a in t)n[a]==null&&ti(o,a,"");for(const a in n)a==="display"&&(u=!0),ti(o,a,n[a])}else if(r){if(t!==n){const a=o[ax];a&&(n+=";"+a),o.cssText=n,u=sx.test(n)}}else t&&e.removeAttribute("style");Ip in e&&(e[Ip]=u?o.display:"",e[ux]&&(o.display="none"))}const Rp=/\s*!important$/;function ti(e,t,n){if(De(n))n.forEach(o=>ti(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=lx(e,t);Rp.test(n)?e.setProperty(Lo(o),n.replace(Rp,""),"important"):e[o]=n}}const Lp=["Webkit","Moz","ms"],Kl={};function lx(e,t){const n=Kl[t];if(n)return n;let o=Ft(t);if(o!=="filter"&&o in e)return Kl[t]=o;o=Qi(o);for(let r=0;rWl||(hx.then(()=>Wl=0),Wl=Date.now());function gx(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;Hn(vx(o,n.value),t,5,[o])};return n.value=e,n.attached=mx(),n}function vx(e,t){if(De(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>r=>!r._stopped&&o&&o(r))}else return t}const zp=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,yx=(e,t,n,o,r,u)=>{const a=r==="svg";t==="class"?rx(e,o,a):t==="style"?ix(e,n,o):Ja(t)?Zi(t)||fx(e,t,n,o,u):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):bx(e,t,o,a))?(Np(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&$p(e,t,o,a,u,t!=="value")):e._isVueCE&&(Ex(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!pt(o)))?Np(e,Ft(t),o,u,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),$p(e,t,o,a))};function bx(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&zp(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return zp(t)&&pt(n)?!1:t in e}function Ex(e,t){const n=e._def.props;if(!n)return!1;const o=Ft(t);return Array.isArray(n)?n.some(r=>Ft(r)===o):Object.keys(n).some(r=>Ft(r)===o)}const Xv=new WeakMap,Jv=new WeakMap,Di=Symbol("_moveCb"),Up=Symbol("_enterCb"),Cx=e=>(delete e.props.mode,e),xx=Cx({name:"TransitionGroup",props:Bt({},Gv,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=We(),o=Qg();let r,u;return Gr(()=>{if(!r.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!Bx(r[0].el,n.vnode.el,a)){r=[];return}r.forEach(wx),r.forEach(Dx);const s=r.filter(Ax);Jc(n.vnode.el),s.forEach(i=>{const c=i.el,l=c.style;eo(c,a),l.transform=l.webkitTransform=l.transitionDuration="";const d=c[Di]=p=>{p&&p.target!==c||(!p||p.propertyName.endsWith("transform"))&&(c.removeEventListener("transitionend",d),c[Di]=null,Yo(c,a))};c.addEventListener("transitionend",d)}),r=[]}),()=>{const a=He(e),s=Yv(a);let i=a.tag||Ce;if(r=[],u)for(let c=0;c{s.split(/\s+/).forEach(i=>i&&o.classList.remove(i))}),n.split(/\s+/).forEach(s=>s&&o.classList.add(s)),o.style.display="none";const u=t.nodeType===1?t:t.parentNode;u.appendChild(o);const{hasTransform:a}=Zv(o);return u.removeChild(o),a}const _x=["ctrl","shift","alt","meta"],kx={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>_x.some(n=>e[`${n}Key`]&&!t.includes(n))},On=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),o=t.join(".");return n[o]||(n[o]=((r,...u)=>{for(let a=0;a{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=(r=>{if(!("key"in r))return;const u=Lo(r.key);if(t.some(a=>a===u||Sx[a]===u))return e(r)}))},ey=Bt({patchProp:yx},QC);let wa,Hp=!1;function Tx(){return wa||(wa=PC(ey))}function Fx(){return wa=Hp?wa:MC(ey),Hp=!0,wa}const Px=((...e)=>{const t=Tx().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=ny(o);if(!r)return;const u=t._component;!_e(u)&&!u.render&&!u.template&&(u.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const a=n(r,!1,ty(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),a},t}),Mx=((...e)=>{const t=Fx().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=ny(o);if(r)return n(r,!0,ty(r))},t});function ty(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ny(e){return pt(e)?document.querySelector(e):e}const Ox=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,Ix=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,Rx=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function Lx(e,t){if(e==="__proto__"||e==="constructor"&&t&&typeof t=="object"&&"prototype"in t){qx(e);return}return t}function qx(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function $x(e,t={}){if(typeof e!="string")return e;if(e[0]==='"'&&e[e.length-1]==='"'&&e.indexOf("\\")===-1)return e.slice(1,-1);const n=e.trim();if(n.length<=9)switch(n.toLowerCase()){case"true":return!0;case"false":return!1;case"undefined":return;case"null":return null;case"nan":return Number.NaN;case"infinity":return Number.POSITIVE_INFINITY;case"-infinity":return Number.NEGATIVE_INFINITY}if(!Rx.test(e)){if(t.strict)throw new SyntaxError("[destr] Invalid JSON");return e}try{if(Ox.test(e)||Ix.test(e)){if(t.strict)throw new Error("[destr] Possible prototype pollution");return JSON.parse(e,Lx)}return JSON.parse(e)}catch(o){if(t.strict)throw o;return e}}const oy=/#/g,ry=/&/g,uy=/\//g,Nx=/=/g,jx=/\?/g,ll=/\+/g,Vx=/%5e/gi,zx=/%60/gi,Ux=/%7c/gi,Hx=/%20/gi,Kx=/%2f/gi,Wx=/%252f/gi;function ay(e){return encodeURI(""+e).replace(Ux,"|")}function Qc(e){return ay(typeof e=="string"?e:JSON.stringify(e)).replace(ll,"%2B").replace(Hx,"+").replace(oy,"%23").replace(ry,"%26").replace(zx,"`").replace(Vx,"^").replace(uy,"%2F")}function Gl(e){return Qc(e).replace(Nx,"%3D")}function Nd(e){return ay(e).replace(oy,"%23").replace(jx,"%3F").replace(Wx,"%2F").replace(ry,"%26").replace(ll,"%2B")}function Kp(e){return Nd(e).replace(uy,"%2F")}function qa(e=""){try{return decodeURIComponent(""+e)}catch{return""+e}}function Gx(e){return qa(e.replace(Kx,"%252F"))}function Yx(e){return qa(e.replace(ll," "))}function Zx(e){return qa(e.replace(ll," "))}function jd(e=""){const t=Object.create(null);e[0]==="?"&&(e=e.slice(1));for(const n of e.split("&")){const o=n.match(/([^=]+)=?(.*)/)||[];if(o.length<2)continue;const r=Yx(o[1]);if(r==="__proto__"||r==="constructor")continue;const u=Zx(o[2]||"");t[r]===void 0?t[r]=u:Array.isArray(t[r])?t[r].push(u):t[r]=[t[r],u]}return t}function Xx(e,t){return(typeof t=="number"||typeof t=="boolean")&&(t=String(t)),t?Array.isArray(t)?t.map(n=>`${Gl(e)}=${Qc(n)}`).join("&"):`${Gl(e)}=${Qc(t)}`:Gl(e)}function Jx(e){return Object.keys(e).filter(t=>e[t]!==void 0).map(t=>Xx(t,e[t])).filter(Boolean).join("&")}const Qx=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,sy=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,e5=/^([/\\]\s*){2,}[^/\\]/,t5=/^[\s\0]*(blob|data|javascript|vbscript):$/i,n5=/\/$|\/\?|\/#/,o5=/^\.?\//;function Ln(e,t={}){return typeof t=="boolean"&&(t={acceptRelative:t}),t.strict?Qx.test(e):sy.test(e)||(t.acceptRelative?e5.test(e):!1)}function r5(e){return!!e&&t5.test(e)}function e0(e="",t){return t?n5.test(e):e.endsWith("/")}function Bu(e="",t){if(!t)return(e0(e)?e.slice(0,-1):e)||"/";if(!e0(e,!0))return e||"/";let n=e,o="";const r=e.indexOf("#");r!==-1&&(n=e.slice(0,r),o=e.slice(r));const[u,...a]=n.split("?");return((u.endsWith("/")?u.slice(0,-1):u)||"/")+(a.length>0?`?${a.join("?")}`:"")+o}function Vd(e="",t){if(!t)return e.endsWith("/")?e:e+"/";if(e0(e,!0))return e||"/";let n=e,o="";const r=e.indexOf("#");if(r!==-1&&(n=e.slice(0,r),o=e.slice(r),!n))return o;const[u,...a]=n.split("?");return u+"/"+(a.length>0?`?${a.join("?")}`:"")+o}function u5(e=""){return e.startsWith("/")}function iy(e=""){return u5(e)?e:"/"+e}function a5(e,t){if(cy(t)||Ln(e))return e;const n=Bu(t);if(e.startsWith(n)){const o=e[n.length];if(!o||o==="/"||o==="?")return e}return cr(n,e)}function Wp(e,t){if(cy(t))return e;const n=Bu(t);if(!e.startsWith(n))return e;const o=e[n.length];if(o&&o!=="/"&&o!=="?")return e;const r=e.slice(n.length);return r[0]==="/"?r:"/"+r}function ly(e,t){const n=cl(e),o={...jd(n.search),...t};return n.search=Jx(o),c5(n)}function cy(e){return!e||e==="/"}function s5(e){return e&&e!=="/"}function cr(e,...t){let n=e||"";for(const o of t.filter(r=>s5(r)))if(n){const r=o.replace(o5,"");n=Vd(n)+r}else n=o;return n}function dy(...e){const t=/\/(?!\/)/,n=e.filter(Boolean),o=[];let r=0;for(const a of n)if(!(!a||a==="/")){for(const[s,i]of a.split(t).entries())if(!(!i||i===".")){if(i===".."){if(o.length===1&&Ln(o[0]))continue;o.pop(),r--;continue}if(s===1&&o[o.length-1]?.endsWith(":/")){o[o.length-1]+="/"+i;continue}o.push(i),r++}}let u=o.join("/");return r>=0?n[0]?.startsWith("/")&&!u.startsWith("/")?u="/"+u:n[0]?.startsWith("./")&&!u.startsWith("./")&&(u="./"+u):u="../".repeat(-1*r)+u,n[n.length-1]?.endsWith("/")&&!u.endsWith("/")&&(u+="/"),u}function i5(e){return l5(e,"https://")}function l5(e,t){let n=e.match(sy);return n||(n=e.match(/^\/{2,}/)),n?t+e.slice(n[0].length):t+e}function fy(e,t){return qa(Bu(e))===qa(Bu(t))}const py=Symbol.for("ufo:protocolRelative");function cl(e="",t){const n=e.match(/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i);if(n){const[,d,p=""]=n;return{protocol:d.toLowerCase(),pathname:p,href:d+p,auth:"",host:"",search:"",hash:""}}if(!Ln(e,{acceptRelative:!0}))return Gp(e);const[,o="",r,u=""]=e.replace(/\\/g,"/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[];let[,a="",s=""]=u.match(/([^#/?]*)(.*)?/)||[];o==="file:"&&(s=s.replace(/\/(?=[A-Za-z]:)/,""));const{pathname:i,search:c,hash:l}=Gp(s);return{protocol:o.toLowerCase(),auth:r?r.slice(0,Math.max(0,r.length-1)):"",host:a,pathname:i,search:c,hash:l,[py]:!o}}function Gp(e=""){const[t="",n="",o=""]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:n,hash:o}}function c5(e){const t=e.pathname||"",n=e.search?(e.search.startsWith("?")?"":"?")+e.search:"",o=e.hash||"",r=e.auth?e.auth+"@":"",u=e.host||"";return(e.protocol||e[py]?(e.protocol||"")+"//":"")+r+u+t+n+o}class d5 extends Error{constructor(t,n){super(t,n),this.name="FetchError",n?.cause&&!this.cause&&(this.cause=n.cause)}}function f5(e){const t=e.error?.message||e.error?.toString()||"",n=e.request?.method||e.options?.method||"GET",o=e.request?.url||String(e.request)||"/",r=`[${n}] ${JSON.stringify(o)}`,u=e.response?`${e.response.status} ${e.response.statusText}`:"",a=`${r}: ${u}${t?` ${t}`:""}`,s=new d5(a,e.error?{cause:e.error}:void 0);for(const i of["request","options","response"])Object.defineProperty(s,i,{get(){return e[i]}});for(const[i,c]of[["data","_data"],["status","status"],["statusCode","status"],["statusText","statusText"],["statusMessage","statusText"]])Object.defineProperty(s,i,{get(){return e.response&&e.response[c]}});return s}const p5=new Set(Object.freeze(["PATCH","POST","PUT","DELETE"]));function Yp(e="GET"){return p5.has(e.toUpperCase())}function h5(e){if(e===void 0)return!1;const t=typeof e;return t==="string"||t==="number"||t==="boolean"||t===null?!0:t!=="object"?!1:Array.isArray(e)?!0:e.buffer||e instanceof FormData||e instanceof URLSearchParams?!1:e.constructor&&e.constructor.name==="Object"||typeof e.toJSON=="function"}const m5=new Set(["image/svg","application/xml","application/xhtml","application/html"]),g5=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function v5(e=""){if(!e)return"json";const t=e.split(";").shift()||"";return g5.test(t)?"json":t==="text/event-stream"?"stream":m5.has(t)||t.startsWith("text/")?"text":"blob"}function y5(e,t,n,o){const r=b5(t?.headers??e?.headers,n?.headers,o);let u;return(n?.query||n?.params||t?.params||t?.query)&&(u={...n?.params,...n?.query,...t?.params,...t?.query}),{...n,...t,query:u,params:u,headers:r}}function b5(e,t,n){if(!t)return new n(e);const o=new n(t);if(e)for(const[r,u]of Symbol.iterator in e||Array.isArray(e)?e:new n(e))o.set(r,u);return o}async function Ss(e,t){if(t)if(Array.isArray(t))for(const n of t)await n(e);else await t(e)}const E5=new Set([408,409,425,429,500,502,503,504]),C5=new Set([101,204,205,304]);function hy(e={}){const{fetch:t=globalThis.fetch,Headers:n=globalThis.Headers,AbortController:o=globalThis.AbortController}=e;async function r(s){const i=s.error&&s.error.name==="AbortError"&&!s.options.timeout||!1;if(s.options.retry!==!1&&!i){let l;typeof s.options.retry=="number"?l=s.options.retry:l=Yp(s.options.method)?0:1;const d=s.response&&s.response.status||500;if(l>0&&(Array.isArray(s.options.retryStatusCodes)?s.options.retryStatusCodes.includes(d):E5.has(d))){const p=typeof s.options.retryDelay=="function"?s.options.retryDelay(s):s.options.retryDelay||0;return p>0&&await new Promise(h=>setTimeout(h,p)),u(s.request,{...s.options,retry:l-1})}}const c=f5(s);throw Error.captureStackTrace&&Error.captureStackTrace(c,u),c}const u=async function(i,c={}){const l={request:i,options:y5(i,c,e.defaults,n),response:void 0,error:void 0};if(l.options.method&&(l.options.method=l.options.method.toUpperCase()),l.options.onRequest&&(await Ss(l,l.options.onRequest),l.options.headers instanceof n||(l.options.headers=new n(l.options.headers||{}))),typeof l.request=="string"&&(l.options.baseURL&&(l.request=a5(l.request,l.options.baseURL)),l.options.query&&(l.request=ly(l.request,l.options.query),delete l.options.query),"query"in l.options&&delete l.options.query,"params"in l.options&&delete l.options.params),l.options.body&&Yp(l.options.method))if(h5(l.options.body)){const h=l.options.headers.get("content-type");typeof l.options.body!="string"&&(l.options.body=h==="application/x-www-form-urlencoded"?new URLSearchParams(l.options.body).toString():JSON.stringify(l.options.body)),h||l.options.headers.set("content-type","application/json"),l.options.headers.has("accept")||l.options.headers.set("accept","application/json")}else("pipeTo"in l.options.body&&typeof l.options.body.pipeTo=="function"||typeof l.options.body.pipe=="function")&&("duplex"in l.options||(l.options.duplex="half"));let d;if(!l.options.signal&&l.options.timeout){const h=new o;d=setTimeout(()=>{const m=new Error("[TimeoutError]: The operation was aborted due to timeout");m.name="TimeoutError",m.code=23,h.abort(m)},l.options.timeout),l.options.signal=h.signal}try{l.response=await t(l.request,l.options)}catch(h){return l.error=h,l.options.onRequestError&&await Ss(l,l.options.onRequestError),await r(l)}finally{d&&clearTimeout(d)}if((l.response.body||l.response._bodyInit)&&!C5.has(l.response.status)&&l.options.method!=="HEAD"){const h=(l.options.parseResponse?"json":l.options.responseType)||v5(l.response.headers.get("content-type")||"");switch(h){case"json":{const m=await l.response.text(),g=l.options.parseResponse||$x;l.response._data=g(m);break}case"stream":{l.response._data=l.response.body||l.response._bodyInit;break}default:l.response._data=await l.response[h]()}}return l.options.onResponse&&await Ss(l,l.options.onResponse),!l.options.ignoreResponseError&&l.response.status>=400&&l.response.status<600?(l.options.onResponseError&&await Ss(l,l.options.onResponseError),await r(l)):l.response},a=async function(i,c){return(await u(i,c))._data};return a.raw=u,a.native=(...s)=>t(...s),a.create=(s={},i={})=>hy({...e,...i,defaults:{...e.defaults,...i.defaults,...s}}),a}const Ai=(function(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("unable to locate global object")})(),x5=Ai.fetch?(...e)=>Ai.fetch(...e):()=>Promise.reject(new Error("[ofetch] global.fetch is not supported!")),w5=Ai.Headers,D5=Ai.AbortController,A5=hy({fetch:x5,Headers:w5,AbortController:D5}),B5=A5,_5=()=>window?.__NUXT__?.config||window?.useNuxtApp?.().payload?.config,zd=()=>_5().app,k5=()=>zd().baseURL,S5=()=>zd().buildAssetsDir,Ud=(...e)=>dy(my(),S5(),...e),my=(...e)=>{const t=zd(),n=t.cdnURL||t.baseURL;return e.length?dy(n,...e):n};globalThis.__buildAssetsURL=Ud,globalThis.__publicAssetsURL=my;globalThis.$fetch||(globalThis.$fetch=B5.create({baseURL:k5()}));"global"in globalThis||(globalThis.global=globalThis);function t0(e,t={},n){for(const o in e){const r=e[o],u=n?`${n}:${o}`:o;typeof r=="object"&&r!==null?t0(r,t,u):typeof r=="function"&&(t[u]=r)}return t}const gy=(()=>{if(console.createTask)return console.createTask;const e={run:t=>t()};return()=>e})();function vy(e,t,n,o){for(let r=n;re[r](...t)):e[r](...t);if(u&&typeof u.then=="function")return Promise.resolve(u).then(()=>vy(e,t,r+1,o))}catch(u){return Promise.reject(u)}}function T5(e,t,n){if(e.length>0)return vy(e,t,0,gy(n))}function F5(e,t,n){if(e.length>0){const o=gy(n);return Promise.all(e.map(r=>o.run(()=>r(...t))))}}function Yl(e,t){for(const n of[...e])n(t)}var P5=class{_hooks;_before;_after;_deprecatedHooks;_deprecatedMessages;constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(e,t,n={}){if(!e||typeof t!="function")return()=>{};const o=e;let r;for(;this._deprecatedHooks[e];)r=this._deprecatedHooks[e],e=r.to;if(r&&!n.allowDeprecated){let u=r.message;u||(u=`${o} hook has been deprecated`+(r.to?`, please use ${r.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(u)||(console.warn(u),this._deprecatedMessages.add(u))}if(!t.name)try{Object.defineProperty(t,"name",{get:()=>"_"+e.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&(this.removeHook(e,t),t=void 0)}}hookOnce(e,t){let n,o=(...r)=>(typeof n=="function"&&n(),n=void 0,o=void 0,t(...r));return n=this.hook(e,o),n}removeHook(e,t){const n=this._hooks[e];if(n){const o=n.indexOf(t);o!==-1&&n.splice(o,1),n.length===0&&(this._hooks[e]=void 0)}}clearHook(e){this._hooks[e]=void 0}deprecateHook(e,t){this._deprecatedHooks[e]=typeof t=="string"?{to:t}:t;const n=this._hooks[e]||[];this._hooks[e]=void 0;for(const o of n)this.hook(e,o)}deprecateHooks(e){for(const t in e)this.deprecateHook(t,e[t])}addHooks(e){const t=t0(e),n=Object.keys(t).map(o=>this.hook(o,t[o]));return()=>{for(const o of n)o();n.length=0}}removeHooks(e){const t=t0(e);for(const n in t)this.removeHook(n,t[n])}removeAllHooks(){this._hooks={}}callHook(e,...t){return this.callHookWith(T5,e,t)}callHookParallel(e,...t){return this.callHookWith(F5,e,t)}callHookWith(e,t,n){const o=this._before||this._after?{name:t,args:n,context:{}}:void 0;this._before&&Yl(this._before,o);const r=e(this._hooks[t]?[...this._hooks[t]]:[],n,t);return r instanceof Promise?r.finally(()=>{this._after&&o&&Yl(this._after,o)}):(this._after&&o&&Yl(this._after,o),r)}beforeEach(e){return this._before=this._before||[],this._before.push(e),()=>{if(this._before!==void 0){const t=this._before.indexOf(e);t!==-1&&this._before.splice(t,1)}}}afterEach(e){return this._after=this._after||[],this._after.push(e),()=>{if(this._after!==void 0){const t=this._after.indexOf(e);t!==-1&&this._after.splice(t,1)}}}};function yy(){return new P5}function M5(e={}){let t,n=!1;const o=a=>{if(t&&t!==a)throw new Error("Context conflict")};let r;if(e.asyncContext){const a=e.AsyncLocalStorage||globalThis.AsyncLocalStorage;a?r=new a:console.warn("[unctx] `AsyncLocalStorage` is not provided.")}const u=()=>{if(r){const a=r.getStore();if(a!==void 0)return a}return t};return{use:()=>{const a=u();if(a===void 0)throw new Error("Context is not available");return a},tryUse:()=>u(),set:(a,s)=>{s||o(a),t=a,n=!0},unset:()=>{t=void 0,n=!1},call:(a,s)=>{o(a),t=a;try{return r?r.run(a,s):s()}finally{n||(t=void 0)}},async callAsync(a,s){t=a;const i=()=>{t=a},c=()=>t===a?i:void 0;n0.add(c);try{const l=r?r.run(a,s):s();return n||(t=void 0),await l}finally{n0.delete(c)}}}}function O5(e={}){const t={};return{get(n,o={}){return t[n]||(t[n]=M5({...e,...o})),t[n]}}}const Bi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof global<"u"?global:typeof window<"u"?window:{},Zp="__unctx__",I5=Bi[Zp]||(Bi[Zp]=O5()),R5=(e,t={})=>I5.get(e,t),Xp="__unctx_async_handlers__",n0=Bi[Xp]||(Bi[Xp]=new Set);function qr(e){const t=[];for(const r of n0){const u=r();u&&t.push(u)}const n=()=>{for(const r of t)r()};let o=e();return o&&typeof o=="object"&&"catch"in o&&(o=o.catch(r=>{throw n(),r})),[o,n]}const Jp=!1,Qp=!1,L5=!1,eh={id:"__nuxt-loader"},q5={componentName:"NuxtLink",prefetch:!0,prefetchOn:{visibility:!0}},$5={deep:!1},N5={},j5="#__nuxt",by="nuxt-app",th=36e5,V5="vite:preloadError";function Ey(e=by){return R5(e,{asyncContext:!1})}const z5="__nuxt_plugin";function U5(e){let t=0;const n={_id:e.id||by||"nuxt-app",_scope:Qa(),provide:void 0,versions:{get nuxt(){return"4.4.2"},get vue(){return n.vueApp.version}},payload:Pn({...e.ssrContext?.payload||{},data:Pn({}),state:_t({}),once:new Set,_errors:Pn({})}),static:{data:{}},runWithContext(r){return n._scope.active&&!ho()?n._scope.run(()=>nh(n,r)):nh(n,r)},isHydrating:!0,deferHydration(){if(!n.isHydrating)return()=>{};t++;let r=!1;return()=>{if(!r&&(r=!0,t--,t===0))return n.isHydrating=!1,n.callHook("app:suspense:resolve")}},_asyncDataPromises:{},_asyncData:Pn({}),_state:Pn({}),_payloadRevivers:{},...e};{const r=window.__NUXT__;if(r)for(const u in r)switch(u){case"data":case"state":case"_errors":Object.assign(n.payload[u],r[u]);break;default:n.payload[u]=r[u]}}n.hooks=yy(),n.hook=n.hooks.hook;{const r=n.hooks.callHook;n.hooks.callHook=(u,...a)=>Promise.resolve().then(()=>r(u,...a))}n.callHook=n.hooks.callHook,n.provide=(r,u)=>{const a="$"+r;Ts(n,a,u),Ts(n.vueApp.config.globalProperties,a,u)},Ts(n.vueApp,"$nuxt",n),Ts(n.vueApp.config.globalProperties,"$nuxt",n);{window.addEventListener(V5,u=>{n.callHook("app:chunkError",{error:u.payload}),u.payload.message.includes("Unable to preload CSS")&&u.preventDefault()}),window.useNuxtApp||=Re;const r=n.hook("app:error",(...u)=>{console.error("[nuxt] error caught during app initialization",...u)});n.hook("app:mounted",r)}const o=n.payload.config;return n.provide("config",o),n}function H5(e,t){t.hooks&&e.hooks.addHooks(t.hooks)}async function K5(e,t){if(typeof t=="function"){const{provide:n}=await e.runWithContext(()=>t(e))||{};if(n&&typeof n=="object")for(const o in n)e.provide(o,n[o])}}async function W5(e,t){const n=new Set,o=[],r=[];let u,a=0;async function s(i){const c=i.dependsOn?.filter(l=>t.some(d=>d._name===l)&&!n.has(l))??[];if(c.length>0)o.push([new Set(c),i]);else{const l=K5(e,i).then(async()=>{i._name&&(n.add(i._name),await Promise.all(o.map(async([d,p])=>{d.has(i._name)&&(d.delete(i._name),d.size===0&&(a++,await s(p)))})))}).catch(d=>{if(!i.parallel&&!e.payload.error)throw d;u||=d});i.parallel?r.push(l):await l}}for(const i of t)H5(e,i);for(const i of t)await s(i);if(await Promise.all(r),a)for(let i=0;i{}),e,{[z5]:!0,_name:t})}function nh(e,t,n){const o=()=>t();return Ey(e._id).set(e),e.vueApp.runWithContext(o)}function Cy(e){let t;return Lu()&&(t=We()?.appContext.app.$nuxt),t||=Ey(e).tryUse(),t||null}function Re(e){const t=Cy(e);if(!t)throw new Error("[nuxt] instance unavailable");return t}function Bn(e){return Re().$config}function Ts(e,t,n){Object.defineProperty(e,t,{get:()=>n})}function Zl(e){if(e===null||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function o0(e,t,n=".",o){if(!Zl(t))return o0(e,{},n,o);const r={...t};for(const u of Object.keys(e)){if(u==="__proto__"||u==="constructor")continue;const a=e[u];a!=null&&(o&&o(r,u,a,n)||(Array.isArray(a)&&Array.isArray(r[u])?r[u]=[...a,...r[u]]:Zl(a)&&Zl(r[u])?r[u]=o0(a,r[u],(n?`${n}.`:"")+u.toString(),o):r[u]=a))}return r}function xy(e){return(...t)=>t.reduce((n,o)=>o0(n,o,"",e),{})}const wt=xy(),G5=xy((e,t,n)=>{if(e[t]!==void 0&&typeof n=="function")return e[t]=n(e[t]),!0});function Y5(e,t){try{return t in e}catch{return!1}}class oh extends Error{static __h3_error__=!0;statusCode=500;fatal=!1;unhandled=!1;statusMessage;data;cause;constructor(t,n={}){super(t,n),n.cause&&!this.cause&&(this.cause=n.cause)}toJSON(){const t={message:this.message,statusCode:r0(this.statusCode,500)};return this.statusMessage&&(t.statusMessage=wy(this.statusMessage)),this.data!==void 0&&(t.data=this.data),t}}function Z5(e){if(typeof e=="string")return new oh(e);if(X5(e))return e;const t=new oh(e.message??e.statusMessage??"",{cause:e.cause||e});if(Y5(e,"stack"))try{Object.defineProperty(t,"stack",{get(){return e.stack}})}catch{try{t.stack=e.stack}catch{}}if(e.data&&(t.data=e.data),e.statusCode?t.statusCode=r0(e.statusCode,t.statusCode):e.status&&(t.statusCode=r0(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){const n=t.statusMessage;wy(t.statusMessage)!==n&&console.warn("[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.")}return e.fatal!==void 0&&(t.fatal=e.fatal),e.unhandled!==void 0&&(t.unhandled=e.unhandled),t}function X5(e){return e?.constructor?.__h3_error__===!0}function J5(e){const t={};for(const n in e.node.req.headers){const o=e.node.req.headers[n];t[n]=Array.isArray(o)?o.filter(Boolean).join(", "):o}return t}const Q5=/[^\u0009\u0020-\u007E]/g;function wy(e=""){return e.replace(Q5,"")}function r0(e,t=200){return!e||(typeof e=="string"&&(e=Number.parseInt(e,10)),e<100||e>999)?t:e}const Dy=Symbol("layout-meta"),Oo=Symbol("route");import.meta.url.replace(/\/app\/.*$/,"/");const Xt=()=>Re()?.$router,Yn=()=>Lu()?Ue(Oo,Re()._route):Re()._route;const ew=(e,t,n={})=>{const o=Re(),r=n.global||typeof e!="string",u=typeof e!="string"?e:t;if(!u){console.warn("[nuxt] No route middleware passed to `addRouteMiddleware`.",e);return}r?o._middleware.global.push(u):o._middleware.named[e]=u},tw=()=>{try{if(Re()._processingMiddleware)return!0}catch{return!1}return!1},dl=(e,t)=>{e||="/";const n=typeof e=="string"?e:"path"in e?u0(e):Xt().resolve(e).href;if(t?.open){const{target:c="_blank",windowFeatures:l={}}=t.open,d=[];for(const[p,h]of Object.entries(l))h!==void 0&&d.push(`${p.toLowerCase()}=${h}`);return open(n,c,d.join(", ")),Promise.resolve()}const o=Ln(n,{acceptRelative:!0}),r=t?.external||o;if(r){if(!t?.external)throw new Error("Navigating to an external URL is not allowed by default. Use `navigateTo(url, { external: true })`.");const{protocol:c}=new URL(n,window.location.href);if(c&&r5(c))throw new Error(`Cannot navigate to a URL with '${c}' protocol.`)}const u=tw();if(!r&&u){if(t?.replace){if(typeof e=="string"){const{pathname:c,search:l,hash:d}=cl(e);return{path:c,...l&&{query:jd(l)},...d&&{hash:d},replace:!0}}return{...e,replace:!0}}return e}const a=Xt(),s=Re();if(r)return s._scope.stop(),t?.replace?location.replace(n):location.href=n,u?s.isHydrating?new Promise(()=>{}):!1:Promise.resolve();const i=typeof e=="string"?Ay(e):e;return t?.replace?a.replace(i):a.push(i)};function u0(e){return ly(e.path||"",e.query||{})+(e.hash||"")}function Ay(e){const t=cl(e);return Nd(Gx(t.pathname))+t.search+t.hash}const By="__nuxt_error",fl=()=>Ye(Re().payload,"error"),kr=e=>{const t=ar(e);try{const n=fl();Re().hooks.callHook("app:error",t),n.value||=t}catch{throw t}return t},_y=async(e={})=>{const t=Re(),n=fl();t.callHook("app:error:cleared",e),e.redirect&&await Xt().replace(e.redirect),n.value=void 0},ky=e=>!!e&&typeof e=="object"&&By in e,ar=e=>{typeof e!="string"&&e.statusText&&(e.message??=e.statusText);const t=Z5(e);return Object.defineProperty(t,By,{value:!0,configurable:!1,writable:!1}),Object.defineProperty(t,"status",{get:()=>t.statusCode,configurable:!0}),Object.defineProperty(t,"statusText",{get:()=>t.statusMessage,configurable:!0}),t};function nw(e){return Uint8Array.fromBase64(e).buffer}function ow(e){return Uint8Array.from(Buffer.from(e,"base64")).buffer}function rw(e){const t=atob(e),n=t.length,o=new Uint8Array(n);for(let r=0;r=c)throw new Error("Invalid input");l[p]=u(i[d+1])}}else{const c=new Array(i.length);o[a]=c;for(let l=0;l`${ko(e)}=${t}`}},refresh:{metaKey:"http-equiv",unpack:{entrySeparator:";",resolve:({key:e,value:t})=>e==="seconds"?`${t}`:void 0}},robots:{unpack:{entrySeparator:", ",resolve:({key:e,value:t})=>typeof t=="boolean"?ko(e):`${ko(e)}:${t}`}},contentSecurityPolicy:{metaKey:"http-equiv",unpack:{entrySeparator:"; ",resolve:({key:e,value:t})=>`${ko(e)} ${t}`}},charset:{}};function ko(e){const t=e.replace(/([A-Z])/g,"-$1").toLowerCase(),n=t.indexOf("-");return n===-1?t:$a.META.has(t.slice(0,n))||$a.OG.has(t.slice(0,n))?e.replace(/([A-Z])/g,":$1").toLowerCase():t}function Ty(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>String(n)!=="false"&&t))}function s0(e){return Array.isArray(e)?e.map(s0):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).map(([t,n])=>[ko(t),s0(n)]))}function Fy(e,t={}){const{entrySeparator:n="",keyValueSeparator:o="",wrapValue:r,resolve:u}=t;return Object.entries(e).map(([a,s])=>{if(u){const c=u({key:a,value:s});if(c!==void 0)return c}const i=typeof s=="object"?Fy(s,t):typeof s=="number"?s.toString():typeof s=="string"&&r?`${r}${s.replace(new RegExp(r,"g"),`\\${r}`)}${r}`:s;return`${a}${o}${i}`}).join(n)}function rh(e,t){const n=Ty(t),o=ko(e),r=Py(o);if(!Hd.has(o))return[{[r]:o,...n}];const u=Object.fromEntries(Object.entries(n).map(([a,s])=>[`${e}${a==="url"?"":`${a[0].toUpperCase()}${a.slice(1)}`}`,s]));return _i(u||{}).sort((a,s)=>(a[r]?.length||0)-(s[r]?.length||0))}function Py(e){if(Sy[e]?.metaKey==="http-equiv"||$a.HTTP_EQUIV.has(e))return"http-equiv";const t=ko(e),n=t.indexOf(":");return n===-1?"name":$a.OG.has(t.slice(0,n))?"property":"name"}function Dw(e){return ww[e]||ko(e)}function Aw(e,t){return t==="refresh"?`${e.seconds};url=${e.url}`:Fy(s0(e),{keyValueSeparator:"=",entrySeparator:", ",resolve:({value:n,key:o})=>n===null?"":typeof n=="boolean"?o:void 0,...Sy[t]?.unpack})}function _i(e){const t=[],n={};for(const[r,u]of Object.entries(e)){if(Array.isArray(u)){if(r==="themeColor"){u.forEach(a=>{typeof a=="object"&&a!==null&&t.push({name:"theme-color",...a})});continue}for(const a of u)if(typeof a=="object"&&a!==null){const s=[],i=[];for(const[c,l]of Object.entries(a)){const d=`${r}${c==="url"?"":`:${c}`}`,p=_i({[d]:l});(c==="url"?s:i).push(...p)}t.push(...s,...i)}else t.push(...typeof a=="string"?_i({[r]:a}):rh(r,a));continue}if(typeof u=="object"&&u)if($a.MEDIA.has(r)){const a=r.startsWith("twitter")?"twitter":"og",s=r.replace(/^(og|twitter)/,"").toLowerCase(),i=a==="twitter"?"name":"property";u.url&&t.push({[i]:`${a}:${s}`,content:u.url}),u.secureUrl&&t.push({[i]:`${a}:${s}:secure_url`,content:u.secureUrl});for(const[c,l]of Object.entries(u))c!=="url"&&c!=="secureUrl"&&t.push({[i]:`${a}:${s}:${c}`,content:l})}else Hd.has(ko(r))?t.push(...rh(r,u)):n[r]=Ty(u);else n[r]=u}const o=Object.entries(n).map(([r,u])=>{if(r==="charset")return{charset:u===null?"_null":u};const a=Py(r),s=Dw(r),i=u===null?"_null":typeof u=="object"?Aw(u,r):typeof u=="number"?u.toString():u;return a==="http-equiv"?{"http-equiv":s,content:i}:{[a]:s,content:i}});return[...t,...o].map(r=>"content"in r&&r.content==="_null"?{...r,content:null}:r)}const Bw={key:"flatMeta",hooks:{"entries:normalize":e=>{const t=[];e.tags=e.tags.map(n=>n.tag!=="_flatMeta"?n:(t.push(_i(n.props).map(o=>({...n,tag:"meta",props:o}))),!1)).filter(Boolean).concat(...t)}}},_w=["name","property","http-equiv"],kw=new Set(["viewport","description","keywords","robots"]);function My(e){const t=e.split(":");return t.length?Hd.has(t[1]):!1}function i0(e){const{props:t,tag:n}=e;if(Ew.has(n))return n;if(n==="link"&&t.rel==="canonical")return"canonical";if(n==="link"&&t.rel==="alternate"){const o=t.hreflang||t.type;if(o)return`alternate:${o}`}if(t.charset)return"charset";if(e.tag==="meta"){for(const o of _w)if(t[o]!==void 0){const r=t[o],u=r&&typeof r=="string"&&r.includes(":"),a=r&&kw.has(r),i=!(u||a)&&e.key?`:key:${e.key}`:"";return`${n}:${r}${i}`}}if(e.key)return`${n}:key:${e.key}`;if(t.id)return`${n}:id:${t.id}`;if(n==="link"&&t.rel==="alternate")return`alternate:${t.href||""}`;if(yw.has(n)){const o=e.textContent||e.innerHTML;if(o)return`${n}:content:${o}`}}function Oy(e){const t=e._h||e._d;if(t)return t;const n=e.textContent||e.innerHTML;return n||`${e.tag}:${Object.entries(e.props).map(([o,r])=>`${o}:${String(r)}`).join(",")}`}function ki(e,t,n){typeof e==="function"&&(!n||n!=="titleTemplate"&&!(n[0]==="o"&&n[1]==="n"))&&(e=e());const r=t?t(n,e):e;if(Array.isArray(r))return r.map(u=>ki(u,t));if(r?.constructor===Object){const u={};for(const a of Object.keys(r))u[a]=ki(r[a],t,a);return u}return r}function Sw(e,t){const n=e==="style"?new Map:new Set;function o(r){if(r==null||r===void 0)return;const u=String(r).trim();if(u)if(e==="style"){const[a,...s]=u.split(":").map(i=>i?i.trim():"");a&&s.length&&n.set(a,s.join(":"))}else u.split(" ").filter(Boolean).forEach(a=>n.add(a))}return typeof t=="string"?e==="style"?t.split(";").forEach(o):o(t):Array.isArray(t)?t.forEach(r=>o(r)):t&&typeof t=="object"&&Object.entries(t).forEach(([r,u])=>{u&&u!=="false"&&(e==="style"?n.set(String(r).trim(),String(u)):o(r))}),n}function Iy(e,t){if(e.props=e.props||{},!t)return e;if(e.tag==="templateParams")return e.props=t,e;const n=a0.has(e.tag)||e.tag==="htmlAttrs"||e.tag==="bodyAttrs";return Object.entries(t).forEach(([o,r])=>{if(o==="__proto__"||o==="constructor"||o==="prototype")return;if(r===null){e.props[o]=null;return}if(o==="class"||o==="style"){e.props[o]=Sw(o,r);return}if(Cw.has(o)){if((o==="textContent"||o==="innerHTML")&&typeof r=="object"){let c=t.type;if(t.type||(c="application/json"),!c?.endsWith("json")&&c!=="speculationrules")return;t.type=c,e.props.type=c,e[o]=JSON.stringify(r)}else e[o]=r;return}const u=o.startsWith("data-"),a=n&&!u?o.toLowerCase():o,s=String(r),i=e.tag==="meta"&&a==="content";s==="true"||s===""?e.props[a]=u||i?s:!0:!r&&u&&s==="false"?e.props[a]="false":r!==void 0&&(e.props[a]=r)}),e}function Tw(e,t){const n=typeof t=="object"&&typeof t!="function"?t:{[e==="script"||e==="noscript"||e==="style"?"innerHTML":"textContent"]:t},o=Iy({tag:e,props:{}},n);return o.key&&vw.has(o.tag)&&(o.props["data-hid"]=o._h=o.key),o.tag==="script"&&typeof o.innerHTML=="object"&&(o.innerHTML=JSON.stringify(o.innerHTML),o.props.type=o.props.type||"application/json"),Array.isArray(o.props.content)?o.props.content.map(r=>({...o,props:{...o.props,content:r}})):o}function Fw(e,t){if(!e)return[];typeof e=="function"&&(e=e());const n=(r,u)=>{for(let a=0;a{if(u!==void 0)for(const a of Array.isArray(u)?u:[u])o.push(Tw(r,a))}),o.flat()}const uh=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,ah={base:-10,title:10},Pw={critical:-8,high:-1,low:2},sh={meta:{"content-security-policy":-30,charset:-20,viewport:-15},link:{preconnect:20,stylesheet:60,preload:70,modulepreload:70,prefetch:90,"dns-prefetch":90,prerender:90},script:{async:30,defer:80,sync:50},style:{imported:40,sync:60}},Mw=/@import/,na=e=>e===""||e===!0;function Ow(e,t){if(typeof t.tagPriority=="number")return t.tagPriority;let n=100;const o=Pw[t.tagPriority]||0,r=e.resolvedOptions.disableCapoSorting?{link:{},script:{},style:{}}:sh;if(t.tag in ah)n=ah[t.tag];else if(t.tag==="meta"){const u=t.props["http-equiv"]==="content-security-policy"?"content-security-policy":t.props.charset?"charset":t.props.name==="viewport"?"viewport":null;u&&(n=sh.meta[u])}else if(t.tag==="link"&&t.props.rel)n=r.link[t.props.rel];else if(t.tag==="script"){const u=String(t.props.type);na(t.props.async)?n=r.script.async:t.props.src&&!na(t.props.defer)&&!na(t.props.async)&&u!=="module"&&!u.endsWith("json")||t.innerHTML&&!u.endsWith("json")?n=r.script.sync:(na(t.props.defer)&&t.props.src&&!na(t.props.async)||u==="module")&&(n=r.script.defer)}else t.tag==="style"&&(n=t.innerHTML&&Mw.test(t.innerHTML)?r.style.imported:r.style.sync);return(n||100)+o}function ih(e,t){const n=typeof t=="function"?t(e):t,o=n.key||String(e.plugins.size+1);e.plugins.get(o)||(e.plugins.set(o,n),e.hooks.addHooks(n.hooks||{}))}function Iw(e={}){const t=yy();t.addHooks(e.hooks||{});const n=!e.document,o=new Map,r=new Map,u=new Set,a={_entryCount:1,plugins:r,dirty:!1,resolvedOptions:e,hooks:t,ssr:n,entries:o,headEntries(){return[...o.values()]},use:s=>ih(a,s),push(s,i){const c={...i||{}};delete c.head;const l=c._index??a._entryCount++,d={_i:l,input:s,options:c},p={_poll(h=!1){a.dirty=!0,!h&&u.add(l),t.callHook("entries:updated",a)},dispose(){o.delete(l)&&a.invalidate()},patch(h){(!c.mode||c.mode==="server"&&n||c.mode==="client"&&!n)&&(d.input=h,o.set(l,d),p._poll())}};return p.patch(s),p},async resolveTags(){const s={tagMap:new Map,tags:[],entries:[...a.entries.values()]};for(await t.callHook("entries:resolve",s);u.size;){const p=u.values().next().value;u.delete(p);const h=o.get(p);if(h){const m={tags:Fw(h.input,e.propResolvers||[]).map(g=>Object.assign(g,h.options)),entry:h};await t.callHook("entries:normalize",m),h._tags=m.tags.map((g,y)=>(g._w=Ow(a,g),g._p=(h._i<<10)+y,g._d=i0(g),g._d||(g._h=Oy(g)),g))}}let i=!1;s.entries.flatMap(p=>(p._tags||[]).map(h=>({...h,props:{...h.props}}))).sort(uh).reduce((p,h)=>{const m=h._d||h._h;if(!p.has(m))return p.set(m,h);const g=p.get(m);if((h?.tagDuplicateStrategy||(xw.has(h.tag)?"merge":null)||(h.key&&h.key===g.key?"merge":null))==="merge"){const E={...g.props};Object.entries(h.props).forEach(([b,v])=>E[b]=b==="style"?new Map([...g.props.style||new Map,...v]):b==="class"?new Set([...g.props.class||new Set,...v]):v),p.set(m,{...h,props:E})}else h._p>>10===g._p>>10&&h.tag==="meta"&&My(m)?(p.set(m,Object.assign([...Array.isArray(g)?g:[g],h],h)),i=!0):(h._w===g._w?h._p>g._p:h?._wih(a,s)),a.hooks.callHook("init",a),e.init?.forEach(s=>s&&a.push(s)),a}const Rw=(e,t)=>rt(t)?ke(t):t,Kd="usehead";function Lw(e){return{install(n){n.config.globalProperties.$unhead=e,n.config.globalProperties.$head=e,n.provide(Kd,e)}}.install}function Ry(){if(Lu()){const e=Ue(Kd);if(e)return e}throw new Error("useHead() was called without provide context, ensure you call it through the setup() function.")}function Ly(e,t={}){const n=t.head||Ry();return n.ssr?n.push(e||{},t):qw(n,e,t)}function qw(e,t,n={}){const o=R(!1);let r;return Ze(()=>{const a=o.value?{}:ki(t,Rw);r?r.patch(a):r=e.push(a,n)}),We()&&(mo(()=>{r.dispose()}),av(()=>{o.value=!0}),uv(()=>{o.value=!1})),r}function $w(e={},t={}){(t.head||Ry()).use(Bw);const{title:o,titleTemplate:r,...u}=e;return Ly({title:o,titleTemplate:r,_flatMeta:u},t)}function qy(e){const t=e||Re();return t.ssrContext?.head||t.runWithContext(()=>{if(Lu()){const n=Ue(Kd);if(!n)throw new Error("[nuxt] [unhead] Missing Unhead instance.");return n}})}function Wd(e,t={}){const n=t.head||qy(t.nuxt);return Ly(e,{head:n,...t})}function $y(e,t={}){const n=t.head||qy(t.nuxt);return $w(e,{head:n,...t})}const Nw=(()=>{const e={prerender:!0},t={},n={payload:!1};return(o,r)=>{let u=[];r.charCodeAt(r.length-1)===47&&(r=r.slice(0,-1)||"/"),r==="/__nuxt_content/docs/sql_dump.txt"?u.unshift({data:e}):r==="/__nuxt_content/landing/sql_dump.txt"?u.unshift({data:e}):r==="/_nuxt"&&u.unshift({data:t});let a=r.split("/"),s=a.length;return s>1&&(a[1]==="__nuxt_content"?u.unshift({data:n,params:{_:a.slice(2).join("/")}}):a[1]==="_og"&&s>2&&(a[2]==="d"?u.unshift({data:t,params:{_:a.slice(3).join("/")}}):a[2]==="r"?u.unshift({data:t,params:{_:a.slice(3).join("/")}}):a[2]==="s"&&u.unshift({data:t,params:{_:a.slice(3).join("/")}}))),u}})(),Ny=e=>wt({},...Nw("",e).map(t=>t.data).reverse()),jw=Ny;let ni;function Vw(){return ni=$fetch(Ud(`builds/meta/${Bn().app.buildId}.json`),{responseType:"json"}),ni.catch(e=>{console.error("[nuxt] Error fetching app manifest.",e)}),ni}function Gd(){return ni||Vw()}function pl(e){const t=typeof e=="string"?e:e.path;try{return jw(t)}catch(n){return console.error("[nuxt] Error matching route rules.",n),{}}}async function lh(e,t={}){if(await Hw(e)){const n=await Uw(e,t);return await jy(n)||null}return null}const zw="_payload.json";async function Uw(e,t={}){const n=new URL(e,"http://localhost");if(n.host!=="localhost"||Ln(n.pathname,{acceptRelative:!0}))throw new Error("Payload URL must not include hostname: "+e);const o=Bn(),r=t.hash||(t.fresh?Date.now():o.app.buildId),u=o.app.cdnURL,a=u&&await Kw(e)?u:o.app.baseURL;return cr(a,n.pathname,zw+(r?`?${r}`:""))}async function jy(e){const t=fetch(e,{cache:"force-cache"}).then(n=>n.text().then(Uy));try{return await t}catch(n){console.warn("[nuxt] Cannot load payload ",e,n)}return null}function Vy(e){if(e.redirect)return!1;if(e.prerender)return!0}async function zy(e){return e=e==="/"?e:e.replace(/\/$/,""),(await Gd()).prerendered.includes(e)}async function Hw(e=Yn().path){const t=pl({path:e});if(t.ssr===!1)return!1;const n=Vy(t);return n!==void 0?n:t.payload?!0:await zy(e)}async function Kw(e=Yn().path){const t=Vy(pl({path:e}));return t!==void 0?t:await zy(e)}let Cr=null;async function Ww(){if(Cr)return Cr;const e=document.getElementById("__NUXT_DATA__");if(!e)return{};const t=await Uy(e.textContent||""),n=e.dataset.src?await jy(e.dataset.src):void 0;return Cr={...t,...n,...window.__NUXT__},Cr.config?.public&&(Cr.config.public=_t(Cr.config.public)),Cr}async function Uy(e){return await mw(e,Re()._payloadRevivers)}function Gw(e,t){Re()._payloadRevivers[e]=t}function ch(e){try{return JSON.parse(e)}catch{return e}}const Hy=[["NuxtError",e=>ar(e)],["EmptyShallowRef",e=>Me(e==="_"?void 0:e==="0n"?BigInt(0):ch(e))],["EmptyRef",e=>R(e==="_"?void 0:e==="0n"?BigInt(0):ch(e))],["ShallowRef",e=>Me(e)],["ShallowReactive",e=>Pn(e)],["Ref",e=>R(e)],["Reactive",e=>_t(e)]];Hy.push(["Island",({key:e,params:t,result:n})=>{const o=Re();return o.isHydrating||(o.payload.data[e]||=$fetch(`/__nuxt_island/${e}.json`,{responseType:"json",...t?{params:t}:{}}).then(r=>(o.payload.data[e]=r,r))),{html:"",...n}}]);const Yw=vn({name:"nuxt:revive-payload:client",order:-30,async setup(e){let t,n;for(const[o,r]of Hy)Gw(o,r);Object.assign(e.payload,([t,n]=qr(()=>e.runWithContext(Ww)),t=await t,n(),t)),delete window.__NUXT__}});async function Yd(e,t={}){const n=t.document||e.resolvedOptions.document;if(!n||!e.dirty)return;const o={shouldRender:!0,tags:[]};if(await e.hooks.callHook("dom:beforeRender",o),!!o.shouldRender)return e._domUpdatePromise||(e._domUpdatePromise=new Promise(async r=>{const u=new Map,a=new Promise(h=>{e.resolveTags().then(m=>{h(m.map(g=>{const y=u.get(g._d)||0,E={tag:g,id:(y?`${g._d}:${y}`:g._d)||g._h,shouldRender:!0};return g._d&&My(g._d)&&u.set(g._d,y+1),E}))})});let s=e._dom;if(!s){s={title:n.title,elMap:new Map().set("htmlAttrs",n.documentElement).set("bodyAttrs",n.body)};for(const h of["body","head"]){const m=n[h]?.children;for(const g of m){const y=g.tagName.toLowerCase();if(!a0.has(y))continue;const E=Iy({tag:y,props:{}},{innerHTML:g.innerHTML,...g.getAttributeNames().reduce((b,v)=>(b[v]=g.getAttribute(v),b),{})||{}});if(E.key=g.getAttribute("data-hid")||void 0,E._d=i0(E)||Oy(E),s.elMap.has(E._d)){let b=1,v=E._d;for(;s.elMap.has(v);)v=`${E._d}:${b++}`;s.elMap.set(v,g)}else s.elMap.set(E._d,g)}}}s.pendingSideEffects={...s.sideEffects},s.sideEffects={};function i(h,m,g){const y=`${h}:${m}`;s.sideEffects[y]=g,delete s.pendingSideEffects[y]}function c({id:h,$el:m,tag:g}){const y=g.tag.endsWith("Attrs");s.elMap.set(h,m),y||(g.textContent&&g.textContent!==m.textContent&&(m.textContent=g.textContent),g.innerHTML&&g.innerHTML!==m.innerHTML&&(m.innerHTML=g.innerHTML),i(h,"el",()=>{m?.remove(),s.elMap.delete(h)}));for(const E in g.props){if(!Object.prototype.hasOwnProperty.call(g.props,E))continue;const b=g.props[E];if(E.startsWith("on")&&typeof b=="function"){const C=m?.dataset;if(C&&C[`${E}fired`]){const w=E.slice(0,-5);b.call(m,new Event(w.substring(2)))}m.getAttribute(`data-${E}`)!==""&&((g.tag==="bodyAttrs"?n.defaultView:m).addEventListener(E.substring(2),b.bind(m)),m.setAttribute(`data-${E}`,""));continue}const v=`attr:${E}`;if(E==="class"){if(!b)continue;for(const C of b)y&&i(h,`${v}:${C}`,()=>m.classList.remove(C)),!m.classList.contains(C)&&m.classList.add(C)}else if(E==="style"){if(!b)continue;for(const[C,w]of b)i(h,`${v}:${C}`,()=>{m.style.removeProperty(C)}),m.style.setProperty(C,w)}else b!==!1&&b!==null&&(m.getAttribute(E)!==b&&m.setAttribute(E,b===!0?"":String(b)),y&&i(h,v,()=>m.removeAttribute(E)))}}const l=[],d={bodyClose:void 0,bodyOpen:void 0,head:void 0},p=await a;for(const h of p){const{tag:m,shouldRender:g,id:y}=h;if(g){if(m.tag==="title"){n.title=m.textContent,i("title","",()=>n.title=s.title);continue}h.$el=h.$el||s.elMap.get(y),h.$el?c(h):a0.has(m.tag)&&l.push(h)}}for(const h of l){const m=h.tag.tagPosition||"head";h.$el=n.createElement(h.tag.tag),c(h),d[m]=d[m]||n.createDocumentFragment(),d[m].appendChild(h.$el)}for(const h of p)await e.hooks.callHook("dom:renderTag",h,n,i);d.head&&n.head.appendChild(d.head),d.bodyOpen&&n.body.insertBefore(d.bodyOpen,n.body.firstChild),d.bodyClose&&n.body.appendChild(d.bodyClose);for(const h in s.pendingSideEffects)s.pendingSideEffects[h]();e._dom=s,await e.hooks.callHook("dom:rendered",{renders:p}),r()}).finally(()=>{e._domUpdatePromise=void 0,e.dirty=!1})),e._domUpdatePromise}function Zw(e={}){const t=e.domOptions?.render||Yd;e.document=e.document||(typeof window<"u"?document:void 0);const n=e.document?.head.querySelector('script[id="unhead:payload"]')?.innerHTML||!1;return Iw({...e,plugins:[...e.plugins||[],{key:"client",hooks:{"entries:updated":t}}],init:[n?JSON.parse(n):!1,...e.init||[]]})}function Xw(e,t){let n=0;return()=>{const o=++n;t(()=>{n===o&&e()})}}function Jw(e={}){const t=Zw({domOptions:{render:Xw(()=>Yd(t),n=>setTimeout(n,0))},...e});return t.install=Lw(t),t}const Qw={disableDefaults:!0},eD=vn({name:"nuxt:head",enforce:"pre",setup(e){const t=Jw(Qw);e.vueApp.use(t);{let n=!0;const o=async()=>{n=!1,await Yd(t)};t.hooks.hook("dom:beforeRender",r=>{r.shouldRender=!n}),e.hooks.hook("page:start",()=>{n=!0}),e.hooks.hook("page:finish",()=>{e.isHydrating||o()}),e.hooks.hook("app:error",o),e.hooks.hook("app:suspense:resolve",o)}}});const au=typeof document<"u";function Ky(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function tD(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Ky(e.default)}const nt=Object.assign;function Xl(e,t){const n={};for(const o in t){const r=t[o];n[o]=Kn(r)?r.map(e):e(r)}return n}const Da=()=>{},Kn=Array.isArray;function dh(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}let Ct=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const Wy=Symbol("");Ct.MATCHER_NOT_FOUND+"",Ct.NAVIGATION_GUARD_REDIRECT+"",Ct.NAVIGATION_ABORTED+"",Ct.NAVIGATION_CANCELLED+"",Ct.NAVIGATION_DUPLICATED+"";function _u(e,t){return nt(new Error,{type:e,[Wy]:!0},t)}function Eo(e,t){return e instanceof Error&&Wy in e&&(t==null||!!(e.type&t))}const nD=["params","query","hash"];function oD(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of nD)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}const rD=Symbol(""),fh=Symbol(""),Zd=Symbol(""),Xd=Symbol(""),l0=Symbol("");function Gy(e){return Ue(Xd)}const uD={trailing:!0};function aD(e,t=25,n={}){if(n={...uD,...n},!Number.isFinite(t))throw new TypeError("Expected `wait` to be a finite number");let o,r,u=[],a,s;const i=(d,p)=>(a=sD(e,d,p),a.finally(()=>{if(a=null,n.trailing&&s&&!r){const h=i(d,s);return s=null,h}}),a),c=function(...d){return n.trailing&&(s=d),a||new Promise(p=>{const h=!r&&n.leading;clearTimeout(r),r=setTimeout(()=>{r=null;const m=n.leading?o:i(this,d);s=null;for(const g of u)g(m);u=[]},t),h?(o=i(this,d),p(o)):u.push(p)})},l=d=>{d&&(clearTimeout(d),r=null)};return c.isPending=()=>!!r,c.cancel=()=>{l(r),u=[],s=null},c.flush=()=>{if(l(r),!s||a)return;const d=s;return s=null,i(this,d)},c}async function sD(e,t,n){return await e.apply(t,n)}const Yy=/#/g,iD=/&/g,lD=/\//g,cD=/=/g,dD=/\?/g,Zy=/\+/g,fD=/%5B/g,pD=/%5D/g,Xy=/%5E/g,hD=/%60/g,Jy=/%7B/g,mD=/%7C/g,Qy=/%7D/g,gD=/%20/g;function Jd(e){return e==null?"":encodeURI(""+e).replace(mD,"|").replace(fD,"[").replace(pD,"]")}function vD(e){return Jd(e).replace(Jy,"{").replace(Qy,"}").replace(Xy,"^")}function c0(e){return Jd(e).replace(Zy,"%2B").replace(gD,"+").replace(Yy,"%23").replace(iD,"%26").replace(hD,"`").replace(Jy,"{").replace(Qy,"}").replace(Xy,"^")}function yD(e){return c0(e).replace(cD,"%3D")}function bD(e){return Jd(e).replace(Yy,"%23").replace(dD,"%3F")}function ED(e){return bD(e).replace(lD,"%2F")}function Na(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const CD=/\/$/,xD=e=>e.replace(CD,"");function Jl(e,t,n="/"){let o,r={},u="",a="";const s=t.indexOf("#");let i=t.indexOf("?");return i=s>=0&&i>s?-1:i,i>=0&&(o=t.slice(0,i),u=t.slice(i,s>0?s:t.length),r=e(u.slice(1))),s>=0&&(o=o||t.slice(0,s),a=t.slice(s,t.length)),o=BD(o??t,n),{fullPath:o+u+a,path:o,query:r,hash:Na(a)}}function wD(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function ph(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function DD(e,t,n){const o=t.matched.length-1,r=n.matched.length-1;return o>-1&&o===r&&ku(t.matched[o],n.matched[r])&&e3(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ku(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function e3(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!AD(e[n],t[n]))return!1;return!0}function AD(e,t){return Kn(e)?hh(e,t):Kn(t)?hh(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function hh(e,t){return Kn(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function BD(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),r=o[o.length-1];(r===".."||r===".")&&o.push("");let u=n.length-1,a,s;for(a=0;a1&&u--;else break;return n.slice(0,u).join("/")+"/"+o.slice(a).join("/")}const Fn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let d0=(function(e){return e.pop="pop",e.push="push",e})({}),Ql=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function _D(e){if(!e)if(au){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),xD(e)}const kD=/^[^#]+#/;function SD(e,t){return e.replace(kD,"#")+t}function TD(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const hl=()=>({left:window.scrollX,top:window.scrollY});function FD(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=TD(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function mh(e,t){return(history.state?history.state.position-t:-1)+e}const f0=new Map;function PD(e,t){f0.set(e,t)}function MD(e){const t=f0.get(e);return f0.delete(e),t}function OD(e){return typeof e=="string"||e&&typeof e=="object"}function t3(e){return typeof e=="string"||typeof e=="symbol"}function ID(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;or&&c0(r)):[o&&c0(o)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function RD(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=Kn(o)?o.map(r=>r==null?null:""+r):o==null?o:""+o)}return t}function oa(){let e=[];function t(o){return e.push(o),()=>{const r=e.indexOf(o);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function er(e,t,n,o,r,u=a=>a()){const a=o&&(o.enterCallbacks[r]=o.enterCallbacks[r]||[]);return()=>new Promise((s,i)=>{const c=p=>{p===!1?i(_u(Ct.NAVIGATION_ABORTED,{from:n,to:t})):p instanceof Error?i(p):OD(p)?i(_u(Ct.NAVIGATION_GUARD_REDIRECT,{from:t,to:p})):(a&&o.enterCallbacks[r]===a&&typeof p=="function"&&a.push(p),s())},l=u(()=>e.call(o&&o.instances[r],t,n,c));let d=Promise.resolve(l);e.length<3&&(d=d.then(c)),d.catch(p=>i(p))})}function ec(e,t,n,o,r=u=>u()){const u=[];for(const a of e)for(const s in a.components){let i=a.components[s];if(!(t!=="beforeRouteEnter"&&!a.instances[s]))if(Ky(i)){const c=(i.__vccOpts||i)[t];c&&u.push(er(c,n,o,a,s,r))}else{let c=i();u.push(()=>c.then(l=>{if(!l)throw new Error(`Couldn't resolve component "${s}" at "${a.path}"`);const d=tD(l)?l.default:l;a.mods[s]=l,a.components[s]=d;const p=(d.__vccOpts||d)[t];return p&&er(p,n,o,a,s,r)()}))}}return u}function LD(e,t){const n=[],o=[],r=[],u=Math.max(t.matched.length,e.matched.length);for(let a=0;aku(c,s))?o.push(s):n.push(s));const i=e.matched[a];i&&(t.matched.find(c=>ku(c,i))||r.push(i))}return[n,o,r]}let qD=()=>location.protocol+"//"+location.host;function n3(e,t){const{pathname:n,search:o,hash:r}=t,u=e.indexOf("#");if(u>-1){let a=r.includes(e.slice(u))?e.slice(u).length:1,s=r.slice(a);return s[0]!=="/"&&(s="/"+s),ph(s,"")}return ph(n,e)+o+r}function $D(e,t,n,o){let r=[],u=[],a=null;const s=({state:p})=>{const h=n3(e,location),m=n.value,g=t.value;let y=0;if(p){if(n.value=h,t.value=p,a&&a===m){a=null;return}y=g?p.position-g.position:0}else o(h);r.forEach(E=>{E(n.value,m,{delta:y,type:d0.pop,direction:y?y>0?Ql.forward:Ql.back:Ql.unknown})})};function i(){a=n.value}function c(p){r.push(p);const h=()=>{const m=r.indexOf(p);m>-1&&r.splice(m,1)};return u.push(h),h}function l(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(nt({},p.state,{scroll:hl()}),"")}}function d(){for(const p of u)p();u=[],window.removeEventListener("popstate",s),window.removeEventListener("pagehide",l),document.removeEventListener("visibilitychange",l)}return window.addEventListener("popstate",s),window.addEventListener("pagehide",l),document.addEventListener("visibilitychange",l),{pauseListeners:i,listen:c,destroy:d}}function vh(e,t,n,o=!1,r=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:r?hl():null}}function ND(e){const{history:t,location:n}=window,o={value:n3(e,n)},r={value:t.state};r.value||u(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function u(i,c,l){const d=e.indexOf("#"),p=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+i:qD()+e+i;try{t[l?"replaceState":"pushState"](c,"",p),r.value=c}catch(h){console.error(h),n[l?"replace":"assign"](p)}}function a(i,c){u(i,nt({},t.state,vh(r.value.back,i,r.value.forward,!0),c,{position:r.value.position}),!0),o.value=i}function s(i,c){const l=nt({},r.value,t.state,{forward:i,scroll:hl()});u(l.current,l,!0),u(i,nt({},vh(o.value,i,null),{position:l.position+1},c),!1),o.value=i}return{location:o,state:r,push:s,replace:a}}function jD(e){e=_D(e);const t=ND(e),n=$D(e,t.state,t.location,t.replace);function o(u,a=!0){a||n.pauseListeners(),history.go(u)}const r=nt({location:"",base:e,go:o,createHref:SD.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Fr=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Ot=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Ot||{});const VD={type:Fr.Static,value:""},zD=/[a-zA-Z0-9_]/;function UD(e){if(!e)return[[]];if(e==="/")return[[VD]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${c}": ${h}`)}let n=Ot.Static,o=n;const r=[];let u;function a(){u&&r.push(u),u=[]}let s=0,i,c="",l="";function d(){c&&(n===Ot.Static?u.push({type:Fr.Static,value:c}):n===Ot.Param||n===Ot.ParamRegExp||n===Ot.ParamRegExpEnd?(u.length>1&&(i==="*"||i==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),u.push({type:Fr.Param,value:c,regexp:l,repeatable:i==="*"||i==="+",optional:i==="*"||i==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=i}for(;st.length?t.length===1&&t[0]===tn.Static+tn.Segment?1:-1:0}function o3(e,t){let n=0;const o=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const YD={strict:!1,end:!0,sensitive:!1};function ZD(e,t,n){const o=WD(UD(e.path),n),r=nt(o,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function XD(e,t){const n=[],o=new Map;t=dh(YD,t);function r(d){return o.get(d)}function u(d,p,h){const m=!h,g=Ch(d);g.aliasOf=h&&h.record;const y=dh(t,d),E=[g];if("alias"in d){const C=typeof d.alias=="string"?[d.alias]:d.alias;for(const w of C)E.push(Ch(nt({},g,{components:h?h.record.components:g.components,path:w,aliasOf:h?h.record:g})))}let b,v;for(const C of E){const{path:w}=C;if(p&&w[0]!=="/"){const B=p.record.path,x=B[B.length-1]==="/"?"":"/";C.path=p.record.path+(w&&x+w)}if(b=ZD(C,p,y),h?h.alias.push(b):(v=v||b,v!==b&&v.alias.push(b),m&&d.name&&!xh(b)&&a(d.name)),r3(b)&&i(b),g.children){const B=g.children;for(let x=0;x{a(v)}:Da}function a(d){if(t3(d)){const p=o.get(d);p&&(o.delete(d),n.splice(n.indexOf(p),1),p.children.forEach(a),p.alias.forEach(a))}else{const p=n.indexOf(d);p>-1&&(n.splice(p,1),d.record.name&&o.delete(d.record.name),d.children.forEach(a),d.alias.forEach(a))}}function s(){return n}function i(d){const p=eA(d,n);n.splice(p,0,d),d.record.name&&!xh(d)&&o.set(d.record.name,d)}function c(d,p){let h,m={},g,y;if("name"in d&&d.name){if(h=o.get(d.name),!h)throw _u(Ct.MATCHER_NOT_FOUND,{location:d});y=h.record.name,m=nt(Eh(p.params,h.keys.filter(v=>!v.optional).concat(h.parent?h.parent.keys.filter(v=>v.optional):[]).map(v=>v.name)),d.params&&Eh(d.params,h.keys.map(v=>v.name))),g=h.stringify(m)}else if(d.path!=null)g=d.path,h=n.find(v=>v.re.test(g)),h&&(m=h.parse(g),y=h.record.name);else{if(h=p.name?o.get(p.name):n.find(v=>v.re.test(p.path)),!h)throw _u(Ct.MATCHER_NOT_FOUND,{location:d,currentLocation:p});y=h.record.name,m=nt({},p.params,d.params),g=h.stringify(m)}const E=[];let b=h;for(;b;)E.unshift(b.record),b=b.parent;return{name:y,path:g,params:m,matched:E,meta:QD(E)}}e.forEach(d=>u(d));function l(){n.length=0,o.clear()}return{addRoute:u,resolve:c,removeRoute:a,clearRoutes:l,getRoutes:s,getRecordMatcher:r}}function Eh(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function Ch(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:JD(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function JD(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function xh(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function QD(e){return e.reduce((t,n)=>nt(t,n.meta),{})}function eA(e,t){let n=0,o=t.length;for(;n!==o;){const u=n+o>>1;o3(e,t[u])<0?o=u:n=u+1}const r=tA(e);return r&&(o=t.lastIndexOf(r,o-1)),o}function tA(e){let t=e;for(;t=t.parent;)if(r3(t)&&o3(e,t)===0)return t}function r3({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function wh(e){const t=Ue(Zd),n=Ue(Xd),o=F(()=>{const i=f(e.to);return t.resolve(i)}),r=F(()=>{const{matched:i}=o.value,{length:c}=i,l=i[c-1],d=n.matched;if(!l||!d.length)return-1;const p=d.findIndex(ku.bind(null,l));if(p>-1)return p;const h=Dh(i[c-2]);return c>1&&Dh(l)===h&&d[d.length-1].path!==h?d.findIndex(ku.bind(null,i[c-2])):p}),u=F(()=>r.value>-1&&aA(n.params,o.value.params)),a=F(()=>r.value>-1&&r.value===n.matched.length-1&&e3(n.params,o.value.params));function s(i={}){if(uA(i)){const c=t[f(e.replace)?"replace":"push"](f(e.to)).catch(Da);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:o,href:F(()=>o.value.href),isActive:u,isExactActive:a,navigate:s}}function nA(e){return e.length===1?e[0]:e}const oA=L({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:wh,setup(e,{slots:t}){const n=_t(wh(e)),{options:o}=Ue(Zd),r=F(()=>({[Ah(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[Ah(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const u=t.default&&nA(t.default(n));return e.custom?u:qe("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},u)}}}),rA=oA;function uA(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function aA(e,t){for(const n in t){const o=t[n],r=e[n];if(typeof o=="string"){if(o!==r)return!1}else if(!Kn(r)||r.length!==o.length||o.some((u,a)=>u.valueOf()!==r[a].valueOf()))return!1}return!0}function Dh(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ah=(e,t,n)=>e??t??n,sA=L({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=Ue(l0),r=F(()=>e.route||o.value),u=Ue(fh,0),a=F(()=>{let c=f(u);const{matched:l}=r.value;let d;for(;(d=l[c])&&!d.components;)c++;return c}),s=F(()=>r.value.matched[a.value]);Pt(fh,F(()=>a.value+1)),Pt(rD,s),Pt(l0,r);const i=R();return ye(()=>[i.value,s.value,e.name],([c,l,d],[p,h,m])=>{l&&(l.instances[d]=c,h&&h!==l&&c&&c===p&&(l.leaveGuards.size||(l.leaveGuards=h.leaveGuards),l.updateGuards.size||(l.updateGuards=h.updateGuards))),c&&l&&(!h||!ku(l,h)||!p)&&(l.enterCallbacks[d]||[]).forEach(g=>g(c))},{flush:"post"}),()=>{const c=r.value,l=e.name,d=s.value,p=d&&d.components[l];if(!p)return Bh(n.default,{Component:p,route:c});const h=d.props[l],m=h?h===!0?c.params:typeof h=="function"?h(c):h:null,y=qe(p,nt({},m,t,{onVnodeUnmounted:E=>{E.component.isUnmounted&&(d.instances[l]=null)},ref:i}));return Bh(n.default,{Component:y,route:c})||y}}});function Bh(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const u3=sA;function iA(e){const t=XD(e.routes,e),n=e.parseQuery||ID,o=e.stringifyQuery||gh,r=e.history,u=oa(),a=oa(),s=oa(),i=Me(Fn);let c=Fn;au&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const l=Xl.bind(null,Z=>""+Z),d=Xl.bind(null,ED),p=Xl.bind(null,Na);function h(Z,ce){let se,Ee;return t3(Z)?(se=t.getRecordMatcher(Z),Ee=ce):Ee=Z,t.addRoute(Ee,se)}function m(Z){const ce=t.getRecordMatcher(Z);ce&&t.removeRoute(ce)}function g(){return t.getRoutes().map(Z=>Z.record)}function y(Z){return!!t.getRecordMatcher(Z)}function E(Z,ce){if(ce=nt({},ce||i.value),typeof Z=="string"){const M=Jl(n,Z,ce.path),V=t.resolve({path:M.path},ce),te=r.createHref(M.fullPath);return nt(M,V,{params:p(V.params),hash:Na(M.hash),redirectedFrom:void 0,href:te})}let se;if(Z.path!=null)se=nt({},Z,{path:Jl(n,Z.path,ce.path).path});else{const M=nt({},Z.params);for(const V in M)M[V]==null&&delete M[V];se=nt({},Z,{params:d(M)}),ce.params=d(ce.params)}const Ee=t.resolve(se,ce),Te=Z.hash||"";Ee.params=l(p(Ee.params));const Ge=wD(o,nt({},Z,{hash:vD(Te),path:Ee.path})),T=r.createHref(Ge);return nt({fullPath:Ge,hash:Te,query:o===gh?RD(Z.query):Z.query||{}},Ee,{redirectedFrom:void 0,href:T})}function b(Z){return typeof Z=="string"?Jl(n,Z,i.value.path):nt({},Z)}function v(Z,ce){if(c!==Z)return _u(Ct.NAVIGATION_CANCELLED,{from:ce,to:Z})}function C(Z){return x(Z)}function w(Z){return C(nt(b(Z),{replace:!0}))}function B(Z,ce){const se=Z.matched[Z.matched.length-1];if(se&&se.redirect){const{redirect:Ee}=se;let Te=typeof Ee=="function"?Ee(Z,ce):Ee;return typeof Te=="string"&&(Te=Te.includes("?")||Te.includes("#")?Te=b(Te):{path:Te},Te.params={}),nt({query:Z.query,hash:Z.hash,params:Te.path!=null?{}:Z.params},Te)}}function x(Z,ce){const se=c=E(Z),Ee=i.value,Te=Z.state,Ge=Z.force,T=Z.replace===!0,M=B(se,Ee);if(M)return x(nt(b(M),{state:typeof M=="object"?nt({},Te,M.state):Te,force:Ge,replace:T}),ce||se);const V=se;V.redirectedFrom=ce;let te;return!Ge&&DD(o,Ee,se)&&(te=_u(Ct.NAVIGATION_DUPLICATED,{to:V,from:Ee}),ut(Ee,Ee,!0,!1)),(te?Promise.resolve(te):O(V,Ee)).catch(X=>Eo(X)?Eo(X,Ct.NAVIGATION_GUARD_REDIRECT)?X:le(X):K(X,V,Ee)).then(X=>{if(X){if(Eo(X,Ct.NAVIGATION_GUARD_REDIRECT))return x(nt({replace:T},b(X.to),{state:typeof X.to=="object"?nt({},Te,X.to.state):Te,force:Ge}),ce||V)}else X=N(V,Ee,!0,T,Te);return H(V,Ee,X),X})}function _(Z,ce){const se=v(Z,ce);return se?Promise.reject(se):Promise.resolve()}function S(Z){const ce=Dt.values().next().value;return ce&&typeof ce.runWithContext=="function"?ce.runWithContext(Z):Z()}function O(Z,ce){let se;const[Ee,Te,Ge]=LD(Z,ce);se=ec(Ee.reverse(),"beforeRouteLeave",Z,ce);for(const M of Ee)M.leaveGuards.forEach(V=>{se.push(er(V,Z,ce))});const T=_.bind(null,Z,ce);return se.push(T),ze(se).then(()=>{se=[];for(const M of u.list())se.push(er(M,Z,ce));return se.push(T),ze(se)}).then(()=>{se=ec(Te,"beforeRouteUpdate",Z,ce);for(const M of Te)M.updateGuards.forEach(V=>{se.push(er(V,Z,ce))});return se.push(T),ze(se)}).then(()=>{se=[];for(const M of Ge)if(M.beforeEnter)if(Kn(M.beforeEnter))for(const V of M.beforeEnter)se.push(er(V,Z,ce));else se.push(er(M.beforeEnter,Z,ce));return se.push(T),ze(se)}).then(()=>(Z.matched.forEach(M=>M.enterCallbacks={}),se=ec(Ge,"beforeRouteEnter",Z,ce,S),se.push(T),ze(se))).then(()=>{se=[];for(const M of a.list())se.push(er(M,Z,ce));return se.push(T),ze(se)}).catch(M=>Eo(M,Ct.NAVIGATION_CANCELLED)?M:Promise.reject(M))}function H(Z,ce,se){s.list().forEach(Ee=>S(()=>Ee(Z,ce,se)))}function N(Z,ce,se,Ee,Te){const Ge=v(Z,ce);if(Ge)return Ge;const T=ce===Fn,M=au?history.state:{};se&&(Ee||T?r.replace(Z.fullPath,nt({scroll:T&&M&&M.scroll},Te)):r.push(Z.fullPath,Te)),i.value=Z,ut(Z,ce,se,T),le()}let J;function G(){J||(J=r.listen((Z,ce,se)=>{if(!Ne.listening)return;const Ee=E(Z),Te=B(Ee,Ne.currentRoute.value);if(Te){x(nt(Te,{replace:!0,force:!0}),Ee).catch(Da);return}c=Ee;const Ge=i.value;au&&PD(mh(Ge.fullPath,se.delta),hl()),O(Ee,Ge).catch(T=>Eo(T,Ct.NAVIGATION_ABORTED|Ct.NAVIGATION_CANCELLED)?T:Eo(T,Ct.NAVIGATION_GUARD_REDIRECT)?(x(nt(b(T.to),{force:!0}),Ee).then(M=>{Eo(M,Ct.NAVIGATION_ABORTED|Ct.NAVIGATION_DUPLICATED)&&!se.delta&&se.type===d0.pop&&r.go(-1,!1)}).catch(Da),Promise.reject()):(se.delta&&r.go(-se.delta,!1),K(T,Ee,Ge))).then(T=>{T=T||N(Ee,Ge,!1),T&&(se.delta&&!Eo(T,Ct.NAVIGATION_CANCELLED)?r.go(-se.delta,!1):se.type===d0.pop&&Eo(T,Ct.NAVIGATION_ABORTED|Ct.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),H(Ee,Ge,T)}).catch(Da)}))}let $=oa(),I=oa(),W;function K(Z,ce,se){le(Z);const Ee=I.list();return Ee.length?Ee.forEach(Te=>Te(Z,ce,se)):console.error(Z),Promise.reject(Z)}function de(){return W&&i.value!==Fn?Promise.resolve():new Promise((Z,ce)=>{$.add([Z,ce])})}function le(Z){return W||(W=!Z,G(),$.list().forEach(([ce,se])=>Z?se(Z):ce()),$.reset()),Z}function ut(Z,ce,se,Ee){const{scrollBehavior:Te}=e;if(!au||!Te)return Promise.resolve();const Ge=!se&&MD(mh(Z.fullPath,0))||(Ee||!se)&&history.state&&history.state.scroll||null;return Oe().then(()=>Te(Z,ce,Ge)).then(T=>T&&FD(T)).catch(T=>K(T,Z,ce))}const Ve=Z=>r.go(Z);let ht;const Dt=new Set,Ne={currentRoute:i,listening:!0,addRoute:h,removeRoute:m,clearRoutes:t.clearRoutes,hasRoute:y,getRoutes:g,resolve:E,options:e,push:C,replace:w,go:Ve,back:()=>Ve(-1),forward:()=>Ve(1),beforeEach:u.add,beforeResolve:a.add,afterEach:s.add,onError:I.add,isReady:de,install(Z){Z.component("RouterLink",rA),Z.component("RouterView",u3),Z.config.globalProperties.$router=Ne,Object.defineProperty(Z.config.globalProperties,"$route",{enumerable:!0,get:()=>f(i)}),au&&!ht&&i.value===Fn&&(ht=!0,C(r.location).catch(Ee=>{}));const ce={};for(const Ee in Fn)Object.defineProperty(ce,Ee,{get:()=>i.value[Ee],enumerable:!0});Z.provide(Zd,Ne),Z.provide(Xd,Pn(ce)),Z.provide(l0,i);const se=Z.unmount;Dt.add(Z),Z.unmount=function(){Dt.delete(Z),Dt.size<1&&(c=Fn,J&&J(),J=null,i.value=Fn,ht=!1,W=!1),se()}}};function ze(Z){return Z.reduce((ce,se)=>ce.then(()=>S(se)),Promise.resolve())}return Ne}const lA=/(:\w+)\([^)]+\)/g,cA=/(:\w+)[?+*]/g,dA=/:\w+/g,fA=(e,t)=>t.path.replace(lA,"$1").replace(cA,"$1").replace(dA,n=>e.params[n.slice(1)]?.toString()||""),p0=(e,t)=>{const n=e.route.matched.find(r=>r.components?.default===e.Component.type),o=t??n?.meta.key??(n&&fA(e.route,n));return typeof o=="function"?o(e.route):o},pA=(e,t)=>({default:()=>e?qe(sC,e===!0?{}:e,t):t});function a3(e){return Array.isArray(e)?e:[e]}const hA="modulepreload",mA=function(e,t){return new URL(e,t).href},_h={},ne=function(t,n,o){let r=Promise.resolve();if(n&&n.length>0){let c=function(l){return Promise.all(l.map(d=>Promise.resolve(d).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};const a=document.getElementsByTagName("link"),s=document.querySelector("meta[property=csp-nonce]"),i=s?.nonce||s?.getAttribute("nonce");r=c(n.map(l=>{if(l=mA(l,o),l in _h)return;_h[l]=!0;const d=l.endsWith(".css"),p=d?'[rel="stylesheet"]':"";if(o)for(let m=a.length-1;m>=0;m--){const g=a[m];if(g.href===l&&(!d||g.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${l}"]${p}`))return;const h=document.createElement("link");if(h.rel=d?"stylesheet":hA,d||(h.as="script"),h.crossOrigin="",h.href=l,i&&h.setAttribute("nonce",i),document.head.appendChild(h),d)return new Promise((m,g)=>{h.addEventListener("load",m),h.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${l}`)))})}))}function u(a){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=a,window.dispatchEvent(s),!s.defaultPrevented)throw a}return r.then(a=>{for(const s of a||[])s.status==="rejected"&&u(s.reason);return t().catch(u)})},gA={layout:"docs"},tc=[{name:"lang-slug",path:"/:lang?/:slug(.*)*",meta:gA||{},component:()=>ne(()=>import("./AFG10c_a.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url)},{name:"index",path:"/",component:()=>ne(()=>import("./DzNJTbjO.js"),__vite__mapDeps([5,2,3]),import.meta.url)}],s3=(e,t)=>({default:()=>e?qe(tx,e===!0?{}:e,t):t.default?.()}),vA=/(:\w+)\([^)]+\)/g,yA=/(:\w+)[?+*]/g,bA=/:\w+/g;function kh(e){const t=e?.meta.key??e.path.replace(vA,"$1").replace(yA,"$1").replace(bA,n=>e.params[n.slice(1)]?.toString()||"");return typeof t=="function"?t(e):t}function EA(e,t){return e===t||t===Fn?!1:kh(e)!==kh(t)?!0:!e.matched.every((o,r)=>o.components&&o.components.default===t.matched[r]?.components?.default)}function Sh(e){return Array.isArray(e)?e:[e]}function i3(e){const t=[];for(const n of e)n&&t.push({...n,onAfterLeave:n.onAfterLeave?Sh(n.onAfterLeave):void 0,onBeforeLeave:n.onBeforeLeave?Sh(n.onBeforeLeave):void 0});return wt(...t)}const CA={scrollBehavior(e,t,n){const o=Re(),r=Xt().options?.scrollBehaviorType??"auto";return e.path.replace(/\/$/,"")===t.path.replace(/\/$/,"")?t.hash&&!e.hash?{left:0,top:0}:e.hash?{el:e.hash,top:l3(e.hash),behavior:r}:!1:(typeof e.meta.scrollToTop=="function"?e.meta.scrollToTop(e,t):e.meta.scrollToTop)===!1?!1:t===Fn?Th(e,t,n,r):new Promise(a=>{const s=()=>{requestAnimationFrame(()=>a(Th(e,t,n,r)))};o.hooks.hookOnce("page:loading:end",()=>{const i=o["~transitionPromise"];i?i.then(s):s()})})}};function l3(e){try{const t=document.querySelector(e);if(t)return(Number.parseFloat(getComputedStyle(t).scrollMarginTop)||0)+(Number.parseFloat(getComputedStyle(document.documentElement).scrollPaddingTop)||0)}catch{}return 0}function Th(e,t,n,o){if(n)return n;const r=EA(e,t);return e.hash?{el:e.hash,top:l3(e.hash),behavior:r?o:"instant"}:{left:0,top:0}}const xA={hashMode:!1,scrollBehaviorType:"auto"},Ko={...xA,...CA},wA=async(e,t)=>{let n,o;if(!e.meta?.validate)return;const r=([n,o]=qr(()=>Promise.resolve(e.meta.validate(e))),n=await n,o(),n);if(r===!0)return;const u=ar({fatal:!0,status:r&&(r.status||r.statusCode)||404,statusText:r&&(r.statusText||r.statusMessage)||`Page Not Found: ${e.fullPath}`,data:{path:e.fullPath}});return typeof window<"u"&&window.history.pushState({},"",t.fullPath),u};function Nn(e){if(typeof e!="object")return e;var t,n,o=Object.prototype.toString.call(e);if(o==="[object Object]"){if(e.constructor!==Object&&typeof e.constructor=="function"){n=new e.constructor;for(t in e)e.hasOwnProperty(t)&&n[t]!==e[t]&&(n[t]=Nn(e[t]))}else{n={};for(t in e)t==="__proto__"?Object.defineProperty(n,t,{value:Nn(e[t]),configurable:!0,enumerable:!0,writable:!0}):n[t]=Nn(e[t])}return n}if(o==="[object Array]"){for(t=e.length,n=Array(t);t--;)n[t]=Nn(e[t]);return n}return o==="[object Set]"?(n=new Set,e.forEach(function(r){n.add(Nn(r))}),n):o==="[object Map]"?(n=new Map,e.forEach(function(r,u){n.set(Nn(u),Nn(r))}),n):o==="[object Date]"?new Date(+e):o==="[object RegExp]"?(n=new RegExp(e.source,e.flags),n.lastIndex=e.lastIndex,n):o==="[object DataView]"?new e.constructor(Nn(e.buffer)):o==="[object ArrayBuffer]"?e.slice(0):o.slice(-6)==="Array]"?new e.constructor(e):e}var Qd={};const Fh=Qd.DOCS_REPO_URL||"https://github.com/InnovativeDevSolutions/forge",DA=Qd.DOCS_REPO_BRANCH||"master",AA=Qd.DOCS_SITE_URL||"https://innovativedevsolutions.github.io",BA={site:{name:"Forge Framework",description:"Persistent Arma 3 framework with Rust services, SurrealDB storage, and browser-backed client UIs.",url:AA,socials:{github:"InnovativeDevSolutions/forge"}},github:{url:Fh,branch:DA,rootDir:"docus"},footer:{credits:"Copyright © 2025-2026 Forge Framework",links:[{icon:"simple-icons:github",href:Fh,target:"_blank"}]}},_A={docus:{locale:"en",colorMode:""},ui:{colors:{primary:"emerald",neutral:"zinc"},commandPalette:{slots:{item:"items-center",input:"[&_.iconify]:size-4 [&_.iconify]:mx-0.5",itemLeadingIcon:"size-4 mx-0.5"}},contentToc:{defaultVariants:{highlight:!0}},contentNavigation:{slots:{linkLeadingIcon:"size-4 mr-1",linkTrailing:"hidden"},defaultVariants:{variant:"link",highlight:!0}},navigationMenu:{defaultVariants:{variant:"pill",highlight:!0}},pageLinks:{slots:{linkLeadingIcon:"size-4",linkLabelExternalIcon:"size-2.5"}}}},kA={nuxt:{},header:{title:"forge-docus"},seo:{titleTemplate:"%s - forge-docus",title:"forge-docus",description:""},github:{owner:"IDSolutions",name:"forge",url:"https://innovativedevsolutions.org/IDSolutions/forge",branch:"docus"},ui:{colors:{primary:"green",secondary:"blue",success:"green",info:"blue",warning:"yellow",error:"red",neutral:"slate"},icons:{arrowDown:"i-lucide-arrow-down",arrowLeft:"i-lucide-arrow-left",arrowRight:"i-lucide-arrow-right",arrowUp:"i-lucide-arrow-up",caution:"i-lucide-circle-alert",check:"i-lucide-check",chevronDoubleLeft:"i-lucide-chevrons-left",chevronDoubleRight:"i-lucide-chevrons-right",chevronDown:"i-lucide-chevron-down",chevronLeft:"i-lucide-chevron-left",chevronRight:"i-lucide-chevron-right",chevronUp:"i-lucide-chevron-up",close:"i-lucide-x",copy:"i-lucide-copy",copyCheck:"i-lucide-copy-check",dark:"i-lucide-moon",drag:"i-lucide-grip-vertical",ellipsis:"i-lucide-ellipsis",error:"i-lucide-circle-x",external:"i-lucide-arrow-up-right",eye:"i-lucide-eye",eyeOff:"i-lucide-eye-off",file:"i-lucide-file",folder:"i-lucide-folder",folderOpen:"i-lucide-folder-open",hash:"i-lucide-hash",info:"i-lucide-info",light:"i-lucide-sun",loading:"i-lucide-loader-circle",menu:"i-lucide-menu",minus:"i-lucide-minus",panelClose:"i-lucide-panel-left-close",panelOpen:"i-lucide-panel-left-open",plus:"i-lucide-plus",reload:"i-lucide-rotate-ccw",search:"i-lucide-search",stop:"i-lucide-square",success:"i-lucide-circle-check",system:"i-lucide-monitor",tip:"i-lucide-lightbulb",upload:"i-lucide-upload",warning:"i-lucide-triangle-alert"},tv:{twMergeConfig:{}}},icon:{provider:"iconify",class:"",aliases:{},iconifyApiEndpoint:"https://api.iconify.design",localApiEndpoint:"/api/_nuxt_icon",fallbackToApi:!0,cssSelectorPrefix:"i-",cssWherePseudo:!0,cssLayer:"base",mode:"css",attrs:{"aria-hidden":!0},collections:["academicons","akar-icons","ant-design","arcticons","basil","bi","bitcoin-icons","bpmn","brandico","bx","bxl","bxs","bytesize","carbon","catppuccin","cbi","charm","ci","cib","cif","cil","circle-flags","circum","clarity","codex","codicon","covid","cryptocurrency","cryptocurrency-color","cuida","dashicons","devicon","devicon-plain","dinkie-icons","duo-icons","ei","el","emojione","emojione-monotone","emojione-v1","entypo","entypo-social","eos-icons","ep","et","eva","f7","fa","fa-brands","fa-regular","fa-solid","fa6-brands","fa6-regular","fa6-solid","fa7-brands","fa7-regular","fa7-solid","fad","famicons","fe","feather","file-icons","flag","flagpack","flat-color-icons","flat-ui","flowbite","fluent","fluent-color","fluent-emoji","fluent-emoji-flat","fluent-emoji-high-contrast","fluent-mdl2","fontelico","fontisto","formkit","foundation","fxemoji","gala","game-icons","garden","geo","gg","gis","gravity-ui","gridicons","grommet-icons","guidance","healthicons","heroicons","heroicons-outline","heroicons-solid","hugeicons","humbleicons","ic","icomoon-free","icon-park","icon-park-outline","icon-park-solid","icon-park-twotone","iconamoon","iconoir","icons8","il","ion","iwwa","ix","jam","la","lets-icons","line-md","lineicons","logos","ls","lsicon","lucide","lucide-lab","mage","majesticons","maki","map","marketeq","material-icon-theme","material-symbols","material-symbols-light","mdi","mdi-light","medical-icon","memory","meteocons","meteor-icons","mi","mingcute","mono-icons","mynaui","nimbus","nonicons","noto","noto-v1","nrk","octicon","oi","ooui","openmoji","oui","pajamas","pepicons","pepicons-pencil","pepicons-pop","pepicons-print","ph","picon","pixel","pixelarticons","prime","proicons","ps","qlementine-icons","quill","radix-icons","raphael","ri","rivet-icons","roentgen","si","si-glyph","sidekickicons","simple-icons","simple-line-icons","skill-icons","solar","stash","streamline","streamline-block","streamline-color","streamline-cyber","streamline-cyber-color","streamline-emojis","streamline-flex","streamline-flex-color","streamline-freehand","streamline-freehand-color","streamline-kameleon-color","streamline-logos","streamline-pixel","streamline-plump","streamline-plump-color","streamline-sharp","streamline-sharp-color","streamline-stickies-color","streamline-ultimate","streamline-ultimate-color","subway","svg-spinners","system-uicons","tabler","tdesign","teenyicons","temaki","token","token-branded","topcoat","twemoji","typcn","uil","uim","uis","uit","uiw","unjs","vaadin","vs","vscode-icons","websymbol","weui","whh","wi","wpf","zmdi","zondicons","custom"],fetchTimeout:1500,customCollections:["custom","custom"]}},c3=G5(BA,_A,kA);function Pe(){const e=Re();return e._appConfig||=_t(c3),e._appConfig}function ss(){const t=Pe().docus?.colorMode;return{forced:t==="light"||t==="dark"?t:void 0}}const SA=e=>{const{forced:t}=ss();t&&(e.meta.colorMode=t)},TA=e=>{const t=pl({path:e.path});if(t.redirect){const n=t.redirect.includes("#")?t.redirect:t.redirect+e.hash;return Ln(n,{acceptRelative:!0})?(window.location.href=n,!1):n}},FA=[wA,SA,TA],h0={};function PA(e,t,n){const{pathname:o,search:r,hash:u}=t,a=e.indexOf("#");if(a>-1){const c=u.includes(e.slice(a))?e.slice(a).length:1;let l=u.slice(c);return l[0]!=="/"&&(l="/"+l),Wp(l,"")}const s=Wp(o,e),i=!n||fy(s,n)?s:n;return i+(i.includes("?")?"":r)+u}const MA=vn({name:"nuxt:router",enforce:"pre",async setup(e){let t,n,o=Bn().app.baseURL;const r=Ko.history?.(o)??jD(o),u=Ko.routes?([t,n]=qr(()=>Ko.routes(tc)),t=await t,n(),t??tc):tc;let a;const s=iA({...Ko,scrollBehavior:(E,b,v)=>{if(b===Fn){a=v;return}if(Ko.scrollBehavior){if(s.options.scrollBehavior=Ko.scrollBehavior,"scrollRestoration"in window.history){const C=s.beforeEach(()=>{C(),window.history.scrollRestoration="manual"})}return Ko.scrollBehavior(E,Fn,a||v)}},history:r,routes:u});"scrollRestoration"in window.history&&(window.history.scrollRestoration="auto"),e.vueApp.use(s);const i=Me(s.currentRoute.value);s.afterEach((E,b)=>{i.value=b}),Object.defineProperty(e.vueApp.config.globalProperties,"previousRoute",{get:()=>i.value});const c=PA(o,window.location,e.payload.path),l=Me(s.currentRoute.value),d=()=>{l.value=s.currentRoute.value};s.afterEach((E,b)=>{E.matched.at(-1)?.components?.default===b.matched.at(-1)?.components?.default&&d()});const p={sync:d};for(const E in l.value)Object.defineProperty(p,E,{get:()=>l.value[E],enumerable:!0});e._route=Pn(p),e._middleware||={global:[],named:{}};const h=fl();s.afterEach(async(E,b,v)=>{delete e._processingMiddleware,!e.isHydrating&&h.value&&await e.runWithContext(_y),v&&await e.callHook("page:loading:end")});try{[t,n]=qr(()=>s.isReady()),await t,n()}catch(E){[t,n]=qr(()=>e.runWithContext(()=>kr(E))),await t,n()}const m=c!==s.currentRoute.value.fullPath?s.resolve(c):s.currentRoute.value,g=e.isHydrating&&e.payload.prerenderedAt&&e.payload.path&&c!==e.payload.path&&fy(s.currentRoute.value.path,e.payload.path);d();const y=e.payload.state._layout;return s.beforeEach(async(E,b)=>{await e.callHook("page:loading:start"),E.meta=_t(E.meta),e.isHydrating&&y&&!fo(E.meta.layout)&&(E.meta.layout=y),e._processingMiddleware=!0;{const v=new Set([...FA,...e._middleware.global]);for(const w of E.matched){const B=w.meta.middleware;if(B)for(const x of a3(B))v.add(x)}const C=pl({path:E.path});if(C.appMiddleware)for(const w in C.appMiddleware)C.appMiddleware[w]?v.add(w):v.delete(w);for(const w of v){const B=typeof w=="string"?e._middleware.named[w]||await h0[w]?.().then(x=>x.default||x):w;if(!B)throw new Error(`Unknown route middleware: '${w}'.`);try{const x=await e.runWithContext(()=>B(E,b));if(!e.payload.serverRendered&&e.isHydrating&&(x===!1||x instanceof Error)){const _=x||ar({status:404,statusText:`Page Not Found: ${c}`});return await e.runWithContext(()=>kr(_)),!1}if(x===!0)continue;if(x===!1)return x;if(x)return ky(x)&&x.fatal&&await e.runWithContext(()=>kr(x)),x}catch(x){const _=ar(x);return _.fatal&&await e.runWithContext(()=>kr(_)),_}}}}),s.onError(async()=>{delete e._processingMiddleware,await e.callHook("page:loading:end")}),s.afterEach(E=>{if(E.matched.length===0&&!h.value)return e.runWithContext(()=>kr(ar({status:404,fatal:!1,statusText:`Page not found: ${E.fullPath}`,data:{path:E.fullPath}})))}),e.hooks.hookOnce("app:created",async()=>{try{if("name"in m&&(m.name=void 0),g){const E=s.resolve(e.payload.path);"name"in E&&(E.name=void 0),await s.replace({...E,force:!0}),e.hooks.hookOnce("app:suspense:resolve",async()=>{await s.replace({...m,force:!0})})}else await s.replace({...m,force:!0});s.options.scrollBehavior=Ko.scrollBehavior}catch(E){await e.runWithContext(()=>kr(E))}}),{provide:{router:s}}}});function Si(e){return typeof e=="string"?`'${e}'`:new OA().serialize(e)}const OA=(function(){class e{#e=new Map;compare(n,o){const r=typeof n,u=typeof o;return r==="string"&&u==="string"?n.localeCompare(o):r==="number"&&u==="number"?n-o:String.prototype.localeCompare.call(this.serialize(n,!0),this.serialize(o,!0))}serialize(n,o){if(n===null)return"null";switch(typeof n){case"string":return o?n:`'${n}'`;case"bigint":return`${n}n`;case"object":return this.$object(n);case"function":return this.$function(n)}return String(n)}serializeObject(n){const o=Object.prototype.toString.call(n);if(o!=="[object Object]")return this.serializeBuiltInType(o.length<10?`unknown:${o}`:o.slice(8,-1),n);const r=n.constructor,u=r===Object||r===void 0?"":r.name;if(u!==""&&globalThis[u]===r)return this.serializeBuiltInType(u,n);if(typeof n.toJSON=="function"){const a=n.toJSON();return u+(a!==null&&typeof a=="object"?this.$object(a):`(${this.serialize(a)})`)}return this.serializeObjectEntries(u,Object.entries(n))}serializeBuiltInType(n,o){const r=this["$"+n];if(r)return r.call(this,o);if(typeof o?.entries=="function")return this.serializeObjectEntries(n,o.entries());throw new Error(`Cannot serialize ${n}`)}serializeObjectEntries(n,o){const r=Array.from(o).sort((a,s)=>this.compare(a[0],s[0]));let u=`${n}{`;for(let a=0;athis.compare(o,r)))}`}$Map(n){return this.serializeObjectEntries("Map",n.entries())}}for(const t of["Error","RegExp","URL"])e.prototype["$"+t]=function(n){return`${t}(${n})`};for(const t of["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array"])e.prototype["$"+t]=function(n){return`${t}[${n.join(",")}]`};for(const t of["BigInt64Array","BigUint64Array"])e.prototype["$"+t]=function(n){return`${t}[${n.join("n,")}${n.length>0?"n":""}]`};return e})();function Ur(e,t){return e===t||Si(e)===Si(t)}const IA=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],RA=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],LA="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",xr=[];class qA{_data=new Fs;_hash=new Fs([...IA]);_nDataBytes=0;_minBufferSize=0;finalize(t){t&&this._append(t);const n=this._nDataBytes*8,o=this._data.sigBytes*8;return this._data.words[o>>>5]|=128<<24-o%32,this._data.words[(o+64>>>9<<4)+14]=Math.floor(n/4294967296),this._data.words[(o+64>>>9<<4)+15]=n,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(t,n){const o=this._hash.words;let r=o[0],u=o[1],a=o[2],s=o[3],i=o[4],c=o[5],l=o[6],d=o[7];for(let p=0;p<64;p++){if(p<16)xr[p]=t[n+p]|0;else{const v=xr[p-15],C=(v<<25|v>>>7)^(v<<14|v>>>18)^v>>>3,w=xr[p-2],B=(w<<15|w>>>17)^(w<<13|w>>>19)^w>>>10;xr[p]=C+xr[p-7]+B+xr[p-16]}const h=i&c^~i&l,m=r&u^r&a^u&a,g=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),y=(i<<26|i>>>6)^(i<<21|i>>>11)^(i<<7|i>>>25),E=d+y+h+RA[p]+xr[p],b=g+m;d=l,l=c,c=i,i=s+E|0,s=a,a=u,u=r,r=E+b|0}o[0]=o[0]+r|0,o[1]=o[1]+u|0,o[2]=o[2]+a|0,o[3]=o[3]+s|0,o[4]=o[4]+i|0,o[5]=o[5]+c|0,o[6]=o[6]+l|0,o[7]=o[7]+d|0}_append(t){typeof t=="string"&&(t=Fs.fromUtf8(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes}_process(t){let n,o=this._data.sigBytes/64;t?o=Math.ceil(o):o=Math.max((o|0)-this._minBufferSize,0);const r=o*16,u=Math.min(r*4,this._data.sigBytes);if(r){for(let a=0;a>>2]|=(n.charCodeAt(u)&255)<<24-u%4*8;return new d3(r,o)}toBase64(){const t=[];for(let n=0;n>>2]>>>24-n%4*8&255,r=this.words[n+1>>>2]>>>24-(n+1)%4*8&255,u=this.words[n+2>>>2]>>>24-(n+2)%4*8&255,a=o<<16|r<<8|u;for(let s=0;s<4&&n*8+s*6>>6*(3-s)&63))}return t.join("")}concat(t){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let n=0;n>>2]>>>24-n%4*8&255;this.words[this.sigBytes+n>>>2]|=o<<24-(this.sigBytes+n)%4*8}else for(let n=0;n>>2]=t.words[n>>>2];this.sigBytes+=t.sigBytes}};function $A(e){return new qA().finalize(e).toBase64()}function su(e){return $A(Si(e))}const f3=Symbol.for("nuxt:client-only"),ef=L({name:"ClientOnly",inheritAttrs:!1,props:["fallback","placeholder","placeholderTag","fallbackTag"],setup(e,{slots:t,attrs:n}){const o=Me(!1);$e(()=>{o.value=!0});const r=We();return r&&(r._nuxtClientOnly=!0),Pt(f3,!0),()=>{if(o.value){const i=t.default?.();return i&&i.length===1?[An(i[0],n)]:i}const u=t.fallback||t.placeholder;if(u)return qe(u);const a=e.fallback||e.placeholder||"",s=e.fallbackTag||e.placeholderTag||"span";return re(s,n,a)}}}),m0=globalThis.requestIdleCallback||(e=>{const t=Date.now(),n={didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-t))};return setTimeout(()=>{e(n)},1)}),NA=globalThis.cancelIdleCallback||(e=>{clearTimeout(e)}),ml=e=>{const t=Re();t.isHydrating?t.hooks.hookOnce("app:suspense:resolve",()=>{m0(()=>e())}):m0(()=>e())};function p3(e){return Object.defineProperty(function(){throw new Error(`[nuxt] \`${e.name}\` is a compiler macro and cannot be called at runtime.`)},"__nuxt_factory",{enumerable:!1,get:()=>e.factory})}const h3=p3({name:"createUseAsyncData",factory(e={}){function t(...n){const o=typeof n[n.length-1]=="string"?n.pop():void 0;jA(n[0],n[1])&&n.unshift(o);let[r,u,a={}]=n,s=!1;const i=F(()=>ke(r));if(typeof i.value!="string")throw new TypeError("[nuxt] [useAsyncData] key must be a string.");if(typeof u!="function")throw new TypeError("[nuxt] [useAsyncData] handler must be a function.");const c=typeof e=="function",l=Re(),d=c?e(a):e;if(!c)for(const b in d)d[b]!==void 0&&a[b]===void 0&&(a[b]=d[b]);if(a.server??=!0,a.default??=zA,a.getCachedData??=v3,a.lazy??=!1,a.immediate??=!0,a.deep??=$5.deep,a.dedupe??="cancel",c)for(const b in d)d[b]!==void 0&&(a[b]=d[b]);l._asyncData[i.value];function p(){const b={cause:"initial",dedupe:a.dedupe};return l._asyncData[i.value]?._init||(b.cachedData=a.getCachedData(i.value,l,{cause:"initial"}),l._asyncData[i.value]=Ph(l,i.value,u,a,b.cachedData)),()=>l._asyncData[i.value].execute(b)}const h=p(),m=l._asyncData[i.value];m._deps++;const g=a.server!==!1&&l.payload.serverRendered;{let b=function(_){const S=l._asyncData[_];S?._deps&&(S._deps--,S._deps===0&&S?._off())};const v=We();if(v&&g&&a.immediate&&!v.sp&&(v.sp=[]),v&&!v._nuxtOnBeforeMountCbs){v._nuxtOnBeforeMountCbs=[];const _=v._nuxtOnBeforeMountCbs;Pd(()=>{_.forEach(S=>{S()}),_.splice(0,_.length)}),Ht(()=>_.splice(0,_.length))}const C=v&&(v._nuxtClientOnly||Ue(f3,!1));g&&l.isHydrating&&(m.error.value||m.data.value!==void 0)?m.status.value=m.error.value?"error":"success":v&&(!C&&l.payload.serverRendered&&l.isHydrating||a.lazy)&&a.immediate?v._nuxtOnBeforeMountCbs.push(h):a.immediate&&m.status.value!=="success"&&h();const w=ho(),B=ye(i,(_,S)=>{if((_||S)&&_!==S){s=!0;const O=l._asyncData[S]?.data.value!==void 0,H=l._asyncDataPromises[S]!==void 0,N={cause:"initial",dedupe:a.dedupe};if(!l._asyncData[_]?._init){let J;S&&O?J=l._asyncData[S].data.value:(J=a.getCachedData(_,l,{cause:"initial"}),N.cachedData=J),l._asyncData[_]=Ph(l,_,u,a,J)}l._asyncData[_]._deps++,S&&b(S),(a.immediate||O||H)&&l._asyncData[_].execute(N),Pa(()=>{s=!1})}},{flush:"sync"}),x=a.watch?ye(a.watch,()=>{s||(l._asyncData[i.value]?._execute.isPending()&&Pa(()=>{l._asyncData[i.value]?._execute.flush()}),l._asyncData[i.value]?._execute({cause:"watch",dedupe:a.dedupe}))}):()=>{};w&&ir(()=>{B(),x(),b(i.value)})}const y={data:Ps(()=>l._asyncData[i.value]?.data),pending:Ps(()=>l._asyncData[i.value]?.pending),status:Ps(()=>l._asyncData[i.value]?.status),error:Ps(()=>l._asyncData[i.value]?.error),refresh:(...b)=>l._asyncData[i.value]?._init?l._asyncData[i.value].execute(...b):p()(),execute:(...b)=>y.refresh(...b),clear:()=>{const b=l._asyncData[i.value];if(b?._abortController)try{b._abortController.abort(new DOMException("AsyncData aborted by user.","AbortError"))}finally{b._abortController=void 0}g3(l,i.value)}},E=Promise.resolve(l._asyncDataPromises[i.value]).then(()=>y);return Object.assign(E,y),Object.defineProperties(E,{then:{enumerable:!0,value:E.then.bind(E)},catch:{enumerable:!0,value:E.catch.bind(E)},finally:{enumerable:!0,value:E.finally.bind(E)}}),E}return t}}),tf=h3.__nuxt_factory(),m3=h3.__nuxt_factory({lazy:!0,_functionName:"useLazyAsyncData"});function Ps(e){return F({get(){return e()?.value},set(t){const n=e();n&&(n.value=t)}})}function jA(e,t){return!(typeof e=="string"||typeof e=="object"&&e!==null||typeof e=="function"&&typeof t=="function")}function g3(e,t){t in e.payload.data&&(e.payload.data[t]=void 0),t in e.payload._errors&&(e.payload._errors[t]=void 0),e._asyncData[t]&&(e._asyncData[t].data.value=f(e._asyncData[t]._default()),e._asyncData[t].error.value=void 0,e._asyncData[t].status.value="idle"),t in e._asyncDataPromises&&(e._asyncDataPromises[t]=void 0)}function VA(e,t){const n={};for(const o of t)n[o]=e[o];return n}function Ph(e,t,n,o,r){e.payload._errors[t]??=void 0;const u=o.getCachedData!==v3,a=n,s=o.deep?R:Me,i=r!==void 0,c=e.hook("app:data:refresh",async d=>{(!d||d.includes(t))&&await l.execute({cause:"refresh:hook"})}),l={data:s(i?r:o.default()),pending:F(()=>l.status.value==="pending"),error:Ye(e.payload._errors,t),status:Me("idle"),execute:(...d)=>{const[p,h=void 0]=d,m=p&&h===void 0&&typeof p=="object"?p:{};if(e._asyncDataPromises[t]&&(m.dedupe??o.dedupe)==="defer")return e._asyncDataPromises[t];{const E="cachedData"in m?m.cachedData:o.getCachedData(t,e,{cause:m.cause??"refresh:manual"});if(E!==void 0)return e.payload.data[t]=l.data.value=E,l.error.value=void 0,l.status.value="success",Promise.resolve(E)}l._abortController&&l._abortController.abort(new DOMException("AsyncData request cancelled by deduplication","AbortError")),l._abortController=new AbortController,l.status.value="pending";const g=new AbortController,y=new Promise((E,b)=>{try{const v=m.timeout??o.timeout,C=UA([l._abortController?.signal,m?.signal],g.signal,v);if(C.aborted){const w=C.reason;b(w instanceof Error?w:new DOMException(String(w??"Aborted"),"AbortError"));return}return C.addEventListener("abort",()=>{const w=C.reason;b(w instanceof Error?w:new DOMException(String(w??"Aborted"),"AbortError"))},{once:!0,signal:g.signal}),Promise.resolve(a(e,{signal:C})).then(E,b)}catch(v){b(v)}}).then(async E=>{let b=E;o.transform&&(b=await o.transform(E)),o.pick&&(b=VA(b,o.pick)),e.payload.data[t]=b,l.data.value=b,l.error.value=void 0,l.status.value="success"}).catch(E=>{if(e._asyncDataPromises[t]&&e._asyncDataPromises[t]!==y||l._abortController?.signal.aborted)return e._asyncDataPromises[t];if(typeof DOMException<"u"&&E instanceof DOMException&&E.name==="AbortError")return l.status.value="idle",e._asyncDataPromises[t];l.error.value=ar(E),l.data.value=f(o.default()),l.status.value="error"}).finally(()=>{g.abort(),delete e._asyncDataPromises[t]});return e._asyncDataPromises[t]=y,e._asyncDataPromises[t]},_execute:aD((...d)=>l.execute(...d),0,{leading:!0}),_default:o.default,_deps:0,_init:!0,_hash:void 0,_off:()=>{c(),e._asyncData[t]?._init&&(e._asyncData[t]._init=!1),u||Oe(()=>{e._asyncData[t]?._init||(g3(e,t),l.execute=()=>Promise.resolve())})}};return l}const zA=()=>{},v3=(e,t,n)=>{if(t.isHydrating)return t.payload.data[e];if(n.cause!=="refresh:manual"&&n.cause!=="refresh:hook")return t.static.data[e]};function UA(e,t,n){const o=e.filter(a=>!!a);if(typeof n=="number"&&n>=0){const a=AbortSignal.timeout?.(n);a&&o.push(a)}if(AbortSignal.any)return AbortSignal.any(o);const r=new AbortController;for(const a of o)if(a.aborted){const s=a.reason??new DOMException("Aborted","AbortError");try{r.abort(s)}catch{r.abort()}return r.signal}const u=()=>{const s=o.find(i=>i.aborted)?.reason??new DOMException("Aborted","AbortError");try{r.abort(s)}catch{r.abort()}};for(const a of o)a.addEventListener?.("abort",u,{once:!0,signal:t});return r.signal}const HA="$s";function nr(...e){const t=typeof e[e.length-1]=="string"?e.pop():void 0;typeof e[0]!="string"&&e.unshift(t);const[n,o]=e;if(!n||typeof n!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+n);if(o!==void 0&&typeof o!="function")throw new Error("[nuxt] [useState] init must be a function: "+o);const r=HA+n,u=Re(),a=Ye(u.payload.state,r);if(o&&(u._state[r]??={_default:o}),a.value===void 0&&o){const s=o();if(rt(s))return u.payload.state[r]=s,s;a.value=s}return a}function KA(e){const t=[ke(e.method)?.toUpperCase()||"GET",ke(e.baseURL)];for(const n of[e.query||e.params]){const o=ke(n);if(!o)continue;const r={};for(const[u,a]of Object.entries(o))r[ke(u)]=ke(a);t.push(r)}if(e.body){const n=ke(e.body);if(!n)t.push(su(n));else if(n instanceof ArrayBuffer)t.push(su(Object.fromEntries([...new Uint8Array(n).entries()].map(([o,r])=>[o,r.toString()]))));else if(n instanceof FormData){const o={};for(const r of n.entries()){const[u,a]=r;o[u]=a instanceof File?a.name:a}t.push(su(o))}else if(xd(n))t.push(su(_t(n)));else try{t.push(su(n))}catch{console.warn("[useFetch] Failed to hash body",n)}}return t}const y3=p3({name:"createUseFetch",factory(e={}){function t(n,o,r){const[u={},a]=typeof o=="string"?[{},o]:[o,r],s=F(()=>ke(n)),i=F(()=>ke(u.key)||"$f"+su([a,typeof s.value=="string"?s.value:"",...KA(u)]));if(!u.baseURL&&typeof s.value=="string"&&s.value[0]==="/"&&s.value[1]==="/")throw new Error('[nuxt] [useFetch] the request URL must not start with "//".');const c=typeof e=="function"?e(u):e,{server:l,lazy:d,default:p,transform:h,pick:m,watch:g,immediate:y,getCachedData:E,deep:b,dedupe:v,timeout:C,...w}={...typeof e=="function"?{}:c,...u,...typeof e=="function"?c:{}},B=_t({...N5,...w,cache:typeof w.cache=="boolean"?void 0:w.cache}),x={server:l,lazy:d,default:p,transform:h,pick:m,immediate:y,getCachedData:E,deep:b,dedupe:v,timeout:C,watch:g===!1?[]:[...g||[],B]};return tf(g===!1?i.value:i,(S,{signal:O})=>(u.$fetch||globalThis.$fetch)(s.value,{signal:O,...B}),x)}return t}});y3.__nuxt_factory();y3.__nuxt_factory({lazy:!0,_functionName:"useLazyFetch"});const WA=(()=>{const e=function(){};return e.prototype=Object.create(null),e})();function GA(e,t){if(typeof e!="string")throw new TypeError("argument str must be a string");const n=new WA,o=t||{},r=o.decode||YA;let u=0;for(;uJA(decodeURIComponent(e)),encode:e=>{if(typeof e!="string"||e==="undefined")return encodeURIComponent(JSON.stringify(e));try{if(typeof JSON.parse(e)!="string")return encodeURIComponent(JSON.stringify(e))}catch{}return encodeURIComponent(e)},refresh:!1},Os=globalThis.cookieStore;function e9(e,t){const n={...QA,...t};n.filter??=c=>c===e;const o=Oh(n)||{};let r;n.maxAge!==void 0?r=n.maxAge*1e3:n.expires&&(r=n.expires.getTime()-Date.now());const u=r!==void 0&&r<=0,a=u||o[e]===void 0||o[e]===null,s=Nn(u?void 0:o[e]??n.default?.()),i=r&&!u?o9(s,r,n.watch&&n.watch!=="shallow"):R(s);{let c=null;try{!Os&&typeof BroadcastChannel<"u"&&(c=new BroadcastChannel(`nuxt:cookies:${e}`))}catch{}const l=(m=!1)=>{!m&&(n.readonly||Ur(i.value,o[e]))||(n9(e,i.value,n),o[e]=Nn(i.value),c?.postMessage({value:n.encode(i.value)}))},d=m=>{const g=m.refresh?Oh(n)?.[e]:n.decode(m.value);p=!0,i.value=g,o[e]=Nn(g),Oe(()=>{p=!1})};let p=!1;const h=!!ho();if(h&&ir(()=>{p=!0,l(),c?.close()}),Os){const m=g=>{const y=g.changed.find(b=>b.name===e),E=g.deleted.find(b=>b.name===e);y&&d({value:y.value}),E&&d({value:null})};Os.addEventListener("change",m),h&&ir(()=>Os.removeEventListener("change",m))}else c&&(c.onmessage=({data:m})=>d(m));n.watch&&ye(i,()=>{p||l(n.refresh)},{deep:n.watch!=="shallow"}),a&&l(a)}return i}function Oh(e={}){return GA(document.cookie,e)}function t9(e,t,n={}){return t==null?Mh(e,t,{...n,maxAge:-1}):Mh(e,t,n)}function n9(e,t,n={}){document.cookie=t9(e,t,n)}const Ih=2147483647;function o9(e,t,n){let o,r,u=0;const a=n?R(e):{value:e};return ho()&&ir(()=>{r?.(),clearTimeout(o)}),es((s,i)=>{n&&(r=ye(a,i));function c(){const d=t-u,p=d{if(u+=p,u4)return Promise.all(r).then(()=>b3(e,t));t._routePreloaded.add(n);for(const u of o){const a=u.components?.default;if(typeof a!="function")continue;const s=Promise.resolve(a()).catch(()=>{}).finally(()=>r.splice(r.indexOf(s),1));r.push(s)}await Promise.all(r)}function u9(e={}){const t=e.path||window.location.pathname;let n={};try{n=JSON.parse(sessionStorage.getItem("nuxt:reload")||"{}")}catch{}if(e.force||n?.path!==t||n?.expirese.find(t=>t!==void 0);function s9(e){const t=e.componentName||"NuxtLink";function n(u){return typeof u=="string"&&u.startsWith("#")}function o(u,a,s){const i=s??e.trailingSlash;if(!u||i!=="append"&&i!=="remove")return u;if(typeof u=="string")return Is(u,i);const c="path"in u&&u.path!==void 0?u.path:a(u).path;return{...u,name:void 0,path:Is(c,i)}}function r(u){const a=Xt(),s=Bn(),i=F(()=>!!f(u.target)&&f(u.target)!=="_self"),c=F(()=>{const y=f(u.to)||f(u.href)||"";return typeof y=="string"&&Ln(y,{acceptRelative:!0})}),l=Ep("RouterLink"),d=l&&typeof l!="string"?l.useLink:void 0,p=F(()=>{if(f(u.external))return!0;const y=f(u.to)||f(u.href)||"";return typeof y=="object"?!1:y===""||c.value}),h=F(()=>{const y=f(u.to)||f(u.href)||"";return p.value?y:o(y,a.resolve,f(u.trailingSlash))}),m=p.value?void 0:d?.({...u,to:h,viewTransition:f(u.viewTransition)}),g=F(()=>{const y=f(u.trailingSlash)??e.trailingSlash;if(!h.value||c.value||n(h.value))return h.value;if(p.value){const E=typeof h.value=="object"&&"path"in h.value?u0(h.value):h.value,b=typeof E=="object"?a.resolve(E).href:E;return Is(b,y)}return typeof h.value=="object"?a.resolve(h.value)?.href??null:Is(cr(s.app.baseURL,h.value),y)});return{to:h,hasTarget:i,isAbsoluteUrl:c,isExternal:p,href:g,isActive:m?.isActive??F(()=>h.value===a.currentRoute.value.path),isExactActive:m?.isExactActive??F(()=>h.value===a.currentRoute.value.path),route:m?.route??F(()=>a.resolve(h.value)),async navigate(y){await dl(g.value,{replace:f(u.replace),external:p.value||i.value})}}}return L({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:r,setup(u,{slots:a}){const s=Xt(),{to:i,href:c,navigate:l,isExternal:d,hasTarget:p,isAbsoluteUrl:h}=r(u),m=Me(!1),g=R(null),y=v=>{g.value=u.custom?v?.$el?.nextElementSibling:v?.$el};function E(v){return!m.value&&(typeof u.prefetchOn=="string"?u.prefetchOn===v:u.prefetchOn?.[v]??e.prefetchOn?.[v])&&(u.prefetch??e.prefetch)!==!1&&u.noPrefetch!==!0&&u.target!=="_blank"&&!c9()}async function b(v=Re()){if(m.value)return;m.value=!0;const C=typeof i.value=="string"?i.value:d.value?u0(i.value):s.resolve(i.value).fullPath,w=d.value?new URL(C,window.location.href).href:C;await Promise.all([v.hooks.callHook("link:prefetch",w)?.catch(()=>{}),!d.value&&!p.value&&b3(i.value,s).catch(()=>{})])}if(E("visibility")){const v=Re();let C,w=null;$e(()=>{const B=i9();ml(()=>{C=m0(()=>{g?.value?.tagName&&(w=B.observe(g.value,async()=>{w?.(),w=null,await b(v)}))})})}),mo(()=>{C&&NA(C),w?.(),w=null})}return()=>{if(!d.value&&!p.value&&!n(i.value)){const w={ref:y,to:i.value,activeClass:u.activeClass||e.activeClass,exactActiveClass:u.exactActiveClass||e.exactActiveClass,replace:u.replace,ariaCurrentValue:u.ariaCurrentValue,custom:u.custom};return u.custom||(E("interaction")&&(w.onPointerenter=b.bind(null,void 0),w.onFocus=b.bind(null,void 0)),m.value&&(w.class=u.prefetchedClass||e.prefetchedClass),w.rel=u.rel||void 0),qe(Ep("RouterLink"),w,a.default)}const v=u.target||null,C=a9(u.noRel?"":u.rel,e.externalRelAttribute,h.value||p.value?"noopener noreferrer":"")||null;return u.custom?a.default?a.default({href:c.value,navigate:l,prefetch:b,get route(){if(!c.value)return;const w=new URL(c.value,window.location.href);return{path:w.pathname,fullPath:w.pathname,get query(){return jd(w.search)},hash:w.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:c.value}},rel:C,target:v,isExternal:d.value||p.value,isActive:!1,isExactActive:!1}):null:qe("a",{ref:g,href:c.value||null,rel:C,target:v,onClick:async w=>{if(!(d.value||p.value)){w.preventDefault();try{const B=Ay(c.value);return await(u.replace?s.replace(B):s.push(B))}finally{if(n(i.value)){const B=i.value.slice(1);let x=B;try{x=decodeURIComponent(B)}catch{}document.getElementById(x)?.focus()}}}}},a.default?.())}}})}const nf=s9(q5);function Is(e,t){const n=t==="append"?Vd:Bu;return Ln(e)&&!e.startsWith("http")?e:n(e,!0)}function i9(){const e=Re();if(e._observer)return e._observer;let t=null;const n=new Map,o=(u,a)=>(t||=new IntersectionObserver(s=>{for(const i of s){const c=n.get(i.target);(i.isIntersecting||i.intersectionRatio>0)&&c&&c()}}),n.set(u,a),t.observe(u),()=>{n.delete(u),t?.unobserve(u),n.size===0&&(t?.disconnect(),t=null)});return e._observer={observe:o}}const l9=/2g/;function c9(){const e=navigator.connection;return!!(e&&(e.saveData||l9.test(e.effectiveType)))}function d9(e){typeof e.indexable<"u"&&(e.indexable=String(e.indexable)!=="false"),typeof e.trailingSlash<"u"&&!e.trailingSlash&&(e.trailingSlash=String(e.trailingSlash)!=="false"),e.url&&!Ln(String(e.url),{acceptRelative:!0,strict:!1})&&(e.url=i5(String(e.url)));const t=Object.keys(e).sort((o,r)=>o.localeCompare(r)),n={};for(const o of t)n[o]=e[o];return n}function f9(e){const n=[];function o(u){if(!u||typeof u!="object"||Object.keys(u).length===0)return()=>{};u._context;const a={};for(const s in u){const i=u[s];typeof i<"u"&&i!==""&&(a[s]=i)}return Object.keys(a).filter(s=>!s.startsWith("_")).length===0?()=>{}:(n.push(a),()=>{const s=n.indexOf(a);s!==-1&&n.splice(s,1)})}function r(u){const a={};u?.debug&&(a._context={}),a._priority={};for(const s in n.sort((i,c)=>(i._priority||0)-(c._priority||0)))for(const i in n[s]){const c=i,l=u?.resolveRefs?ke(n[s][i]):n[s][i];!i.startsWith("_")&&typeof l<"u"&&l!==""&&(a[i]=l,typeof n[s]._priority<"u"&&n[s]._priority!==-1&&(a._priority[c]=n[s]._priority),u?.debug&&(a._context[c]=n[s]._context?.[c]||n[s]._context||"anonymous"))}return u?.skipNormalize?a:d9(a)}return{stack:n,push:o,get:r}}const p9=vn({name:"nuxt-site-config:init",enforce:"pre",async setup(e){const t=f9(),n=nr("site-config");{const o=n.value||window.__NUXT_SITE_CONFIG__||{};for(const r in o)r[0]!=="_"&&t.push({[r]:o[r],_priority:o._priority?.[r]||-1})}return{provide:{nuxtSiteConfig:t}}}}),h9=vn({name:"nuxt:payload",setup(e){const t=new Set;Xt().beforeResolve(async(n,o)=>{if(n.path===o.path)return;const r=await lh(n.path);if(r){for(const u of t)delete e.static.data[u];for(const u in r.data)u in e.static.data||t.add(u),e.static.data[u]=r.data[u]}}),ml(()=>{e.hooks.hook("link:prefetch",async n=>{const{hostname:o}=new URL(n,window.location.href);o===window.location.hostname&&await lh(n).catch(()=>{console.warn("[nuxt] Error preloading payload for",n)})}),navigator.connection?.effectiveType!=="slow-2g"&&setTimeout(Gd,1e3)})}}),m9=vn(()=>{const e=Xt();ml(()=>{e.beforeResolve(async()=>{await new Promise(t=>{setTimeout(t,100),requestAnimationFrame(()=>{setTimeout(t,0)})})})})}),g9=vn(e=>{let t;async function n(){let o;try{o=await Gd()}catch(r){const u=r;if(!("status"in u&&(u.status===404||u.status===403)))throw u}t&&clearTimeout(t),t=setTimeout(n,th);try{const r=await $fetch(Ud("builds/latest.json")+`?${Date.now()}`);r.id!==o?.id&&(e.hooks.callHook("app:manifest:update",r),t&&clearTimeout(t))}catch{}}ml(()=>{t=setTimeout(n,th)})}),v9=vn({name:"nuxt:chunk-reload",setup(e){const t=Xt(),n=Bn(),o=new Set;t.beforeEach(()=>{o.clear()}),e.hook("app:chunkError",({error:u})=>{o.add(u)});function r(u){const a=cr(n.app.baseURL,u.fullPath);u9({path:a,persistState:!0})}e.hook("app:manifest:update",()=>{t.beforeResolve(r)}),t.onError((u,a)=>{o.has(u)&&r(a)})}}),y9="__NUXT_COLOR_MODE__",nc="nuxt-color-mode",b9="localStorage",Co=window[y9]||{},E9=vn(e=>{const t=nr("color-mode",()=>_t({preference:Co.preference,value:Co.value,unknown:!1,forced:!1})).value;Xt().afterEach(u=>{const a=u.meta.colorMode;a&&a!=="system"?(t.value=a,t.forced=!0):(a==="system"&&console.warn("You cannot force the colorMode to system at the page level."),t.forced=!1,t.value=t.preference==="system"?Co.getColorScheme():t.preference)});let n;function o(){n||!window.matchMedia||(n=window.matchMedia("(prefers-color-scheme: dark)"),n.addEventListener("change",()=>{!t.forced&&t.preference==="system"&&(t.value=Co.getColorScheme())}))}function r(u,a){switch(u){case"cookie":window.document.cookie=nc+"="+a;break;case"sessionStorage":window.sessionStorage?.setItem(nc,a);break;default:window.localStorage?.setItem(nc,a)}}ye(()=>t.preference,u=>{t.forced||(u==="system"?(t.value=Co.getColorScheme(),o()):t.value=u,r(b9,u))},{immediate:!0}),ye(()=>t.value,(u,a)=>{let s;s=window.document.createElement("style"),s.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),window.document.head.appendChild(s),Co.removeColorScheme(a),Co.addColorScheme(u),window.getComputedStyle(s).opacity,document.head.removeChild(s)}),t.preference==="system"&&o(),e.hook("app:mounted",()=>{t.unknown&&(t.preference=Co.preference,t.value=Co.value,t.unknown=!1)}),e.provide("colorMode",t)}),E3=/^[a-z0-9]+(-[a-z0-9]+)*$/,is=(e,t,n,o="")=>{const r=e.split(":");if(e.slice(0,1)==="@"){if(r.length<2||r.length>3)return null;o=r.shift().slice(1)}if(r.length>3||!r.length)return null;if(r.length>1){const s=r.pop(),i=r.pop(),c={provider:r.length>0?r[0]:o,prefix:i,name:s};return t&&!oi(c)?null:c}const u=r[0],a=u.split("-");if(a.length>1){const s={provider:o,prefix:a.shift(),name:a.join("-")};return t&&!oi(s)?null:s}if(n&&o===""){const s={provider:o,prefix:"",name:u};return t&&!oi(s,n)?null:s}return null},oi=(e,t)=>e?!!((t&&e.prefix===""||e.prefix)&&e.name):!1,C3=Object.freeze({left:0,top:0,width:16,height:16}),Ti=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),$u=Object.freeze({...C3,...Ti}),g0=Object.freeze({...$u,body:"",hidden:!1});function C9(e,t){const n={};!e.hFlip!=!t.hFlip&&(n.hFlip=!0),!e.vFlip!=!t.vFlip&&(n.vFlip=!0);const o=((e.rotate||0)+(t.rotate||0))%4;return o&&(n.rotate=o),n}function Rh(e,t){const n=C9(e,t);for(const o in g0)o in Ti?o in e&&!(o in n)&&(n[o]=Ti[o]):o in t?n[o]=t[o]:o in e&&(n[o]=e[o]);return n}function x9(e,t){const n=e.icons,o=e.aliases||Object.create(null),r=Object.create(null);function u(a){if(n[a])return r[a]=[];if(!(a in r)){r[a]=null;const s=o[a]&&o[a].parent,i=s&&u(s);i&&(r[a]=[s].concat(i))}return r[a]}return Object.keys(n).concat(Object.keys(o)).forEach(u),r}function w9(e,t,n){const o=e.icons,r=e.aliases||Object.create(null);let u={};function a(s){u=Rh(o[s]||r[s],u)}return a(t),n.forEach(a),Rh(e,u)}function x3(e,t){const n=[];if(typeof e!="object"||typeof e.icons!="object")return n;e.not_found instanceof Array&&e.not_found.forEach(r=>{t(r,null),n.push(r)});const o=x9(e);for(const r in o){const u=o[r];u&&(t(r,w9(e,r,u)),n.push(r))}return n}const D9={provider:"",aliases:{},not_found:{},...C3};function oc(e,t){for(const n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function w3(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.prefix!="string"||!e.icons||typeof e.icons!="object"||!oc(e,D9))return null;const n=t.icons;for(const r in n){const u=n[r];if(!r||typeof u.body!="string"||!oc(u,g0))return null}const o=t.aliases||Object.create(null);for(const r in o){const u=o[r],a=u.parent;if(!r||typeof a!="string"||!n[a]&&!o[a]||!oc(u,g0))return null}return t}const Lh=Object.create(null);function A9(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function Hr(e,t){const n=Lh[e]||(Lh[e]=Object.create(null));return n[t]||(n[t]=A9(e,t))}function D3(e,t){return w3(t)?x3(t,(n,o)=>{o?e.icons[n]=o:e.missing.add(n)}):[]}function B9(e,t,n){try{if(typeof n.body=="string")return e.icons[t]={...n},!0}catch{}return!1}let ja=!1;function A3(e){return typeof e=="boolean"&&(ja=e),ja}function of(e){const t=typeof e=="string"?is(e,!0,ja):e;if(t){const n=Hr(t.provider,t.prefix),o=t.name;return n.icons[o]||(n.missing.has(o)?null:void 0)}}function Va(e,t){const n=is(e,!0,ja);if(!n)return!1;const o=Hr(n.provider,n.prefix);return t?B9(o,n.name,t):(o.missing.add(n.name),!0)}function _9(e,t){if(typeof e!="object")return!1;if(typeof t!="string"&&(t=e.provider||""),ja&&!t&&!e.prefix){let r=!1;return w3(e)&&(e.prefix="",x3(e,(u,a)=>{Va(u,a)&&(r=!0)})),r}const n=e.prefix;if(!oi({prefix:n,name:"a"}))return!1;const o=Hr(t,n);return!!D3(o,e)}function v0(e){const t=of(e);return t&&{...$u,...t}}const B3=Object.freeze({width:null,height:null}),_3=Object.freeze({...B3,...Ti}),k9=/(-?[0-9.]*[0-9]+[0-9.]*)/g,S9=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function qh(e,t,n){if(t===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*t*n)/n;if(typeof e!="string")return e;const o=e.split(k9);if(o===null||!o.length)return e;const r=[];let u=o.shift(),a=S9.test(u);for(;;){if(a){const s=parseFloat(u);isNaN(s)?r.push(u):r.push(Math.ceil(s*t*n)/n)}else r.push(u);if(u=o.shift(),u===void 0)return r.join("");a=!a}}function T9(e,t="defs"){let n="";const o=e.indexOf("<"+t);for(;o>=0;){const r=e.indexOf(">",o),u=e.indexOf("",u);if(a===-1)break;n+=e.slice(r+1,u).trim(),e=e.slice(0,o).trim()+e.slice(a+1)}return{defs:n,content:e}}function F9(e,t){return e?""+e+""+t:t}function P9(e,t,n){const o=T9(e);return F9(o.defs,t+o.content+n)}const M9=e=>e==="unset"||e==="undefined"||e==="none";function O9(e,t){const n={...$u,...e},o={..._3,...t},r={left:n.left,top:n.top,width:n.width,height:n.height};let u=n.body;[n,o].forEach(g=>{const y=[],E=g.hFlip,b=g.vFlip;let v=g.rotate;E?b?v+=2:(y.push("translate("+(r.width+r.left).toString()+" "+(0-r.top).toString()+")"),y.push("scale(-1 1)"),r.top=r.left=0):b&&(y.push("translate("+(0-r.left).toString()+" "+(r.height+r.top).toString()+")"),y.push("scale(1 -1)"),r.top=r.left=0);let C;switch(v<0&&(v-=Math.floor(v/4)*4),v=v%4,v){case 1:C=r.height/2+r.top,y.unshift("rotate(90 "+C.toString()+" "+C.toString()+")");break;case 2:y.unshift("rotate(180 "+(r.width/2+r.left).toString()+" "+(r.height/2+r.top).toString()+")");break;case 3:C=r.width/2+r.left,y.unshift("rotate(-90 "+C.toString()+" "+C.toString()+")");break}v%2===1&&(r.left!==r.top&&(C=r.left,r.left=r.top,r.top=C),r.width!==r.height&&(C=r.width,r.width=r.height,r.height=C)),y.length&&(u=P9(u,'',""))});const a=o.width,s=o.height,i=r.width,c=r.height;let l,d;a===null?(d=s===null?"1em":s==="auto"?c:s,l=qh(d,i/c)):(l=a==="auto"?i:a,d=s===null?qh(l,c/i):s==="auto"?c:s);const p={},h=(g,y)=>{M9(y)||(p[g]=y.toString())};h("width",l),h("height",d);const m=[r.left,r.top,i,c];return p.viewBox=m.join(" "),{attributes:p,viewBox:m,body:u}}const I9=/\sid="(\S+)"/g,R9="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let L9=0;function q9(e,t=R9){const n=[];let o;for(;o=I9.exec(e);)n.push(o[1]);if(!n.length)return e;const r="suffix"+(Math.random()*16777216|Date.now()).toString(16);return n.forEach(u=>{const a=typeof t=="function"?t(u):t+(L9++).toString(),s=u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+s+')([")]|\\.[a-z])',"g"),"$1"+a+r+"$3")}),e=e.replace(new RegExp(r,"g"),""),e}const y0=Object.create(null);function k3(e,t){y0[e]=t}function b0(e){return y0[e]||y0[""]}function rf(e){let t;if(typeof e.resources=="string")t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;return{resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:e.random===!0,index:e.index||0,dataAfterTimeout:e.dataAfterTimeout!==!1}}const gl=Object.create(null),ra=["https://api.simplesvg.com","https://api.unisvg.com"],ri=[];for(;ra.length>0;)ra.length===1||Math.random()>.5?ri.push(ra.shift()):ri.push(ra.pop());gl[""]=rf({resources:["https://api.iconify.design"].concat(ri)});function S3(e,t){const n=rf(t);return n===null?!1:(gl[e]=n,!0)}function vl(e){return gl[e]}function $9(){return Object.keys(gl)}const N9=()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}};let Fi=N9();function j9(e){Fi=e}function V9(){return Fi}function z9(e,t){const n=vl(e);if(!n)return 0;let o;if(!n.maxURL)o=0;else{let r=0;n.resources.forEach(a=>{r=Math.max(r,a.length)});const u=t+".json?icons=";o=n.maxURL-r-n.path.length-u.length}return o}function U9(e){return e===404}const H9=(e,t,n)=>{const o=[],r=z9(e,t),u="icons";let a={type:u,provider:e,prefix:t,icons:[]},s=0;return n.forEach((i,c)=>{s+=i.length+1,s>=r&&c>0&&(o.push(a),a={type:u,provider:e,prefix:t,icons:[]},s=i.length),a.icons.push(i)}),o.push(a),o};function K9(e){if(typeof e=="string"){const t=vl(e);if(t)return t.path}return"/"}const W9=(e,t,n)=>{if(!Fi){n("abort",424);return}let o=K9(t.provider);switch(t.type){case"icons":{const u=t.prefix,s=t.icons.join(","),i=new URLSearchParams({icons:s});o+=u+".json?"+i.toString();break}case"custom":{const u=t.uri;o+=u.slice(0,1)==="/"?u.slice(1):u;break}default:n("abort",400);return}let r=503;Fi(e+o).then(u=>{const a=u.status;if(a!==200){setTimeout(()=>{n(U9(a)?"abort":"next",a)});return}return r=501,u.json()}).then(u=>{if(typeof u!="object"||u===null){setTimeout(()=>{u===404?n("abort",u):n("next",r)});return}setTimeout(()=>{n("success",u)})}).catch(()=>{n("next",r)})},G9={prepare:H9,send:W9};function Y9(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((r,u)=>r.provider!==u.provider?r.provider.localeCompare(u.provider):r.prefix!==u.prefix?r.prefix.localeCompare(u.prefix):r.name.localeCompare(u.name));let o={provider:"",prefix:"",name:""};return e.forEach(r=>{if(o.name===r.name&&o.prefix===r.prefix&&o.provider===r.provider)return;o=r;const u=r.provider,a=r.prefix,s=r.name,i=n[u]||(n[u]=Object.create(null)),c=i[a]||(i[a]=Hr(u,a));let l;s in c.icons?l=t.loaded:a===""||c.missing.has(s)?l=t.missing:l=t.pending;const d={provider:u,prefix:a,name:s};l.push(d)}),t}function T3(e,t){e.forEach(n=>{const o=n.loaderCallbacks;o&&(n.loaderCallbacks=o.filter(r=>r.id!==t))})}function Z9(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const o=e.provider,r=e.prefix;t.forEach(u=>{const a=u.icons,s=a.pending.length;a.pending=a.pending.filter(i=>{if(i.prefix!==r)return!0;const c=i.name;if(e.icons[c])a.loaded.push({provider:o,prefix:r,name:c});else if(e.missing.has(c))a.missing.push({provider:o,prefix:r,name:c});else return n=!0,!0;return!1}),a.pending.length!==s&&(n||T3([e],u.id),u.callback(a.loaded.slice(0),a.missing.slice(0),a.pending.slice(0),u.abort))})}))}let X9=0;function J9(e,t,n){const o=X9++,r=T3.bind(null,n,o);if(!t.pending.length)return r;const u={id:o,icons:t,callback:e,abort:r};return n.forEach(a=>{(a.loaderCallbacks||(a.loaderCallbacks=[])).push(u)}),r}function Q9(e,t=!0,n=!1){const o=[];return e.forEach(r=>{const u=typeof r=="string"?is(r,t,n):r;u&&o.push(u)}),o}var eB={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function tB(e,t,n,o){const r=e.resources.length,u=e.random?Math.floor(Math.random()*r):e.index;let a;if(e.random){let B=e.resources.slice(0);for(a=[];B.length>1;){const x=Math.floor(Math.random()*B.length);a.push(B[x]),B=B.slice(0,x).concat(B.slice(x+1))}a=a.concat(B)}else a=e.resources.slice(u).concat(e.resources.slice(0,u));const s=Date.now();let i="pending",c=0,l,d=null,p=[],h=[];typeof o=="function"&&h.push(o);function m(){d&&(clearTimeout(d),d=null)}function g(){i==="pending"&&(i="aborted"),m(),p.forEach(B=>{B.status==="pending"&&(B.status="aborted")}),p=[]}function y(B,x){x&&(h=[]),typeof B=="function"&&h.push(B)}function E(){return{startTime:s,payload:t,status:i,queriesSent:c,queriesPending:p.length,subscribe:y,abort:g}}function b(){i="failed",h.forEach(B=>{B(void 0,l)})}function v(){p.forEach(B=>{B.status==="pending"&&(B.status="aborted")}),p=[]}function C(B,x,_){const S=x!=="success";switch(p=p.filter(O=>O!==B),i){case"pending":break;case"failed":if(S||!e.dataAfterTimeout)return;break;default:return}if(x==="abort"){l=_,b();return}if(S){l=_,p.length||(a.length?w():b());return}if(m(),v(),!e.random){const O=e.resources.indexOf(B.resource);O!==-1&&O!==e.index&&(e.index=O)}i="completed",h.forEach(O=>{O(_)})}function w(){if(i!=="pending")return;m();const B=a.shift();if(B===void 0){if(p.length){d=setTimeout(()=>{m(),i==="pending"&&(v(),b())},e.timeout);return}b();return}const x={status:"pending",resource:B,callback:(_,S)=>{C(x,_,S)}};p.push(x),c++,d=setTimeout(w,e.rotate),n(B,t,x.callback)}return setTimeout(w),E}function F3(e){const t={...eB,...e};let n=[];function o(){n=n.filter(s=>s().status==="pending")}function r(s,i,c){const l=tB(t,s,i,(d,p)=>{o(),c&&c(d,p)});return n.push(l),l}function u(s){return n.find(i=>s(i))||null}return{query:r,find:u,setIndex:s=>{t.index=s},getIndex:()=>t.index,cleanup:o}}function $h(){}const rc=Object.create(null);function nB(e){if(!rc[e]){const t=vl(e);if(!t)return;const n=F3(t),o={config:t,redundancy:n};rc[e]=o}return rc[e]}function P3(e,t,n){let o,r;if(typeof e=="string"){const u=b0(e);if(!u)return n(void 0,424),$h;r=u.send;const a=nB(e);a&&(o=a.redundancy)}else{const u=rf(e);if(u){o=F3(u);const a=e.resources?e.resources[0]:"",s=b0(a);s&&(r=s.send)}}return!o||!r?(n(void 0,424),$h):o.query(t,r,n)().abort}function Nh(){}function oB(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,Z9(e)}))}function rB(e){const t=[],n=[];return e.forEach(o=>{(o.match(E3)?t:n).push(o)}),{valid:t,invalid:n}}function ua(e,t,n){function o(){const r=e.pendingIcons;t.forEach(u=>{r&&r.delete(u),e.icons[u]||e.missing.add(u)})}if(n&&typeof n=="object")try{if(!D3(e,n).length){o();return}}catch(r){console.error(r)}o(),oB(e)}function jh(e,t){e instanceof Promise?e.then(n=>{t(n)}).catch(()=>{t(null)}):t(e)}function uB(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:n,prefix:o}=e,r=e.iconsToLoad;if(delete e.iconsToLoad,!r||!r.length)return;const u=e.loadIcon;if(e.loadIcons&&(r.length>1||!u)){jh(e.loadIcons(r,o,n),l=>{ua(e,r,l)});return}if(u){r.forEach(l=>{const d=u(l,o,n);jh(d,p=>{const h=p?{prefix:o,icons:{[l]:p}}:null;ua(e,[l],h)})});return}const{valid:a,invalid:s}=rB(r);if(s.length&&ua(e,s,null),!a.length)return;const i=o.match(E3)?b0(n):null;if(!i){ua(e,a,null);return}i.prepare(n,o,a).forEach(l=>{P3(n,l,d=>{ua(e,l.icons,d)})})}))}const M3=(e,t)=>{const n=Q9(e,!0,A3()),o=Y9(n);if(!o.pending.length){let i=!0;return t&&setTimeout(()=>{i&&t(o.loaded,o.missing,o.pending,Nh)}),()=>{i=!1}}const r=Object.create(null),u=[];let a,s;return o.pending.forEach(i=>{const{provider:c,prefix:l}=i;if(l===s&&c===a)return;a=c,s=l,u.push(Hr(c,l));const d=r[c]||(r[c]=Object.create(null));d[l]||(d[l]=[])}),o.pending.forEach(i=>{const{provider:c,prefix:l,name:d}=i,p=Hr(c,l),h=p.pendingIcons||(p.pendingIcons=new Set);h.has(d)||(h.add(d),r[c][l].push(d))}),u.forEach(i=>{const c=r[i.provider][i.prefix];c.length&&uB(i,c)}),t?J9(t,o,u):Nh},aB=e=>new Promise((t,n)=>{const o=typeof e=="string"?is(e,!0):e;if(!o){n(e);return}M3([o||e],r=>{if(r.length&&o){const u=of(o);if(u){t({...$u,...u});return}}n(e)})});function sB(e,t,n){Hr("",t).loadIcons=e}function iB(e,t){const n={...e};for(const o in t){const r=t[o],u=typeof r;o in B3?(r===null||r&&(u==="string"||u==="number"))&&(n[o]=r):u===typeof n[o]&&(n[o]=o==="rotate"?r%4:r)}return n}const lB=/[\s,]+/;function cB(e,t){t.split(lB).forEach(n=>{switch(n.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function dB(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function o(r){for(;r<0;)r+=4;return r%4}if(n===""){const r=parseInt(e);return isNaN(r)?0:o(r)}else if(n!==e){let r=0;switch(n){case"%":r=25;break;case"deg":r=90}if(r){let u=parseFloat(e.slice(0,e.length-n.length));return isNaN(u)?0:(u=u/r,u%1===0?o(u):0)}}return t}function fB(e,t){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const o in t)n+=" "+o+'="'+t[o]+'"';return'"+e+""}function pB(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function hB(e){return"data:image/svg+xml,"+pB(e)}function mB(e){return'url("'+hB(e)+'")'}const Vh={..._3,inline:!1},gB={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},vB={display:"inline-block"},E0={backgroundColor:"currentColor"},O3={backgroundColor:"transparent"},zh={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},Uh={webkitMask:E0,mask:E0,background:O3};for(const e in Uh){const t=Uh[e];for(const n in zh)t[e+n]=zh[n]}const ui={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";ui[e+"-flip"]=t,ui[e.slice(0,1)+"-flip"]=t,ui[e+"Flip"]=t});function Hh(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const Kh=(e,t)=>{const n=iB(Vh,t),o={...gB},r=t.mode||"svg",u={},a=t.style,s=typeof a=="object"&&!(a instanceof Array)?a:{};for(let g in t){const y=t[g];if(y!==void 0)switch(g){case"icon":case"style":case"onLoad":case"mode":case"ssr":break;case"inline":case"hFlip":case"vFlip":n[g]=y===!0||y==="true"||y===1;break;case"flip":typeof y=="string"&&cB(n,y);break;case"color":u.color=y;break;case"rotate":typeof y=="string"?n[g]=dB(y):typeof y=="number"&&(n[g]=y);break;case"ariaHidden":case"aria-hidden":y!==!0&&y!=="true"&&delete o["aria-hidden"];break;default:{const E=ui[g];E?(y===!0||y==="true"||y===1)&&(n[E]=!0):Vh[g]===void 0&&(o[g]=y)}}}const i=O9(e,n),c=i.attributes;if(n.inline&&(u.verticalAlign="-0.125em"),r==="svg"){o.style={...u,...s},Object.assign(o,c);let g=0,y=t.id;return typeof y=="string"&&(y=y.replace(/-/g,"_")),o.innerHTML=q9(i.body,y?()=>y+"ID"+g++:"iconifyVue"),qe("svg",o)}const{body:l,width:d,height:p}=e,h=r==="mask"||(r==="bg"?!1:l.indexOf("currentColor")!==-1),m=fB(l,{...c,width:d+"",height:p+""});return o.style={...u,"--svg":mB(m),width:Hh(c.width),height:Hh(c.height),...vB,...h?E0:O3,...s},qe("span",o)};A3(!0);k3("",G9);if(typeof document<"u"&&typeof window<"u"){const e=window;if(e.IconifyPreload!==void 0){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";typeof t=="object"&&t!==null&&(t instanceof Array?t:[t]).forEach(o=>{try{(typeof o!="object"||o===null||o instanceof Array||typeof o.icons!="object"||typeof o.prefix!="string"||!_9(o))&&console.error(n)}catch{console.error(n)}})}if(e.IconifyProviders!==void 0){const t=e.IconifyProviders;if(typeof t=="object"&&t!==null)for(let n in t){const o="IconifyProviders["+n+"] is invalid.";try{const r=t[n];if(typeof r!="object"||!r||r.resources===void 0)continue;S3(n,r)||console.error(o)}catch{console.error(o)}}}}const yB={...$u,body:""},bB=L((e,{emit:t})=>{const n=R(null);function o(){n.value&&(n.value.abort?.(),n.value=null)}const r=R(!!e.ssr),u=R(""),a=Me(null);function s(){const c=e.icon;if(typeof c=="object"&&c!==null&&typeof c.body=="string")return u.value="",{data:c};let l;if(typeof c!="string"||(l=is(c,!1,!0))===null)return null;let d=of(l);if(!d){const m=n.value;return(!m||m.name!==c)&&(d===null?n.value={name:c}:n.value={name:c,abort:M3([l],i)}),null}o(),u.value!==c&&(u.value=c,Oe(()=>{t("load",c)}));const p=e.customise;if(p){d=Object.assign({},d);const m=p(d.body,l.name,l.prefix,l.provider);typeof m=="string"&&(d.body=m)}const h=["iconify"];return l.prefix!==""&&h.push("iconify--"+l.prefix),l.provider!==""&&h.push("iconify--"+l.provider),{data:d,classes:h}}function i(){const c=s();c?c.data!==a.value?.data&&(a.value=c):a.value=null}return r.value?i():$e(()=>{r.value=!0,i()}),ye(()=>e.icon,i),Ht(o),()=>{const c=a.value;if(!c)return Kh(yB,e);let l=e;return c.classes&&(l={...e,class:c.classes.join(" ")}),Kh({...$u,...c.data},l)}},{props:["icon","mode","ssr","width","height","style","color","inline","rotate","hFlip","horizontalFlip","vFlip","verticalFlip","flip","id","ariaHidden","customise","title"],emits:["load"]}),Wh={getAPIConfig:vl,setAPIModule:k3,sendAPIQuery:P3,setFetch:j9,getFetch:V9,listAPIProviders:$9},EB=vn({name:"@nuxt/icon",setup(){const e=Bn(),t=Pe().icon;Wh.setFetch($fetch.native);const n=[];if(t.provider==="server"){const r=e.app?.baseURL?.replace(/\/$/,"")??"";n.push(r+(t.localApiEndpoint||"/api/_nuxt_icon")),(t.fallbackToApi===!0||t.fallbackToApi==="client-only")&&n.push(t.iconifyApiEndpoint)}else t.provider==="none"?Wh.setFetch(()=>Promise.resolve(new Response)):n.push(t.iconifyApiEndpoint);async function o(r,u){try{const a=await $fetch(n[0]+"/"+u+".json",{query:{icons:r.join(",")}});if(!a||a.prefix!==u||!a.icons)throw new Error("Invalid data"+JSON.stringify(a));return a}catch(a){return console.error("Failed to load custom icons",a),null}}S3("",{resources:n});for(const r of t.customCollections||[])r&&sB(o,r)}}),CB=Ae(()=>ne(()=>import("./CDym3zc6.js"),[],import.meta.url).then(e=>e.default||e.default||e)),xB=Ae(()=>ne(()=>import("./CfPbqwDO.js"),[],import.meta.url).then(e=>e.default||e.default||e)),wB=Ae(()=>ne(()=>import("./CB6Z2s81.js"),[],import.meta.url).then(e=>e.default||e.default||e)),DB=Ae(()=>ne(()=>import("./vaS8Rkl_.js"),__vite__mapDeps([6,7,3]),import.meta.url).then(e=>e.default||e.default||e)),AB=Ae(()=>ne(()=>import("./CSimry40.js"),[],import.meta.url).then(e=>e.default||e.default||e)),BB=Ae(()=>ne(()=>import("./Jc8Ntx_l.js"),__vite__mapDeps([8,7,3]),import.meta.url).then(e=>e.default||e.default||e)),_B=Ae(()=>ne(()=>import("./CCiWmQwn.js"),__vite__mapDeps([9,7,3]),import.meta.url).then(e=>e.default||e.default||e)),kB=Ae(()=>ne(()=>import("./Bzhn7Nlk.js"),[],import.meta.url).then(e=>e.default||e.default||e)),SB=Ae(()=>ne(()=>import("./CamoC0EK.js"),[],import.meta.url).then(e=>e.default||e.default||e)),TB=Ae(()=>ne(()=>import("./FyXvkSrC.js"),[],import.meta.url).then(e=>e.default||e.default||e)),FB=Ae(()=>ne(()=>import("./CgQMWAWA.js"),__vite__mapDeps([10,11,12,13]),import.meta.url).then(e=>e.default||e.default||e)),PB=Ae(()=>ne(()=>import("./C-sCiTCq.js"),[],import.meta.url).then(e=>e.default||e.default||e)),MB=Ae(()=>ne(()=>import("./DHP-KcjK.js"),[],import.meta.url).then(e=>e.default||e.default||e)),OB=Ae(()=>ne(()=>import("./jpB_SM9d.js"),__vite__mapDeps([14,15,12,13]),import.meta.url).then(e=>e.default||e.default||e)),IB=Ae(()=>ne(()=>import("./CFKlwMFM.js"),[],import.meta.url).then(e=>e.default||e.default||e)),RB=Ae(()=>ne(()=>import("./BlIgAVvl.js"),[],import.meta.url).then(e=>e.default||e.default||e)),LB=Ae(()=>ne(()=>import("./Bnc4fItI.js"),__vite__mapDeps([16,7,3]),import.meta.url).then(e=>e.default||e.default||e)),qB=Ae(()=>ne(()=>import("./CsIQayK_.js"),[],import.meta.url).then(e=>e.default||e.default||e)),$B=Ae(()=>ne(()=>import("./D5E4Znt1.js"),[],import.meta.url).then(e=>e.default||e.default||e)),NB=Ae(()=>ne(()=>import("./p9GVdgbx.js"),[],import.meta.url).then(e=>e.default||e.default||e)),jB=Ae(()=>ne(()=>import("./2h0Q0JkN.js"),[],import.meta.url).then(e=>e.default||e.default||e)),VB=Ae(()=>ne(()=>import("./D5DWQP-B.js"),[],import.meta.url).then(e=>e.default||e.default||e)),zB=Ae(()=>ne(()=>import("./C8791Vr7.js"),[],import.meta.url).then(e=>e.default||e.default||e)),UB=Ae(()=>ne(()=>import("./CTU5hS66.js"),[],import.meta.url).then(e=>e.default||e.default||e)),HB=Ae(()=>ne(()=>import("./B2gqyXxK.js"),[],import.meta.url).then(e=>e.default||e.default||e)),KB=Ae(()=>ne(()=>import("./Y2TJq070.js"),[],import.meta.url).then(e=>e.default||e.default||e)),WB=Ae(()=>ne(()=>import("./B4xqMpdT.js"),[],import.meta.url).then(e=>e.default||e.default||e)),GB=Ae(()=>ne(()=>import("./CGXzuCYy.js"),[],import.meta.url).then(e=>e.default||e.default||e)),YB=Ae(()=>ne(()=>import("./DB_5vY_E.js"),[],import.meta.url).then(e=>e.default||e.default||e)),ZB=Ae(()=>ne(()=>import("./B91fwRQf.js"),__vite__mapDeps([17,13]),import.meta.url).then(e=>e.default||e.default||e)),XB=Ae(()=>ne(()=>import("./BvtDsFck.js"),[],import.meta.url).then(e=>e.default||e.default||e)),JB=Ae(()=>ne(()=>import("./ICECbu1X.js"),[],import.meta.url).then(e=>e.default||e.default||e)),QB=Ae(()=>ne(()=>import("./qDOTQ2yj.js"),[],import.meta.url).then(e=>e.default||e.default||e)),e_=Ae(()=>ne(()=>import("./BKwruWNQ.js"),[],import.meta.url).then(e=>e.default||e.default||e)),t_=Ae(()=>ne(()=>import("./BnW3dU0n.js"),__vite__mapDeps([18,11,12]),import.meta.url).then(e=>e.default||e.default||e)),n_=Ae(()=>ne(()=>import("./BXokzvm8.js"),[],import.meta.url).then(e=>e.default||e.default||e)),o_=Ae(()=>ne(()=>import("./C6Z5zZ8h.js"),[],import.meta.url).then(e=>e.default||e.default||e)),r_=Ae(()=>ne(()=>import("./4YIHfatS.js"),[],import.meta.url).then(e=>e.default||e.default||e)),u_=Ae(()=>ne(()=>import("./D_gYX37v.js"),[],import.meta.url).then(e=>e.default||e.default||e)),a_=Ae(()=>ne(()=>import("./CSnfmutH.js"),[],import.meta.url).then(e=>e.default||e.default||e)),s_=Ae(()=>ne(()=>import("./DLv9Mxsp.js"),[],import.meta.url).then(e=>e.default||e.default||e)),i_=Ae(()=>ne(()=>import("./CFOqH6J8.js"),[],import.meta.url).then(e=>e.default||e.default||e)),l_=Ae(()=>ne(()=>import("./BLnzyn6S.js"),__vite__mapDeps([19,7,3,8]),import.meta.url).then(e=>e.default||e.default||e)),c_=Ae(()=>ne(()=>import("./LZNkr4Qo.js"),__vite__mapDeps([20,7,3,8]),import.meta.url).then(e=>e.default||e.default||e)),d_=Ae(()=>ne(()=>import("./C3Ly8WAT.js"),__vite__mapDeps([21,7,3,8]),import.meta.url).then(e=>e.default||e.default||e)),f_=Ae(()=>ne(()=>import("./CG1YvYVw.js"),__vite__mapDeps([22,7,3,8]),import.meta.url).then(e=>e.default||e.default||e)),p_=Ae(()=>ne(()=>import("./BfXwXGCj.js"),[],import.meta.url).then(e=>e.default||e.default||e)),h_=Ae(()=>ne(()=>import("./Czt-ZuAe.js"),[],import.meta.url).then(e=>e.default||e.default||e)),m_=Ae(()=>ne(()=>Promise.resolve().then(()=>zO),void 0,import.meta.url).then(e=>e.default||e.default||e)),g_=[["ProseA",CB],["ProseAccordion",xB],["ProseAccordionItem",wB],["ProseBadge",DB],["ProseBlockquote",AB],["ProseCallout",BB],["ProseCard",_B],["ProseCardGroup",kB],["ProseCode",SB],["ProseCodeCollapse",TB],["ProseCodeGroup",FB],["ProseCodeIcon",PB],["ProseCodePreview",MB],["ProseCodeTree",OB],["ProseCollapsible",IB],["ProseEm",RB],["ProseField",LB],["ProseFieldGroup",qB],["ProseH1",$B],["ProseH2",NB],["ProseH3",jB],["ProseH4",VB],["ProseHr",zB],["ProseIcon",UB],["ProseImg",HB],["ProseKbd",KB],["ProseLi",WB],["ProseOl",GB],["ProseP",YB],["ProsePre",ZB],["ProseScript",XB],["ProseSteps",JB],["ProseStrong",QB],["ProseTable",e_],["ProseTabs",t_],["ProseTabsItem",n_],["ProseTbody",o_],["ProseTd",r_],["ProseTh",u_],["ProseThead",a_],["ProseTr",s_],["ProseUl",i_],["ProseCaution",l_],["ProseNote",c_],["ProseTip",d_],["ProseWarning",f_],["ProseH5",p_],["ProseH6",h_],["Icon",m_]],v_=vn({name:"nuxt:global-components",setup(e){for(const[t,n]of g_)e.vueApp.component(t,n),e.vueApp.component("Lazy"+t,n)}}),or={default:Ae(()=>ne(()=>import("./BnHu5O7o.js"),__vite__mapDeps([23,24]),import.meta.url).then(e=>e.default||e)),docs:Ae(()=>ne(()=>import("./C0AA5UMg.js"),__vite__mapDeps([25,4,24]),import.meta.url).then(e=>e.default||e))},y_=vn({name:"nuxt:prefetch",setup(e){const t=Xt();e.hooks.hook("app:mounted",()=>{t.beforeEach(async n=>{const o=n?.meta?.layout;o&&typeof or[o]=="function"&&await or[o]()})}),e.hooks.hook("link:prefetch",n=>{if(Ln(n))return;const o=t.resolve(n);if(!o)return;const r=o.meta.layout;let u=a3(o.meta.middleware);u=u.filter(a=>typeof a=="string");for(const a of u)typeof h0[a]=="function"&&h0[a]();typeof r=="string"&&r in or&&r9(or[r])})}});var Rs={inherit:"inherit",current:"currentcolor",transparent:"transparent",black:"#000",white:"#fff",slate:{50:"oklch(98.4% 0.003 247.858)",100:"oklch(96.8% 0.007 247.896)",200:"oklch(92.9% 0.013 255.508)",300:"oklch(86.9% 0.022 252.894)",400:"oklch(70.4% 0.04 256.788)",500:"oklch(55.4% 0.046 257.417)",600:"oklch(44.6% 0.043 257.281)",700:"oklch(37.2% 0.044 257.287)",800:"oklch(27.9% 0.041 260.031)",900:"oklch(20.8% 0.042 265.755)",950:"oklch(12.9% 0.042 264.695)"},gray:{50:"oklch(98.5% 0.002 247.839)",100:"oklch(96.7% 0.003 264.542)",200:"oklch(92.8% 0.006 264.531)",300:"oklch(87.2% 0.01 258.338)",400:"oklch(70.7% 0.022 261.325)",500:"oklch(55.1% 0.027 264.364)",600:"oklch(44.6% 0.03 256.802)",700:"oklch(37.3% 0.034 259.733)",800:"oklch(27.8% 0.033 256.848)",900:"oklch(21% 0.034 264.665)",950:"oklch(13% 0.028 261.692)"},zinc:{50:"oklch(98.5% 0 0)",100:"oklch(96.7% 0.001 286.375)",200:"oklch(92% 0.004 286.32)",300:"oklch(87.1% 0.006 286.286)",400:"oklch(70.5% 0.015 286.067)",500:"oklch(55.2% 0.016 285.938)",600:"oklch(44.2% 0.017 285.786)",700:"oklch(37% 0.013 285.805)",800:"oklch(27.4% 0.006 286.033)",900:"oklch(21% 0.006 285.885)",950:"oklch(14.1% 0.005 285.823)"},neutral:{50:"oklch(98.5% 0 0)",100:"oklch(97% 0 0)",200:"oklch(92.2% 0 0)",300:"oklch(87% 0 0)",400:"oklch(70.8% 0 0)",500:"oklch(55.6% 0 0)",600:"oklch(43.9% 0 0)",700:"oklch(37.1% 0 0)",800:"oklch(26.9% 0 0)",900:"oklch(20.5% 0 0)",950:"oklch(14.5% 0 0)"},stone:{50:"oklch(98.5% 0.001 106.423)",100:"oklch(97% 0.001 106.424)",200:"oklch(92.3% 0.003 48.717)",300:"oklch(86.9% 0.005 56.366)",400:"oklch(70.9% 0.01 56.259)",500:"oklch(55.3% 0.013 58.071)",600:"oklch(44.4% 0.011 73.639)",700:"oklch(37.4% 0.01 67.558)",800:"oklch(26.8% 0.007 34.298)",900:"oklch(21.6% 0.006 56.043)",950:"oklch(14.7% 0.004 49.25)"},mauve:{50:"oklch(98.5% 0 0)",100:"oklch(96% 0.003 325.6)",200:"oklch(92.2% 0.005 325.62)",300:"oklch(86.5% 0.012 325.68)",400:"oklch(71.1% 0.019 323.02)",500:"oklch(54.2% 0.034 322.5)",600:"oklch(43.5% 0.029 321.78)",700:"oklch(36.4% 0.029 323.89)",800:"oklch(26.3% 0.024 320.12)",900:"oklch(21.2% 0.019 322.12)",950:"oklch(14.5% 0.008 326)"},olive:{50:"oklch(98.8% 0.003 106.5)",100:"oklch(96.6% 0.005 106.5)",200:"oklch(93% 0.007 106.5)",300:"oklch(88% 0.011 106.6)",400:"oklch(73.7% 0.021 106.9)",500:"oklch(58% 0.031 107.3)",600:"oklch(46.6% 0.025 107.3)",700:"oklch(39.4% 0.023 107.4)",800:"oklch(28.6% 0.016 107.4)",900:"oklch(22.8% 0.013 107.4)",950:"oklch(15.3% 0.006 107.1)"},mist:{50:"oklch(98.7% 0.002 197.1)",100:"oklch(96.3% 0.002 197.1)",200:"oklch(92.5% 0.005 214.3)",300:"oklch(87.2% 0.007 219.6)",400:"oklch(72.3% 0.014 214.4)",500:"oklch(56% 0.021 213.5)",600:"oklch(45% 0.017 213.2)",700:"oklch(37.8% 0.015 216)",800:"oklch(27.5% 0.011 216.9)",900:"oklch(21.8% 0.008 223.9)",950:"oklch(14.8% 0.004 228.8)"},taupe:{50:"oklch(98.6% 0.002 67.8)",100:"oklch(96% 0.002 17.2)",200:"oklch(92.2% 0.005 34.3)",300:"oklch(86.8% 0.007 39.5)",400:"oklch(71.4% 0.014 41.2)",500:"oklch(54.7% 0.021 43.1)",600:"oklch(43.8% 0.017 39.3)",700:"oklch(36.7% 0.016 35.7)",800:"oklch(26.8% 0.011 36.5)",900:"oklch(21.4% 0.009 43.1)",950:"oklch(14.7% 0.004 49.3)"},red:{50:"oklch(97.1% 0.013 17.38)",100:"oklch(93.6% 0.032 17.717)",200:"oklch(88.5% 0.062 18.334)",300:"oklch(80.8% 0.114 19.571)",400:"oklch(70.4% 0.191 22.216)",500:"oklch(63.7% 0.237 25.331)",600:"oklch(57.7% 0.245 27.325)",700:"oklch(50.5% 0.213 27.518)",800:"oklch(44.4% 0.177 26.899)",900:"oklch(39.6% 0.141 25.723)",950:"oklch(25.8% 0.092 26.042)"},orange:{50:"oklch(98% 0.016 73.684)",100:"oklch(95.4% 0.038 75.164)",200:"oklch(90.1% 0.076 70.697)",300:"oklch(83.7% 0.128 66.29)",400:"oklch(75% 0.183 55.934)",500:"oklch(70.5% 0.213 47.604)",600:"oklch(64.6% 0.222 41.116)",700:"oklch(55.3% 0.195 38.402)",800:"oklch(47% 0.157 37.304)",900:"oklch(40.8% 0.123 38.172)",950:"oklch(26.6% 0.079 36.259)"},amber:{50:"oklch(98.7% 0.022 95.277)",100:"oklch(96.2% 0.059 95.617)",200:"oklch(92.4% 0.12 95.746)",300:"oklch(87.9% 0.169 91.605)",400:"oklch(82.8% 0.189 84.429)",500:"oklch(76.9% 0.188 70.08)",600:"oklch(66.6% 0.179 58.318)",700:"oklch(55.5% 0.163 48.998)",800:"oklch(47.3% 0.137 46.201)",900:"oklch(41.4% 0.112 45.904)",950:"oklch(27.9% 0.077 45.635)"},yellow:{50:"oklch(98.7% 0.026 102.212)",100:"oklch(97.3% 0.071 103.193)",200:"oklch(94.5% 0.129 101.54)",300:"oklch(90.5% 0.182 98.111)",400:"oklch(85.2% 0.199 91.936)",500:"oklch(79.5% 0.184 86.047)",600:"oklch(68.1% 0.162 75.834)",700:"oklch(55.4% 0.135 66.442)",800:"oklch(47.6% 0.114 61.907)",900:"oklch(42.1% 0.095 57.708)",950:"oklch(28.6% 0.066 53.813)"},lime:{50:"oklch(98.6% 0.031 120.757)",100:"oklch(96.7% 0.067 122.328)",200:"oklch(93.8% 0.127 124.321)",300:"oklch(89.7% 0.196 126.665)",400:"oklch(84.1% 0.238 128.85)",500:"oklch(76.8% 0.233 130.85)",600:"oklch(64.8% 0.2 131.684)",700:"oklch(53.2% 0.157 131.589)",800:"oklch(45.3% 0.124 130.933)",900:"oklch(40.5% 0.101 131.063)",950:"oklch(27.4% 0.072 132.109)"},green:{50:"oklch(98.2% 0.018 155.826)",100:"oklch(96.2% 0.044 156.743)",200:"oklch(92.5% 0.084 155.995)",300:"oklch(87.1% 0.15 154.449)",400:"oklch(79.2% 0.209 151.711)",500:"oklch(72.3% 0.219 149.579)",600:"oklch(62.7% 0.194 149.214)",700:"oklch(52.7% 0.154 150.069)",800:"oklch(44.8% 0.119 151.328)",900:"oklch(39.3% 0.095 152.535)",950:"oklch(26.6% 0.065 152.934)"},emerald:{50:"oklch(97.9% 0.021 166.113)",100:"oklch(95% 0.052 163.051)",200:"oklch(90.5% 0.093 164.15)",300:"oklch(84.5% 0.143 164.978)",400:"oklch(76.5% 0.177 163.223)",500:"oklch(69.6% 0.17 162.48)",600:"oklch(59.6% 0.145 163.225)",700:"oklch(50.8% 0.118 165.612)",800:"oklch(43.2% 0.095 166.913)",900:"oklch(37.8% 0.077 168.94)",950:"oklch(26.2% 0.051 172.552)"},teal:{50:"oklch(98.4% 0.014 180.72)",100:"oklch(95.3% 0.051 180.801)",200:"oklch(91% 0.096 180.426)",300:"oklch(85.5% 0.138 181.071)",400:"oklch(77.7% 0.152 181.912)",500:"oklch(70.4% 0.14 182.503)",600:"oklch(60% 0.118 184.704)",700:"oklch(51.1% 0.096 186.391)",800:"oklch(43.7% 0.078 188.216)",900:"oklch(38.6% 0.063 188.416)",950:"oklch(27.7% 0.046 192.524)"},cyan:{50:"oklch(98.4% 0.019 200.873)",100:"oklch(95.6% 0.045 203.388)",200:"oklch(91.7% 0.08 205.041)",300:"oklch(86.5% 0.127 207.078)",400:"oklch(78.9% 0.154 211.53)",500:"oklch(71.5% 0.143 215.221)",600:"oklch(60.9% 0.126 221.723)",700:"oklch(52% 0.105 223.128)",800:"oklch(45% 0.085 224.283)",900:"oklch(39.8% 0.07 227.392)",950:"oklch(30.2% 0.056 229.695)"},sky:{50:"oklch(97.7% 0.013 236.62)",100:"oklch(95.1% 0.026 236.824)",200:"oklch(90.1% 0.058 230.902)",300:"oklch(82.8% 0.111 230.318)",400:"oklch(74.6% 0.16 232.661)",500:"oklch(68.5% 0.169 237.323)",600:"oklch(58.8% 0.158 241.966)",700:"oklch(50% 0.134 242.749)",800:"oklch(44.3% 0.11 240.79)",900:"oklch(39.1% 0.09 240.876)",950:"oklch(29.3% 0.066 243.157)"},blue:{50:"oklch(97% 0.014 254.604)",100:"oklch(93.2% 0.032 255.585)",200:"oklch(88.2% 0.059 254.128)",300:"oklch(80.9% 0.105 251.813)",400:"oklch(70.7% 0.165 254.624)",500:"oklch(62.3% 0.214 259.815)",600:"oklch(54.6% 0.245 262.881)",700:"oklch(48.8% 0.243 264.376)",800:"oklch(42.4% 0.199 265.638)",900:"oklch(37.9% 0.146 265.522)",950:"oklch(28.2% 0.091 267.935)"},indigo:{50:"oklch(96.2% 0.018 272.314)",100:"oklch(93% 0.034 272.788)",200:"oklch(87% 0.065 274.039)",300:"oklch(78.5% 0.115 274.713)",400:"oklch(67.3% 0.182 276.935)",500:"oklch(58.5% 0.233 277.117)",600:"oklch(51.1% 0.262 276.966)",700:"oklch(45.7% 0.24 277.023)",800:"oklch(39.8% 0.195 277.366)",900:"oklch(35.9% 0.144 278.697)",950:"oklch(25.7% 0.09 281.288)"},violet:{50:"oklch(96.9% 0.016 293.756)",100:"oklch(94.3% 0.029 294.588)",200:"oklch(89.4% 0.057 293.283)",300:"oklch(81.1% 0.111 293.571)",400:"oklch(70.2% 0.183 293.541)",500:"oklch(60.6% 0.25 292.717)",600:"oklch(54.1% 0.281 293.009)",700:"oklch(49.1% 0.27 292.581)",800:"oklch(43.2% 0.232 292.759)",900:"oklch(38% 0.189 293.745)",950:"oklch(28.3% 0.141 291.089)"},purple:{50:"oklch(97.7% 0.014 308.299)",100:"oklch(94.6% 0.033 307.174)",200:"oklch(90.2% 0.063 306.703)",300:"oklch(82.7% 0.119 306.383)",400:"oklch(71.4% 0.203 305.504)",500:"oklch(62.7% 0.265 303.9)",600:"oklch(55.8% 0.288 302.321)",700:"oklch(49.6% 0.265 301.924)",800:"oklch(43.8% 0.218 303.724)",900:"oklch(38.1% 0.176 304.987)",950:"oklch(29.1% 0.149 302.717)"},fuchsia:{50:"oklch(97.7% 0.017 320.058)",100:"oklch(95.2% 0.037 318.852)",200:"oklch(90.3% 0.076 319.62)",300:"oklch(83.3% 0.145 321.434)",400:"oklch(74% 0.238 322.16)",500:"oklch(66.7% 0.295 322.15)",600:"oklch(59.1% 0.293 322.896)",700:"oklch(51.8% 0.253 323.949)",800:"oklch(45.2% 0.211 324.591)",900:"oklch(40.1% 0.17 325.612)",950:"oklch(29.3% 0.136 325.661)"},pink:{50:"oklch(97.1% 0.014 343.198)",100:"oklch(94.8% 0.028 342.258)",200:"oklch(89.9% 0.061 343.231)",300:"oklch(82.3% 0.12 346.018)",400:"oklch(71.8% 0.202 349.761)",500:"oklch(65.6% 0.241 354.308)",600:"oklch(59.2% 0.249 0.584)",700:"oklch(52.5% 0.223 3.958)",800:"oklch(45.9% 0.187 3.815)",900:"oklch(40.8% 0.153 2.432)",950:"oklch(28.4% 0.109 3.907)"},rose:{50:"oklch(96.9% 0.015 12.422)",100:"oklch(94.1% 0.03 12.58)",200:"oklch(89.2% 0.058 10.001)",300:"oklch(81% 0.117 11.638)",400:"oklch(71.2% 0.194 13.428)",500:"oklch(64.5% 0.246 16.439)",600:"oklch(58.6% 0.253 17.585)",700:"oklch(51.4% 0.222 16.935)",800:"oklch(45.5% 0.188 13.697)",900:"oklch(41% 0.159 10.272)",950:"oklch(27.1% 0.105 12.094)"}};const b_=[50,100,200,300,400,500,600,700,800,900,950];function E_(e,t){return e in Rs&&typeof Rs[e]=="object"&&t in Rs[e]?Rs[e][t]:""}function C_(e,t,n){const o=n?`${n}-`:"";return`${b_.map(r=>`--ui-color-${e}-${r}: var(--${o}color-${t==="neutral"?"old-neutral":t}-${r}, ${E_(t,r)});`).join(` + `)}`}function Gh(e,t){return`--ui-${e}: var(--ui-color-${e}-${t});`}const x_=vn(()=>{const e=Pe(),t=Re(),n=F(()=>{const{neutral:r,...u}=e.ui.colors,a=e.ui.prefix;return`@layer theme { + :root, :host { + ${Object.entries(e.ui.colors).map(([s,i])=>C_(s,i,a)).join(` + `)} + } + :root, :host, .light { + ${Object.keys(u).map(s=>Gh(s,500)).join(` + `)} + } + .dark { + ${Object.keys(u).map(s=>Gh(s,400)).join(` + `)} + } +}`}),o={style:[{innerHTML:()=>n.value,tagPriority:-2,id:"nuxt-ui-colors"}]};if(t.isHydrating&&!t.payload.serverRendered){const r=document.createElement("style");r.innerHTML=n.value,r.setAttribute("data-nuxt-ui-colors",""),document.head.appendChild(r),o.script=[{innerHTML:"document.head.removeChild(document.querySelector('[data-nuxt-ui-colors]'))"}]}Wd(o)}),bn={fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},Yh={silent:{level:-1},fatal:{level:bn.fatal},error:{level:bn.error},warn:{level:bn.warn},log:{level:bn.log},info:{level:bn.info},success:{level:bn.success},fail:{level:bn.fail},ready:{level:bn.info},start:{level:bn.info},box:{level:bn.info},debug:{level:bn.debug},trace:{level:bn.trace},verbose:{level:bn.verbose}};function uc(e){if(e===null||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function C0(e,t,n=".",o){if(!uc(t))return C0(e,{},n);const r=Object.assign({},t);for(const u in e){if(u==="__proto__"||u==="constructor")continue;const a=e[u];a!=null&&(Array.isArray(a)&&Array.isArray(r[u])?r[u]=[...a,...r[u]]:uc(a)&&uc(r[u])?r[u]=C0(a,r[u],(n?`${n}.`:"")+u.toString()):r[u]=a)}return r}function w_(e){return(...t)=>t.reduce((n,o)=>C0(n,o,""),{})}const D_=w_();function A_(e){return Object.prototype.toString.call(e)==="[object Object]"}function B_(e){return!(!A_(e)||!e.message&&!e.args||e.stack)}let ac=!1;const Zh=[];class Ut{options;_lastLog;_mockFn;constructor(t={}){const n=t.types||Yh;this.options=D_({...t,defaults:{...t.defaults},level:sc(t.level,n),reporters:[...t.reporters||[]]},{types:Yh,throttle:1e3,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(const o in n){const r={type:o,...this.options.defaults,...n[o]};this[o]=this._wrapLogFn(r),this[o].raw=this._wrapLogFn(r,!0)}this.options.mockFn&&this.mockTypes(),this._lastLog={}}get level(){return this.options.level}set level(t){this.options.level=sc(t,this.options.types,this.options.level)}prompt(t,n){if(!this.options.prompt)throw new Error("prompt is not supported!");return this.options.prompt(t,n)}create(t){const n=new Ut({...this.options,...t});return this._mockFn&&n.mockTypes(this._mockFn),n}withDefaults(t){return this.create({...this.options,defaults:{...this.options.defaults,...t}})}withTag(t){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+t:t})}addReporter(t){return this.options.reporters.push(t),this}removeReporter(t){if(t){const n=this.options.reporters.indexOf(t);if(n!==-1)return this.options.reporters.splice(n,1)}else this.options.reporters.splice(0);return this}setReporters(t){return this.options.reporters=Array.isArray(t)?t:[t],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(const t in this.options.types)console["__"+t]||(console["__"+t]=console[t]),console[t]=this[t].raw}restoreConsole(){for(const t in this.options.types)console["__"+t]&&(console[t]=console["__"+t],delete console["__"+t])}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(t,n){t&&(t.__write||(t.__write=t.write),t.write=o=>{this[n].raw(String(o).trim())})}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(t){t&&t.__write&&(t.write=t.__write,delete t.__write)}pauseLogs(){ac=!0}resumeLogs(){ac=!1;const t=Zh.splice(0);for(const n of t)n[0]._logFn(n[1],n[2])}mockTypes(t){const n=t||this.options.mockFn;if(this._mockFn=n,typeof n=="function")for(const o in this.options.types)this[o]=n(o,this.options.types[o])||this[o],this[o].raw=this[o]}_wrapLogFn(t,n){return(...o)=>{if(ac){Zh.push([this,t,o,n]);return}return this._logFn(t,o,n)}}_logFn(t,n,o){if((t.level||0)>this.level)return!1;const r={date:new Date,args:[],...t,level:sc(t.level,this.options.types)};!o&&n.length===1&&B_(n[0])?Object.assign(r,n[0]):r.args=[...n],r.message&&(r.args.unshift(r.message),delete r.message),r.additional&&(Array.isArray(r.additional)||(r.additional=r.additional.split(` +`)),r.args.push(` +`+r.additional.join(` +`)),delete r.additional),r.type=typeof r.type=="string"?r.type.toLowerCase():"log",r.tag=typeof r.tag=="string"?r.tag:"";const u=(s=!1)=>{const i=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&i>0){const c=[...this._lastLog.object.args];i>1&&c.push(`(repeated ${i} times)`),this._log({...this._lastLog.object,args:c}),this._lastLog.count=1}s&&(this._lastLog.object=r,this._log(r))};clearTimeout(this._lastLog.timeout);const a=this._lastLog.time&&r.date?r.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=r.date,athis.options.throttleMin)){this._lastLog.timeout=setTimeout(u,this.options.throttle);return}}catch{}u(!0)}_log(t){for(const n of this.options.reporters)n.log(t,{options:this.options})}}function sc(e,t={},n=3){return e===void 0?n:typeof e=="number"?e:t[e]&&t[e].level!==void 0?t[e].level:n}Ut.prototype.add=Ut.prototype.addReporter;Ut.prototype.remove=Ut.prototype.removeReporter;Ut.prototype.clear=Ut.prototype.removeReporter;Ut.prototype.withScope=Ut.prototype.withTag;Ut.prototype.mock=Ut.prototype.mockTypes;Ut.prototype.pause=Ut.prototype.pauseLogs;Ut.prototype.resume=Ut.prototype.resumeLogs;function __(e={}){return new Ut(e)}class k_{options;defaultColor;levelColorMap;typeColorMap;constructor(t){this.options={...t},this.defaultColor="#7f8c8d",this.levelColorMap={0:"#c0392b",1:"#f39c12",3:"#00BCD4"},this.typeColorMap={success:"#2ecc71"}}_getLogFn(t){return t<1?console.__error||console.error:t===1?console.__warn||console.warn:console.__log||console.log}log(t){const n=this._getLogFn(t.level),o=t.type==="log"?"":t.type,r=t.tag||"",a=` + background: ${this.typeColorMap[t.type]||this.levelColorMap[t.level]||this.defaultColor}; + border-radius: 0.5em; + color: white; + font-weight: bold; + padding: 2px 0.5em; + `,s=`%c${[r,o].filter(Boolean).join(":")}`;typeof t.args[0]=="string"?n(`${s}%c ${t.args[0]}`,a,"",...t.args.slice(1)):n(s,a,...t.args)}}function S_(e={}){return __({reporters:e.reporters||[new k_({})],prompt(n,o={}){return o.type==="confirm"?Promise.resolve(confirm(n)):Promise.resolve(prompt(n))},...e})}const T_=S_(),F_=T_.withTag("Docus"),Xh=Object.assign({"../../i18n/locales/ar.json":()=>ne(()=>import("./Ds9OA60O.js"),[],import.meta.url),"../../i18n/locales/be.json":()=>ne(()=>import("./CI43exTt.js"),[],import.meta.url),"../../i18n/locales/bg.json":()=>ne(()=>import("./FIW8Ti8B.js"),[],import.meta.url),"../../i18n/locales/bn.json":()=>ne(()=>import("./CuQFqh_W.js"),[],import.meta.url),"../../i18n/locales/ca.json":()=>ne(()=>import("./zNu3OsYz.js"),[],import.meta.url),"../../i18n/locales/ckb.json":()=>ne(()=>import("./C2GbCjp9.js"),[],import.meta.url),"../../i18n/locales/cs.json":()=>ne(()=>import("./Dcswgw4K.js"),[],import.meta.url),"../../i18n/locales/da.json":()=>ne(()=>import("./Du9oxZzF.js"),[],import.meta.url),"../../i18n/locales/de.json":()=>ne(()=>import("./BosS-MS4.js"),[],import.meta.url),"../../i18n/locales/el.json":()=>ne(()=>import("./Bkurqz2d.js"),[],import.meta.url),"../../i18n/locales/en.json":()=>ne(()=>import("./DOelY9Nb.js"),[],import.meta.url),"../../i18n/locales/es.json":()=>ne(()=>import("./DVlZI4kn.js"),[],import.meta.url),"../../i18n/locales/et.json":()=>ne(()=>import("./C1fSKR9D.js"),[],import.meta.url),"../../i18n/locales/fi.json":()=>ne(()=>import("./DvjBH7HE.js"),[],import.meta.url),"../../i18n/locales/fr.json":()=>ne(()=>import("./DuhoAnL7.js"),[],import.meta.url),"../../i18n/locales/he.json":()=>ne(()=>import("./Bqoc_FpL.js"),[],import.meta.url),"../../i18n/locales/hi.json":()=>ne(()=>import("./-nV3O3Hd.js"),[],import.meta.url),"../../i18n/locales/hy.json":()=>ne(()=>import("./DEklDIUE.js"),[],import.meta.url),"../../i18n/locales/id.json":()=>ne(()=>import("./CArNbJ6I.js"),[],import.meta.url),"../../i18n/locales/it.json":()=>ne(()=>import("./BeOsfPZ5.js"),[],import.meta.url),"../../i18n/locales/ja.json":()=>ne(()=>import("./uN6OGCoe.js"),[],import.meta.url),"../../i18n/locales/kk.json":()=>ne(()=>import("./Y1bVb6fC.js"),[],import.meta.url),"../../i18n/locales/km.json":()=>ne(()=>import("./Crnsupp9.js"),[],import.meta.url),"../../i18n/locales/ko.json":()=>ne(()=>import("./D-lyTl4E.js"),[],import.meta.url),"../../i18n/locales/ky.json":()=>ne(()=>import("./DxN8ZPeP.js"),[],import.meta.url),"../../i18n/locales/lb.json":()=>ne(()=>import("./BRj7a3jo.js"),[],import.meta.url),"../../i18n/locales/ms.json":()=>ne(()=>import("./CsxHJ_Yb.js"),[],import.meta.url),"../../i18n/locales/nb.json":()=>ne(()=>import("./D0RjKS9E.js"),[],import.meta.url),"../../i18n/locales/nl.json":()=>ne(()=>import("./Dme4Sp_Z.js"),[],import.meta.url),"../../i18n/locales/pl.json":()=>ne(()=>import("./BscxgZ9w.js"),[],import.meta.url),"../../i18n/locales/pt-BR.json":()=>ne(()=>import("./BOynLmEf.js"),[],import.meta.url),"../../i18n/locales/ro.json":()=>ne(()=>import("./C919_JS_.js"),[],import.meta.url),"../../i18n/locales/ru.json":()=>ne(()=>import("./CrCM1jgP.js"),[],import.meta.url),"../../i18n/locales/si.json":()=>ne(()=>import("./BePYYsBE.js"),[],import.meta.url),"../../i18n/locales/sl.json":()=>ne(()=>import("./C8-8Pk2V.js"),[],import.meta.url),"../../i18n/locales/sv.json":()=>ne(()=>import("./D_wlStJ8.js"),[],import.meta.url),"../../i18n/locales/tr.json":()=>ne(()=>import("./B7V4_Oof.js"),[],import.meta.url),"../../i18n/locales/uk.json":()=>ne(()=>import("./BlxJeUnt.js"),[],import.meta.url),"../../i18n/locales/ur.json":()=>ne(()=>import("./ClE5p2_s.js"),[],import.meta.url),"../../i18n/locales/vi.json":()=>ne(()=>import("./DbjiwLiW.js"),[],import.meta.url),"../../i18n/locales/zh-CN.json":()=>ne(()=>import("./PB_A7Nh4.js"),[],import.meta.url)}),P_=vn(async()=>{let e,t;const n=Re(),o=n.$config.public.i18n;if(!o){const u=Pe().docus.locale||"en";let a=u,s;const i=`../../i18n/locales/${u}.json`,c=Xh[i];if(c)s=([e,t]=qr(()=>c()),e=await e,t(),e).default;else{F_.warn(`Missing locale file for "${u}". Falling back to "en".`),a="en";const d=Xh["../../i18n/locales/en.json"];d?s=([e,t]=qr(()=>d()),e=await e,t(),e).default:s={}}n.provide("locale",a),n.provide("localeMessages",s);return}ew(r=>{if(r.path==="/"){const u=e9("i18n_redirected").value||o.defaultLocale||"en";return dl(`/${u}`)}})}),M_=[Yw,eD,MA,p9,h9,m9,g9,v9,E9,EB,v_,y_,x_,P_];function O_(e,t){const n=t/e*100;return 2/Math.PI*100*Math.atan(n/50)}function I_(e={}){const{duration:t=2e3,throttle:n=200,hideDelay:o=500,resetDelay:r=400}=e,u=e.estimatedProgress||O_,a=Re(),s=Me(0),i=Me(!1),c=Me(!1);let l=!1,d,p,h,m;const g=(x={})=>{v(),c.value=!1,y(0,x)};function y(x=0,_={}){if(a.isHydrating)return;if(x>=100)return b({force:_.force});C(),s.value=x<0?0:x;const S=_.force?0:n;S?p=setTimeout(()=>{i.value=!0,w()},S):(i.value=!0,w())}function E(){h=setTimeout(()=>{i.value=!1,m=setTimeout(()=>{s.value=0},r)},o)}function b(x={}){s.value=100,l=!0,C(),v(),x.error&&(c.value=!0),x.force?(s.value=0,i.value=!1):E()}function v(){clearTimeout(h),clearTimeout(m)}function C(){clearTimeout(p),cancelAnimationFrame(d)}function w(){l=!1;let x;function _(S){if(l)return;x??=S;const O=S-x;s.value=Math.max(0,Math.min(100,u(t,O))),d=requestAnimationFrame(_)}d=requestAnimationFrame(_)}let B=()=>{};{const x=a.hook("page:loading:start",()=>{g()}),_=a.hook("page:loading:end",()=>{b()}),S=a.hook("vue:error",()=>b());B=()=>{S(),x(),_(),C()}}return{_cleanup:B,progress:F(()=>s.value),isLoading:F(()=>i.value),error:F(()=>c.value),start:g,set:y,finish:b,clear:C}}function R_(e={}){const t=Re(),n=t._loadingIndicator||=I_(e);return ho()&&(t._loadingIndicatorDeps||=0,t._loadingIndicatorDeps++,ir(()=>{t._loadingIndicatorDeps--,t._loadingIndicatorDeps===0&&(n._cleanup(),delete t._loadingIndicator)})),n}const L_=L({name:"NuxtLoadingIndicator",props:{throttle:{type:Number,default:200},duration:{type:Number,default:2e3},hideDelay:{type:Number,default:500},resetDelay:{type:Number,default:400},height:{type:Number,default:3},color:{type:[String,Boolean],default:"repeating-linear-gradient(to right,#00dc82 0%,#34cdfe 50%,#0047e1 100%)"},errorColor:{type:String,default:"repeating-linear-gradient(to right,#f87171 0%,#ef4444 100%)"},estimatedProgress:{type:Function,required:!1}},setup(e,{slots:t,expose:n}){const{progress:o,isLoading:r,error:u,start:a,finish:s,clear:i}=R_({duration:e.duration,throttle:e.throttle,hideDelay:e.hideDelay,resetDelay:e.resetDelay,estimatedProgress:e.estimatedProgress});return n({progress:o,isLoading:r,error:u,start:a,finish:s,clear:i}),()=>qe("div",{class:"nuxt-loading-indicator",style:{position:"fixed",top:0,right:0,left:0,pointerEvents:"none",width:"auto",height:`${e.height}px`,opacity:r.value?1:0,background:u.value?e.errorColor:e.color||void 0,backgroundSize:`${o.value>0?100/o.value*100:0}% auto`,transform:`scaleX(${o.value}%)`,transformOrigin:"left",transition:"transform 0.1s, height 0.4s, opacity 0.4s",zIndex:999999}},t)}});function lt(e,t){const n=typeof e=="string"&&!t?`${e}Context`:t,o=Symbol(n);return[a=>{const s=Ue(o,a);if(s||s===null)return s;throw new Error(`Injection \`${o.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`)},a=>(Pt(o,a),a)]}function dt(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}function I3(e,t,n){const o=n.originalEvent.target,r=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),o.dispatchEvent(r)}function yl(e){return e==null}function q_(e,t){return yl(e)?!1:Array.isArray(e)?e.some(n=>Ur(n,t)):Ur(e,t)}function uf(e){return e?e.flatMap(t=>t.type===Ce?uf(t.children):[t]):[]}const $_=["INPUT","TEXTAREA"];function za(e,t,n,o={}){if(!t||o.enableIgnoredElement&&$_.includes(t.nodeName))return null;const{arrowKeyOptions:r="both",attributeName:u="[data-reka-collection-item]",itemsArray:a=[],loop:s=!0,dir:i="ltr",preventScroll:c=!0,focus:l=!1}=o,[d,p,h,m,g,y]=[e.key==="ArrowRight",e.key==="ArrowLeft",e.key==="ArrowUp",e.key==="ArrowDown",e.key==="Home",e.key==="End"],E=h||m,b=d||p;if(!g&&!y&&(!E&&!b||r==="vertical"&&b||r==="horizontal"&&E))return null;const v=n?Array.from(n.querySelectorAll(u)):a;if(!v.length)return null;c&&e.preventDefault();let C=null;return b||E?C=R3(v,t,{goForward:E?m:i==="ltr"?d:p,loop:s}):g?C=v.at(0)||null:y&&(C=v.at(-1)||null),l&&C?.focus(),C}function R3(e,t,n,o=e.includes(t)?e.length:e.length+1){if(--o===0)return null;const r=e.indexOf(t);let u;if(r===-1?u=n.goForward?0:e.length-1:u=n.goForward?r+1:r-1,!n.loop&&(u<0||u>=e.length))return null;const a=(u+e.length)%e.length,s=e[a];return s?s.hasAttribute("disabled")&&s.getAttribute("disabled")!=="false"?R3(e,s,n,o):s:null}const[L3,N_]=lt("ConfigProvider");var j_=L({inheritAttrs:!1,__name:"ConfigProvider",props:{dir:{type:String,required:!1,default:"ltr"},locale:{type:String,required:!1,default:"en"},scrollBody:{type:[Boolean,Object],required:!1,default:!0},nonce:{type:String,required:!1,default:void 0},useId:{type:Function,required:!1,default:void 0}},setup(e){const t=e,{dir:n,locale:o,scrollBody:r,nonce:u}=mt(t);return N_({dir:n,locale:o,scrollBody:r,nonce:u,useId:t.useId}),(a,s)=>P(a.$slots,"default")}}),V_=j_;function z_(e,t){var n;const o=Me();return Ze(()=>{o.value=e()},{...t,flush:(n=t?.flush)!==null&&n!==void 0?n:"sync"}),Mo(o)}function U_(e,t,n={}){let o,r,u,a=!0;const s=()=>{a=!0,u()};ye(e,s,{flush:"sync",...n});const i=typeof t=="function"?t:t.get,c=typeof t=="function"?void 0:t.set,l=es((d,p)=>(r=d,u=p,{get(){return a&&(o=i(o),a=!1),r(),o},set(h){c?.(h)}}));return l.trigger=s,l}function $o(e,t){return ho()?(ir(e,t),!0):!1}function H_(){const e=new Set,t=u=>{e.delete(u)};return{on:u=>{e.add(u);const a=()=>t(u);return $o(a),{off:a}},off:t,trigger:(...u)=>Promise.all(Array.from(e).map(a=>a(...u))),clear:()=>{e.clear()}}}function K_(e){let t=!1,n;const o=Qa(!0);return((...r)=>(t||(n=o.run(()=>e(...r)),t=!0),n))}const ic=new WeakMap,W_=(...e)=>{var t;const n=e[0],o=(t=We())===null||t===void 0?void 0:t.proxy,r=o??ho();if(r==null&&!Lu())throw new Error("injectLocal must be called in setup");return r&&ic.has(r)&&n in ic.get(r)?ic.get(r)[n]:Ue(...e)},gn=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const x0=e=>typeof e<"u",G_=e=>e!=null,Y_=Object.prototype.toString,Z_=e=>Y_.call(e)==="[object Object]",Kr=()=>{},Jh=X_();function X_(){var e,t,n;return gn&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function q3(...e){if(e.length!==1)return Ye(...e);const t=e[0];return typeof t=="function"?Mo(es(()=>({get:t,set:Kr}))):R(t)}function af(e,t){function n(...o){return new Promise((r,u)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(r).catch(u)})}return n}const $3=e=>e();function J_(e,t={}){let n,o,r=Kr;const u=i=>{clearTimeout(i),r(),r=Kr};let a;return i=>{const c=ke(e),l=ke(t.maxWait);return n&&u(n),c<=0||l!==void 0&&l<=0?(o&&(u(o),o=void 0),Promise.resolve(i())):new Promise((d,p)=>{r=t.rejectOnCancel?p:d,a=i,l&&!o&&(o=setTimeout(()=>{n&&u(n),o=void 0,d(a())},l)),n=setTimeout(()=>{o&&u(o),o=void 0,d(i())},c)})}}function Q_(...e){let t=0,n,o=!0,r=Kr,u,a,s,i,c;!rt(e[0])&&typeof e[0]=="object"?{delay:a,trailing:s=!0,leading:i=!0,rejectOnCancel:c=!1}=e[0]:[a,s=!0,i=!0,c=!1]=e;const l=()=>{n&&(clearTimeout(n),n=void 0,r(),r=Kr)};return p=>{const h=ke(a),m=Date.now()-t,g=()=>u=p();return l(),h<=0?(t=Date.now(),g()):(m>h?(t=Date.now(),(i||!o)&&g()):s&&(u=new Promise((y,E)=>{r=c?E:y,n=setTimeout(()=>{t=Date.now(),o=!0,y(g()),l()},Math.max(0,h-m))})),!i&&!n&&(n=setTimeout(()=>o=!0,h)),o=!1,u)}}function ek(e=$3,t={}){const{initialState:n="active"}=t,o=q3(n==="active");function r(){o.value=!1}function u(){o.value=!0}return{isActive:Mo(o),pause:r,resume:u,eventFilter:(...s)=>{o.value&&e(...s)}}}function tk(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const o=t;t=void 0,o&&await o},n}function Qh(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function ai(e){return Array.isArray(e)?e:[e]}function nk(e){const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))}const ok=/-(\w)/g,rk=nk(e=>e.replace(ok,(t,n)=>n?n.toUpperCase():""));function N3(e){return We()}function Nu(e){if(!gn)return e;let t=0,n,o;const r=()=>{t-=1,o&&t<=0&&(o.stop(),n=void 0,o=void 0)};return((...u)=>(t+=1,o||(o=Qa(!0),n=o.run(()=>e(...u))),$o(r),n))}function uk(e,t){if(typeof Symbol<"u"){const n={...e};return Object.defineProperty(n,Symbol.iterator,{enumerable:!1,value(){let o=0;return{next:()=>({value:t[o++],done:o>t.length})}}}),n}else return Object.assign([...t],e)}function ak(e){return _t(rt(e)?new Proxy({},{get(t,n,o){return f(Reflect.get(e.value,n,o))},set(t,n,o){return rt(e.value[n])&&!rt(o)?e.value[n].value=o:e.value[n]=o,!0},deleteProperty(t,n){return Reflect.deleteProperty(e.value,n)},has(t,n){return Reflect.has(e.value,n)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}}):e)}function j3(e){return ak(F(e))}function No(e,...t){const n=t.flat(),o=n[0];return j3(()=>Object.fromEntries(typeof o=="function"?Object.entries(mt(e)).filter(([r,u])=>!o(ke(u),r)):Object.entries(mt(e)).filter(r=>!n.includes(r[0]))))}function Jt(e,...t){const n=t.flat(),o=n[0];return j3(()=>Object.fromEntries(typeof o=="function"?Object.entries(mt(e)).filter(([r,u])=>o(ke(u),r)):n.map(r=>[r,q3(e,r)])))}function bl(e,t=1e4){return es((n,o)=>{let r=ke(e),u;const a=()=>setTimeout(()=>{r=ke(e),o()},ke(t));return $o(()=>{clearTimeout(u)}),{get(){return n(),r},set(s){r=s,o(),clearTimeout(u),u=a()}}})}function V3(e,t=200,n={}){return af(J_(t,n),e)}function sk(e,t=200,n=!1,o=!0,r=!1){return af(Q_(t,n,o,r),e)}function XU(e,t=200,n=!0,o=!0){if(t<=0)return e;const r=R(ke(e)),u=sk(()=>{r.value=e.value},t,n,o);return ye(e,()=>u()),r}function ik(e,t,n={}){const{eventFilter:o=$3,...r}=n;return ye(e,af(o,t),r)}function e4(e,t,n={}){const{eventFilter:o,initialState:r="active",...u}=n,{eventFilter:a,pause:s,resume:i,isActive:c}=ek(o,{initialState:r});return{stop:ik(e,t,{...u,eventFilter:a}),pause:s,resume:i,isActive:c}}function lk(e,t,...[n]){const{flush:o="sync",deep:r=!1,immediate:u=!0,direction:a="both",transform:s={}}=n||{},i=[],c="ltr"in s&&s.ltr||(p=>p),l="rtl"in s&&s.rtl||(p=>p);return(a==="both"||a==="ltr")&&i.push(e4(e,p=>{i.forEach(h=>h.pause()),t.value=c(p),i.forEach(h=>h.resume())},{flush:o,deep:r,immediate:u})),(a==="both"||a==="rtl")&&i.push(e4(t,p=>{i.forEach(h=>h.pause()),e.value=l(p),i.forEach(h=>h.resume())},{flush:o,deep:r,immediate:u})),()=>{i.forEach(p=>p.stop())}}function ck(e,t){N3()&&mo(e,t)}function z3(e,t=!0,n){N3()?$e(e,n):t?e():Oe(e)}function El(e,t,n={}){const{immediate:o=!0,immediateCallback:r=!1}=n,u=Me(!1);let a;function s(){a&&(clearTimeout(a),a=void 0)}function i(){u.value=!1,s()}function c(...l){r&&e(),s(),u.value=!0,a=setTimeout(()=>{u.value=!1,a=void 0,e(...l)},ke(t))}return o&&(u.value=!0,gn&&c()),$o(i),{isPending:Br(u),start:c,stop:i}}function dk(e=1e3,t={}){const{controls:n=!1,callback:o}=t,r=El(o??Kr,e,t),u=F(()=>!r.isPending.value);return n?{ready:u,...r}:u}function fk(e,t,n){return ye(e,t,{...n,immediate:!0})}function To(e={}){const{inheritAttrs:t=!0}=e,n=Me(),o=L({setup(u,{slots:a}){return()=>{n.value=a.default}}}),r=L({inheritAttrs:t,props:e.props,setup(u,{attrs:a,slots:s}){return()=>{var i;if(!n.value)throw new Error("[VueUse] Failed to find the definition of reusable template");const c=(i=n.value)===null||i===void 0?void 0:i.call(n,{...e.props==null?pk(a):u,$slots:s});return t&&c?.length===1?c[0]:c}}});return uk({define:o,reuse:r},[o,r])}function pk(e){const t={};for(const n in e)t[rk(n)]=e[n];return t}const Zn=gn?window:void 0,U3=gn?window.navigator:void 0;function an(e){var t;const n=ke(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function At(...e){const t=(o,r,u,a)=>(o.addEventListener(r,u,a),()=>o.removeEventListener(r,u,a)),n=F(()=>{const o=ai(ke(e[0])).filter(r=>r!=null);return o.every(r=>typeof r!="string")?o:void 0});return fk(()=>{var o,r;return[(o=(r=n.value)===null||r===void 0?void 0:r.map(u=>an(u)))!==null&&o!==void 0?o:[Zn].filter(u=>u!=null),ai(ke(n.value?e[1]:e[0])),ai(f(n.value?e[2]:e[1])),ke(n.value?e[3]:e[2])]},([o,r,u,a],s,i)=>{if(!o?.length||!r?.length||!u?.length)return;const c=Z_(a)?{...a}:a,l=o.flatMap(d=>r.flatMap(p=>u.map(h=>t(d,p,h,c))));i(()=>{l.forEach(d=>d())})},{flush:"post"})}function H3(){const e=Me(!1),t=We();return t&&$e(()=>{e.value=!0},t),e}function ls(e){const t=H3();return F(()=>(t.value,!!e()))}function K3(e,t,n={}){const{window:o=Zn,...r}=n;let u;const a=ls(()=>o&&"MutationObserver"in o),s=()=>{u&&(u.disconnect(),u=void 0)},i=ye(F(()=>{const d=ai(ke(e)).map(an).filter(G_);return new Set(d)}),d=>{s(),a.value&&d.size&&(u=new MutationObserver(t),d.forEach(p=>u.observe(p,r)))},{immediate:!0,flush:"post"}),c=()=>u?.takeRecords(),l=()=>{i(),s()};return $o(l),{isSupported:a,stop:l,takeRecords:c}}function hk(e,t,n={}){const{window:o=Zn,document:r=o?.document,flush:u="sync"}=n;if(!o||!r)return Kr;let a;const s=l=>{a?.(),a=l},i=Ze(()=>{const l=an(e);if(l){const{stop:d}=K3(r,p=>{p.map(h=>[...h.removedNodes]).flat().some(h=>h===l||h.contains(l))&&t(p)},{window:o,childList:!0,subtree:!0});s(d)}},{flush:u}),c=()=>{i(),s()};return $o(c),c}function mk(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function sf(...e){let t,n,o={};e.length===3?(t=e[0],n=e[1],o=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],o=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Zn,eventName:u="keydown",passive:a=!1,dedupe:s=!1}=o,i=mk(t);return At(r,u,l=>{l.repeat&&ke(s)||i(l)&&n(l)},a)}function JU(e={}){var t;const{window:n=Zn,deep:o=!0,triggerOnRemoval:r=!1}=e,u=(t=e.document)!==null&&t!==void 0?t:n?.document,a=()=>{let c=u?.activeElement;if(o)for(var l;c?.shadowRoot;)c=c==null||(l=c.shadowRoot)===null||l===void 0?void 0:l.activeElement;return c},s=Me(),i=()=>{s.value=a()};if(n){const c={capture:!0,passive:!0};At(n,"blur",l=>{l.relatedTarget===null&&i()},c),At(n,"focus",i,c)}return r&&hk(s,i,{document:u}),i(),s}function W3(e,t={}){const{immediate:n=!0,fpsLimit:o=null,window:r=Zn,once:u=!1}=t,a=Me(!1),s=F(()=>{const h=ke(o);return h?1e3/h:null});let i=0,c=null;function l(h){if(!a.value||!r)return;i||(i=h);const m=h-i;if(s.value&&mn&&"matchMedia"in n&&typeof n.matchMedia=="function"),u=Me(typeof o=="number"),a=Me(),s=Me(!1),i=c=>{s.value=c.matches};return Ze(()=>{if(u.value){u.value=!r.value,s.value=ke(e).split(",").some(c=>{const l=c.includes("not all"),d=c.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),p=c.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let h=!!(d||p);return d&&h&&(h=o>=Qh(d[1])),p&&h&&(h=o<=Qh(p[1])),l?!h:h});return}r.value&&(a.value=n.matchMedia(ke(e)),s.value=a.value.matches)}),At(a,"change",i,{passive:!0}),F(()=>s.value)}function t4(e,t={}){const{controls:n=!1,navigator:o=U3}=t,r=ls(()=>o&&"permissions"in o),u=Me(),a=typeof e=="string"?{name:e}:e,s=Me(),i=()=>{var l,d;s.value=(l=(d=u.value)===null||d===void 0?void 0:d.state)!==null&&l!==void 0?l:"prompt"};At(u,"change",i,{passive:!0});const c=tk(async()=>{if(r.value){if(!u.value)try{u.value=await o.permissions.query(a)}catch{u.value=void 0}finally{i()}if(n)return He(u.value)}});return c(),n?{state:s,isSupported:r,query:c}:s}function QU(e={}){const{navigator:t=U3,read:n=!1,source:o,copiedDuring:r=1500,legacy:u=!1}=e,a=ls(()=>t&&"clipboard"in t),s=t4("clipboard-read"),i=t4("clipboard-write"),c=F(()=>a.value||u),l=Me(""),d=Me(!1),p=El(()=>d.value=!1,r,{immediate:!1});async function h(){let b=!(a.value&&E(s.value));if(!b)try{l.value=await t.clipboard.readText()}catch{b=!0}b&&(l.value=y())}c.value&&n&&At(["copy","cut"],h,{passive:!0});async function m(b=ke(o)){if(c.value&&b!=null){let v=!(a.value&&E(i.value));if(!v)try{await t.clipboard.writeText(b)}catch{v=!0}v&&g(b),l.value=b,d.value=!0,p.start()}}function g(b){const v=document.createElement("textarea");v.value=b,v.style.position="absolute",v.style.opacity="0",v.setAttribute("readonly",""),document.body.appendChild(v),v.select(),document.execCommand("copy"),v.remove()}function y(){var b,v,C;return(b=(v=document)===null||v===void 0||(C=v.getSelection)===null||C===void 0||(C=C.call(v))===null||C===void 0?void 0:C.toString())!==null&&b!==void 0?b:""}function E(b){return b==="granted"||b==="prompt"}return{isSupported:c,text:Mo(l),copied:Mo(d),copy:m}}function bk(e){return JSON.parse(JSON.stringify(e))}function Ek(e){const t=We(),n=U_(()=>null,()=>t.proxy.$el);return Gr(n.trigger),$e(n.trigger),n}function Ua(e,t,n={}){const{window:o=Zn,...r}=n;let u;const a=ls(()=>o&&"ResizeObserver"in o),s=()=>{u&&(u.disconnect(),u=void 0)},i=ye(F(()=>{const l=ke(e);return Array.isArray(l)?l.map(d=>an(d)):[an(l)]}),l=>{if(s(),a.value&&o){u=new ResizeObserver(t);for(const d of l)d&&u.observe(d,r)}},{immediate:!0,flush:"post"}),c=()=>{s(),i()};return $o(c),{isSupported:a,stop:c}}const Ck={page:e=>[e.pageX,e.pageY],client:e=>[e.clientX,e.clientY],screen:e=>[e.screenX,e.screenY],movement:e=>e instanceof MouseEvent?[e.movementX,e.movementY]:null};function xk(e={}){const{type:t="page",touch:n=!0,resetOnTouchEnds:o=!1,initialValue:r={x:0,y:0},window:u=Zn,target:a=u,scroll:s=!0,eventFilter:i}=e;let c=null,l=0,d=0;const p=Me(r.x),h=Me(r.y),m=Me(null),g=typeof t=="function"?t:Ck[t],y=x=>{const _=g(x);c=x,_&&([p.value,h.value]=_,m.value="mouse"),u&&(l=u.scrollX,d=u.scrollY)},E=x=>{if(x.touches.length>0){const _=g(x.touches[0]);_&&([p.value,h.value]=_,m.value="touch")}},b=()=>{if(!c||!u)return;const x=g(c);c instanceof MouseEvent&&x&&(p.value=x[0]+u.scrollX-l,h.value=x[1]+u.scrollY-d)},v=()=>{p.value=r.x,h.value=r.y},C=i?x=>i(()=>y(x),{}):x=>y(x),w=i?x=>i(()=>E(x),{}):x=>E(x),B=i?()=>i(()=>b(),{}):()=>b();if(a){const x={passive:!0};At(a,["mousemove","dragover"],C,x),n&&t!=="movement"&&(At(a,["touchstart","touchmove"],w,x),o&&At(a,"touchend",v,x)),s&&t==="page"&&At(u,"scroll",B,x)}return{x:p,y:h,sourceType:m}}function eH(e,t={}){const{windowResize:n=!0,windowScroll:o=!0,handleOutside:r=!0,window:u=Zn}=t,a=t.type||"page",{x:s,y:i,sourceType:c}=xk(t),l=Me(e??u?.document.body),d=Me(0),p=Me(0),h=Me(0),m=Me(0),g=Me(0),y=Me(0),E=Me(!0);function b(){if(!u)return;const w=an(l);if(!(!w||!(w instanceof Element)))for(const B of w.getClientRects()){const{left:x,top:_,width:S,height:O}=B;h.value=x+(a==="page"?u.pageXOffset:0),m.value=_+(a==="page"?u.pageYOffset:0),g.value=O,y.value=S;const H=s.value-h.value,N=i.value-m.value;if(E.value=S===0||O===0||H<0||N<0||H>S||N>O,(r||!E.value)&&(d.value=H,p.value=N),!E.value)break}}const v=[];function C(){v.forEach(w=>w()),v.length=0}if(z3(()=>{b()}),u){const{stop:w}=Ua(l,b),{stop:B}=K3(l,b,{attributeFilter:["style","class"]}),x=ye([l,s,i],b);v.push(w,B,x),At(document,"mouseleave",()=>E.value=!0,{passive:!0}),o&&v.push(At("scroll",b,{capture:!0,passive:!0})),n&&v.push(At("resize",b,{passive:!0}))}return{x:s,y:i,sourceType:c,elementX:d,elementY:p,elementPositionX:h,elementPositionY:m,elementHeight:g,elementWidth:y,isOutside:E,stop:C}}function tH(e=Ek()){const t=Me(),n=()=>{const o=an(e);o&&(t.value=o.parentElement)};return z3(n),ye(()=>ke(e),n),t}function Lt(e,t,n,o={}){var r,u;const{clone:a=!1,passive:s=!1,eventName:i,deep:c=!1,defaultValue:l,shouldEmit:d}=o,p=We(),h=n||p?.emit||(p==null||(r=p.$emit)===null||r===void 0?void 0:r.bind(p))||(p==null||(u=p.proxy)===null||u===void 0||(u=u.$emit)===null||u===void 0?void 0:u.bind(p?.proxy));let m=i;t||(t="modelValue"),m=m||`update:${t.toString()}`;const g=b=>a?typeof a=="function"?a(b):bk(b):b,y=()=>x0(e[t])?g(e[t]):l,E=b=>{d?d(b)&&h(m,b):h(m,b)};if(s){const b=R(y());let v=!1;return ye(()=>e[t],C=>{v||(v=!0,b.value=g(C),Oe(()=>v=!1))}),ye(b,C=>{!v&&(C!==e[t]||c)&&E(C)},{deep:c}),b}else return F({get(){return y()},set(b){E(b)}})}const wk=Nu(()=>{const e=R(new Map),t=R(),n=F(()=>{for(const a of e.value.values())if(a)return!0;return!1}),o=L3({scrollBody:R(!0)});let r=null;const u=()=>{document.body.style.paddingRight="",document.body.style.marginRight="",document.body.style.pointerEvents="",document.documentElement.style.removeProperty("--scrollbar-width"),document.body.style.overflow=t.value??"",Jh&&r?.(),t.value=void 0};return ye(n,(a,s)=>{if(!gn)return;if(!a){s&&u();return}t.value===void 0&&(t.value=document.body.style.overflow);const i=window.innerWidth-document.documentElement.clientWidth,c={padding:i,margin:0},l=o.scrollBody?.value?typeof o.scrollBody.value=="object"?wt({padding:o.scrollBody.value.padding===!0?i:o.scrollBody.value.padding,margin:o.scrollBody.value.margin===!0?i:o.scrollBody.value.margin},c):c:{padding:0,margin:0};i>0&&(document.body.style.paddingRight=typeof l.padding=="number"?`${l.padding}px`:String(l.padding),document.body.style.marginRight=typeof l.margin=="number"?`${l.margin}px`:String(l.margin),document.documentElement.style.setProperty("--scrollbar-width",`${i}px`),document.body.style.overflow="hidden"),Jh&&(r=At(document,"touchmove",d=>Dk(d),{passive:!1})),Oe(()=>{n.value&&(document.body.style.pointerEvents="none",document.body.style.overflow="hidden")})},{immediate:!0,flush:"sync"}),e});function lf(e){const t=Math.random().toString(36).substring(2,7),n=wk();n.value.set(t,e??!1);const o=F({get:()=>n.value.get(t)??!1,set:r=>n.value.set(t,r)});return ck(()=>{n.value.delete(t)}),o}function G3(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.cancelable&&t.preventDefault(),!1)}function ju(e){const t=L3({dir:R("ltr")});return F(()=>e?.value||t.dir?.value||"ltr")}function Xn(e){const t=We(),n=t?.type.emits,o={};return n?.length||console.warn(`No emitted event found. Please check component: ${t?.type.__name}`),n?.forEach(r=>{o[hu(Ft(r))]=(...u)=>e(r,...u)}),o}let lc=0;function Y3(){Ze(e=>{if(!gn)return;const t=document.querySelectorAll("[data-reka-focus-guard]");document.body.insertAdjacentElement("afterbegin",t[0]??n4()),document.body.insertAdjacentElement("beforeend",t[1]??n4()),lc++,e(()=>{lc===1&&document.querySelectorAll("[data-reka-focus-guard]").forEach(n=>n.remove()),lc--})})}function n4(){const e=document.createElement("span");return e.setAttribute("data-reka-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}function ae(){const e=We(),t=R(),n=F(()=>o());Gr(()=>{n.value!==o()&&jg(t)});function o(){return t.value&&"$el"in t.value&&["#text","#comment"].includes(t.value.$el.nodeName)?t.value.$el.nextElementSibling:an(t)}const r=Object.assign({},e.exposed),u={};for(const s in e.props)Object.defineProperty(u,s,{enumerable:!0,configurable:!0,get:()=>e.props[s]});if(Object.keys(r).length>0)for(const s in r)Object.defineProperty(u,s,{enumerable:!0,configurable:!0,get:()=>r[s]});Object.defineProperty(u,"$el",{enumerable:!0,configurable:!0,get:()=>e.vnode.el}),e.exposed=u;function a(s){if(t.value=s,!!s&&(Object.defineProperty(u,"$el",{enumerable:!0,configurable:!0,get:()=>s instanceof Element?s:s.$el}),!(s instanceof Element)&&!Object.prototype.hasOwnProperty.call(s,"$el"))){const i=s.$.exposed,c=Object.assign({},u);for(const l in i)Object.defineProperty(c,l,{enumerable:!0,configurable:!0,get:()=>i[l]});e.exposed=c}}return{forwardRef:a,currentRef:t,currentElement:n}}function ln(e){const t=We(),n=Object.keys(t?.type.props??{}).reduce((r,u)=>{const a=(t?.type.props[u]).default;return a!==void 0&&(r[u]=a),r},{}),o=Ye(e);return F(()=>{const r={},u=t?.vnode.props??{};return Object.keys(u).forEach(a=>{r[Ft(a)]=u[a]}),Object.keys({...n,...r}).reduce((a,s)=>(o.value[s]!==void 0&&(a[s]=o.value[s]),a),{})})}function it(e,t){const n=ln(e),o=t?Xn(t):{};return F(()=>({...n.value,...o}))}function Z3(e,t){const n=bl(!1,300);$o(()=>{n.value=!1});const o=R(null),r=H_();function u(){o.value=null,n.value=!1}function a(s,i){if(!i)return;const c=s.currentTarget,l={x:s.clientX,y:s.clientY},d=Ak(l,c.getBoundingClientRect()),p=Bk(l,d,1),h=_k(i.getBoundingClientRect()),m=Sk([...p,...h]);o.value=m,n.value=!0}return Ze(s=>{if(e.value&&t.value){const i=l=>a(l,t.value),c=l=>a(l,e.value);e.value.addEventListener("pointerleave",i),t.value.addEventListener("pointerleave",c),s(()=>{e.value?.removeEventListener("pointerleave",i),t.value?.removeEventListener("pointerleave",c)})}}),Ze(s=>{if(o.value){const i=c=>{if(!o.value||!(c.target instanceof Element))return;const l=c.target,d={x:c.clientX,y:c.clientY},p=e.value?.contains(l)||t.value?.contains(l),h=!kk(d,o.value),m=!!l.closest("[data-grace-area-trigger]");p?u():(h||m)&&(u(),r.trigger())};e.value?.ownerDocument.addEventListener("pointermove",i),s(()=>e.value?.ownerDocument.removeEventListener("pointermove",i))}}),{isPointerInTransit:n,onPointerExit:r.on}}function Ak(e,t){const n=Math.abs(t.top-e.y),o=Math.abs(t.bottom-e.y),r=Math.abs(t.right-e.x),u=Math.abs(t.left-e.x);switch(Math.min(n,o,r,u)){case u:return"left";case r:return"right";case n:return"top";case o:return"bottom";default:throw new Error("unreachable")}}function Bk(e,t,n=5){const o=[];switch(t){case"top":o.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":o.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":o.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":o.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return o}function _k(e){const{top:t,right:n,bottom:o,left:r}=e;return[{x:r,y:t},{x:n,y:t},{x:n,y:o},{x:r,y:o}]}function kk(e,t){const{x:n,y:o}=e;let r=!1;for(let u=0,a=t.length-1;uo!=l>o&&n<(c-s)*(o-i)/(l-i)+s&&(r=!r)}return r}function Sk(e){const t=e.slice();return t.sort((n,o)=>n.xo.x?1:n.yo.y?1:0),Tk(t)}function Tk(e){if(e.length<=1)return e.slice();const t=[];for(let o=0;o=2;){const u=t[t.length-1],a=t[t.length-2];if((u.x-a.x)*(r.y-a.y)>=(u.y-a.y)*(r.x-a.x))t.pop();else break}t.push(r)}t.pop();const n=[];for(let o=e.length-1;o>=0;o--){const r=e[o];for(;n.length>=2;){const u=n[n.length-1],a=n[n.length-2];if((u.x-a.x)*(r.y-a.y)>=(u.y-a.y)*(r.x-a.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var Fk=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},ru=new WeakMap,Ls=new WeakMap,qs={},cc=0,X3=function(e){return e&&(e.host||X3(e.parentNode))},Pk=function(e,t){return t.map(function(n){if(e.contains(n))return n;var o=X3(n);return o&&e.contains(o)?o:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},Mk=function(e,t,n,o){var r=Pk(t,Array.isArray(e)?e:[e]);qs[n]||(qs[n]=new WeakMap);var u=qs[n],a=[],s=new Set,i=new Set(r),c=function(d){!d||s.has(d)||(s.add(d),c(d.parentNode))};r.forEach(c);var l=function(d){!d||i.has(d)||Array.prototype.forEach.call(d.children,function(p){if(s.has(p))l(p);else try{var h=p.getAttribute(o),m=h!==null&&h!=="false",g=(ru.get(p)||0)+1,y=(u.get(p)||0)+1;ru.set(p,g),u.set(p,y),a.push(p),g===1&&m&&Ls.set(p,!0),y===1&&p.setAttribute(n,"true"),m||p.setAttribute(o,"true")}catch(E){console.error("aria-hidden: cannot operate on ",p,E)}})};return l(t),s.clear(),cc++,function(){a.forEach(function(d){var p=ru.get(d)-1,h=u.get(d)-1;ru.set(d,p),u.set(d,h),p||(Ls.has(d)||d.removeAttribute(o),Ls.delete(d)),h||d.removeAttribute(n)}),cc--,cc||(ru=new WeakMap,ru=new WeakMap,Ls=new WeakMap,qs={})}},J3=function(e,t,n){n===void 0&&(n="data-aria-hidden");var o=Array.from(Array.isArray(e)?e:[e]),r=Fk(e);return r?(o.push.apply(o,Array.from(r.querySelectorAll("[aria-live], script"))),Mk(o,r,n,"aria-hidden")):function(){return null}};function cf(e){let t;ye(()=>an(e),n=>{let o=!1;try{o=!!n?.closest("[popover]:not(:popover-open)")}catch{}n&&!o?t=J3(n):t&&t()}),Ht(()=>{t&&t()})}function sn(e,t="reka"){if(e)return e;let n;return n=Td?.(),t?`${t}-${n}`:n}function Ok(e){const t=R(),n=F(()=>t.value?.width??0),o=F(()=>t.value?.height??0);return $e(()=>{const r=an(e);if(r){t.value={width:r.offsetWidth,height:r.offsetHeight};const u=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const s=a[0];let i,c;if("borderBoxSize"in s){const l=s.borderBoxSize,d=Array.isArray(l)?l[0]:l;i=d.inlineSize,c=d.blockSize}else i=r.offsetWidth,c=r.offsetHeight;t.value={width:i,height:c}});return u.observe(r,{box:"border-box"}),()=>u.unobserve(r)}else t.value=void 0}),{width:n,height:o}}function Ik(e,t){const n=R(e);function o(u){return t[n.value][u]??n.value}return{state:n,dispatch:u=>{n.value=o(u)}}}function Rk(e){const t=bl("",1e3);return{search:t,handleTypeaheadSearch:(r,u)=>{t.value=t.value+r;{const a=dt(),s=u.map(p=>({...p,textValue:p.value?.textValue??p.ref.textContent?.trim()??""})),i=s.find(p=>p.ref===a),c=s.map(p=>p.textValue),l=qk(c,t.value,i?.textValue),d=s.find(p=>p.textValue===l);return d&&d.ref.focus(),d?.ref}},resetTypeahead:()=>{t.value=""}}}function Lk(e,t){return e.map((n,o)=>e[(t+o)%e.length])}function qk(e,t,n){const r=t.length>1&&Array.from(t).every(c=>c===t[0])?t[0]:t,u=n?e.indexOf(n):-1;let a=Lk(e,Math.max(u,0));r.length===1&&(a=a.filter(c=>c!==n));const i=a.find(c=>c.toLowerCase().startsWith(r.toLowerCase()));return i!==n?i:void 0}function $k(e,t){const n=R({}),o=R("none"),r=R(e),u=e.value?"mounted":"unmounted";let a;const s=t.value?.ownerDocument.defaultView??Zn,{state:i,dispatch:c}=Ik(u,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}}),l=y=>{if(gn){const E=new CustomEvent(y,{bubbles:!1,cancelable:!1});t.value?.dispatchEvent(E)}};ye(e,async(y,E)=>{const b=E!==y;if(await Oe(),b){const v=o.value,C=$s(t.value);y?(c("MOUNT"),l("enter"),C==="none"&&l("after-enter")):C==="none"||C==="undefined"||n.value?.display==="none"?(c("UNMOUNT"),l("leave"),l("after-leave")):E&&v!==C?(c("ANIMATION_OUT"),l("leave")):(c("UNMOUNT"),l("after-leave"))}},{immediate:!0});const d=y=>{const E=$s(t.value),b=E.includes(CSS.escape(y.animationName)),v=i.value==="mounted"?"enter":"leave";if(y.target===t.value&&b&&(l(`after-${v}`),c("ANIMATION_END"),!r.value)){const C=t.value.style.animationFillMode;t.value.style.animationFillMode="forwards",a=s?.setTimeout(()=>{t.value?.style.animationFillMode==="forwards"&&(t.value.style.animationFillMode=C)})}y.target===t.value&&E==="none"&&c("ANIMATION_END")},p=y=>{y.target===t.value&&(o.value=$s(t.value))},h=ye(t,(y,E)=>{y?(n.value=getComputedStyle(y),y.addEventListener("animationstart",p),y.addEventListener("animationcancel",d),y.addEventListener("animationend",d)):(c("ANIMATION_END"),a!==void 0&&s?.clearTimeout(a),E?.removeEventListener("animationstart",p),E?.removeEventListener("animationcancel",d),E?.removeEventListener("animationend",d))},{immediate:!0}),m=ye(i,()=>{const y=$s(t.value);o.value=i.value==="mounted"?y:"none"});return Ht(()=>{h(),m()}),{isPresent:F(()=>["mounted","unmountSuspended"].includes(i.value))}}function $s(e){return e&&getComputedStyle(e).animationName||"none"}var _n=L({name:"Presence",props:{present:{type:Boolean,required:!0},forceMount:{type:Boolean}},slots:{},setup(e,{slots:t,expose:n}){const{present:o,forceMount:r}=mt(e),u=R(),{isPresent:a}=$k(o,u);n({present:a});let s=t.default({present:a.value});s=uf(s||[]);const i=We();if(s&&s?.length>1){const c=i?.parent?.type.name?`<${i.parent.type.name} />`:"component";throw new Error([`Detected an invalid children for \`${c}\` for \`Presence\` component.`,"","Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.","You can apply a few solutions:",["Provide a single child element so that `presence` directive attach correctly.","Ensure the first child is an actual element instead of a raw text node or comment node."].map(l=>` - ${l}`).join(` +`)].join(` +`))}return()=>r.value||o.value||a.value?qe(t.default({present:a.value})[0],{ref:c=>{const l=an(c);return typeof l?.hasAttribute>"u"||(l?.hasAttribute("data-reka-popper-content-wrapper")?u.value=l.firstElementChild:u.value=l),l}}):null}});const Ha=L({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{if(!n.default)return null;const o=uf(n.default()),r=o.findIndex(i=>i.type!==bt);if(r===-1)return o;const u=o[r];delete u.props?.ref;const a=u.props?j(t,u.props):t,s=An({...u,props:{}},a);return o.length===1?s:(o[r]=s,o)}}}),Nk=["area","img","input"],we=L({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:t,slots:n}){const o=e.asChild?"template":e.as;return typeof o=="string"&&Nk.includes(o)?()=>qe(o,t):o!=="template"?()=>qe(e.as,t,{default:n.default}):()=>qe(Ha,t,{default:n.default})}});function w0(){const e=R(),t=F(()=>["#text","#comment"].includes(e.value?.$el.nodeName)?e.value?.$el.nextElementSibling:an(e));return{primitiveElement:e,currentElement:t}}const[Q3,jk]=lt("CollapsibleRoot");var Vk=L({__name:"CollapsibleRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:open"],setup(e,{expose:t,emit:n}){const o=e,u=Lt(o,"open",n,{defaultValue:o.defaultOpen,passive:o.open===void 0}),{disabled:a,unmountOnHide:s}=mt(o);return jk({contentId:"",disabled:a,open:u,unmountOnHide:s,onOpenToggle:()=>{a.value||(u.value=!u.value)}}),t({open:u}),ae(),(i,c)=>(D(),k(f(we),{as:i.as,"as-child":o.asChild,"data-state":f(u)?"open":"closed","data-disabled":f(a)?"":void 0},{default:A(()=>[P(i.$slots,"default",{open:f(u)})]),_:3},8,["as","as-child","data-state","data-disabled"]))}}),zk=Vk,Uk=L({inheritAttrs:!1,__name:"CollapsibleContent",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["contentFound"],setup(e,{emit:t}){const n=e,o=t,r=Q3();r.contentId||=sn(void 0,"reka-collapsible-content");const u=R(),{forwardRef:a,currentElement:s}=ae(),i=R(0),c=R(0),l=F(()=>r.open.value),d=R(l.value),p=R();ye(()=>[l.value,u.value?.present],async()=>{await Oe();const m=s.value;if(!m)return;p.value=p.value||{transitionDuration:m.style.transitionDuration,animationName:m.style.animationName},m.style.transitionDuration="0s",m.style.animationName="none";const g=m.getBoundingClientRect();c.value=g.height,i.value=g.width,d.value||(m.style.transitionDuration=p.value.transitionDuration,m.style.animationName=p.value.animationName)},{immediate:!0});const h=F(()=>d.value&&r.open.value);return $e(()=>{requestAnimationFrame(()=>{d.value=!1})}),At(s,"beforematch",m=>{requestAnimationFrame(()=>{r.onOpenToggle(),o("contentFound")})}),(m,g)=>(D(),k(f(_n),{ref_key:"presentRef",ref:u,present:m.forceMount||f(r).open.value,"force-mount":!0},{default:A(({present:y})=>[q(f(we),j(m.$attrs,{id:f(r).contentId,ref:f(a),"as-child":n.asChild,as:m.as,hidden:y?void 0:f(r).unmountOnHide.value?"":"until-found","data-state":h.value?void 0:f(r).open.value?"open":"closed","data-disabled":f(r).disabled?.value?"":void 0,style:{"--reka-collapsible-content-height":`${c.value}px`,"--reka-collapsible-content-width":`${i.value}px`}}),{default:A(()=>[!f(r).unmountOnHide.value||y?P(m.$slots,"default",{key:0}):Y("v-if",!0)]),_:2},1040,["id","as-child","as","hidden","data-state","data-disabled","style"])]),_:3},8,["present"]))}}),Hk=Uk,Kk=L({__name:"CollapsibleTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e;ae();const n=Q3();return(o,r)=>(D(),k(f(we),{type:o.as==="button"?"button":void 0,as:o.as,"as-child":t.asChild,"aria-controls":f(n).contentId,"aria-expanded":f(n).open.value,"data-state":f(n).open.value?"open":"closed","data-disabled":f(n).disabled?.value?"":void 0,disabled:f(n).disabled?.value,onClick:f(n).onOpenToggle},{default:A(()=>[P(o.$slots,"default")]),_:3},8,["type","as","as-child","aria-controls","aria-expanded","data-state","data-disabled","disabled","onClick"]))}}),Wk=Kk;function Gk({type:e,defaultValue:t,modelValue:n}){const o=n||t;return n!==void 0||t!==void 0?Array.isArray(o)?"multiple":"single":e??"single"}function Yk({type:e,defaultValue:t,modelValue:n}){return e||Gk({type:e,defaultValue:t,modelValue:n})}function Zk({type:e,defaultValue:t}){return t!==void 0?t:e==="single"?void 0:[]}function Xk(e,t){const n=F(()=>Yk(e)),o=Lt(e,"modelValue",t,{defaultValue:Zk(e),passive:e.modelValue===void 0,deep:!0});function r(a){if(n.value==="single")o.value=Ur(a,o.value)?void 0:a;else{const s=Array.isArray(o.value)?[...o.value||[]]:[o.value].filter(Boolean);if(q_(s,a)){const i=s.findIndex(c=>Ur(c,a));s.splice(i,1)}else s.push(a);o.value=s}}const u=F(()=>n.value==="single");return{modelValue:o,changeModelValue:r,isSingle:u}}const[df,Jk]=lt("AccordionRoot");var Qk=L({__name:"AccordionRoot",props:{collapsible:{type:Boolean,required:!1,default:!1},disabled:{type:Boolean,required:!1,default:!1},dir:{type:String,required:!1},orientation:{type:String,required:!1,default:"vertical"},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},type:{type:String,required:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,o=t,{dir:r,disabled:u,unmountOnHide:a}=mt(n),s=ju(r),{modelValue:i,changeModelValue:c,isSingle:l}=Xk(n,o),{forwardRef:d,currentElement:p}=ae();return Jk({disabled:u,direction:s,orientation:n.orientation,parentElement:p,isSingle:l,collapsible:n.collapsible,modelValue:i,changeModelValue:c,unmountOnHide:a}),(h,m)=>(D(),k(f(we),{ref:f(d),"as-child":h.asChild,as:h.as},{default:A(()=>[P(h.$slots,"default",{modelValue:f(i)})]),_:3},8,["as-child","as"]))}}),D0=Qk,A0=(function(e){return e.Open="open",e.Closed="closed",e})(A0||{});const[e1,e7]=lt("AccordionItem");var t7=L({__name:"AccordionItem",props:{disabled:{type:Boolean,required:!1},value:{type:String,required:!0},unmountOnHide:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e,{expose:t}){const n=e,o=df(),r=F(()=>o.isSingle.value?n.value===o.modelValue.value:Array.isArray(o.modelValue.value)&&o.modelValue.value.includes(n.value)),u=F(()=>o.disabled.value||n.disabled),a=F(()=>u.value?"":void 0),s=F(()=>r.value?A0.Open:A0.Closed);t({open:r,dataDisabled:a});const{currentRef:i,currentElement:c}=ae();e7({open:r,dataState:s,disabled:u,dataDisabled:a,triggerId:"",currentRef:i,currentElement:c,value:F(()=>n.value)});function l(d){const p=d.target;if(Array.from(o.parentElement.value?.querySelectorAll("[data-reka-collection-item]")??[]).findIndex(g=>g===p)===-1)return null;za(d,p,o.parentElement.value,{arrowKeyOptions:o.orientation,dir:o.direction.value,focus:!0})}return(d,p)=>(D(),k(f(zk),{"data-orientation":f(o).orientation,"data-disabled":a.value,"data-state":s.value,disabled:u.value,open:r.value,as:n.as,"as-child":n.asChild,"unmount-on-hide":n.unmountOnHide??f(o).unmountOnHide.value,onKeydown:$d(l,["up","down","left","right","home","end"])},{default:A(()=>[P(d.$slots,"default",{open:r.value})]),_:3},8,["data-orientation","data-disabled","data-state","disabled","open","as","as-child","unmount-on-hide"]))}}),t1=t7,n7=L({__name:"AccordionContent",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=df(),o=e1();return ae(),(r,u)=>(D(),k(f(Hk),{role:"region","as-child":t.asChild,as:r.as,"force-mount":t.forceMount,"aria-labelledby":f(o).triggerId,"data-state":f(o).dataState.value,"data-disabled":f(o).dataDisabled.value,"data-orientation":f(n).orientation,style:{"--reka-accordion-content-width":"var(--reka-collapsible-content-width)","--reka-accordion-content-height":"var(--reka-collapsible-content-height)"},onContentFound:u[0]||(u[0]=a=>f(n).changeModelValue(f(o).value.value))},{default:A(()=>[P(r.$slots,"default")]),_:3},8,["as-child","as","force-mount","aria-labelledby","data-state","data-disabled","data-orientation"]))}}),n1=n7,o7=L({__name:"AccordionTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=df(),o=e1();o.triggerId||=sn(void 0,"reka-accordion-trigger");function r(){const u=n.isSingle.value&&o.open.value&&!n.collapsible;o.disabled.value||u||n.changeModelValue(o.value.value)}return(u,a)=>(D(),k(f(Wk),{id:f(o).triggerId,ref:f(o).currentRef,"data-reka-collection-item":"",as:t.as,"as-child":t.asChild,"aria-disabled":f(o).disabled.value||void 0,"aria-expanded":f(o).open.value||!1,"data-disabled":f(o).dataDisabled.value,"data-orientation":f(n).orientation,"data-state":f(o).dataState.value,disabled:f(o).disabled.value,onClick:r},{default:A(()=>[P(u.$slots,"default")]),_:3},8,["id","as","as-child","aria-disabled","aria-expanded","data-disabled","data-orientation","data-state","disabled"]))}}),B0=o7;const[go,r7]=lt("DialogRoot");var u7=L({inheritAttrs:!1,__name:"DialogRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1,default:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(e,{emit:t}){const n=e,r=Lt(n,"open",t,{defaultValue:n.defaultOpen,passive:n.open===void 0}),u=R(),a=R(),{modal:s}=mt(n);return r7({open:r,modal:s,openModal:()=>{r.value=!0},onOpenChange:i=>{r.value=i},onOpenToggle:()=>{r.value=!r.value},contentId:"",titleId:"",descriptionId:"",triggerElement:u,contentElement:a}),(i,c)=>P(i.$slots,"default",{open:f(r),close:()=>r.value=!1})}}),o1=u7,a7=L({__name:"DialogClose",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e;ae();const n=go();return(o,r)=>(D(),k(f(we),j(t,{type:o.as==="button"?"button":void 0,onClick:r[0]||(r[0]=u=>f(n).onOpenChange(!1))}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["type"]))}}),r1=a7;const s7="dismissableLayer.pointerDownOutside",i7="dismissableLayer.focusOutside";function u1(e,t){if(!(t instanceof Element))return!1;const n=t.closest("[data-dismissable-layer]"),o=e.dataset.dismissableLayer===""?e:e.querySelector("[data-dismissable-layer]"),r=Array.from(e.ownerDocument.querySelectorAll("[data-dismissable-layer]"));return!!(n&&(o===n||r.indexOf(o){});return Ze(a=>{if(!gn||!ke(n))return;const s=async c=>{const l=c.target;if(!(!t?.value||!l)){if(u1(t.value,l)){r.value=!1;return}if(c.target&&!r.value){let p=function(){I3(s7,e,d)};const d={originalEvent:c};c.pointerType==="touch"?(o.removeEventListener("click",u.value),u.value=p,o.addEventListener("click",u.value,{once:!0})):p()}else o.removeEventListener("click",u.value);r.value=!1}},i=window.setTimeout(()=>{o.addEventListener("pointerdown",s)},0);a(()=>{window.clearTimeout(i),o.removeEventListener("pointerdown",s),o.removeEventListener("click",u.value)})}),{onPointerDownCapture:()=>{ke(n)&&(r.value=!0)}}}function c7(e,t,n=!0){const o=t?.value?.ownerDocument??globalThis?.document,r=R(!1);return Ze(u=>{if(!gn||!ke(n))return;const a=async s=>{if(!t?.value)return;await Oe(),await Oe();const i=s.target;!t.value||!i||u1(t.value,i)||s.target&&!r.value&&I3(i7,e,{originalEvent:s})};o.addEventListener("focusin",a),u(()=>o.removeEventListener("focusin",a))}),{onFocusCapture:()=>{ke(n)&&(r.value=!0)},onBlurCapture:()=>{ke(n)&&(r.value=!1)}}}const fn=_t({layersRoot:new Set,layersWithOutsidePointerEventsDisabled:new Set,originalBodyPointerEvents:void 0,branches:new Set});var d7=L({__name:"DismissableLayer",props:{disableOutsidePointerEvents:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","dismiss"],setup(e,{emit:t}){const n=e,o=t,{forwardRef:r,currentElement:u}=ae(),a=F(()=>u.value?.ownerDocument??globalThis.document),s=F(()=>fn.layersRoot),i=F(()=>u.value?Array.from(s.value).indexOf(u.value):-1),c=F(()=>fn.layersWithOutsidePointerEventsDisabled.size>0),l=F(()=>{const h=Array.from(s.value),[m]=[...fn.layersWithOutsidePointerEventsDisabled].slice(-1),g=h.indexOf(m);return i.value>=g}),d=l7(async h=>{const m=[...fn.branches].some(g=>g?.contains(h.target));!l.value||m||(o("pointerDownOutside",h),o("interactOutside",h),await Oe(),h.defaultPrevented||o("dismiss"))},u),p=c7(h=>{[...fn.branches].some(g=>g?.contains(h.target))||(o("focusOutside",h),o("interactOutside",h),h.defaultPrevented||o("dismiss"))},u);return sf("Escape",h=>{i.value===s.value.size-1&&(o("escapeKeyDown",h),h.defaultPrevented||o("dismiss"))}),Ze(h=>{u.value&&(n.disableOutsidePointerEvents&&(fn.layersWithOutsidePointerEventsDisabled.size===0&&(fn.originalBodyPointerEvents=a.value.body.style.pointerEvents,a.value.body.style.pointerEvents="none"),fn.layersWithOutsidePointerEventsDisabled.add(u.value)),s.value.add(u.value),h(()=>{n.disableOutsidePointerEvents&&fn.layersWithOutsidePointerEventsDisabled.size===1&&!yl(fn.originalBodyPointerEvents)&&(a.value.body.style.pointerEvents=fn.originalBodyPointerEvents)}))}),Ze(h=>{h(()=>{u.value&&(s.value.delete(u.value),fn.layersWithOutsidePointerEventsDisabled.delete(u.value))})}),(h,m)=>(D(),k(f(we),{ref:f(r),"as-child":h.asChild,as:h.as,"data-dismissable-layer":"",style:mn({pointerEvents:c.value?l.value?"auto":"none":void 0}),onFocusCapture:f(p).onFocusCapture,onBlurCapture:f(p).onBlurCapture,onPointerdownCapture:f(d).onPointerDownCapture},{default:A(()=>[P(h.$slots,"default")]),_:3},8,["as-child","as","style","onFocusCapture","onBlurCapture","onPointerdownCapture"]))}}),Vu=d7,f7=L({__name:"DismissableLayerBranch",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{forwardRef:n,currentElement:o}=ae();return $e(()=>{fn.branches.add(o.value)}),Ht(()=>{fn.branches.delete(o.value)}),(r,u)=>(D(),k(f(we),j({ref:f(n)},t),{default:A(()=>[P(r.$slots,"default")]),_:3},16))}}),p7=f7;const h7=K_(()=>R([]));function m7(){const e=h7();return{add(t){const n=e.value[0];t!==n&&n?.pause(),e.value=o4(e.value,t),e.value.unshift(t)},remove(t){e.value=o4(e.value,t),e.value[0]?.resume()}}}function o4(e,t){const n=[...e],o=n.indexOf(t);return o!==-1&&n.splice(o,1),n}const dc="focusScope.autoFocusOnMount",fc="focusScope.autoFocusOnUnmount",r4={bubbles:!1,cancelable:!0};function si(e,{select:t=!1}={}){const n=dt();for(const o of e)if(Zo(o,{select:t}),dt()!==n)return!0}function g7(e){const t=ff(e),n=u4(t,e),o=u4(t.reverse(),e);return[n,o]}function ff(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function u4(e,t){for(const n of e)if(!v7(n,{upTo:t}))return n}function v7(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function y7(e){return e instanceof HTMLInputElement&&"select"in e}function Zo(e,{select:t=!1}={}){if(e&&e.focus){const n=dt();e.focus({preventScroll:!0}),e!==n&&y7(e)&&t&&e.select()}}var b7=L({__name:"FocusScope",props:{loop:{type:Boolean,required:!1,default:!1},trapped:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["mountAutoFocus","unmountAutoFocus"],setup(e,{emit:t}){const n=e,o=t,{currentRef:r,currentElement:u}=ae(),a=R(null),s=m7(),i=_t({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});Ze(l=>{if(!gn)return;const d=u.value;if(!n.trapped)return;function p(y){if(i.paused||!d)return;const E=y.target;d.contains(E)?a.value=E:Zo(a.value,{select:!0})}function h(y){if(i.paused||!d)return;const E=y.relatedTarget;E!==null&&(d.contains(E)||Zo(a.value,{select:!0}))}function m(y){const E=a.value;if(E===null||!y.some(C=>C.removedNodes.length>0))return;d.contains(E)||Zo(d)}document.addEventListener("focusin",p),document.addEventListener("focusout",h);const g=new MutationObserver(m);d&&g.observe(d,{childList:!0,subtree:!0}),l(()=>{document.removeEventListener("focusin",p),document.removeEventListener("focusout",h),g.disconnect()})}),Ze(async l=>{const d=u.value;if(await Oe(),!d)return;s.add(i);const p=dt();if(!d.contains(p)){const m=new CustomEvent(dc,r4);d.addEventListener(dc,g=>o("mountAutoFocus",g)),d.dispatchEvent(m),m.defaultPrevented||(si(ff(d),{select:!0}),dt()===p&&Zo(d))}l(()=>{d.removeEventListener(dc,y=>o("mountAutoFocus",y));const m=new CustomEvent(fc,r4),g=y=>{o("unmountAutoFocus",y)};d.addEventListener(fc,g),d.dispatchEvent(m),setTimeout(()=>{m.defaultPrevented||Zo(p??document.body,{select:!0}),d.removeEventListener(fc,g),s.remove(i)},0)})});function c(l){if(!n.loop&&!n.trapped||i.paused)return;const d=l.key==="Tab"&&!l.altKey&&!l.ctrlKey&&!l.metaKey,p=dt();if(d&&p){const h=l.currentTarget,[m,g]=g7(h);m&&g?!l.shiftKey&&p===g?(l.preventDefault(),n.loop&&Zo(m,{select:!0})):l.shiftKey&&p===m&&(l.preventDefault(),n.loop&&Zo(g,{select:!0})):p===h&&l.preventDefault()}}return(l,d)=>(D(),k(f(we),{ref_key:"currentRef",ref:r,tabindex:"-1","as-child":l.asChild,as:l.as,onKeydown:c},{default:A(()=>[P(l.$slots,"default")]),_:3},8,["as-child","as"]))}}),pf=b7;const E7="menu.itemSelect",_0=["Enter"," "],C7=["ArrowDown","PageUp","Home"],a1=["ArrowUp","PageDown","End"],x7=[...C7,...a1],w7={ltr:[..._0,"ArrowRight"],rtl:[..._0,"ArrowLeft"]},D7={ltr:["ArrowLeft"],rtl:["ArrowRight"]};function hf(e){return e?"open":"closed"}function Pi(e){return e==="indeterminate"}function mf(e){return Pi(e)?"indeterminate":e?"checked":"unchecked"}function A7(e){const t=dt();for(const n of e)if(n===t||(n.focus(),dt()!==t))return}function B7(e,t){const{x:n,y:o}=e;let r=!1;for(let u=0,a=t.length-1;uo!=l>o&&n<(c-s)*(o-i)/(l-i)+s&&(r=!r)}return r}function _7(e,t){if(!t)return!1;const n={x:e.clientX,y:e.clientY};return B7(n,t)}function Su(e){return e.pointerType==="mouse"}var k7=L({__name:"DialogContentImpl",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=go(),{forwardRef:u,currentElement:a}=ae();return r.titleId||=sn(void 0,"reka-dialog-title"),r.descriptionId||=sn(void 0,"reka-dialog-description"),$e(()=>{r.contentElement=a,dt()!==document.body&&(r.triggerElement.value=dt())}),(s,i)=>(D(),k(f(pf),{"as-child":"",loop:"",trapped:n.trapFocus,onMountAutoFocus:i[5]||(i[5]=c=>o("openAutoFocus",c)),onUnmountAutoFocus:i[6]||(i[6]=c=>o("closeAutoFocus",c))},{default:A(()=>[q(f(Vu),j({id:f(r).contentId,ref:f(u),as:s.as,"as-child":s.asChild,"disable-outside-pointer-events":s.disableOutsidePointerEvents,role:"dialog","aria-describedby":f(r).descriptionId,"aria-labelledby":f(r).titleId,"data-state":f(hf)(f(r).open.value)},s.$attrs,{onDismiss:i[0]||(i[0]=c=>f(r).onOpenChange(!1)),onEscapeKeyDown:i[1]||(i[1]=c=>o("escapeKeyDown",c)),onFocusOutside:i[2]||(i[2]=c=>o("focusOutside",c)),onInteractOutside:i[3]||(i[3]=c=>o("interactOutside",c)),onPointerDownOutside:i[4]||(i[4]=c=>o("pointerDownOutside",c))}),{default:A(()=>[P(s.$slots,"default")]),_:3},16,["id","as","as-child","disable-outside-pointer-events","aria-describedby","aria-labelledby","data-state"])]),_:3},8,["trapped"]))}}),s1=k7,S7=L({__name:"DialogContentModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=go(),u=Xn(o),{forwardRef:a,currentElement:s}=ae();return cf(s),(i,c)=>(D(),k(s1,j({...n,...f(u)},{ref:f(a),"trap-focus":f(r).open.value,"disable-outside-pointer-events":!0,onCloseAutoFocus:c[0]||(c[0]=l=>{l.defaultPrevented||(l.preventDefault(),f(r).triggerElement.value?.focus())}),onPointerDownOutside:c[1]||(c[1]=l=>{const d=l.detail.originalEvent,p=d.button===0&&d.ctrlKey===!0;(d.button===2||p)&&l.preventDefault()}),onFocusOutside:c[2]||(c[2]=l=>{l.preventDefault()})}),{default:A(()=>[P(i.$slots,"default")]),_:3},16,["trap-focus"]))}}),T7=S7,F7=L({__name:"DialogContentNonModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,r=Xn(t);ae();const u=go(),a=R(!1),s=R(!1);return(i,c)=>(D(),k(s1,j({...n,...f(r)},{"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:c[0]||(c[0]=l=>{l.defaultPrevented||(a.value||f(u).triggerElement.value?.focus(),l.preventDefault()),a.value=!1,s.value=!1}),onInteractOutside:c[1]||(c[1]=l=>{l.defaultPrevented||(a.value=!0,l.detail.originalEvent.type==="pointerdown"&&(s.value=!0));const d=l.target;f(u).triggerElement.value?.contains(d)&&l.preventDefault(),l.detail.originalEvent.type==="focusin"&&s.value&&l.preventDefault()})}),{default:A(()=>[P(i.$slots,"default")]),_:3},16))}}),P7=F7,M7=L({__name:"DialogContent",props:{forceMount:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=go(),u=Xn(o),{forwardRef:a}=ae();return(s,i)=>(D(),k(f(_n),{present:s.forceMount||f(r).open.value},{default:A(()=>[f(r).modal.value?(D(),k(T7,j({key:0,ref:f(a)},{...n,...f(u),...s.$attrs}),{default:A(()=>[P(s.$slots,"default")]),_:3},16)):(D(),k(P7,j({key:1,ref:f(a)},{...n,...f(u),...s.$attrs}),{default:A(()=>[P(s.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),i1=M7,O7=L({__name:"DialogDescription",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"p"}},setup(e){const t=e;ae();const n=go();return(o,r)=>(D(),k(f(we),j(t,{id:f(n).descriptionId}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["id"]))}}),bu=O7,I7=L({__name:"DialogOverlayImpl",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=go();return lf(!0),ae(),(n,o)=>(D(),k(f(we),{as:n.as,"as-child":n.asChild,"data-state":f(t).open.value?"open":"closed",style:{"pointer-events":"auto"}},{default:A(()=>[P(n.$slots,"default")]),_:3},8,["as","as-child","data-state"]))}}),R7=I7,L7=L({__name:"DialogOverlay",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=go(),{forwardRef:n}=ae();return(o,r)=>f(t)?.modal.value?(D(),k(f(_n),{key:0,present:o.forceMount||f(t).open.value},{default:A(()=>[q(R7,j(o.$attrs,{ref:f(n),as:o.as,"as-child":o.asChild}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["as","as-child"])]),_:3},8,["present"])):Y("v-if",!0)}}),k0=L7,q7=L({__name:"Teleport",props:{to:{type:null,required:!1,default:"body"},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=H3();return(n,o)=>f(t)||n.forceMount?(D(),k(os,{key:0,to:n.to,disabled:n.disabled,defer:n.defer},[P(n.$slots,"default")],8,["to","disabled","defer"])):Y("v-if",!0)}}),zu=q7,$7=L({__name:"DialogPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(zu),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),l1=$7,N7=L({__name:"DialogTitle",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"h2"}},setup(e){const t=e,n=go();return ae(),(o,r)=>(D(),k(f(we),j(t,{id:f(n).titleId}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["id"]))}}),Eu=N7,j7=L({__name:"DialogTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=go(),{forwardRef:o,currentElement:r}=ae();return n.contentId||=sn(void 0,"reka-dialog-content"),$e(()=>{n.triggerElement.value=r.value}),(u,a)=>(D(),k(f(we),j(t,{ref:f(o),type:u.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":f(n).open.value||!1,"aria-controls":f(n).open.value?f(n).contentId:void 0,"data-state":f(n).open.value?"open":"closed",onClick:f(n).onOpenToggle}),{default:A(()=>[P(u.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","onClick"]))}}),c1=j7;const a4="data-reka-collection-item";function vo(e={}){const{key:t="",isProvider:n=!1}=e,o=`${t}CollectionProvider`;let r;n?(r={collectionRef:R(),itemMap:R(new Map)},Pt(o,r)):r=Ue(o);const u=(l=!1)=>{const d=r.collectionRef.value;if(!d)return[];const p=Array.from(d.querySelectorAll(`[${a4}]`)),m=Array.from(r.itemMap.value.values()).sort((g,y)=>p.indexOf(g.ref)-p.indexOf(y.ref));return l?m:m.filter(g=>g.ref.dataset.disabled!=="")},a=L({name:"CollectionSlot",inheritAttrs:!1,setup(l,{slots:d,attrs:p}){const{primitiveElement:h,currentElement:m}=w0();return ye(m,()=>{r.collectionRef.value=m.value}),()=>qe(Ha,{ref:h,...p},d)}}),s=L({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(l,{slots:d,attrs:p}){const{primitiveElement:h,currentElement:m}=w0();return Ze(g=>{if(m.value){const y=_d(m.value);r.itemMap.value.set(y,{ref:m.value,value:l.value}),g(()=>r.itemMap.value.delete(y))}}),()=>qe(Ha,{...p,[a4]:"",ref:h},d)}}),i=F(()=>Array.from(r.itemMap.value.values())),c=F(()=>r.itemMap.value.size);return{getItems:u,reactiveItems:i,itemMapSize:c,CollectionSlot:a,CollectionItem:s}}var V7=L({__name:"VisuallyHidden",props:{feature:{type:String,required:!1,default:"focusable"},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){return(t,n)=>(D(),k(f(we),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature==="focusable"?"true":void 0,"data-hidden":t.feature==="fully-hidden"?"":void 0,tabindex:t.feature==="fully-hidden"?"-1":void 0,style:{position:"absolute",border:0,width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",wordWrap:"normal",top:"-1px",left:"-1px"}},{default:A(()=>[P(t.$slots,"default")]),_:3},8,["as","as-child","aria-hidden","data-hidden","tabindex"]))}}),Yr=V7;const z7="rovingFocusGroup.onEntryFocus",U7={bubbles:!1,cancelable:!0},H7={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function K7(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function nH(e,t,n){const o=K7(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(o))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(o)))return H7[o]}function W7(e,t=!1){const n=dt();for(const o of e)if(o===n||(o.focus({preventScroll:t}),dt()!==n))return}function oH(e,t){return e.map((n,o)=>e[(t+o)%e.length])}const[d1,G7]=lt("PopperRoot");var Y7=L({inheritAttrs:!1,__name:"PopperRoot",setup(e){const t=R();return G7({anchor:t,onAnchorChange:n=>t.value=n}),(n,o)=>P(n.$slots,"default")}}),cs=Y7,Z7=L({__name:"PopperAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{forwardRef:n,currentElement:o}=ae(),r=d1();return Gg(()=>{r.onAnchorChange(t.reference??o.value)}),(u,a)=>(D(),k(f(we),{ref:f(n),as:u.as,"as-child":u.asChild},{default:A(()=>[P(u.$slots,"default")]),_:3},8,["as","as-child"]))}}),ds=Z7;const X7={key:0,d:"M0 0L6 6L12 0"},J7={key:1,d:"M0 0L4.58579 4.58579C5.36683 5.36683 6.63316 5.36684 7.41421 4.58579L12 0"};var Q7=L({__name:"Arrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(we),j(t,{width:n.width,height:n.height,viewBox:n.asChild?void 0:"0 0 12 6",preserveAspectRatio:n.asChild?void 0:"none"}),{default:A(()=>[P(n.$slots,"default",{},()=>[n.rounded?(D(),re("path",J7)):(D(),re("path",X7))])]),_:3},16,["width","height","viewBox","preserveAspectRatio"]))}}),eS=Q7;function tS(e){return e!==null}function nS(e){return{name:"transformOrigin",options:e,fn(t){const{placement:n,rects:o,middlewareData:r}=t,a=r.arrow?.centerOffset!==0,s=a?0:e.arrowWidth,i=a?0:e.arrowHeight,[c,l]=S0(n),d={start:"0%",center:"50%",end:"100%"}[l],p=(r.arrow?.x??0)+s/2,h=(r.arrow?.y??0)+i/2;let m="",g="";return c==="bottom"?(m=a?d:`${p}px`,g=`${-i}px`):c==="top"?(m=a?d:`${p}px`,g=`${o.floating.height+i}px`):c==="right"?(m=`${-i}px`,g=a?d:`${h}px`):c==="left"&&(m=`${o.floating.width+i}px`,g=a?d:`${h}px`),{data:{x:m,y:g}}}}}function S0(e){const[t,n="center"]=e.split("-");return[t,n]}const oS=["top","right","bottom","left"],dr=Math.min,Cn=Math.max,Mi=Math.round,Ns=Math.floor,lo=e=>({x:e,y:e}),rS={left:"right",right:"left",bottom:"top",top:"bottom"};function T0(e,t,n){return Cn(e,dr(t,n))}function Io(e,t){return typeof e=="function"?e(t):e}function Ro(e){return e.split("-")[0]}function Uu(e){return e.split("-")[1]}function gf(e){return e==="x"?"y":"x"}function vf(e){return e==="y"?"height":"width"}function so(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function yf(e){return gf(so(e))}function uS(e,t,n){n===void 0&&(n=!1);const o=Uu(e),r=yf(e),u=vf(r);let a=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[u]>t.floating[u]&&(a=Oi(a)),[a,Oi(a)]}function aS(e){const t=Oi(e);return[F0(e),t,F0(t)]}function F0(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const s4=["left","right"],i4=["right","left"],sS=["top","bottom"],iS=["bottom","top"];function lS(e,t,n){switch(e){case"top":case"bottom":return n?t?i4:s4:t?s4:i4;case"left":case"right":return t?sS:iS;default:return[]}}function cS(e,t,n,o){const r=Uu(e);let u=lS(Ro(e),n==="start",o);return r&&(u=u.map(a=>a+"-"+r),t&&(u=u.concat(u.map(F0)))),u}function Oi(e){const t=Ro(e);return rS[t]+e.slice(t.length)}function dS(e){return{top:0,right:0,bottom:0,left:0,...e}}function f1(e){return typeof e!="number"?dS(e):{top:e,right:e,bottom:e,left:e}}function Ii(e){const{x:t,y:n,width:o,height:r}=e;return{width:o,height:r,top:n,left:t,right:t+o,bottom:n+r,x:t,y:n}}function l4(e,t,n){let{reference:o,floating:r}=e;const u=so(t),a=yf(t),s=vf(a),i=Ro(t),c=u==="y",l=o.x+o.width/2-r.width/2,d=o.y+o.height/2-r.height/2,p=o[s]/2-r[s]/2;let h;switch(i){case"top":h={x:l,y:o.y-r.height};break;case"bottom":h={x:l,y:o.y+o.height};break;case"right":h={x:o.x+o.width,y:d};break;case"left":h={x:o.x-r.width,y:d};break;default:h={x:o.x,y:o.y}}switch(Uu(t)){case"start":h[a]-=p*(n&&c?-1:1);break;case"end":h[a]+=p*(n&&c?-1:1);break}return h}async function fS(e,t){var n;t===void 0&&(t={});const{x:o,y:r,platform:u,rects:a,elements:s,strategy:i}=e,{boundary:c="clippingAncestors",rootBoundary:l="viewport",elementContext:d="floating",altBoundary:p=!1,padding:h=0}=Io(t,e),m=f1(h),y=s[p?d==="floating"?"reference":"floating":d],E=Ii(await u.getClippingRect({element:(n=await(u.isElement==null?void 0:u.isElement(y)))==null||n?y:y.contextElement||await(u.getDocumentElement==null?void 0:u.getDocumentElement(s.floating)),boundary:c,rootBoundary:l,strategy:i})),b=d==="floating"?{x:o,y:r,width:a.floating.width,height:a.floating.height}:a.reference,v=await(u.getOffsetParent==null?void 0:u.getOffsetParent(s.floating)),C=await(u.isElement==null?void 0:u.isElement(v))?await(u.getScale==null?void 0:u.getScale(v))||{x:1,y:1}:{x:1,y:1},w=Ii(u.convertOffsetParentRelativeRectToViewportRelativeRect?await u.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:b,offsetParent:v,strategy:i}):b);return{top:(E.top-w.top+m.top)/C.y,bottom:(w.bottom-E.bottom+m.bottom)/C.y,left:(E.left-w.left+m.left)/C.x,right:(w.right-E.right+m.right)/C.x}}const pS=50,hS=async(e,t,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:u=[],platform:a}=n,s=a.detectOverflow?a:{...a,detectOverflow:fS},i=await(a.isRTL==null?void 0:a.isRTL(t));let c=await a.getElementRects({reference:e,floating:t,strategy:r}),{x:l,y:d}=l4(c,o,i),p=o,h=0;const m={};for(let g=0;g({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:r,rects:u,platform:a,elements:s,middlewareData:i}=t,{element:c,padding:l=0}=Io(e,t)||{};if(c==null)return{};const d=f1(l),p={x:n,y:o},h=yf(r),m=vf(h),g=await a.getDimensions(c),y=h==="y",E=y?"top":"left",b=y?"bottom":"right",v=y?"clientHeight":"clientWidth",C=u.reference[m]+u.reference[h]-p[h]-u.floating[m],w=p[h]-u.reference[h],B=await(a.getOffsetParent==null?void 0:a.getOffsetParent(c));let x=B?B[v]:0;(!x||!await(a.isElement==null?void 0:a.isElement(B)))&&(x=s.floating[v]||u.floating[m]);const _=C/2-w/2,S=x/2-g[m]/2-1,O=dr(d[E],S),H=dr(d[b],S),N=O,J=x-g[m]-H,G=x/2-g[m]/2+_,$=T0(N,G,J),I=!i.arrow&&Uu(r)!=null&&G!==$&&u.reference[m]/2-(GG<=0)){var H,N;const G=(((H=u.flip)==null?void 0:H.index)||0)+1,$=x[G];if($&&(!(d==="alignment"?b!==so($):!1)||O.every(K=>so(K.placement)===b?K.overflows[0]>0:!0)))return{data:{index:G,overflows:O},reset:{placement:$}};let I=(N=O.filter(W=>W.overflows[0]<=0).sort((W,K)=>W.overflows[1]-K.overflows[1])[0])==null?void 0:N.placement;if(!I)switch(h){case"bestFit":{var J;const W=(J=O.filter(K=>{if(B){const de=so(K.placement);return de===b||de==="y"}return!0}).map(K=>[K.placement,K.overflows.filter(de=>de>0).reduce((de,le)=>de+le,0)]).sort((K,de)=>K[1]-de[1])[0])==null?void 0:J[0];W&&(I=W);break}case"initialPlacement":I=s;break}if(r!==I)return{reset:{placement:I}}}return{}}}};function c4(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function d4(e){return oS.some(t=>e[t]>=0)}const vS=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:o}=t,{strategy:r="referenceHidden",...u}=Io(e,t);switch(r){case"referenceHidden":{const a=await o.detectOverflow(t,{...u,elementContext:"reference"}),s=c4(a,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:d4(s)}}}case"escaped":{const a=await o.detectOverflow(t,{...u,altBoundary:!0}),s=c4(a,n.floating);return{data:{escapedOffsets:s,escaped:d4(s)}}}default:return{}}}}},p1=new Set(["left","top"]);async function yS(e,t){const{placement:n,platform:o,elements:r}=e,u=await(o.isRTL==null?void 0:o.isRTL(r.floating)),a=Ro(n),s=Uu(n),i=so(n)==="y",c=p1.has(a)?-1:1,l=u&&i?-1:1,d=Io(t,e);let{mainAxis:p,crossAxis:h,alignmentAxis:m}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m=="number"&&(h=s==="end"?m*-1:m),i?{x:h*l,y:p*c}:{x:p*c,y:h*l}}const bS=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:r,y:u,placement:a,middlewareData:s}=t,i=await yS(t,e);return a===((n=s.offset)==null?void 0:n.placement)&&(o=s.arrow)!=null&&o.alignmentOffset?{}:{x:r+i.x,y:u+i.y,data:{...i,placement:a}}}}},ES=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:r,platform:u}=t,{mainAxis:a=!0,crossAxis:s=!1,limiter:i={fn:E=>{let{x:b,y:v}=E;return{x:b,y:v}}},...c}=Io(e,t),l={x:n,y:o},d=await u.detectOverflow(t,c),p=so(Ro(r)),h=gf(p);let m=l[h],g=l[p];if(a){const E=h==="y"?"top":"left",b=h==="y"?"bottom":"right",v=m+d[E],C=m-d[b];m=T0(v,m,C)}if(s){const E=p==="y"?"top":"left",b=p==="y"?"bottom":"right",v=g+d[E],C=g-d[b];g=T0(v,g,C)}const y=i.fn({...t,[h]:m,[p]:g});return{...y,data:{x:y.x-n,y:y.y-o,enabled:{[h]:a,[p]:s}}}}}},CS=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:o,placement:r,rects:u,middlewareData:a}=t,{offset:s=0,mainAxis:i=!0,crossAxis:c=!0}=Io(e,t),l={x:n,y:o},d=so(r),p=gf(d);let h=l[p],m=l[d];const g=Io(s,t),y=typeof g=="number"?{mainAxis:g,crossAxis:0}:{mainAxis:0,crossAxis:0,...g};if(i){const v=p==="y"?"height":"width",C=u.reference[p]-u.floating[v]+y.mainAxis,w=u.reference[p]+u.reference[v]-y.mainAxis;hw&&(h=w)}if(c){var E,b;const v=p==="y"?"width":"height",C=p1.has(Ro(r)),w=u.reference[d]-u.floating[v]+(C&&((E=a.offset)==null?void 0:E[d])||0)+(C?0:y.crossAxis),B=u.reference[d]+u.reference[v]+(C?0:((b=a.offset)==null?void 0:b[d])||0)-(C?y.crossAxis:0);mB&&(m=B)}return{[p]:h,[d]:m}}}},xS=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,o;const{placement:r,rects:u,platform:a,elements:s}=t,{apply:i=()=>{},...c}=Io(e,t),l=await a.detectOverflow(t,c),d=Ro(r),p=Uu(r),h=so(r)==="y",{width:m,height:g}=u.floating;let y,E;d==="top"||d==="bottom"?(y=d,E=p===(await(a.isRTL==null?void 0:a.isRTL(s.floating))?"start":"end")?"left":"right"):(E=d,y=p==="end"?"top":"bottom");const b=g-l.top-l.bottom,v=m-l.left-l.right,C=dr(g-l[y],b),w=dr(m-l[E],v),B=!t.middlewareData.shift;let x=C,_=w;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(_=v),(o=t.middlewareData.shift)!=null&&o.enabled.y&&(x=b),B&&!p){const O=Cn(l.left,0),H=Cn(l.right,0),N=Cn(l.top,0),J=Cn(l.bottom,0);h?_=m-2*(O!==0||H!==0?O+H:Cn(l.left,l.right)):x=g-2*(N!==0||J!==0?N+J:Cn(l.top,l.bottom))}await i({...t,availableWidth:_,availableHeight:x});const S=await a.getDimensions(s.floating);return m!==S.width||g!==S.height?{reset:{rects:!0}}:{}}}};function Cl(){return typeof window<"u"}function Zr(e){return bf(e)?(e.nodeName||"").toLowerCase():"#document"}function wn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function yo(e){var t;return(t=(bf(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function bf(e){return Cl()?e instanceof Node||e instanceof wn(e).Node:!1}function Wn(e){return Cl()?e instanceof Element||e instanceof wn(e).Element:!1}function jo(e){return Cl()?e instanceof HTMLElement||e instanceof wn(e).HTMLElement:!1}function f4(e){return!Cl()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof wn(e).ShadowRoot}function fs(e){const{overflow:t,overflowX:n,overflowY:o,display:r}=Gn(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&r!=="inline"&&r!=="contents"}function wS(e){return/^(table|td|th)$/.test(Zr(e))}function xl(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const DS=/transform|translate|scale|rotate|perspective|filter/,AS=/paint|layout|strict|content/,wr=e=>!!e&&e!=="none";let pc;function Ef(e){const t=Wn(e)?Gn(e):e;return wr(t.transform)||wr(t.translate)||wr(t.scale)||wr(t.rotate)||wr(t.perspective)||!Cf()&&(wr(t.backdropFilter)||wr(t.filter))||DS.test(t.willChange||"")||AS.test(t.contain||"")}function BS(e){let t=fr(e);for(;jo(t)&&!Tu(t);){if(Ef(t))return t;if(xl(t))return null;t=fr(t)}return null}function Cf(){return pc==null&&(pc=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),pc}function Tu(e){return/^(html|body|#document)$/.test(Zr(e))}function Gn(e){return wn(e).getComputedStyle(e)}function wl(e){return Wn(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function fr(e){if(Zr(e)==="html")return e;const t=e.assignedSlot||e.parentNode||f4(e)&&e.host||yo(e);return f4(t)?t.host:t}function h1(e){const t=fr(e);return Tu(t)?e.ownerDocument?e.ownerDocument.body:e.body:jo(t)&&fs(t)?t:h1(t)}function Ka(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const r=h1(e),u=r===((o=e.ownerDocument)==null?void 0:o.body),a=wn(r);if(u){const s=P0(a);return t.concat(a,a.visualViewport||[],fs(r)?r:[],s&&n?Ka(s):[])}else return t.concat(r,Ka(r,[],n))}function P0(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function m1(e){const t=Gn(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const r=jo(e),u=r?e.offsetWidth:n,a=r?e.offsetHeight:o,s=Mi(n)!==u||Mi(o)!==a;return s&&(n=u,o=a),{width:n,height:o,$:s}}function xf(e){return Wn(e)?e:e.contextElement}function Cu(e){const t=xf(e);if(!jo(t))return lo(1);const n=t.getBoundingClientRect(),{width:o,height:r,$:u}=m1(t);let a=(u?Mi(n.width):n.width)/o,s=(u?Mi(n.height):n.height)/r;return(!a||!Number.isFinite(a))&&(a=1),(!s||!Number.isFinite(s))&&(s=1),{x:a,y:s}}const _S=lo(0);function g1(e){const t=wn(e);return!Cf()||!t.visualViewport?_S:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function kS(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==wn(e)?!1:t}function Wr(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const r=e.getBoundingClientRect(),u=xf(e);let a=lo(1);t&&(o?Wn(o)&&(a=Cu(o)):a=Cu(e));const s=kS(u,n,o)?g1(u):lo(0);let i=(r.left+s.x)/a.x,c=(r.top+s.y)/a.y,l=r.width/a.x,d=r.height/a.y;if(u){const p=wn(u),h=o&&Wn(o)?wn(o):o;let m=p,g=P0(m);for(;g&&o&&h!==m;){const y=Cu(g),E=g.getBoundingClientRect(),b=Gn(g),v=E.left+(g.clientLeft+parseFloat(b.paddingLeft))*y.x,C=E.top+(g.clientTop+parseFloat(b.paddingTop))*y.y;i*=y.x,c*=y.y,l*=y.x,d*=y.y,i+=v,c+=C,m=wn(g),g=P0(m)}}return Ii({width:l,height:d,x:i,y:c})}function Dl(e,t){const n=wl(e).scrollLeft;return t?t.left+n:Wr(yo(e)).left+n}function v1(e,t){const n=e.getBoundingClientRect(),o=n.left+t.scrollLeft-Dl(e,n),r=n.top+t.scrollTop;return{x:o,y:r}}function SS(e){let{elements:t,rect:n,offsetParent:o,strategy:r}=e;const u=r==="fixed",a=yo(o),s=t?xl(t.floating):!1;if(o===a||s&&u)return n;let i={scrollLeft:0,scrollTop:0},c=lo(1);const l=lo(0),d=jo(o);if((d||!d&&!u)&&((Zr(o)!=="body"||fs(a))&&(i=wl(o)),d)){const h=Wr(o);c=Cu(o),l.x=h.x+o.clientLeft,l.y=h.y+o.clientTop}const p=a&&!d&&!u?v1(a,i):lo(0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-i.scrollLeft*c.x+l.x+p.x,y:n.y*c.y-i.scrollTop*c.y+l.y+p.y}}function TS(e){return Array.from(e.getClientRects())}function FS(e){const t=yo(e),n=wl(e),o=e.ownerDocument.body,r=Cn(t.scrollWidth,t.clientWidth,o.scrollWidth,o.clientWidth),u=Cn(t.scrollHeight,t.clientHeight,o.scrollHeight,o.clientHeight);let a=-n.scrollLeft+Dl(e);const s=-n.scrollTop;return Gn(o).direction==="rtl"&&(a+=Cn(t.clientWidth,o.clientWidth)-r),{width:r,height:u,x:a,y:s}}const p4=25;function PS(e,t){const n=wn(e),o=yo(e),r=n.visualViewport;let u=o.clientWidth,a=o.clientHeight,s=0,i=0;if(r){u=r.width,a=r.height;const l=Cf();(!l||l&&t==="fixed")&&(s=r.offsetLeft,i=r.offsetTop)}const c=Dl(o);if(c<=0){const l=o.ownerDocument,d=l.body,p=getComputedStyle(d),h=l.compatMode==="CSS1Compat"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,m=Math.abs(o.clientWidth-d.clientWidth-h);m<=p4&&(u-=m)}else c<=p4&&(u+=c);return{width:u,height:a,x:s,y:i}}function MS(e,t){const n=Wr(e,!0,t==="fixed"),o=n.top+e.clientTop,r=n.left+e.clientLeft,u=jo(e)?Cu(e):lo(1),a=e.clientWidth*u.x,s=e.clientHeight*u.y,i=r*u.x,c=o*u.y;return{width:a,height:s,x:i,y:c}}function h4(e,t,n){let o;if(t==="viewport")o=PS(e,n);else if(t==="document")o=FS(yo(e));else if(Wn(t))o=MS(t,n);else{const r=g1(e);o={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return Ii(o)}function y1(e,t){const n=fr(e);return n===t||!Wn(n)||Tu(n)?!1:Gn(n).position==="fixed"||y1(n,t)}function OS(e,t){const n=t.get(e);if(n)return n;let o=Ka(e,[],!1).filter(s=>Wn(s)&&Zr(s)!=="body"),r=null;const u=Gn(e).position==="fixed";let a=u?fr(e):e;for(;Wn(a)&&!Tu(a);){const s=Gn(a),i=Ef(a);!i&&s.position==="fixed"&&(r=null),(u?!i&&!r:!i&&s.position==="static"&&!!r&&(r.position==="absolute"||r.position==="fixed")||fs(a)&&!i&&y1(e,a))?o=o.filter(l=>l!==a):r=s,a=fr(a)}return t.set(e,o),o}function IS(e){let{element:t,boundary:n,rootBoundary:o,strategy:r}=e;const a=[...n==="clippingAncestors"?xl(t)?[]:OS(t,this._c):[].concat(n),o],s=h4(t,a[0],r);let i=s.top,c=s.right,l=s.bottom,d=s.left;for(let p=1;p{a(!1,1e-7)},1e3)}x===1&&!E1(c,e.getBoundingClientRect())&&a(),C=!1}try{n=new IntersectionObserver(w,{...v,root:r.ownerDocument})}catch{n=new IntersectionObserver(w,v)}n.observe(e)}return a(!0),u}function VS(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:u=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:i=!1}=o,c=xf(e),l=r||u?[...c?Ka(c):[],...t?Ka(t):[]]:[];l.forEach(E=>{r&&E.addEventListener("scroll",n,{passive:!0}),u&&E.addEventListener("resize",n)});const d=c&&s?jS(c,n):null;let p=-1,h=null;a&&(h=new ResizeObserver(E=>{let[b]=E;b&&b.target===c&&h&&t&&(h.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var v;(v=h)==null||v.observe(t)})),n()}),c&&!i&&h.observe(c),t&&h.observe(t));let m,g=i?Wr(e):null;i&&y();function y(){const E=Wr(e);g&&!E1(g,E)&&n(),g=E,m=requestAnimationFrame(y)}return n(),()=>{var E;l.forEach(b=>{r&&b.removeEventListener("scroll",n),u&&b.removeEventListener("resize",n)}),d?.(),(E=h)==null||E.disconnect(),h=null,i&&cancelAnimationFrame(m)}}const zS=bS,US=ES,g4=gS,HS=xS,KS=vS,WS=mS,GS=CS,YS=(e,t,n)=>{const o=new Map,r={platform:NS,...n},u={...r.platform,_c:o};return hS(e,t,{...r,platform:u})};function ZS(e){return e!=null&&typeof e=="object"&&"$el"in e}function M0(e){if(ZS(e)){const t=e.$el;return bf(t)&&Zr(t)==="#comment"?null:t}return e}function iu(e){return typeof e=="function"?e():f(e)}function XS(e){return{name:"arrow",options:e,fn(t){const n=M0(iu(e.element));return n==null?{}:WS({element:n,padding:e.padding}).fn(t)}}}function C1(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function v4(e,t){const n=C1(e);return Math.round(t*n)/n}function JS(e,t,n){n===void 0&&(n={});const o=n.whileElementsMounted,r=F(()=>{var x;return(x=iu(n.open))!=null?x:!0}),u=F(()=>iu(n.middleware)),a=F(()=>{var x;return(x=iu(n.placement))!=null?x:"bottom"}),s=F(()=>{var x;return(x=iu(n.strategy))!=null?x:"absolute"}),i=F(()=>{var x;return(x=iu(n.transform))!=null?x:!0}),c=F(()=>M0(e.value)),l=F(()=>M0(t.value)),d=R(0),p=R(0),h=R(s.value),m=R(a.value),g=Me({}),y=R(!1),E=F(()=>{const x={position:h.value,left:"0",top:"0"};if(!l.value)return x;const _=v4(l.value,d.value),S=v4(l.value,p.value);return i.value?{...x,transform:"translate("+_+"px, "+S+"px)",...C1(l.value)>=1.5&&{willChange:"transform"}}:{position:h.value,left:_+"px",top:S+"px"}});let b;function v(){if(c.value==null||l.value==null)return;const x=r.value;YS(c.value,l.value,{middleware:u.value,placement:a.value,strategy:s.value}).then(_=>{d.value=_.x,p.value=_.y,h.value=_.strategy,m.value=_.placement,g.value=_.middlewareData,y.value=x!==!1})}function C(){typeof b=="function"&&(b(),b=void 0)}function w(){if(C(),o===void 0){v();return}if(c.value!=null&&l.value!=null){b=o(c.value,l.value,v);return}}function B(){r.value||(y.value=!1)}return ye([u,a,s,r],v,{flush:"sync"}),ye([c,l],w,{flush:"sync"}),ye(r,B,{flush:"sync"}),ho()&&ir(C),{x:Br(d),y:Br(p),strategy:Br(h),placement:Br(m),middlewareData:Br(g),isPositioned:Br(y),floatingStyles:E,update:v}}const x1={side:"bottom",sideOffset:0,sideFlip:!0,align:"center",alignOffset:0,alignFlip:!0,arrowPadding:0,hideShiftedArrow:!0,avoidCollisions:!0,collisionBoundary:()=>[],collisionPadding:0,sticky:"partial",hideWhenDetached:!1,positionStrategy:"fixed",updatePositionStrategy:"optimized",prioritizePosition:!1},[QS,eT]=lt("PopperContent");var tT=L({inheritAttrs:!1,__name:"PopperContent",props:gv({side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},{...x1}),emits:["placed"],setup(e,{emit:t}){const n=e,o=t,r=d1(),{forwardRef:u,currentElement:a}=ae(),s=R(),i=R(),{width:c,height:l}=Ok(i),d=F(()=>n.side+(n.align!=="center"?`-${n.align}`:"")),p=F(()=>typeof n.collisionPadding=="number"?n.collisionPadding:{top:0,right:0,bottom:0,left:0,...n.collisionPadding}),h=F(()=>Array.isArray(n.collisionBoundary)?n.collisionBoundary:[n.collisionBoundary]),m=F(()=>({padding:p.value,boundary:h.value.filter(tS),altBoundary:h.value.length>0})),g=F(()=>({mainAxis:n.sideFlip,crossAxis:n.alignFlip})),y=z_(()=>[zS({mainAxis:n.sideOffset+l.value,alignmentAxis:n.alignOffset}),n.prioritizePosition&&n.avoidCollisions&&g4({...m.value,...g.value}),n.avoidCollisions&&US({mainAxis:!0,crossAxis:!!n.prioritizePosition,limiter:n.sticky==="partial"?GS():void 0,...m.value}),!n.prioritizePosition&&n.avoidCollisions&&g4({...m.value,...g.value}),HS({...m.value,apply:({elements:N,rects:J,availableWidth:G,availableHeight:$})=>{const{width:I,height:W}=J.reference,K=N.floating.style;K.setProperty("--reka-popper-available-width",`${G}px`),K.setProperty("--reka-popper-available-height",`${$}px`),K.setProperty("--reka-popper-anchor-width",`${I}px`),K.setProperty("--reka-popper-anchor-height",`${W}px`)}}),i.value&&XS({element:i.value,padding:n.arrowPadding}),nS({arrowWidth:c.value,arrowHeight:l.value}),n.hideWhenDetached&&KS({strategy:"referenceHidden",...m.value})]),E=F(()=>n.reference??r.anchor.value),{floatingStyles:b,placement:v,isPositioned:C,middlewareData:w}=JS(E,s,{strategy:n.positionStrategy,placement:d,whileElementsMounted:(...N)=>VS(...N,{layoutShift:!n.disableUpdateOnLayoutShift,animationFrame:n.updatePositionStrategy==="always"}),middleware:y}),B=F(()=>S0(v.value)[0]),x=F(()=>S0(v.value)[1]);Gg(()=>{C.value&&o("placed")});const _=F(()=>{const N=w.value.arrow?.centerOffset!==0;return n.hideShiftedArrow&&N}),S=R("");Ze(()=>{a.value&&(S.value=window.getComputedStyle(a.value).zIndex)});const O=F(()=>w.value.arrow?.x??0),H=F(()=>w.value.arrow?.y??0);return eT({placedSide:B,onArrowChange:N=>i.value=N,arrowX:O,arrowY:H,shouldHideArrow:_}),(N,J)=>(D(),re("div",{ref_key:"floatingRef",ref:s,"data-reka-popper-content-wrapper":"",style:mn({...f(b),transform:f(C)?f(b).transform:"translate(0, -200%)",minWidth:"max-content",zIndex:S.value,"--reka-popper-transform-origin":[f(w).transformOrigin?.x,f(w).transformOrigin?.y].join(" "),...f(w).hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}})},[q(f(we),j({ref:f(u)},N.$attrs,{"as-child":n.asChild,as:N.as,"data-side":B.value,"data-align":x.value,style:{animation:f(C)?void 0:"none"}}),{default:A(()=>[P(N.$slots,"default")]),_:3},16,["as-child","as","data-side","data-align","style"])],4))}}),Al=tT;const nT={top:"bottom",right:"left",bottom:"top",left:"right"};var oT=L({inheritAttrs:!1,__name:"PopperArrow",props:{width:{type:Number,required:!1},height:{type:Number,required:!1},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const{forwardRef:t}=ae(),n=QS(),o=F(()=>nT[n.placedSide.value]);return(r,u)=>(D(),re("span",{ref:a=>{f(n).onArrowChange(a)},style:mn({position:"absolute",left:f(n).arrowX?.value?`${f(n).arrowX?.value}px`:void 0,top:f(n).arrowY?.value?`${f(n).arrowY?.value}px`:void 0,[o.value]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[f(n).placedSide.value],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[f(n).placedSide.value],visibility:f(n).shouldHideArrow.value?"hidden":void 0})},[q(eS,j(r.$attrs,{ref:f(t),style:{display:"block"},as:r.as,"as-child":r.asChild,rounded:r.rounded,width:r.width,height:r.height}),{default:A(()=>[P(r.$slots,"default")]),_:3},16,["as","as-child","rounded","width","height"])],4))}}),Bl=oT;const[rH,rT]=lt("RovingFocusGroup");var uT=L({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(e,{expose:t,emit:n}){const o=e,r=n,{loop:u,orientation:a,dir:s}=mt(o),i=ju(s),c=Lt(o,"currentTabStopId",r,{defaultValue:o.defaultCurrentTabStopId,passive:o.currentTabStopId===void 0}),l=R(!1),d=R(!1),p=R(0),{getItems:h,CollectionSlot:m}=vo({isProvider:!0});function g(E){const b=!d.value;if(E.currentTarget&&E.target===E.currentTarget&&b&&!l.value){const v=new CustomEvent(z7,U7);if(E.currentTarget.dispatchEvent(v),r("entryFocus",v),!v.defaultPrevented){const C=h().map(S=>S.ref).filter(S=>S.dataset.disabled!==""),w=C.find(S=>S.getAttribute("data-active")===""),B=C.find(S=>S.getAttribute("data-highlighted")===""),x=C.find(S=>S.id===c.value),_=[w,B,x,...C].filter(Boolean);W7(_,o.preventScrollOnEntryFocus)}}d.value=!1}function y(){setTimeout(()=>{d.value=!1},1)}return t({getItems:h}),rT({loop:u,dir:i,orientation:a,currentTabStopId:c,onItemFocus:E=>{c.value=E},onItemShiftTab:()=>{l.value=!0},onFocusableItemAdd:()=>{p.value++},onFocusableItemRemove:()=>{p.value--}}),(E,b)=>(D(),k(f(m),null,{default:A(()=>[q(f(we),{tabindex:l.value||p.value===0?-1:0,"data-orientation":f(a),as:E.as,"as-child":E.asChild,dir:f(i),style:{outline:"none"},onMousedown:b[0]||(b[0]=v=>d.value=!0),onMouseup:y,onFocus:g,onBlur:b[1]||(b[1]=v=>l.value=!1)},{default:A(()=>[P(E.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),aT=uT,sT=L({__name:"MenuAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(ds),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),wf=sT,iT=L({__name:"MenuArrow",props:{width:{type:Number,required:!1},height:{type:Number,required:!1},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(Bl),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),w1=iT;function lT(){const e=R(!1);return $e(()=>{At("keydown",()=>{e.value=!0},{capture:!0,passive:!0}),At(["pointerdown","pointermove"],()=>{e.value=!1},{capture:!0,passive:!0})}),e}const cT=Nu(lT),[Xr,D1]=lt(["MenuRoot","MenuSub"],"MenuContext"),[Hu,dT]=lt("MenuRoot");var fT=L({__name:"MenuRoot",props:{open:{type:Boolean,required:!1,default:!1},dir:{type:String,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t,{modal:r,dir:u}=mt(n),a=ju(u),s=Lt(n,"open",o),i=R(),c=cT();return D1({open:s,onOpenChange:l=>{s.value=l},content:i,onContentChange:l=>{i.value=l}}),dT({onClose:()=>{s.value=!1},isUsingKeyboardRef:c,dir:a,modal:r}),(l,d)=>(D(),k(f(cs),null,{default:A(()=>[P(l.$slots,"default")]),_:3}))}}),A1=fT;const[ps,pT]=lt("MenuContent");var hT=L({__name:"MenuContentImpl",props:gv({loop:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},disableOutsideScroll:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},{...x1}),emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus","dismiss"],setup(e,{emit:t}){const n=e,o=t,r=Xr(),u=Hu(),{trapFocus:a,disableOutsidePointerEvents:s,loop:i}=mt(n);Y3(),lf(s.value);const c=R(""),l=R(0),d=R(0),p=R(null),h=R("right"),m=R(0),g=R(null),y=R(),{forwardRef:E,currentElement:b}=ae(),{handleTypeaheadSearch:v}=Rk(),C=R();function w($){const I=za($,C.value||dt(),b.value,{loop:i.value,arrowKeyOptions:"vertical",dir:u?.dir.value,focus:!1,attributeName:"[data-reka-collection-item]:not([data-disabled])"});I&&(C.value=I,I.scrollIntoView({block:"nearest"}))}function B(){C.value&&C.value.click()}const x=R(),_=R();ye(C,$=>{_.value&&($===void 0||$!==_.value.trigger.value)&&(_.value.onOpenChange(!1),_.value=void 0)}),ye(b,$=>{r.onContentChange($)}),Ht(()=>{window.clearTimeout(l.value)});function S($){return h.value===p.value?.side&&_7($,p.value?.area)}async function O($){o("openAutoFocus",$),!$.defaultPrevented&&($.preventDefault(),b.value?.focus({preventScroll:!0}))}function H($){if($.defaultPrevented)return;const I=$.target,W=I.closest("[data-reka-menu-content]")===$.currentTarget,K=["input","textarea"].includes(I.tagName.toLowerCase()),de=$.ctrlKey||$.altKey||$.metaKey,le=$.key.length===1,ut=za($,dt(),b.value,{loop:i.value,arrowKeyOptions:"vertical",dir:u?.dir.value,focus:!0,attributeName:"[data-reka-collection-item]:not([data-disabled])"});if(ut)return ut?.focus();if($.code==="Space")return;const Ve=y.value?.getItems()??[];if(W&&($.key==="Tab"&&$.preventDefault(),!de&&le&&!K&&v($.key,Ve)),$.target!==b.value||!x7.includes($.key))return;$.preventDefault();const ht=[...Ve.map(Dt=>Dt.ref)];a1.includes($.key)&&ht.reverse(),A7(ht)}function N($){$?.currentTarget?.contains?.($.target)||(window.clearTimeout(l.value),c.value="")}function J($){if(!Su($))return;const I=$.target,W=m.value!==$.clientX;if($?.currentTarget?.contains(I)&&W){const K=$.clientX>m.value?"right":"left";h.value=K,m.value=$.clientX}}function G($){Su($)&&x.value&&x.value.focus()}return pT({onItemEnter:$=>!!S($),onItemLeave:$=>{if(S($))return;["INPUT","TEXTAREA"].includes(dt()?.tagName||"")||b.value?.focus(),g.value=null},onTriggerLeave:$=>!!S($),searchRef:c,highlightedElement:C,onKeydownNavigation:w,onKeydownEnter:B,filterElement:x,onFilterElementChange:$=>{x.value=$},activeSubmenuContext:_,pointerGraceTimerRef:d,onPointerGraceIntentChange:$=>{p.value=$}}),($,I)=>(D(),k(f(pf),{"as-child":"",trapped:f(a),onMountAutoFocus:O,onUnmountAutoFocus:I[7]||(I[7]=W=>o("closeAutoFocus",W))},{default:A(()=>[q(f(Vu),{"as-child":"","disable-outside-pointer-events":f(s),onEscapeKeyDown:I[2]||(I[2]=W=>o("escapeKeyDown",W)),onPointerDownOutside:I[3]||(I[3]=W=>o("pointerDownOutside",W)),onFocusOutside:I[4]||(I[4]=W=>o("focusOutside",W)),onInteractOutside:I[5]||(I[5]=W=>o("interactOutside",W)),onDismiss:I[6]||(I[6]=W=>o("dismiss"))},{default:A(()=>[q(f(aT),{ref_key:"rovingFocusGroupRef",ref:y,"current-tab-stop-id":g.value,"onUpdate:currentTabStopId":I[0]||(I[0]=W=>g.value=W),"as-child":"",orientation:"vertical",dir:f(u).dir.value,loop:f(i),onEntryFocus:I[1]||(I[1]=W=>{o("entryFocus",W),f(u).isUsingKeyboardRef.value||W.preventDefault()})},{default:A(()=>[q(f(Al),{ref:f(E),role:"menu",as:$.as,"as-child":$.asChild,"aria-orientation":"vertical","data-reka-menu-content":"","data-state":f(hf)(f(r).open.value),dir:f(u).dir.value,side:$.side,"side-offset":$.sideOffset,align:$.align,"align-offset":$.alignOffset,"avoid-collisions":$.avoidCollisions,"collision-boundary":$.collisionBoundary,"collision-padding":$.collisionPadding,"arrow-padding":$.arrowPadding,"prioritize-position":$.prioritizePosition,"position-strategy":$.positionStrategy,"update-position-strategy":$.updatePositionStrategy,sticky:$.sticky,"hide-when-detached":$.hideWhenDetached,reference:$.reference,onKeydown:H,onBlur:N,onPointermove:J,onPointerenter:G},{default:A(()=>[P($.$slots,"default")]),_:3},8,["as","as-child","data-state","dir","side","side-offset","align","align-offset","avoid-collisions","collision-boundary","collision-padding","arrow-padding","prioritize-position","position-strategy","update-position-strategy","sticky","hide-when-detached","reference"])]),_:3},8,["current-tab-stop-id","dir","loop"])]),_:3},8,["disable-outside-pointer-events"])]),_:3},8,["trapped"]))}}),Df=hT,mT=L({inheritAttrs:!1,__name:"MenuItemImpl",props:{disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=ps(),{forwardRef:o,currentElement:r}=ae(),{CollectionItem:u}=vo(),a=R(!1),s=F(()=>a.value||n.highlightedElement.value===r.value);async function i(l){if(!(l.defaultPrevented||!Su(l))){if(t.disabled)n.onItemLeave(l);else if(!n.onItemEnter(l)){const p=l.currentTarget;n.highlightedElement.value=p,["INPUT","TEXTAREA"].includes(dt()?.tagName||"")||p.focus({preventScroll:!0})}}}async function c(l){await Oe(),!l.defaultPrevented&&Su(l)&&n.onItemLeave(l)}return(l,d)=>(D(),k(f(u),{value:{textValue:l.textValue}},{default:A(()=>[q(f(we),j({ref:f(o),role:"menuitem",tabindex:"-1"},l.$attrs,{as:l.as,"as-child":l.asChild,"aria-disabled":l.disabled||void 0,"data-disabled":l.disabled?"":void 0,"data-highlighted":s.value?"":void 0,onPointermove:i,onPointerleave:c,onFocus:d[0]||(d[0]=async p=>{await Oe(),!(p.defaultPrevented||l.disabled)&&(a.value=!0,f(n).highlightedElement.value=p.currentTarget)}),onBlur:d[1]||(d[1]=async p=>{await Oe(),!p.defaultPrevented&&(a.value=!1)})}),{default:A(()=>[P(l.$slots,"default")]),_:3},16,["as","as-child","aria-disabled","data-disabled","data-highlighted"])]),_:3},8,["value"]))}}),B1=mT,gT=L({__name:"MenuItem",props:{disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,o=t,{forwardRef:r,currentElement:u}=ae(),a=Hu(),s=ps(),i=R(!1);async function c(){const l=u.value;if(!n.disabled&&l){const d=new CustomEvent(E7,{bubbles:!0,cancelable:!0});o("select",d),await Oe(),d.defaultPrevented?i.value=!1:a.onClose()}}return(l,d)=>(D(),k(B1,j(n,{ref:f(r),onClick:c,onPointerdown:d[0]||(d[0]=()=>{i.value=!0}),onPointerup:d[1]||(d[1]=async p=>{await Oe(),!p.defaultPrevented&&(i.value||p.currentTarget?.click())}),onKeydown:d[2]||(d[2]=async p=>{const h=f(s).searchRef.value!=="";l.disabled||h&&p.key===" "||f(_0).includes(p.key)&&(p.currentTarget.click(),p.preventDefault())})}),{default:A(()=>[P(l.$slots,"default")]),_:3},16))}}),_l=gT;const[vT,_1]=lt(["MenuCheckboxItem","MenuRadioItem"],"MenuItemIndicatorContext");var yT=L({__name:"MenuItemIndicator",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=vT({modelValue:R(!1)});return(n,o)=>(D(),k(f(_n),{present:n.forceMount||f(Pi)(f(t).modelValue.value)||f(t).modelValue.value===!0},{default:A(()=>[q(f(we),{as:n.as,"as-child":n.asChild,"data-state":f(mf)(f(t).modelValue.value)},{default:A(()=>[P(n.$slots,"default")]),_:3},8,["as","as-child","data-state"])]),_:3},8,["present"]))}}),k1=yT,bT=L({__name:"MenuCheckboxItem",props:{modelValue:{type:[Boolean,String],required:!1,default:!1},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select","update:modelValue"],setup(e,{emit:t}){const n=e,o=t,r=No(n,["modelValue"]),u=ln(r),a=Lt(n,"modelValue",o);return _1({modelValue:a}),(s,i)=>(D(),k(_l,j({role:"menuitemcheckbox"},f(u),{"aria-checked":f(Pi)(f(a))?"mixed":f(a),"data-state":f(mf)(f(a)),onSelect:i[0]||(i[0]=async c=>{o("select",c),f(Pi)(f(a))?a.value=!0:a.value=!f(a)})}),{default:A(()=>[P(s.$slots,"default",{modelValue:f(a)})]),_:3},16,["aria-checked","data-state"]))}}),S1=bT,ET=L({__name:"MenuRootContentModal",props:{loop:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=it(n,o),u=Xr(),{forwardRef:a,currentElement:s}=ae();return cf(s),(i,c)=>(D(),k(Df,j(f(r),{ref:f(a),"trap-focus":f(u).open.value,"disable-outside-pointer-events":f(u).open.value,"disable-outside-scroll":!0,onDismiss:c[0]||(c[0]=l=>f(u).onOpenChange(!1)),onFocusOutside:c[1]||(c[1]=On(l=>o("focusOutside",l),["prevent"]))}),{default:A(()=>[P(i.$slots,"default")]),_:3},16,["trap-focus","disable-outside-pointer-events"]))}}),CT=ET,xT=L({__name:"MenuRootContentNonModal",props:{loop:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const r=it(e,t),u=Xr();return(a,s)=>(D(),k(Df,j(f(r),{"trap-focus":!1,"disable-outside-pointer-events":!1,"disable-outside-scroll":!1,onDismiss:s[0]||(s[0]=i=>f(u).onOpenChange(!1))}),{default:A(()=>[P(a.$slots,"default")]),_:3},16))}}),wT=xT,DT=L({__name:"MenuContent",props:{forceMount:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const r=it(e,t),u=Xr(),a=Hu();return(s,i)=>(D(),k(f(_n),{present:s.forceMount||f(u).open.value},{default:A(()=>[f(a).modal.value?(D(),k(CT,me(j({key:0},{...s.$attrs,...f(r)})),{default:A(()=>[P(s.$slots,"default")]),_:3},16)):(D(),k(wT,me(j({key:1},{...s.$attrs,...f(r)})),{default:A(()=>[P(s.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),T1=DT;const[AT,BT]=lt("MenuGroup");var _T=L({__name:"MenuGroup",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=sn(void 0,"reka-menu-group");return BT({id:n}),(o,r)=>(D(),k(f(we),j({role:"group"},t,{"aria-labelledby":f(n)}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["aria-labelledby"]))}}),Af=_T,kT=L({__name:"MenuLabel",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},setup(e){const t=e,n=AT({id:""});return(o,r)=>(D(),k(f(we),j(t,{id:f(n).id||void 0}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["id"]))}}),F1=kT,ST=L({__name:"MenuPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(zu),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),P1=ST;const[TT,FT]=lt("MenuRadioGroup");var PT=L({__name:"MenuRadioGroup",props:{modelValue:{type:null,required:!1,default:""},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,o=t,r=No(n,["modelValue"]),u=ln(r),a=Lt(n,"modelValue",o);return FT({modelValue:a,onValueChange:s=>{a.value=s}}),(s,i)=>(D(),k(Af,me(xe(f(u))),{default:A(()=>[P(s.$slots,"default",{modelValue:f(a)})]),_:3},16))}}),M1=PT,MT=L({__name:"MenuRadioItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,o=t,r=No(n,["value"]),u=ln(r),{value:a}=mt(n),s=TT(),i=F(()=>s.modelValue.value===a?.value);return _1({modelValue:i}),(c,l)=>(D(),k(_l,j({role:"menuitemradio"},f(u),{"aria-checked":i.value,"data-state":f(mf)(i.value),onSelect:l[0]||(l[0]=async d=>{o("select",d),f(s).onValueChange(f(a))})}),{default:A(()=>[P(c.$slots,"default")]),_:3},16,["aria-checked","data-state"]))}}),O1=MT,OT=L({__name:"MenuSeparator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(we),j(t,{role:"separator","aria-orientation":"horizontal"}),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),I1=OT;const[Bf,IT]=lt("MenuSub");var RT=L({__name:"MenuSub",props:{open:{type:Boolean,required:!1,default:void 0}},emits:["update:open"],setup(e,{emit:t}){const n=e,r=Lt(n,"open",t,{defaultValue:!1,passive:n.open===void 0}),u=Xr(),a=R(),s=R();return Ze(i=>{u?.open.value===!1&&(r.value=!1),i(()=>r.value=!1)}),D1({open:r,onOpenChange:i=>{r.value=i},content:s,onContentChange:i=>{s.value=i}}),IT({triggerId:"",contentId:"",trigger:a,onTriggerChange:i=>{a.value=i}}),(i,c)=>(D(),k(f(cs),null,{default:A(()=>[P(i.$slots,"default")]),_:3}))}}),R1=RT,LT=L({__name:"MenuSubContent",props:{forceMount:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1,default:!0},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const r=it(e,t),u=Xr(),a=Hu(),s=Bf(),i=ps(),{forwardRef:c,currentElement:l}=ae();return s.contentId||=sn(void 0,"reka-menu-sub-content"),(d,p)=>(D(),k(f(_n),{present:d.forceMount||f(u).open.value},{default:A(()=>[q(Df,j(f(r),{id:f(s).contentId,ref:f(c),"aria-labelledby":f(s).triggerId,align:"start",side:f(a).dir.value==="rtl"?"left":"right","disable-outside-pointer-events":!1,"disable-outside-scroll":!1,"trap-focus":!1,onOpenAutoFocus:p[0]||(p[0]=On(h=>{f(a).isUsingKeyboardRef.value&&f(l)?.focus()},["prevent"])),onCloseAutoFocus:p[1]||(p[1]=On(()=>{},["prevent"])),onFocusOutside:p[2]||(p[2]=h=>{if(h.defaultPrevented)return;const m=f(i).filterElement.value?.contains(h.target);h.target!==f(s).trigger.value&&!m&&f(u).onOpenChange(!1)}),onEscapeKeyDown:p[3]||(p[3]=h=>{f(a).onClose(),h.preventDefault()}),onKeydown:p[4]||(p[4]=h=>{const m=h.currentTarget?.contains(h.target),g=f(D7)[f(a).dir.value].includes(h.key);m&&g&&(f(u).onOpenChange(!1),f(i).filterElement.value?(f(i).filterElement.value.focus(),f(i).highlightedElement.value=f(s).trigger.value,f(s).trigger.value?.scrollIntoView({block:"nearest"})):f(s).trigger.value?.focus(),h.preventDefault())})}),{default:A(()=>[P(d.$slots,"default")]),_:3},16,["id","aria-labelledby","side"])]),_:3},8,["present"]))}}),L1=LT,qT=L({__name:"MenuSubTrigger",props:{disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=Xr(),o=Hu(),r=Bf(),u=ps();ye(n.open,d=>{d?u.activeSubmenuContext.value={onOpenChange:n.onOpenChange,trigger:r.trigger}:u.activeSubmenuContext.value?.trigger.value===r.trigger.value&&(u.activeSubmenuContext.value=void 0)});const a=R(null);r.triggerId||=sn(void 0,"reka-menu-sub-trigger");function s(){a.value&&window.clearTimeout(a.value),a.value=null}Ht(()=>{s()});function i(d){!Su(d)||u.onItemEnter(d)||!t.disabled&&!n.open.value&&!a.value&&(u.onPointerGraceIntentChange(null),a.value=window.setTimeout(()=>{n.onOpenChange(!0),s()},100))}async function c(d){if(!Su(d))return;s();const p=n.content.value?.getBoundingClientRect();if(p?.width){const h=n.content.value?.dataset.side,m=h==="right",g=m?-5:5,y=p[m?"left":"right"],E=p[m?"right":"left"];u.onPointerGraceIntentChange({area:[{x:d.clientX+g,y:d.clientY},{x:y,y:p.top},{x:E,y:p.top},{x:E,y:p.bottom},{x:y,y:p.bottom}],side:h}),window.clearTimeout(u.pointerGraceTimerRef.value),u.pointerGraceTimerRef.value=window.setTimeout(()=>u.onPointerGraceIntentChange(null),300)}else{if(u.onTriggerLeave(d))return;u.onPointerGraceIntentChange(null)}}async function l(d){const p=u.searchRef.value!=="";t.disabled||p&&d.key===" "||w7[o.dir.value].includes(d.key)&&(n.onOpenChange(!0),await Oe(),n.content.value?.focus(),d.preventDefault())}return(d,p)=>(D(),k(wf,{"as-child":""},{default:A(()=>[q(B1,j(t,{id:f(r).triggerId,ref:h=>{f(r)?.onTriggerChange(h?.$el)},"aria-haspopup":"menu","aria-expanded":f(n).open.value,"aria-controls":f(r).contentId,"data-state":f(hf)(f(n).open.value),onClick:p[0]||(p[0]=async h=>{t.disabled||h.defaultPrevented||(h.currentTarget.focus(),f(n).open.value||f(n).onOpenChange(!0))}),onPointermove:i,onPointerleave:c,onKeydown:l}),{default:A(()=>[P(d.$slots,"default")]),_:3},16,["id","aria-expanded","aria-controls","data-state"])]),_:3}))}}),q1=qT,$T=L({__name:"ContextMenuArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(w1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),NT=$T,jT=L({__name:"ContextMenuCheckboxItem",props:{modelValue:{type:[Boolean,String],required:!1},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select","update:modelValue"],setup(e,{emit:t}){const n=e,r=Xn(t);return ae(),(u,a)=>(D(),k(f(S1),me(xe({...n,...f(r)})),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),VT=jT;const[$1,zT]=lt("ContextMenuRoot");var UT=L({inheritAttrs:!1,__name:"ContextMenuRoot",props:{pressOpenDelay:{type:Number,required:!1,default:700},dir:{type:String,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t,{dir:r,modal:u,pressOpenDelay:a}=mt(n);ae();const s=ju(r),i=R(!1);return zT({open:i,onOpenChange:l=>{i.value=l},dir:s,modal:u,triggerElement:R(),pressOpenDelay:a}),ye(i,l=>{o("update:open",l)}),(l,d)=>(D(),k(f(A1),{open:i.value,"onUpdate:open":d[0]||(d[0]=p=>i.value=p),dir:f(s),modal:f(u)},{default:A(()=>[P(l.$slots,"default")]),_:3},8,["open","dir","modal"]))}}),N1=UT,HT=L({__name:"ContextMenuContent",props:{forceMount:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},sideFlip:{type:Boolean,required:!1},alignOffset:{type:Number,required:!1,default:0},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1,default:!0},collisionBoundary:{type:null,required:!1,default:()=>[]},collisionPadding:{type:[Number,Object],required:!1,default:0},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1,default:"partial"},hideWhenDetached:{type:Boolean,required:!1,default:!1},positionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","closeAutoFocus"],setup(e,{emit:t}){const r=it(e,t);ae();const u=$1(),a=R(!1);return(s,i)=>(D(),k(f(T1),j(f(r),{side:"right","side-offset":2,align:"start","update-position-strategy":"always",style:{"--reka-context-menu-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-context-menu-content-available-width":"var(--reka-popper-available-width)","--reka-context-menu-content-available-height":"var(--reka-popper-available-height)","--reka-context-menu-trigger-width":"var(--reka-popper-anchor-width)","--reka-context-menu-trigger-height":"var(--reka-popper-anchor-height)"},onCloseAutoFocus:i[0]||(i[0]=c=>{!c.defaultPrevented&&a.value&&c.preventDefault(),a.value=!1}),onInteractOutside:i[1]||(i[1]=c=>{c.detail.originalEvent.button===2&&c.target===f(u).triggerElement.value&&c.preventDefault(),!c.defaultPrevented&&!f(u).modal.value&&(a.value=!0)})}),{default:A(()=>[P(s.$slots,"default")]),_:3},16))}}),KT=HT,WT=L({__name:"ContextMenuGroup",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(Af),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),GT=WT,YT=L({__name:"ContextMenuItem",props:{disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,r=Xn(t);return ae(),(u,a)=>(D(),k(f(_l),me(xe({...n,...f(r)})),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),ZT=YT,XT=L({__name:"ContextMenuItemIndicator",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(k1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),JT=XT,QT=L({__name:"ContextMenuLabel",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(F1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),e8=QT,t8=L({__name:"ContextMenuPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(P1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),n8=t8,o8=L({__name:"ContextMenuRadioGroup",props:{modelValue:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=Xn(t);return ae(),(u,a)=>(D(),k(f(M1),me(xe({...n,...f(r)})),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),r8=o8,u8=L({__name:"ContextMenuRadioItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,r=Xn(t);return ae(),(u,a)=>(D(),k(f(O1),me(xe({...n,...f(r)})),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),a8=u8,s8=L({__name:"ContextMenuSeparator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(I1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),i8=s8,l8=L({__name:"ContextMenuSub",props:{defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1,default:void 0}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t;ae();const r=Lt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0});return(u,a)=>(D(),k(f(R1),{open:f(r),"onUpdate:open":a[0]||(a[0]=s=>rt(r)?r.value=s:null)},{default:A(()=>[P(u.$slots,"default",{open:f(r)})]),_:3},8,["open"]))}}),c8=l8,d8=L({__name:"ContextMenuSubContent",props:{forceMount:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const r=it(e,t);return ae(),(u,a)=>(D(),k(f(L1),j(f(r),{style:{"--reka-context-menu-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-context-menu-content-available-width":"var(--reka-popper-available-width)","--reka-context-menu-content-available-height":"var(--reka-popper-available-height)","--reka-context-menu-trigger-width":"var(--reka-popper-anchor-width)","--reka-context-menu-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),f8=d8,p8=L({__name:"ContextMenuSubTrigger",props:{disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(q1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),h8=p8;function y4(e){return e.pointerType!=="mouse"}var m8=L({inheritAttrs:!1,__name:"ContextMenuTrigger",props:{disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,{disabled:n}=mt(t),{forwardRef:o,currentElement:r}=ae(),u=$1(),a=R({x:0,y:0}),s=F(()=>({getBoundingClientRect:()=>({width:0,height:0,left:a.value.x,right:a.value.x,top:a.value.y,bottom:a.value.y,...a.value})})),i=R(0);function c(){window.clearTimeout(i.value)}function l(m){a.value={x:m.clientX,y:m.clientY},u.onOpenChange(!0)}async function d(m){n.value||(await Oe(),m.defaultPrevented||(c(),l(m),m.preventDefault()))}async function p(m){n.value||(await Oe(),y4(m)&&!m.defaultPrevented&&(c(),i.value=window.setTimeout(()=>l(m),u.pressOpenDelay.value)))}async function h(m){n.value||(await Oe(),y4(m)&&!m.defaultPrevented&&c())}return $e(()=>{r.value&&(u.triggerElement.value=r.value)}),(m,g)=>(D(),re(Ce,null,[q(f(wf),{as:"template",reference:s.value},null,8,["reference"]),q(f(we),j({ref:f(o),as:m.as,"as-child":m.asChild,"data-state":f(u).open.value?"open":"closed","data-disabled":f(n)?"":void 0,style:{WebkitTouchCallout:"none",pointerEvents:"auto"}},m.$attrs,{onContextmenu:d,onPointerdown:p,onPointermove:h,onPointercancel:h,onPointerup:h}),{default:A(()=>[P(m.$slots,"default")]),_:3},16,["as","as-child","data-state","data-disabled"])],64))}}),j1=m8;const[Jr,g8]=lt("PopoverRoot");var v8=L({__name:"PopoverRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},modal:{type:Boolean,required:!1,default:!1}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t,{modal:r}=mt(n),u=Lt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0});return g8({contentId:"",triggerId:"",modal:r,open:u,onOpenChange:i=>{u.value=i},onOpenToggle:()=>{u.value=!u.value},triggerElement:R(),hasCustomAnchor:R(!1)}),(i,c)=>(D(),k(f(cs),null,{default:A(()=>[P(i.$slots,"default",{open:f(u),close:()=>u.value=!1})]),_:3}))}}),y8=v8,b8=L({__name:"PopoverAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;ae();const n=Jr();return Pd(()=>{n.hasCustomAnchor.value=!0}),Ht(()=>{n.hasCustomAnchor.value=!1}),(o,r)=>(D(),k(f(ds),me(xe(t)),{default:A(()=>[P(o.$slots,"default")]),_:3},16))}}),E8=b8,C8=L({__name:"PopoverArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(Bl),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),x8=C8,w8=L({__name:"PopoverClose",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e;ae();const n=Jr();return(o,r)=>(D(),k(f(we),{type:o.as==="button"?"button":void 0,as:o.as,"as-child":t.asChild,onClick:r[0]||(r[0]=u=>f(n).onOpenChange(!1))},{default:A(()=>[P(o.$slots,"default")]),_:3},8,["type","as","as-child"]))}}),D8=w8,A8=L({__name:"PopoverContentImpl",props:{trapFocus:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=ln(No(n,"trapFocus","disableOutsidePointerEvents")),{forwardRef:u}=ae(),a=Jr();return Y3(),(s,i)=>(D(),k(f(pf),{"as-child":"",loop:"",trapped:s.trapFocus,onMountAutoFocus:i[5]||(i[5]=c=>o("openAutoFocus",c)),onUnmountAutoFocus:i[6]||(i[6]=c=>o("closeAutoFocus",c))},{default:A(()=>[q(f(Vu),{"as-child":"","disable-outside-pointer-events":s.disableOutsidePointerEvents,onPointerDownOutside:i[0]||(i[0]=c=>o("pointerDownOutside",c)),onInteractOutside:i[1]||(i[1]=c=>o("interactOutside",c)),onEscapeKeyDown:i[2]||(i[2]=c=>o("escapeKeyDown",c)),onFocusOutside:i[3]||(i[3]=c=>o("focusOutside",c)),onDismiss:i[4]||(i[4]=c=>f(a).onOpenChange(!1))},{default:A(()=>[q(f(Al),j(f(r),{id:f(a).contentId,ref:f(u),"data-state":f(a).open.value?"open":"closed","aria-labelledby":f(a).triggerId,style:{"--reka-popover-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-popover-content-available-width":"var(--reka-popper-available-width)","--reka-popover-content-available-height":"var(--reka-popper-available-height)","--reka-popover-trigger-width":"var(--reka-popper-anchor-width)","--reka-popover-trigger-height":"var(--reka-popper-anchor-height)"},role:"dialog"}),{default:A(()=>[P(s.$slots,"default")]),_:3},16,["id","data-state","aria-labelledby"])]),_:3},8,["disable-outside-pointer-events"])]),_:3},8,["trapped"]))}}),V1=A8,B8=L({__name:"PopoverContentModal",props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=Jr(),u=R(!1);lf(!0);const a=it(n,o),{forwardRef:s,currentElement:i}=ae();return cf(i),(c,l)=>(D(),k(V1,j(f(a),{ref:f(s),"trap-focus":f(r).open.value,"disable-outside-pointer-events":"",onCloseAutoFocus:l[0]||(l[0]=On(d=>{o("closeAutoFocus",d),u.value||f(r).triggerElement.value?.focus()},["prevent"])),onPointerDownOutside:l[1]||(l[1]=d=>{o("pointerDownOutside",d);const p=d.detail.originalEvent,h=p.button===0&&p.ctrlKey===!0,m=p.button===2||h;u.value=m}),onFocusOutside:l[2]||(l[2]=On(()=>{},["prevent"]))}),{default:A(()=>[P(c.$slots,"default")]),_:3},16,["trap-focus"]))}}),_8=B8,k8=L({__name:"PopoverContentNonModal",props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=Jr(),u=R(!1),a=R(!1),s=it(n,o);return(i,c)=>(D(),k(V1,j(f(s),{"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:c[0]||(c[0]=l=>{o("closeAutoFocus",l),l.defaultPrevented||(u.value||f(r).triggerElement.value?.focus(),l.preventDefault()),u.value=!1,a.value=!1}),onInteractOutside:c[1]||(c[1]=async l=>{o("interactOutside",l),l.defaultPrevented||(u.value=!0,l.detail.originalEvent.type==="pointerdown"&&(a.value=!0));const d=l.target;f(r).triggerElement.value?.contains(d)&&l.preventDefault(),l.detail.originalEvent.type==="focusin"&&a.value&&l.preventDefault()})}),{default:A(()=>[P(i.$slots,"default")]),_:3},16))}}),S8=k8,T8=L({__name:"PopoverContent",props:{forceMount:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=Jr(),u=it(n,o),{forwardRef:a}=ae();return r.contentId||=sn(void 0,"reka-popover-content"),(s,i)=>(D(),k(f(_n),{present:s.forceMount||f(r).open.value},{default:A(()=>[f(r).modal.value?(D(),k(_8,j({key:0},f(u),{ref:f(a)}),{default:A(()=>[P(s.$slots,"default")]),_:3},16)):(D(),k(S8,j({key:1},f(u),{ref:f(a)}),{default:A(()=>[P(s.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),F8=T8,P8=L({__name:"PopoverPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(zu),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),M8=P8,O8=L({__name:"PopoverTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=Jr(),{forwardRef:o,currentElement:r}=ae();return n.triggerId||=sn(void 0,"reka-popover-trigger"),$e(()=>{n.triggerElement.value=r.value}),(u,a)=>(D(),k(Rt(f(n).hasCustomAnchor.value?f(we):f(ds)),{"as-child":""},{default:A(()=>[q(f(we),{id:f(n).triggerId,ref:f(o),type:u.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":f(n).open.value,"aria-controls":f(n).contentId,"data-state":f(n).open.value?"open":"closed",as:u.as,"as-child":t.asChild,onClick:f(n).onOpenToggle},{default:A(()=>[P(u.$slots,"default")]),_:3},8,["id","type","aria-expanded","aria-controls","data-state","as","as-child","onClick"])]),_:3}))}}),I8=O8,R8=L({__name:"DropdownMenuArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(w1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),L8=R8,q8=L({__name:"DropdownMenuCheckboxItem",props:{modelValue:{type:[Boolean,String],required:!1},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select","update:modelValue"],setup(e,{emit:t}){const n=e,r=Xn(t);return ae(),(u,a)=>(D(),k(f(S1),me(xe({...n,...f(r)})),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),$8=q8;const[z1,N8]=lt("DropdownMenuRoot");var j8=L({__name:"DropdownMenuRoot",props:{defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1,default:void 0},dir:{type:String,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t;ae();const r=Lt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0}),u=R(),{modal:a,dir:s}=mt(n),i=ju(s);return N8({open:r,onOpenChange:c=>{r.value=c},onOpenToggle:()=>{r.value=!r.value},triggerId:"",triggerElement:u,contentId:"",modal:a,dir:i}),(c,l)=>(D(),k(f(A1),{open:f(r),"onUpdate:open":l[0]||(l[0]=d=>rt(r)?r.value=d:null),dir:f(i),modal:f(a)},{default:A(()=>[P(c.$slots,"default",{open:f(r)})]),_:3},8,["open","dir","modal"]))}}),V8=j8,z8=L({__name:"DropdownMenuContent",props:{forceMount:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","closeAutoFocus"],setup(e,{emit:t}){const r=it(e,t);ae();const u=z1(),a=R(!1);function s(i){i.defaultPrevented||(a.value||setTimeout(()=>{u.triggerElement.value?.focus()},0),a.value=!1,i.preventDefault())}return u.contentId||=sn(void 0,"reka-dropdown-menu-content"),(i,c)=>(D(),k(f(T1),j(f(r),{id:f(u).contentId,"aria-labelledby":f(u)?.triggerId,style:{"--reka-dropdown-menu-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-dropdown-menu-content-available-width":"var(--reka-popper-available-width)","--reka-dropdown-menu-content-available-height":"var(--reka-popper-available-height)","--reka-dropdown-menu-trigger-width":"var(--reka-popper-anchor-width)","--reka-dropdown-menu-trigger-height":"var(--reka-popper-anchor-height)"},onCloseAutoFocus:s,onInteractOutside:c[0]||(c[0]=l=>{if(l.defaultPrevented)return;const d=l.detail.originalEvent,p=d.button===0&&d.ctrlKey===!0,h=d.button===2||p;(!f(u).modal.value||h)&&(a.value=!0),f(u).triggerElement.value?.contains(l.target)&&l.preventDefault()})}),{default:A(()=>[P(i.$slots,"default")]),_:3},16,["id","aria-labelledby"]))}}),U8=z8,H8=L({__name:"DropdownMenuFilter",props:{modelValue:{type:String,required:!1},autoFocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"input"}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=Lt(n,"modelValue",t,{defaultValue:"",passive:n.modelValue===void 0}),u=Hu(),a=ps(),s=Bf(null);ye(r,m=>{a.searchRef.value=m??""},{immediate:!0});const{primitiveElement:i,currentElement:c}=w0(),l=F(()=>n.disabled||!1),d=R();Yg(()=>d.value=a.highlightedElement.value?.id),$e(()=>{a.onFilterElementChange(c.value),setTimeout(()=>{n.autoFocus&&(!s||u.isUsingKeyboardRef.value)&&c.value?.focus()},1)}),Ht(()=>{a.onFilterElementChange(void 0),a.searchRef.value=""});function p(m){if(l.value)return;const g=m.target;r.value=g.value,a.searchRef.value=g.value}function h(m){l.value||(["ArrowDown","ArrowUp","Home","End"].includes(m.key)?(m.preventDefault(),a.onKeydownNavigation(m)):m.key==="Enter"?(m.preventDefault(),a.onKeydownEnter(m)):m.key==="Escape"&&r.value&&(m.stopPropagation(),r.value="",a.searchRef.value=""))}return(m,g)=>(D(),k(f(we),{ref_key:"primitiveElement",ref:i,as:m.as,"as-child":m.asChild,value:f(r),disabled:l.value?"":void 0,"data-disabled":l.value?"":void 0,"aria-disabled":l.value?!0:void 0,"aria-activedescendant":d.value,type:"text",role:"searchbox",onInput:p,onKeydown:h},{default:A(()=>[P(m.$slots,"default",{modelValue:f(r)})]),_:3},8,["as","as-child","value","disabled","data-disabled","aria-disabled","aria-activedescendant"]))}}),K8=H8,W8=L({__name:"DropdownMenuGroup",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(Af),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),G8=W8,Y8=L({__name:"DropdownMenuItem",props:{disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,r=Xn(t);return ae(),(u,a)=>(D(),k(f(_l),me(xe({...n,...f(r)})),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),Z8=Y8,X8=L({__name:"DropdownMenuItemIndicator",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(k1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),J8=X8,Q8=L({__name:"DropdownMenuLabel",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(F1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),eF=Q8,tF=L({__name:"DropdownMenuPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(P1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),nF=tF,oF=L({__name:"DropdownMenuRadioGroup",props:{modelValue:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=Xn(t);return ae(),(u,a)=>(D(),k(f(M1),me(xe({...n,...f(r)})),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),rF=oF,uF=L({__name:"DropdownMenuRadioItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const r=it(e,t);return ae(),(u,a)=>(D(),k(f(O1),me(xe(f(r))),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),aF=uF,sF=L({__name:"DropdownMenuSeparator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(I1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),iF=sF,lF=L({__name:"DropdownMenuSub",props:{defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1,default:void 0}},emits:["update:open"],setup(e,{emit:t}){const n=e,r=Lt(n,"open",t,{passive:n.open===void 0,defaultValue:n.defaultOpen??!1});return ae(),(u,a)=>(D(),k(f(R1),{open:f(r),"onUpdate:open":a[0]||(a[0]=s=>rt(r)?r.value=s:null)},{default:A(()=>[P(u.$slots,"default",{open:f(r)})]),_:3},8,["open"]))}}),cF=lF,dF=L({__name:"DropdownMenuSubContent",props:{forceMount:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","entryFocus","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const r=it(e,t);return ae(),(u,a)=>(D(),k(f(L1),j(f(r),{style:{"--reka-dropdown-menu-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-dropdown-menu-content-available-width":"var(--reka-popper-available-width)","--reka-dropdown-menu-content-available-height":"var(--reka-popper-available-height)","--reka-dropdown-menu-trigger-width":"var(--reka-popper-anchor-width)","--reka-dropdown-menu-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:A(()=>[P(u.$slots,"default")]),_:3},16))}}),fF=dF,pF=L({__name:"DropdownMenuSubTrigger",props:{disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(q1),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),hF=pF,mF=L({__name:"DropdownMenuTrigger",props:{disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=z1(),{forwardRef:o,currentElement:r}=ae();return $e(()=>{n.triggerElement=r}),n.triggerId||=sn(void 0,"reka-dropdown-menu-trigger"),(u,a)=>(D(),k(f(wf),{"as-child":""},{default:A(()=>[q(f(we),{id:f(n).triggerId,ref:f(o),type:u.as==="button"?"button":void 0,"as-child":t.asChild,as:u.as,"aria-haspopup":"menu","aria-expanded":f(n).open.value,"aria-controls":f(n).open.value?f(n).contentId:void 0,"data-disabled":u.disabled?"":void 0,disabled:u.disabled,"data-state":f(n).open.value?"open":"closed",onClick:a[0]||(a[0]=async s=>{!u.disabled&&s.button===0&&s.ctrlKey===!1&&(f(n)?.onOpenToggle(),await Oe(),f(n).open.value&&s.preventDefault())}),onKeydown:a[1]||(a[1]=$d(s=>{u.disabled||(["Enter"," "].includes(s.key)&&f(n).onOpenToggle(),s.key==="ArrowDown"&&f(n).onOpenChange(!0),["Enter"," ","ArrowDown"].includes(s.key)&&s.preventDefault())},["enter","space","arrow-down"]))},{default:A(()=>[P(u.$slots,"default")]),_:3},8,["id","type","as-child","as","aria-expanded","aria-controls","data-disabled","disabled","data-state"])]),_:3}))}}),gF=mF,vF=L({__name:"HoverCardArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(Bl),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),yF=vF;const[_f,bF]=lt("HoverCardRoot");var EF=L({__name:"HoverCardRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},openDelay:{type:Number,required:!1,default:700},closeDelay:{type:Number,required:!1,default:300}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t,{openDelay:r,closeDelay:u}=mt(n);ae();const a=Lt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0}),s=R(0),i=R(0),c=R(!1),l=R(!1),d=R(!1),p=R();function h(){clearTimeout(i.value),s.value=window.setTimeout(()=>a.value=!0,r.value)}function m(){clearTimeout(s.value),!c.value&&!l.value&&(i.value=window.setTimeout(()=>a.value=!1,u.value))}function g(){a.value=!1}return bF({open:a,onOpenChange(y){a.value=y},onOpen:h,onClose:m,onDismiss:g,hasSelectionRef:c,isPointerDownOnContentRef:l,isPointerInTransitRef:d,triggerElement:p}),(y,E)=>(D(),k(f(cs),null,{default:A(()=>[P(y.$slots,"default",{open:f(a)})]),_:3}))}}),CF=EF;function O0(e){return t=>t.pointerType==="touch"?void 0:e()}function xF(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});for(;n.nextNode();)t.push(n.currentNode);return t}var wF=L({__name:"HoverCardContentImpl",props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:t}){const n=e,o=t,r=ln(n),{forwardRef:u,currentElement:a}=ae(),s=_f(),{isPointerInTransit:i,onPointerExit:c}=Z3(s.triggerElement,a);lk(s.isPointerInTransitRef,i,{direction:"rtl"}),c(()=>{s.onClose()});const l=R(!1);let d;Ze(h=>{if(l.value){const m=document.body;d=m.style.userSelect||m.style.webkitUserSelect,m.style.userSelect="none",m.style.webkitUserSelect="none",h(()=>{m.style.userSelect=d,m.style.webkitUserSelect=d})}});function p(){l.value=!1,s.isPointerDownOnContentRef.value=!1,Oe(()=>{document.getSelection()?.toString()!==""&&(s.hasSelectionRef.value=!0)})}return $e(()=>{a.value&&(document.addEventListener("pointerup",p),xF(a.value).forEach(m=>m.setAttribute("tabindex","-1"))),At(window,"scroll",h=>{h.target?.contains(s.triggerElement.value)&&s.onDismiss()},{capture:!0})}),Ht(()=>{document.removeEventListener("pointerup",p),s.hasSelectionRef.value=!1,s.isPointerDownOnContentRef.value=!1}),(h,m)=>(D(),k(f(Vu),{"as-child":"","disable-outside-pointer-events":!1,onEscapeKeyDown:m[1]||(m[1]=g=>o("escapeKeyDown",g)),onPointerDownOutside:m[2]||(m[2]=g=>o("pointerDownOutside",g)),onFocusOutside:m[3]||(m[3]=On(g=>o("focusOutside",g),["prevent"])),onDismiss:f(s).onDismiss},{default:A(()=>[q(f(Al),j({...f(r),...h.$attrs},{ref:f(u),"data-state":f(s).open.value?"open":"closed",style:{userSelect:l.value?"text":void 0,WebkitUserSelect:l.value?"text":void 0,"--reka-hover-card-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-hover-card-content-available-width":"var(--reka-popper-available-width)","--reka-hover-card-content-available-height":"var(--reka-popper-available-height)","--reka-hover-card-trigger-width":"var(--reka-popper-anchor-width)","--reka-hover-card-trigger-height":"var(--reka-popper-anchor-height)"},onPointerdown:m[0]||(m[0]=g=>{g.currentTarget.contains(g.target)&&(l.value=!0),f(s).hasSelectionRef.value=!1,f(s).isPointerDownOnContentRef.value=!0})}),{default:A(()=>[P(h.$slots,"default")]),_:3},16,["data-state","style"])]),_:3},8,["onDismiss"]))}}),DF=wF,AF=L({__name:"HoverCardContent",props:{forceMount:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:t}){const r=it(e,t),{forwardRef:u}=ae(),a=_f();return(s,i)=>(D(),k(f(_n),{present:s.forceMount||f(a).open.value},{default:A(()=>[q(DF,j(f(r),{ref:f(u),onPointerenter:i[0]||(i[0]=c=>f(O0)(f(a).onOpen)(c))}),{default:A(()=>[P(s.$slots,"default")]),_:3},16)]),_:3},8,["present"]))}}),BF=AF,_F=L({__name:"HoverCardPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(zu),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),kF=_F,SF=L({__name:"HoverCardTrigger",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"a"}},setup(e){const{forwardRef:t,currentElement:n}=ae(),o=_f();o.triggerElement=n;function r(){setTimeout(()=>{!o.isPointerInTransitRef.value&&!o.open.value&&o.onClose()},0)}return(u,a)=>(D(),k(f(ds),{"as-child":"",reference:u.reference},{default:A(()=>[q(f(we),{ref:f(t),"as-child":u.asChild,as:u.as,"data-state":f(o).open.value?"open":"closed","data-grace-area-trigger":"",onPointerenter:a[0]||(a[0]=s=>f(O0)(f(o).onOpen)(s)),onPointerleave:a[1]||(a[1]=s=>f(O0)(r)(s)),onFocus:a[2]||(a[2]=s=>f(o).onOpen()),onBlur:a[3]||(a[3]=s=>f(o).onClose())},{default:A(()=>[P(u.$slots,"default")]),_:3},8,["as-child","as","data-state"])]),_:3},8,["reference"]))}}),TF=SF;function kl(e){return e?"open":"closed"}function U1(e,t){return`${e}-trigger-${t}`}function kf(e,t){return`${e}-content-${t}`}const FF="navigationMenu.linkSelect",Aa="navigationMenu.rootContentDismiss";function I0(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function H1(e){const t=dt();return e.some(n=>n===t?!0:(n.focus(),dt()!==t))}function PF(e){return e.forEach(t=>{t.dataset.tabindex=t.getAttribute("tabindex")||"",t.setAttribute("tabindex","-1")}),()=>{e.forEach(t=>{const n=t.dataset.tabindex;t.setAttribute("tabindex",n)})}}function K1(e){return t=>t.pointerType==="mouse"?e(t):void 0}const[Qr,MF]=lt(["NavigationMenuRoot","NavigationMenuSub"],"NavigationMenuContext");var OF=L({__name:"NavigationMenuRoot",props:{modelValue:{type:String,required:!1,default:void 0},defaultValue:{type:String,required:!1},dir:{type:String,required:!1},orientation:{type:String,required:!1,default:"horizontal"},delayDuration:{type:Number,required:!1,default:200},skipDelayDuration:{type:Number,required:!1,default:300},disableClickTrigger:{type:Boolean,required:!1,default:!1},disableHoverTrigger:{type:Boolean,required:!1,default:!1},disablePointerLeaveClose:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"nav"}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=Lt(n,"modelValue",t,{defaultValue:n.defaultValue??"",passive:n.modelValue===void 0}),u=R(""),{forwardRef:a,currentElement:s}=ae(),i=R(),c=R(),l=R(),{getItems:d,CollectionSlot:p}=vo({key:"NavigationMenu",isProvider:!0}),{delayDuration:h,skipDelayDuration:m,dir:g,disableClickTrigger:y,disableHoverTrigger:E,unmountOnHide:b}=mt(n),v=ju(g),C=bl(!1,m),w=F(()=>r.value!==""||C.value?150:h.value),B=V3(_=>{typeof _=="string"&&(u.value=r.value,r.value=_)},w);Ze(()=>{if(!r.value)return;const _=d().map(S=>S.ref);l.value=_.find(S=>S.id.includes(r.value))}),At(s,Aa,x),MF({isRootMenu:!0,modelValue:r,previousValue:u,baseId:sn(void 0,"reka-navigation-menu"),disableClickTrigger:y,disableHoverTrigger:E,dir:v,unmountOnHide:b,orientation:n.orientation,rootNavigationMenu:s,indicatorTrack:i,activeTrigger:l,onIndicatorTrackChange:_=>{i.value=_},viewport:c,onViewportChange:_=>{c.value=_},onTriggerEnter:_=>{B(_)},onTriggerLeave:()=>{C.value=!0,B("")},onContentEnter:()=>{B()},onContentLeave:()=>{n.disablePointerLeaveClose||B("")},onItemSelect:_=>{u.value=r.value,r.value=_},onItemDismiss:x});function x(){u.value=r.value,r.value=""}return(_,S)=>(D(),k(f(p),null,{default:A(()=>[q(f(we),{ref:f(a),as:_.as,"as-child":_.asChild,"data-orientation":_.orientation,dir:f(v),"data-reka-navigation-menu":""},{default:A(()=>[P(_.$slots,"default",{modelValue:f(r)})]),_:3},8,["as","as-child","data-orientation","dir"])]),_:3}))}}),IF=OF;const[Sf,RF]=lt("NavigationMenuItem");var LF=L({__name:"NavigationMenuItem",props:{value:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"li"}},setup(e){const t=e;ae();const{getItems:n}=vo({key:"NavigationMenu"}),o=Qr(),r=sn(t.value),u=R(),a=R(),s=kf(o.baseId,r);let i=()=>({});const c=R(!1);async function l(m="start"){const g=document.getElementById(s);if(g){i();const y=I0(g);y.length&&H1(m==="start"?y:y.reverse())}}function d(){const m=document.getElementById(s);if(m){const g=I0(m);g.length&&(i=PF(g))}}RF({value:r,contentId:s,triggerRef:u,focusProxyRef:a,wasEscapeCloseRef:c,onEntryKeyDown:l,onFocusProxyEnter:l,onContentFocusOutside:d,onRootContentClose:d});function p(){o.onItemDismiss(),u.value?.focus()}function h(m){const g=dt();if(m.keyCode===32||m.key==="Enter")if(o.modelValue.value===r){p(),m.preventDefault();return}else{m.target.click(),m.preventDefault();return}const y=n().filter(b=>b.ref.parentElement?.hasAttribute("data-menu-item")).map(b=>b.ref);if(!y.includes(g))return;const E=za(m,g,void 0,{itemsArray:y,loop:!1});E&&E?.focus(),m.preventDefault(),m.stopPropagation()}return(m,g)=>(D(),k(f(we),{"as-child":m.asChild,as:m.as,"data-menu-item":"",onKeydown:$d(h,["up","down","left","right","home","end","space"])},{default:A(()=>[P(m.$slots,"default")]),_:3},8,["as-child","as"]))}}),qF=LF,$F=L({__name:"NavigationMenuContentImpl",props:{disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:t}){const n=e,o=t,{getItems:r}=vo({key:"NavigationMenu"}),{forwardRef:u,currentElement:a}=ae(),s=Qr(),i=Sf(),c=U1(s.baseId,i.value),l=kf(s.baseId,i.value),d=R(null),p=F(()=>{const b=r().map(_=>_.ref.id.split("trigger-")[1]);s.dir.value==="rtl"&&b.reverse();const v=b.indexOf(s.modelValue.value),C=b.indexOf(s.previousValue.value),w=i.value===s.modelValue.value,B=C===b.indexOf(i.value);if(!w&&!B)return d.value;const x=(()=>{if(v!==C){if(w&&C!==-1)return v>C?"from-end":"from-start";if(B&&v!==-1)return v>C?"to-start":"to-end"}return null})();return d.value=x,x});function h(b){if(o("focusOutside",b),o("interactOutside",b),b.detail.originalEvent.target.hasAttribute("data-navigation-menu-trigger")&&b.preventDefault(),!b.defaultPrevented){i.onContentFocusOutside();const C=b.target;s.rootNavigationMenu?.value?.contains(C)&&b.preventDefault()}}function m(b){if(o("pointerDownOutside",b),!b.defaultPrevented){const v=b.target,C=r().some(B=>B.ref.contains(v)),w=s.isRootMenu&&s.viewport.value?.contains(v);(C||w||!s.isRootMenu)&&b.preventDefault()}}Ze(b=>{const v=a.value;if(s.isRootMenu&&v){const C=()=>{s.onItemDismiss(),i.onRootContentClose(),v.contains(dt())&&i.triggerRef.value?.focus()};v.addEventListener(Aa,C),b(()=>v.removeEventListener(Aa,C))}});function g(b){o("escapeKeyDown",b),b.defaultPrevented||(s.onItemDismiss(),i.triggerRef?.value?.focus(),i.wasEscapeCloseRef.value=!0)}function y(b){if(b.target.closest("[data-reka-navigation-menu]")!==s.rootNavigationMenu.value)return;const v=b.altKey||b.ctrlKey||b.metaKey,C=b.key==="Tab"&&!v,w=I0(b.currentTarget);if(C){const x=dt(),_=w.findIndex(H=>H===x),O=b.shiftKey?w.slice(0,_).reverse():w.slice(_+1,w.length);if(H1(O))b.preventDefault();else{i.focusProxyRef.value?.focus();return}}za(b,dt(),void 0,{itemsArray:w,loop:!1,enableIgnoredElement:!0})?.focus()}function E(){const b=new Event(Aa,{bubbles:!0,cancelable:!0});a.value?.dispatchEvent(b)}return(b,v)=>(D(),k(f(Vu),j({id:f(l),ref:f(u),"aria-labelledby":f(c),"data-motion":p.value,"data-state":f(kl)(f(s).modelValue.value===f(i).value),"data-orientation":f(s).orientation},n,{onKeydown:y,onEscapeKeyDown:g,onPointerDownOutside:m,onFocusOutside:h,onDismiss:E}),{default:A(()=>[P(b.$slots,"default")]),_:3},16,["id","aria-labelledby","data-motion","data-state","data-orientation"]))}}),NF=$F,jF=L({inheritAttrs:!1,__name:"NavigationMenuContent",props:{forceMount:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:t}){const n=e,o=t,r=it(No(n,"forceMount"),o),{forwardRef:u}=ae(),a=Qr(),s=Sf(),i=F(()=>s.value===a.modelValue.value),c=F(()=>a.viewport.value&&!a.modelValue.value&&a.previousValue.value?a.previousValue.value===s.value:!1);return(l,d)=>(D(),k(os,{to:f(gn)&&f(a).viewport.value?f(a).viewport.value:"body",disabled:f(gn)&&f(a).viewport.value?!f(a).viewport.value:!0},[q(f(_n),{present:l.forceMount||i.value||c.value,"force-mount":!f(a).unmountOnHide.value},{default:A(({present:p})=>[q(NF,j({ref:f(u),"data-state":f(kl)(i.value),style:{pointerEvents:!i.value&&f(a).isRootMenu?"none":void 0}},{...l.$attrs,...f(r)},{hidden:!p,onPointerenter:d[0]||(d[0]=h=>f(a).onContentEnter(f(s).value)),onPointerleave:d[1]||(d[1]=h=>f(K1)(()=>f(a).onContentLeave())(h)),onPointerDownOutside:d[2]||(d[2]=h=>o("pointerDownOutside",h)),onFocusOutside:d[3]||(d[3]=h=>o("focusOutside",h)),onInteractOutside:d[4]||(d[4]=h=>o("interactOutside",h))}),{default:A(()=>[P(l.$slots,"default")]),_:2},1040,["data-state","style","hidden"])]),_:3},8,["present","force-mount"])],8,["to","disabled"]))}}),VF=jF,zF=L({inheritAttrs:!1,__name:"NavigationMenuIndicator",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{forwardRef:n}=ae(),o=Qr(),r=R(),u=F(()=>o.orientation==="horizontal"),a=F(()=>!!o.modelValue.value),{activeTrigger:s}=o;function i(){s.value&&(r.value={size:u.value?s.value.offsetWidth:s.value.offsetHeight,position:u.value?s.value.offsetLeft:s.value.offsetTop})}return Ze(()=>{o.modelValue.value&&i()}),Ua(s,i),Ua(o.indicatorTrack,i),(c,l)=>f(o).indicatorTrack.value?(D(),k(os,{key:0,to:f(o).indicatorTrack.value},[q(f(_n),{present:c.forceMount||a.value},{default:A(()=>[q(f(we),j({ref:f(n),"aria-hidden":"true","data-state":a.value?"visible":"hidden","data-orientation":f(o).orientation,"as-child":t.asChild,as:c.as,style:{...r.value?{"--reka-navigation-menu-indicator-size":`${r.value.size}px`,"--reka-navigation-menu-indicator-position":`${r.value.position}px`}:{}}},c.$attrs),{default:A(()=>[P(c.$slots,"default")]),_:3},16,["data-state","data-orientation","as-child","as","style"])]),_:3},8,["present"])],8,["to"])):Y("v-if",!0)}}),UF=zF,HF=L({__name:"NavigationMenuLink",props:{active:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"a"}},emits:["select"],setup(e,{emit:t}){const n=e,o=t,{CollectionItem:r}=vo({key:"NavigationMenu"});ae();async function u(a){const s=new CustomEvent(FF,{bubbles:!0,cancelable:!0,detail:{originalEvent:a}});if(o("select",s),!s.defaultPrevented&&!a.metaKey){const i=new CustomEvent(Aa,{bubbles:!0,cancelable:!0});a.target?.dispatchEvent(i)}}return(a,s)=>(D(),k(f(r),null,{default:A(()=>[q(f(we),{as:a.as,"data-active":a.active?"":void 0,"aria-current":a.active?"page":void 0,"as-child":n.asChild,onClick:u},{default:A(()=>[P(a.$slots,"default")]),_:3},8,["as","data-active","aria-current","as-child"])]),_:3}))}}),mc=HF,KF=L({inheritAttrs:!1,__name:"NavigationMenuList",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"ul"}},setup(e){const t=e,n=Qr(),{forwardRef:o,currentElement:r}=ae();return $e(()=>{n.onIndicatorTrackChange(r.value)}),(u,a)=>(D(),k(f(we),{ref:f(o),style:{position:"relative"}},{default:A(()=>[q(f(we),j(u.$attrs,{"as-child":t.asChild,as:u.as,"data-orientation":f(n).orientation}),{default:A(()=>[P(u.$slots,"default")]),_:3},16,["as-child","as","data-orientation"])]),_:3},512))}}),WF=KF;const GF=["aria-owns"];var YF=L({inheritAttrs:!1,__name:"NavigationMenuTrigger",props:{disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=Qr(),o=Sf(),{CollectionItem:r}=vo({key:"NavigationMenu"}),{forwardRef:u,currentElement:a}=ae(),s=R(""),i=R(""),c=bl(!1,300),l=R(!1),d=F(()=>o.value===n.modelValue.value);$e(()=>{o.triggerRef=a,s.value=U1(n.baseId,o.value),i.value=kf(n.baseId,o.value)});function p(){n.disableHoverTrigger.value||(l.value=!1,o.wasEscapeCloseRef.value=!1)}function h(v){if(!n.disableHoverTrigger.value&&v.pointerType==="mouse"){if(t.disabled||l.value||o.wasEscapeCloseRef.value||c.value)return;n.onTriggerEnter(o.value),c.value=!0}}function m(v){if(!n.disableHoverTrigger.value&&v.pointerType==="mouse"){if(t.disabled)return;n.onTriggerLeave(),c.value=!1}}function g(v){(!("pointerType"in v)||v.pointerType==="mouse")&&n.disableClickTrigger.value||c.value||(d.value?n.onItemSelect(""):n.onItemSelect(o.value),l.value=d.value)}function y(v){const w={horizontal:"ArrowDown",vertical:n.dir.value==="rtl"?"ArrowLeft":"ArrowRight"}[n.orientation];d.value&&v.key===w&&(o.onEntryKeyDown(),v.preventDefault(),v.stopPropagation())}function E(v){o.focusProxyRef.value=an(v)}function b(v){const C=document.getElementById(o.contentId),w=v.relatedTarget,B=w===a.value,x=C?.contains(w);(B||!x)&&o.onFocusProxyEnter(B?"start":"end")}return(v,C)=>(D(),re(Ce,null,[q(f(r),null,{default:A(()=>[q(f(we),j({id:s.value,ref:f(u),disabled:v.disabled,"data-disabled":v.disabled?"":void 0,"data-state":f(kl)(d.value),"data-navigation-menu-trigger":"","aria-expanded":d.value,"aria-controls":i.value,"as-child":t.asChild,as:v.as},v.$attrs,{onPointerenter:p,onPointermove:h,onPointerleave:m,onClick:g,onKeydown:y}),{default:A(()=>[P(v.$slots,"default")]),_:3},16,["id","disabled","data-disabled","data-state","aria-expanded","aria-controls","as-child","as"])]),_:3}),d.value?(D(),re(Ce,{key:0},[q(f(Yr),{ref:E,"aria-hidden":"true",tabindex:0,onFocus:b}),f(n).viewport?(D(),re("span",{key:0,"aria-owns":i.value},null,8,GF)):Y("v-if",!0)],64)):Y("v-if",!0)],64))}}),ZF=YF,XF=L({inheritAttrs:!1,__name:"NavigationMenuViewport",props:{forceMount:{type:Boolean,required:!1},align:{type:String,required:!1,default:"center"},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{forwardRef:n,currentElement:o}=ae(),r=Qr(),{activeTrigger:u,rootNavigationMenu:a,modelValue:s}=r,i=R(),c=R(),l=F(()=>!!r.modelValue.value);ye(o,()=>{r.onViewportChange(o.value)});const d=R();ye([s,l],()=>{Oe(()=>{o.value&&requestAnimationFrame(()=>{const h=o.value?.querySelector("[data-state=open]");d.value=h})})},{immediate:!0});function p(){if(d.value&&u.value&&a.value){const h=document.documentElement.offsetWidth,m=document.documentElement.offsetHeight,g=a.value.getBoundingClientRect(),y=u.value.getBoundingClientRect(),{offsetWidth:E,offsetHeight:b}=d.value,v=y.left-g.left,C=y.top-g.top;let w=null,B=null;switch(t.align){case"start":w=v,B=C;break;case"end":w=v-E+y.width,B=C-b+y.height;break;default:w=v-E/2+y.width/2,B=C-b/2+y.height/2}const x=10;w+g.lefth-x&&(w-=_-h+x,wm-x&&(B-=S-m+x,B{d.value&&(i.value={width:d.value.offsetWidth,height:d.value.offsetHeight},p())}),Ua([globalThis.document?.body,a],()=>{p()}),(h,m)=>(D(),k(f(_n),{present:h.forceMount||l.value,"force-mount":!f(r).unmountOnHide.value,onAfterLeave:m[2]||(m[2]=()=>{i.value=void 0,c.value=void 0})},{default:A(({present:g})=>[q(f(we),j(h.$attrs,{ref:f(n),as:h.as,"as-child":h.asChild,"data-state":f(kl)(l.value),"data-orientation":f(r).orientation,style:{pointerEvents:!l.value&&f(r).isRootMenu?"none":void 0,"--reka-navigation-menu-viewport-width":i.value?`${i.value?.width}px`:void 0,"--reka-navigation-menu-viewport-height":i.value?`${i.value?.height}px`:void 0,"--reka-navigation-menu-viewport-left":c.value?`${c.value?.left}px`:void 0,"--reka-navigation-menu-viewport-top":c.value?`${c.value?.top}px`:void 0},hidden:!g,onPointerenter:m[0]||(m[0]=y=>f(r).onContentEnter(f(r).modelValue.value)),onPointerleave:m[1]||(m[1]=y=>f(K1)(()=>f(r).onContentLeave())(y))}),{default:A(()=>[P(h.$slots,"default")]),_:2},1040,["as","as-child","data-state","data-orientation","style","hidden"])]),_:3},8,["present","force-mount"]))}}),JF=XF;const Wa=100,[QF,eP]=lt("ProgressRoot"),Ri=e=>typeof e=="number";function tP(e,t){return yl(e)||Ri(e)&&!Number.isNaN(e)&&e<=t&&e>=0?e:(console.error(`Invalid prop \`value\` of value \`${e}\` supplied to \`ProgressRoot\`. The \`value\` prop must be: + - a positive number + - less than the value passed to \`max\` (or ${Wa} if no \`max\` prop is set) + - \`null\` or \`undefined\` if the progress is indeterminate. + +Defaulting to \`null\`.`),null)}function nP(e){return Ri(e)&&!Number.isNaN(e)&&e>0?e:(console.error(`Invalid prop \`max\` of value \`${e}\` supplied to \`ProgressRoot\`. Only numbers greater than 0 are valid max values. Defaulting to \`${Wa}\`.`),Wa)}var oP=L({__name:"ProgressRoot",props:{modelValue:{type:[Number,null],required:!1},max:{type:Number,required:!1,default:Wa},getValueLabel:{type:Function,required:!1,default:(e,t)=>Ri(e)?`${Math.round(e/t*Wa)}%`:void 0},getValueText:{type:Function,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue","update:max"],setup(e,{emit:t}){const n=e,o=t;ae();const r=Lt(n,"modelValue",o,{passive:n.modelValue===void 0}),u=Lt(n,"max",o,{passive:n.max===void 0});ye(()=>r.value,async s=>{const i=tP(s,n.max);i!==s&&(await Oe(),r.value=i)},{immediate:!0}),ye(()=>n.max,s=>{const i=nP(n.max);i!==s&&(u.value=i)},{immediate:!0});const a=F(()=>yl(r.value)?"indeterminate":r.value===u.value?"complete":"loading");return eP({modelValue:r,max:u,progressState:a}),(s,i)=>(D(),k(f(we),{"as-child":s.asChild,as:s.as,"aria-valuemax":f(u),"aria-valuemin":0,"aria-valuenow":Ri(f(r))?f(r):void 0,"aria-valuetext":s.getValueText?.(f(r),f(u)),"aria-label":s.getValueLabel(f(r),f(u)),role:"progressbar","data-state":a.value,"data-value":f(r)??void 0,"data-max":f(u)},{default:A(()=>[P(s.$slots,"default",{modelValue:f(r)})]),_:3},8,["as-child","as","aria-valuemax","aria-valuenow","aria-valuetext","aria-label","data-state","data-value","data-max"]))}}),rP=oP,uP=L({__name:"ProgressIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=QF();return ae(),(o,r)=>(D(),k(f(we),j(t,{"data-state":f(n).progressState.value,"data-value":f(n).modelValue?.value??void 0,"data-max":f(n).max.value}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["data-state","data-value","data-max"]))}}),aP=uP,sP=L({__name:"BaseSeparator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=["horizontal","vertical"];function o(s){return n.includes(s)}const r=F(()=>o(t.orientation)?t.orientation:"horizontal"),u=F(()=>r.value==="vertical"?t.orientation:void 0),a=F(()=>t.decorative?{role:"none"}:{"aria-orientation":u.value,role:"separator"});return(s,i)=>(D(),k(f(we),j({as:s.as,"as-child":s.asChild,"data-orientation":r.value},a.value),{default:A(()=>[P(s.$slots,"default")]),_:3},16,["as","as-child","data-orientation"]))}}),iP=sP,lP=L({__name:"Separator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(iP,me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),cP=lP,dP=L({__name:"ToastAnnounceExclude",props:{altText:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){return(t,n)=>(D(),k(f(we),{as:t.as,"as-child":t.asChild,"data-reka-toast-announce-exclude":"","data-reka-toast-announce-alt":t.altText||void 0},{default:A(()=>[P(t.$slots,"default")]),_:3},8,["as","as-child","data-reka-toast-announce-alt"]))}}),W1=dP;const[Sl,fP]=lt("ToastProvider");var pP=L({inheritAttrs:!1,__name:"ToastProvider",props:{label:{type:String,required:!1,default:"Notification"},duration:{type:Number,required:!1,default:5e3},disableSwipe:{type:Boolean,required:!1},swipeDirection:{type:String,required:!1,default:"right"},swipeThreshold:{type:Number,required:!1,default:50}},setup(e){const t=e,{label:n,duration:o,disableSwipe:r,swipeDirection:u,swipeThreshold:a}=mt(t);vo({isProvider:!0});const s=R(),i=R(0),c=R(!1),l=R(!1);if(t.label&&typeof t.label=="string"&&!t.label.trim()){const d="Invalid prop `label` supplied to `ToastProvider`. Expected non-empty `string`.";throw new Error(d)}return fP({label:n,duration:o,disableSwipe:r,swipeDirection:u,swipeThreshold:a,toastCount:i,viewport:s,onViewportChange(d){s.value=d},onToastAdd(){i.value++},onToastRemove(){i.value--},isFocusedToastEscapeKeyDownRef:c,isClosePausedRef:l}),(d,p)=>P(d.$slots,"default")}}),hP=pP,mP=L({__name:"ToastAnnounce",setup(e){const t=Sl(),n=dk(1e3),o=R(!1);return W3(()=>{o.value=!0}),(r,u)=>f(n)||o.value?(D(),k(f(Yr),{key:0,feature:"fully-hidden"},{default:A(()=>[Ke(Fe(f(t).label.value)+" ",1),P(r.$slots,"default")]),_:3})):Y("v-if",!0)}}),gP=mP;const vP="toast.swipeStart",yP="toast.swipeMove",bP="toast.swipeCancel",EP="toast.swipeEnd",R0="toast.viewportPause",L0="toast.viewportResume";function js(e,t,n){const o=n.originalEvent.currentTarget,r=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),o.dispatchEvent(r)}function b4(e,t,n=0){const o=Math.abs(e.x),r=Math.abs(e.y),u=o>r;return t==="left"||t==="right"?u&&o>n:!u&&r>n}function CP(e){return e.nodeType===e.ELEMENT_NODE}function G1(e){const t=[];return Array.from(e.childNodes).forEach(o=>{if(o.nodeType===o.TEXT_NODE&&o.textContent&&t.push(o.textContent),CP(o)){const r=o.ariaHidden||o.hidden||o.style.display==="none",u=o.dataset.rekaToastAnnounceExclude==="";if(!r)if(u){const a=o.dataset.rekaToastAnnounceAlt;a&&t.push(a)}else t.push(...G1(o))}}),t}const[xP,wP]=lt("ToastRoot");var DP=L({inheritAttrs:!1,__name:"ToastRootImpl",props:{type:{type:String,required:!1},open:{type:Boolean,required:!1,default:!1},duration:{type:Number,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"li"}},emits:["close","escapeKeyDown","pause","resume","swipeStart","swipeMove","swipeCancel","swipeEnd"],setup(e,{emit:t}){const n=e,o=t,{forwardRef:r,currentElement:u}=ae(),{CollectionItem:a}=vo(),s=Sl(),i=R(null),c=R(null),l=F(()=>typeof n.duration=="number"?n.duration:s.duration.value),d=R(0),p=R(l.value),h=R(0),m=R(l.value),g=W3(()=>{const v=new Date().getTime()-d.value;m.value=Math.max(p.value-v,0)},{fpsLimit:60});function y(v){v<=0||v===Number.POSITIVE_INFINITY||gn&&(window.clearTimeout(h.value),d.value=new Date().getTime(),h.value=window.setTimeout(E,v))}function E(v){const C=v?.pointerType==="";u.value?.contains(dt())&&C&&s.viewport.value?.focus(),C&&(s.isClosePausedRef.value=!1),o("close")}const b=F(()=>u.value?G1(u.value):null);if(n.type&&!["foreground","background"].includes(n.type)){const v="Invalid prop `type` supplied to `Toast`. Expected `foreground | background`.";throw new Error(v)}return Ze(v=>{const C=s.viewport.value;if(C){const w=()=>{y(p.value),g.resume(),o("resume")},B=()=>{const x=new Date().getTime()-d.value;p.value=p.value-x,window.clearTimeout(h.value),g.pause(),o("pause")};return C.addEventListener(R0,B),C.addEventListener(L0,w),()=>{C.removeEventListener(R0,B),C.removeEventListener(L0,w)}}}),ye(()=>[n.open,l.value],()=>{p.value=l.value,n.open&&!s.isClosePausedRef.value&&y(l.value)},{immediate:!0}),sf("Escape",v=>{o("escapeKeyDown",v),v.defaultPrevented||(s.isFocusedToastEscapeKeyDownRef.value=!0,E())}),$e(()=>{s.onToastAdd()}),Ht(()=>{s.onToastRemove()}),wP({onClose:E}),(v,C)=>(D(),re(Ce,null,[b.value?(D(),k(gP,{key:0,role:"alert","aria-live":v.type==="foreground"?"assertive":"polite"},{default:A(()=>[Ke(Fe(b.value),1)]),_:1},8,["aria-live"])):Y("v-if",!0),f(s).viewport.value?(D(),k(os,{key:1,to:f(s).viewport.value},[q(f(a),null,{default:A(()=>[q(f(we),j({ref:f(r),tabindex:"0"},v.$attrs,{as:v.as,"as-child":v.asChild,"data-state":v.open?"open":"closed","data-swipe-direction":f(s).swipeDirection.value,style:f(s).disableSwipe.value?void 0:{userSelect:"none",touchAction:"none"},onPointerdown:C[0]||(C[0]=On(w=>{f(s).disableSwipe.value||(i.value={x:w.clientX,y:w.clientY})},["left"])),onPointermove:C[1]||(C[1]=w=>{if(f(s).disableSwipe.value||!i.value)return;const B=w.clientX-i.value.x,x=w.clientY-i.value.y,_=!!c.value,S=["left","right"].includes(f(s).swipeDirection.value),O=["left","up"].includes(f(s).swipeDirection.value)?Math.min:Math.max,H=S?O(0,B):0,N=S?0:O(0,x),J=w.pointerType==="touch"?10:2,G={x:H,y:N},$={originalEvent:w,delta:G};_?(c.value=G,f(js)(f(yP),I=>o("swipeMove",I),$)):f(b4)(G,f(s).swipeDirection.value,J)?(c.value=G,f(js)(f(vP),I=>o("swipeStart",I),$),w.target.setPointerCapture(w.pointerId)):(Math.abs(B)>J||Math.abs(x)>J)&&(i.value=null)}),onPointerup:C[2]||(C[2]=w=>{if(f(s).disableSwipe.value)return;const B=c.value,x=w.target;if(x.hasPointerCapture(w.pointerId)&&x.releasePointerCapture(w.pointerId),c.value=null,i.value=null,B){const _=w.currentTarget,S={originalEvent:w,delta:B};f(b4)(B,f(s).swipeDirection.value,f(s).swipeThreshold.value)?f(js)(f(EP),O=>o("swipeEnd",O),S):f(js)(f(bP),O=>o("swipeCancel",O),S),_?.addEventListener("click",O=>O.preventDefault(),{once:!0})}})}),{default:A(()=>[P(v.$slots,"default",{remaining:m.value,duration:l.value})]),_:3},16,["as","as-child","data-state","data-swipe-direction","style"])]),_:3})],8,["to"])):Y("v-if",!0)],64))}}),AP=DP,BP=L({__name:"ToastClose",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=xP(),{forwardRef:o}=ae();return(r,u)=>(D(),k(W1,{"as-child":""},{default:A(()=>[q(f(we),j(t,{ref:f(o),type:r.as==="button"?"button":void 0,onClick:f(n).onClose}),{default:A(()=>[P(r.$slots,"default")]),_:3},16,["type","onClick"])]),_:3}))}}),Y1=BP,_P=L({__name:"ToastAction",props:{altText:{type:String,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){if(!e.altText)throw new Error("Missing prop `altText` expected on `ToastAction`");const{forwardRef:n}=ae();return(o,r)=>o.altText?(D(),k(W1,{key:0,"alt-text":o.altText,"as-child":""},{default:A(()=>[q(Y1,{ref:f(n),as:o.as,"as-child":o.asChild},{default:A(()=>[P(o.$slots,"default")]),_:3},8,["as","as-child"])]),_:3},8,["alt-text"])):Y("v-if",!0)}}),E4=_P,kP=L({__name:"ToastDescription",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(we),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),SP=kP,TP=L({__name:"ToastPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(zu),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),FP=TP,PP=L({__name:"ToastRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!0},forceMount:{type:Boolean,required:!1},type:{type:String,required:!1,default:"foreground"},open:{type:Boolean,required:!1,default:void 0},duration:{type:Number,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"li"}},emits:["escapeKeyDown","pause","resume","swipeStart","swipeMove","swipeCancel","swipeEnd","update:open"],setup(e,{emit:t}){const n=e,o=t,{forwardRef:r}=ae(),u=Lt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0});return(a,s)=>(D(),k(f(_n),{present:a.forceMount||f(u)},{default:A(()=>[q(AP,j({ref:f(r),open:f(u),type:a.type,as:a.as,"as-child":a.asChild,duration:a.duration},a.$attrs,{onClose:s[0]||(s[0]=i=>u.value=!1),onPause:s[1]||(s[1]=i=>o("pause")),onResume:s[2]||(s[2]=i=>o("resume")),onEscapeKeyDown:s[3]||(s[3]=i=>o("escapeKeyDown",i)),onSwipeStart:s[4]||(s[4]=i=>{o("swipeStart",i),i.defaultPrevented||i.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:s[5]||(s[5]=i=>{if(o("swipeMove",i),!i.defaultPrevented){const{x:c,y:l}=i.detail.delta,d=i.currentTarget;d.setAttribute("data-swipe","move"),d.style.setProperty("--reka-toast-swipe-move-x",`${c}px`),d.style.setProperty("--reka-toast-swipe-move-y",`${l}px`)}}),onSwipeCancel:s[6]||(s[6]=i=>{if(o("swipeCancel",i),!i.defaultPrevented){const c=i.currentTarget;c.setAttribute("data-swipe","cancel"),c.style.removeProperty("--reka-toast-swipe-move-x"),c.style.removeProperty("--reka-toast-swipe-move-y"),c.style.removeProperty("--reka-toast-swipe-end-x"),c.style.removeProperty("--reka-toast-swipe-end-y")}}),onSwipeEnd:s[7]||(s[7]=i=>{if(o("swipeEnd",i),!i.defaultPrevented){const{x:c,y:l}=i.detail.delta,d=i.currentTarget;d.setAttribute("data-swipe","end"),d.style.removeProperty("--reka-toast-swipe-move-x"),d.style.removeProperty("--reka-toast-swipe-move-y"),d.style.setProperty("--reka-toast-swipe-end-x",`${c}px`),d.style.setProperty("--reka-toast-swipe-end-y",`${l}px`),u.value=!1}})}),{default:A(({remaining:i,duration:c})=>[P(a.$slots,"default",{remaining:i,duration:c,open:f(u)})]),_:3},16,["open","type","as","as-child","duration"])]),_:3},8,["present"]))}}),MP=PP,OP=L({__name:"ToastTitle",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(we),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),IP=OP,RP=L({__name:"FocusProxy",emits:["focusFromOutsideViewport"],setup(e,{emit:t}){const n=t,o=Sl();return(r,u)=>(D(),k(f(Yr),{tabindex:"0",style:{position:"fixed"},onFocus:u[0]||(u[0]=a=>{const s=a.relatedTarget;!f(o).viewport.value?.contains(s)&&n("focusFromOutsideViewport")})},{default:A(()=>[P(r.$slots,"default")]),_:3}))}}),C4=RP,LP=L({inheritAttrs:!1,__name:"ToastViewport",props:{hotkey:{type:Array,required:!1,default:()=>["F8"]},label:{type:[String,Function],required:!1,default:"Notifications ({hotkey})"},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"ol"}},setup(e){const t=e,{hotkey:n,label:o}=mt(t),{forwardRef:r,currentElement:u}=ae(),{CollectionSlot:a,getItems:s}=vo(),i=Sl(),c=F(()=>i.toastCount.value>0),l=R(),d=R(),p=F(()=>n.value.join("+").replace(/Key/g,"").replace(/Digit/g,""));sf(n.value,()=>{u.value.focus()}),$e(()=>{i.onViewportChange(u.value)}),Ze(m=>{const g=u.value;if(c.value&&g){const y=()=>{if(!i.isClosePausedRef.value){const w=new CustomEvent(R0);g.dispatchEvent(w),i.isClosePausedRef.value=!0}},E=()=>{if(i.isClosePausedRef.value){const w=new CustomEvent(L0);g.dispatchEvent(w),i.isClosePausedRef.value=!1}},b=w=>{!g.contains(w.relatedTarget)&&E()},v=()=>{g.contains(dt())||E()},C=w=>{const B=w.altKey||w.ctrlKey||w.metaKey;if(w.key==="Tab"&&!B){const _=dt(),S=w.shiftKey;if(w.target===g&&S){l.value?.focus();return}const N=h({tabbingDirection:S?"backwards":"forwards"}),J=N.findIndex(G=>G===_);si(N.slice(J+1))?w.preventDefault():S?l.value?.focus():d.value?.focus()}};g.addEventListener("focusin",y),g.addEventListener("focusout",b),g.addEventListener("pointermove",y),g.addEventListener("pointerleave",v),g.addEventListener("keydown",C),window.addEventListener("blur",y),window.addEventListener("focus",E),m(()=>{g.removeEventListener("focusin",y),g.removeEventListener("focusout",b),g.removeEventListener("pointermove",y),g.removeEventListener("pointerleave",v),g.removeEventListener("keydown",C),window.removeEventListener("blur",y),window.removeEventListener("focus",E)})}});function h({tabbingDirection:m}){const y=s().map(E=>E.ref).map(E=>{const b=[E,...ff(E)];return m==="forwards"?b:b.reverse()});return(m==="forwards"?y.reverse():y).flat()}return(m,g)=>(D(),k(f(p7),{role:"region","aria-label":typeof f(o)=="string"?f(o).replace("{hotkey}",p.value):f(o)(p.value),tabindex:"-1",style:mn({pointerEvents:c.value?void 0:"none"})},{default:A(()=>[c.value?(D(),k(C4,{key:0,ref:y=>{l.value=f(an)(y)},onFocusFromOutsideViewport:g[0]||(g[0]=()=>{const y=h({tabbingDirection:"forwards"});f(si)(y)})},null,512)):Y("v-if",!0),q(f(a),null,{default:A(()=>[q(f(we),j({ref:f(r),tabindex:"-1",as:m.as,"as-child":m.asChild},m.$attrs),{default:A(()=>[P(m.$slots,"default")]),_:3},16,["as","as-child"])]),_:3}),c.value?(D(),k(C4,{key:1,ref:y=>{d.value=f(an)(y)},onFocusFromOutsideViewport:g[1]||(g[1]=()=>{const y=h({tabbingDirection:"backwards"});f(si)(y)})},null,512)):Y("v-if",!0)]),_:3},8,["aria-label","style"]))}}),qP=LP,$P=L({__name:"TooltipArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const t=e;return ae(),(n,o)=>(D(),k(f(Bl),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),NP=$P;const[hs,jP]=lt("TooltipProvider");var VP=L({inheritAttrs:!1,__name:"TooltipProvider",props:{delayDuration:{type:Number,required:!1,default:700},skipDelayDuration:{type:Number,required:!1,default:300},disableHoverableContent:{type:Boolean,required:!1,default:!1},disableClosingTrigger:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},ignoreNonKeyboardFocus:{type:Boolean,required:!1,default:!1},content:{type:Object,required:!1}},setup(e){const t=e,{delayDuration:n,skipDelayDuration:o,disableHoverableContent:r,disableClosingTrigger:u,ignoreNonKeyboardFocus:a,disabled:s,content:i}=mt(t);ae();const c=R(!0),l=R(!1),{start:d,stop:p}=El(()=>{c.value=!0},o,{immediate:!1});return jP({isOpenDelayed:c,delayDuration:n,onOpen(){p(),c.value=!1},onClose(){d()},isPointerInTransitRef:l,disableHoverableContent:r,disableClosingTrigger:u,disabled:s,ignoreNonKeyboardFocus:a,content:i}),(h,m)=>P(h.$slots,"default")}}),zP=VP;const Z1="tooltip.open",[Tl,UP]=lt("TooltipRoot");var HP=L({__name:"TooltipRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},delayDuration:{type:Number,required:!1,default:void 0},disableHoverableContent:{type:Boolean,required:!1,default:void 0},disableClosingTrigger:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1,default:void 0},ignoreNonKeyboardFocus:{type:Boolean,required:!1,default:void 0}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t;ae();const r=hs(),u=F(()=>n.disableHoverableContent??r.disableHoverableContent.value),a=F(()=>n.disableClosingTrigger??r.disableClosingTrigger.value),s=F(()=>n.disabled??r.disabled.value),i=F(()=>n.delayDuration??r.delayDuration.value),c=F(()=>n.ignoreNonKeyboardFocus??r.ignoreNonKeyboardFocus.value),l=Lt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0});ye(l,v=>{r.onClose&&(v?(r.onOpen(),document.dispatchEvent(new CustomEvent(Z1))):r.onClose())});const d=R(!1),p=R(),h=F(()=>l.value?d.value?"delayed-open":"instant-open":"closed"),{start:m,stop:g}=El(()=>{d.value=!0,l.value=!0},i,{immediate:!1});function y(){g(),d.value=!1,l.value=!0}function E(){g(),l.value=!1}function b(){m()}return UP({contentId:"",open:l,stateAttribute:h,trigger:p,onTriggerChange(v){p.value=v},onTriggerEnter(){r.isOpenDelayed.value?b():y()},onTriggerLeave(){u.value?E():g()},onOpen:y,onClose:E,disableHoverableContent:u,disableClosingTrigger:a,disabled:s,ignoreNonKeyboardFocus:c}),(v,C)=>(D(),k(f(cs),null,{default:A(()=>[P(v.$slots,"default",{open:f(l)})]),_:3}))}}),KP=HP,WP=L({__name:"TooltipContentImpl",props:{ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1,default:void 0},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1,default:void 0},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1,default:void 0},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},emits:["escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,o=t,r=Tl(),u=hs(),{forwardRef:a,currentElement:s}=ae(),i=F(()=>n.ariaLabel||s.value?.textContent),c=F(()=>{const{ariaLabel:l,...d}=n;return wt(d,u.content.value??{},{side:"top",sideOffset:0,align:"center",avoidCollisions:!0,collisionBoundary:[],collisionPadding:0,arrowPadding:0,sticky:"partial",hideWhenDetached:!1})});return $e(()=>{At(window,"scroll",l=>{l.target?.contains(r.trigger.value)&&r.onClose()},{capture:!0}),At(window,Z1,r.onClose)}),(l,d)=>(D(),k(f(Vu),{"as-child":"","disable-outside-pointer-events":!1,onEscapeKeyDown:d[0]||(d[0]=p=>o("escapeKeyDown",p)),onPointerDownOutside:d[1]||(d[1]=p=>{f(r).disableClosingTrigger.value&&f(r).trigger.value?.contains(p.target)&&p.preventDefault(),o("pointerDownOutside",p)}),onFocusOutside:d[2]||(d[2]=On(()=>{},["prevent"])),onDismiss:d[3]||(d[3]=p=>f(r).onClose())},{default:A(()=>[q(f(Al),j({ref:f(a),"data-state":f(r).stateAttribute.value},{...l.$attrs,...c.value},{style:{"--reka-tooltip-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-tooltip-content-available-width":"var(--reka-popper-available-width)","--reka-tooltip-content-available-height":"var(--reka-popper-available-height)","--reka-tooltip-trigger-width":"var(--reka-popper-anchor-width)","--reka-tooltip-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:A(()=>[P(l.$slots,"default"),q(f(Yr),{id:f(r).contentId,role:"tooltip"},{default:A(()=>[Ke(Fe(i.value),1)]),_:1},8,["id"])]),_:3},16,["data-state"])]),_:3}))}}),X1=WP,GP=L({__name:"TooltipContentHoverable",props:{ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},setup(e){const n=ln(e),{forwardRef:o,currentElement:r}=ae(),{trigger:u,onClose:a}=Tl(),s=hs(),{isPointerInTransit:i,onPointerExit:c}=Z3(u,r);return s.isPointerInTransitRef=i,c(()=>{a()}),(l,d)=>(D(),k(X1,j({ref:f(o)},f(n)),{default:A(()=>[P(l.$slots,"default")]),_:3},16))}}),YP=GP,ZP=L({__name:"TooltipContent",props:{forceMount:{type:Boolean,required:!1},ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},emits:["escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,o=t,r=Tl(),u=it(n,o),{forwardRef:a}=ae();return(s,i)=>(D(),k(f(_n),{present:s.forceMount||f(r).open.value},{default:A(()=>[(D(),k(Rt(f(r).disableHoverableContent.value?X1:YP),j({ref:f(a)},f(u)),{default:A(()=>[P(s.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),XP=ZP,JP=L({__name:"TooltipPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(zu),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),QP=JP,eM=L({__name:"TooltipTrigger",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=Tl(),o=hs();n.contentId||=sn(void 0,"reka-tooltip-content");const{forwardRef:r,currentElement:u}=ae(),a=R(!1),s=R(!1),i=F(()=>n.disabled.value?{}:{click:g,focus:h,pointermove:d,pointerleave:p,pointerdown:l,blur:m});$e(()=>{n.onTriggerChange(u.value)});function c(){setTimeout(()=>{a.value=!1},1)}function l(){n.open&&!n.disableClosingTrigger.value&&n.onClose(),a.value=!0,document.addEventListener("pointerup",c,{once:!0})}function d(y){y.pointerType!=="touch"&&!s.value&&!o.isPointerInTransitRef.value&&(n.onTriggerEnter(),s.value=!0)}function p(){n.onTriggerLeave(),s.value=!1}function h(y){a.value||n.ignoreNonKeyboardFocus.value&&!y.target.matches?.(":focus-visible")||n.onOpen()}function m(){n.onClose()}function g(){n.disableClosingTrigger.value||n.onClose()}return(y,E)=>(D(),k(f(ds),{"as-child":"",reference:y.reference},{default:A(()=>[q(f(we),j({ref:f(r),"aria-describedby":f(n).open.value?f(n).contentId:void 0,"data-state":f(n).stateAttribute.value,as:y.as,"as-child":t.asChild,"data-grace-area-trigger":""},as(i.value)),{default:A(()=>[P(y.$slots,"default")]),_:3},16,["aria-describedby","data-state","as","as-child"])]),_:3},8,["reference"]))}}),tM=eM;function nM(e,t){const n=q0(e),o=q0(t);return J1(n,o)}function J1(e,t){const n=[],o=new Set([...Object.keys(e.props||{}),...Object.keys(t.props||{})]);if(e.props&&t.props)for(const r of o){const u=e.props[r],a=t.props[r];u&&a?n.push(...J1(e.props?.[r],t.props?.[r])):(u||a)&&n.push(new x4((a||u).key,u?"removed":"added",a,u))}return o.size===0&&e.hash!==t.hash&&n.push(new x4((t||e).key,"changed",t,e)),n}function q0(e,t=""){if(e&&typeof e!="object")return new w4(t,e,Si(e));const n={},o=[];for(const r in e)n[r]=q0(e[r],t?`${t}.${r}`:r),o.push(n[r].hash);return new w4(t,e,`{${o.join(":")}}`,n)}class x4{constructor(t,n,o,r){this.key=t,this.type=n,this.newValue=o,this.oldValue=r}toString(){return this.toJSON()}toJSON(){switch(this.type){case"added":return`Added \`${this.key}\``;case"removed":return`Removed \`${this.key}\``;case"changed":return`Changed \`${this.key}\` from \`${this.oldValue?.toString()||"-"}\` to \`${this.newValue.toString()}\``}}}class w4{constructor(t,n,o,r){this.key=t,this.value=n,this.hash=o,this.props=r}toString(){return this.props?`{${Object.keys(this.props).join(",")}}`:JSON.stringify(this.value)}toJSON(){const t=this.key||".";return this.props?`${t}({${Object.keys(this.props).join(",")}})`:`${t}(${this.value})`}}function Q1(e,t,n=0){const o={[t?.labelAttribute||"title"]:"label",path:"to"},r=Object.keys(e).reduce((a,s)=>{if(e[s]){const i=o[s]||s;a[i]=e[s]}return a},{});return(typeof t?.deep>"u"||nQ1(a,t,n+1)):r.children=[],r}function ms(e,t){const n={...e};for(const o of t)delete n[o];return n}function jt(e,t,n){typeof t=="string"&&(t=t.split(".").map(r=>{const u=Number(r);return Number.isNaN(u)?r:u}));let o=e;for(const r of t){if(o==null)return n;o=o[r]}return o!==void 0?o:n}function uH(e){const t=Number.parseFloat(e);return Number.isNaN(t)?e:t}function eb(e){return Array.isArray(e[0])}function Li(e,t){return!e&&!t?"":[...Array.isArray(e)?e:[e],t].filter(Boolean)}function $0(e){return e.map(t=>{if(!t.children||typeof t.children=="string")return t.children||"";if(Array.isArray(t.children))return $0(t.children);if(t.children.default)return $0(t.children.default())}).join("")}function oM(e,t){return Object.entries(e).reduce((n,[o,r])=>(n[o]=typeof r=="function"?r({class:t?.[o]}):r,n),{...t||{}})}function D4(e,t){if(e?.startsWith("/")&&!e.startsWith("//")){const n=iy(Vd(t||"/"));if(n!=="/"&&!e.startsWith(n))return cr(n,e)}return e}const[rM]=lt("UTheme","RootContext");function Et(e,t){const{ui:n}=rM({ui:F(()=>({}))});return F(()=>{const o=jt(n.value,e)||{};return wt(t.ui??{},o)})}function uM(){const e=R(!1),t=Pe();function n(u,a,s){const i=[...new Set([s?.title,...u.titles].filter(Boolean))];return{prefix:i?.length?i.join(" > ")+" >":void 0,label:u.id===a.path?a.title:u.title,suffix:u.content.replaceAll("<","<").replaceAll(">",">"),to:u.id,icon:a.icon||s?.icon||(u.level>1?t.ui.icons.hash:t.ui.icons.file),level:u.level}}function o(u,a,s){return u.flatMap(i=>i.children?.length?o(i.children,a,i):a?.filter(c=>c.id===i.path||c.id.startsWith(`${i.path}#`))?.map(c=>n(c,i,s))||[])}function r(u,a){return u?a:a?.filter(s=>s.level===1)}return{open:e,mapFile:n,mapNavigationItems:o,postFilter:r}}const aM=Nu(uM);function sM(e){return(t,n)=>iM(t,n,f(e))}function iM(e,t,n){return jt(n,`messages.${e}`,e).replace(/\{(\w+)\}/g,(r,u)=>`${t?.[u]??`{${u}}`}`)}function lM(e){const t=F(()=>f(e).name),n=F(()=>f(e).code),o=F(()=>f(e).dir);return{lang:t,code:n,dir:o,locale:rt(e)?e:R(e),t:sM(e)}}function be(e){return wt(e,{dir:"ltr"})}const Fu=be({name:"English",code:"en",messages:{alert:{close:"Close"},authForm:{hidePassword:"Hide password",showPassword:"Show password",submit:"Continue"},banner:{close:"Close"},calendar:{nextMonth:"Next month",nextYear:"Next year",prevMonth:"Previous month",prevYear:"Previous year"},carousel:{dots:"Choose slide to display",goto:"Go to slide {slide}",next:"Next",prev:"Prev"},chatPrompt:{placeholder:"Type your message here…"},chatPromptSubmit:{label:"Send prompt"},colorMode:{dark:"Dark",light:"Light",switchToDark:"Switch to dark mode",switchToLight:"Switch to light mode",system:"System"},commandPalette:{back:"Back",close:"Close",noData:"No data",noMatch:"No matching data",placeholder:"Type a command or search…"},contentSearch:{links:"Links",theme:"Theme"},contentSearchButton:{label:"Search…"},contentToc:{title:"On this page"},dropdownMenu:{noMatch:"No matching data",search:"Search…"},dashboardSearch:{theme:"Theme"},dashboardSearchButton:{label:"Search…"},dashboardSidebarCollapse:{collapse:"Collapse sidebar",expand:"Expand sidebar"},dashboardSidebarToggle:{close:"Close sidebar",open:"Open sidebar"},error:{clear:"Back to home"},fileUpload:{removeFile:"Remove {filename}"},header:{close:"Close menu",open:"Open menu"},inputMenu:{create:'Create "{label}"',noData:"No data",noMatch:"No matching data"},inputNumber:{decrement:"Decrement",increment:"Increment"},modal:{close:"Close"},pricingTable:{caption:"Pricing plan comparison"},prose:{codeCollapse:{closeText:"Collapse",name:"code",openText:"Expand"},collapsible:{closeText:"Hide",name:"properties",openText:"Show"},pre:{copy:"Copy code to clipboard"}},chatReasoning:{thinking:"Thinking...",thought:"Thought",thoughtFor:"Thought for {duration}"},sidebar:{close:"Close",toggle:"Toggle"},selectMenu:{create:'Create "{label}"',noData:"No data",noMatch:"No matching data",search:"Search…"},slideover:{close:"Close"},table:{noData:"No data"},toast:{close:"Close"}}}),tb=Symbol.for("nuxt-ui.locale-context"),cM=e=>{const t=e||Ye(Ue(tb,Fu));return lM(F(()=>t.value||Fu))},Vo=Nu(cM);var dM=/\s+/g,fM=e=>typeof e!="string"||!e?e:e.replace(dM," ").trim(),qi=(...e)=>{const t=[],n=o=>{if(!o&&o!==0&&o!==0n)return;if(Array.isArray(o)){for(let u=0,a=o.length;u0?fM(t.join(" ")):void 0},A4=e=>e===!1?"false":e===!0?"true":e===0?"0":e,dn=e=>{if(!e||typeof e!="object")return!0;for(const t in e)return!1;return!0},pM=(e,t)=>{if(e===t)return!0;if(!e||!t)return!1;const n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(let r=0;r{for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)){const o=t[n];n in e?e[n]=qi(e[n],o):e[n]=o}return e},nb=(e,t)=>{for(let n=0;n{const t=[];nb(e,t);const n=[];for(let o=0;o{const n={};for(const o in e){const r=e[o];if(o in t){const u=t[o];Array.isArray(r)||Array.isArray(u)?n[o]=ob(u,r):typeof r=="object"&&typeof u=="object"&&r&&u?n[o]=N0(r,u):n[o]=u+" "+r}else n[o]=r}for(const o in t)o in e||(n[o]=t[o]);return n},mM={twMerge:!0,twMergeConfig:{}};function gM(){let e=null,t={},n=!1;return{get cachedTwMerge(){return e},set cachedTwMerge(o){e=o},get cachedTwMergeConfig(){return t},set cachedTwMergeConfig(o){t=o},get didTwMergeConfigChange(){return n},set didTwMergeConfigChange(o){n=o},reset(){e=null,t={},n=!1}}}var Ao=gM(),vM=e=>{const t=(o,r)=>{const{extend:u=null,slots:a={},variants:s={},compoundVariants:i=[],compoundSlots:c=[],defaultVariants:l={}}=o,d={...mM,...r},p=u?.base?qi(u.base,o?.base):o?.base,h=u?.variants&&!dn(u.variants)?N0(s,u.variants):s,m=u?.defaultVariants&&!dn(u.defaultVariants)?{...u.defaultVariants,...l}:l;!dn(d.twMergeConfig)&&!pM(d.twMergeConfig,Ao.cachedTwMergeConfig)&&(Ao.didTwMergeConfigChange=!0,Ao.cachedTwMergeConfig=d.twMergeConfig);const g=dn(u?.slots),y=dn(a)?{}:{base:qi(o?.base,g&&u?.base),...a},E=g?y:hM({...u?.slots},dn(y)?{base:o?.base}:y),b=dn(u?.compoundVariants)?i:ob(u?.compoundVariants,i),v=w=>{if(dn(h)&&dn(a)&&g)return e(p,w?.class,w?.className)(d);if(b&&!Array.isArray(b))throw new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof b}`);if(c&&!Array.isArray(c))throw new TypeError(`The "compoundSlots" prop must be an array. Received: ${typeof c}`);const B=(G,$=h,I=null,W=null)=>{const K=$[G];if(!K||dn(K))return null;const de=W?.[G]??w?.[G];if(de===null)return null;const le=A4(de);if(typeof le=="object")return null;const ut=m?.[G],Ve=le??A4(ut);return K[Ve||"false"]},x=()=>{if(!h)return null;const G=Object.keys(h),$=[];for(let I=0;I{if(!h||typeof h!="object")return null;const I=[];for(const W in h){const K=B(W,h,G,$),de=G==="base"&&typeof K=="string"?K:K&&K[G];de&&I.push(de)}return I},S={};for(const G in w){const $=w[G];$!==void 0&&(S[G]=$)}const O=(G,$)=>{const I=typeof w?.[G]=="object"?{[G]:w[G]?.initial}:{};return{...m,...S,...I,...$}},H=(G=[],$)=>{const I=[],W=G.length;for(let K=0;K{const $=H(b,G);if(!Array.isArray($))return $;const I={},W=e;for(let K=0;K<$.length;K++){const de=$[K];if(typeof de=="string")I.base=W(I.base,de)(d);else if(typeof de=="object")for(const le in de)I[le]=W(I[le],de[le])(d)}return I},J=G=>{if(c.length<1)return null;const $={},I=O(null,G);for(let W=0;W{const K=N(W),de=J(W);return $(E[I],_(I,W),K?K[I]:void 0,de?de[I]:void 0,W?.class,W?.className)(d)}}return G}return e(p,x(),H(b),w?.class,w?.className)(d)},C=()=>{if(!(!h||typeof h!="object"))return Object.keys(h)};return v.variantKeys=C(),v.extend=u,v.base=p,v.slots=E,v.variants=h,v.defaultVariants=m,v.compoundSlots=c,v.compoundVariants=b,v};return{tv:t,createTV:o=>(r,u)=>t(r,u?N0(o,u):o)}};const yM=(e,t)=>{const n=new Array(e.length+t.length);for(let o=0;o({classGroupId:e,validator:t}),rb=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),$i="-",B4=[],EM="arbitrary..",CM=e=>{const t=wM(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:a=>{if(a.startsWith("[")&&a.endsWith("]"))return xM(a);const s=a.split($i),i=s[0]===""&&s.length>1?1:0;return ub(s,i,t)},getConflictingClassGroupIds:(a,s)=>{if(s){const i=o[a],c=n[a];return i?c?yM(c,i):i:c||B4}return n[a]||B4}}},ub=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;const r=e[t],u=n.nextPart.get(r);if(u){const c=ub(e,t+1,u);if(c)return c}const a=n.validators;if(a===null)return;const s=t===0?e.join($i):e.slice(t).join($i),i=a.length;for(let c=0;ce.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),n=t.indexOf(":"),o=t.slice(0,n);return o?EM+o:void 0})(),wM=e=>{const{theme:t,classGroups:n}=e;return DM(n,t)},DM=(e,t)=>{const n=rb();for(const o in e){const r=e[o];Tf(r,n,o,t)}return n},Tf=(e,t,n,o)=>{const r=e.length;for(let u=0;u{if(typeof e=="string"){BM(e,t,n);return}if(typeof e=="function"){_M(e,t,n,o);return}kM(e,t,n,o)},BM=(e,t,n)=>{const o=e===""?t:ab(t,e);o.classGroupId=n},_M=(e,t,n,o)=>{if(SM(e)){Tf(e(o),t,n,o);return}t.validators===null&&(t.validators=[]),t.validators.push(bM(n,e))},kM=(e,t,n,o)=>{const r=Object.entries(e),u=r.length;for(let a=0;a{let n=e;const o=t.split($i),r=o.length;for(let u=0;u"isThemeGetter"in e&&e.isThemeGetter===!0,TM=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=Object.create(null),o=Object.create(null);const r=(u,a)=>{n[u]=a,t++,t>e&&(t=0,o=n,n=Object.create(null))};return{get(u){let a=n[u];if(a!==void 0)return a;if((a=o[u])!==void 0)return r(u,a),a},set(u,a){u in n?n[u]=a:r(u,a)}}},j0="!",_4=":",FM=[],k4=(e,t,n,o,r)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:o,isExternal:r}),PM=e=>{const{prefix:t,experimentalParseClassName:n}=e;let o=r=>{const u=[];let a=0,s=0,i=0,c;const l=r.length;for(let g=0;gi?c-i:void 0;return k4(u,h,p,m)};if(t){const r=t+_4,u=o;o=a=>a.startsWith(r)?u(a.slice(r.length)):k4(FM,!1,a,void 0,!0)}if(n){const r=o;o=u=>n({className:u,parseClassName:r})}return o},MM=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((n,o)=>{t.set(n,1e6+o)}),n=>{const o=[];let r=[];for(let u=0;u0&&(r.sort(),o.push(...r),r=[]),o.push(a)):r.push(a)}return r.length>0&&(r.sort(),o.push(...r)),o}},OM=e=>({cache:TM(e.cacheSize),parseClassName:PM(e),sortModifiers:MM(e),...CM(e)}),IM=/\s+/,RM=(e,t)=>{const{parseClassName:n,getClassGroupId:o,getConflictingClassGroupIds:r,sortModifiers:u}=t,a=[],s=e.trim().split(IM);let i="";for(let c=s.length-1;c>=0;c-=1){const l=s[c],{isExternal:d,modifiers:p,hasImportantModifier:h,baseClassName:m,maybePostfixModifierPosition:g}=n(l);if(d){i=l+(i.length>0?" "+i:i);continue}let y=!!g,E=o(y?m.substring(0,g):m);if(!E){if(!y){i=l+(i.length>0?" "+i:i);continue}if(E=o(m),!E){i=l+(i.length>0?" "+i:i);continue}y=!1}const b=p.length===0?"":p.length===1?p[0]:u(p).join(":"),v=h?b+j0:b,C=v+E;if(a.indexOf(C)>-1)continue;a.push(C);const w=r(E,y);for(let B=0;B0?" "+i:i)}return i},LM=(...e)=>{let t=0,n,o,r="";for(;t{if(typeof e=="string")return e;let t,n="";for(let o=0;o{let n,o,r,u;const a=i=>{const c=t.reduce((l,d)=>d(l),e());return n=OM(c),o=n.cache.get,r=n.cache.set,u=s,s(i)},s=i=>{const c=o(i);if(c)return c;const l=RM(i,n);return r(i,l),l};return u=a,(...i)=>u(LM(...i))},qM=[],Mt=e=>{const t=n=>n[e]||qM;return t.isThemeGetter=!0,t},ib=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,lb=/^\((?:(\w[\w-]*):)?(.+)\)$/i,$M=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,NM=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,jM=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,VM=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,zM=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,UM=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Wo=e=>$M.test(e),Ie=e=>!!e&&!Number.isNaN(Number(e)),Go=e=>!!e&&Number.isInteger(Number(e)),gc=e=>e.endsWith("%")&&Ie(e.slice(0,-1)),xo=e=>NM.test(e),cb=()=>!0,HM=e=>jM.test(e)&&!VM.test(e),Ff=()=>!1,KM=e=>zM.test(e),WM=e=>UM.test(e),GM=e=>!pe(e)&&!ve(e),YM=e=>mr(e,pb,Ff),pe=e=>ib.test(e),Dr=e=>mr(e,hb,HM),S4=e=>mr(e,oO,Ie),ZM=e=>mr(e,gb,cb),XM=e=>mr(e,mb,Ff),T4=e=>mr(e,db,Ff),JM=e=>mr(e,fb,WM),Vs=e=>mr(e,vb,KM),ve=e=>lb.test(e),aa=e=>eu(e,hb),QM=e=>eu(e,mb),F4=e=>eu(e,db),eO=e=>eu(e,pb),tO=e=>eu(e,fb),zs=e=>eu(e,vb,!0),nO=e=>eu(e,gb,!0),mr=(e,t,n)=>{const o=ib.exec(e);return o?o[1]?t(o[1]):n(o[2]):!1},eu=(e,t,n=!1)=>{const o=lb.exec(e);return o?o[1]?t(o[1]):n:!1},db=e=>e==="position"||e==="percentage",fb=e=>e==="image"||e==="url",pb=e=>e==="length"||e==="size"||e==="bg-size",hb=e=>e==="length",oO=e=>e==="number",mb=e=>e==="family-name",gb=e=>e==="number"||e==="weight",vb=e=>e==="shadow",z0=()=>{const e=Mt("color"),t=Mt("font"),n=Mt("text"),o=Mt("font-weight"),r=Mt("tracking"),u=Mt("leading"),a=Mt("breakpoint"),s=Mt("container"),i=Mt("spacing"),c=Mt("radius"),l=Mt("shadow"),d=Mt("inset-shadow"),p=Mt("text-shadow"),h=Mt("drop-shadow"),m=Mt("blur"),g=Mt("perspective"),y=Mt("aspect"),E=Mt("ease"),b=Mt("animate"),v=()=>["auto","avoid","all","avoid-page","page","left","right","column"],C=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],w=()=>[...C(),ve,pe],B=()=>["auto","hidden","clip","visible","scroll"],x=()=>["auto","contain","none"],_=()=>[ve,pe,i],S=()=>[Wo,"full","auto",..._()],O=()=>[Go,"none","subgrid",ve,pe],H=()=>["auto",{span:["full",Go,ve,pe]},Go,ve,pe],N=()=>[Go,"auto",ve,pe],J=()=>["auto","min","max","fr",ve,pe],G=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],I=()=>["auto",..._()],W=()=>[Wo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",..._()],K=()=>[Wo,"screen","full","dvw","lvw","svw","min","max","fit",..._()],de=()=>[Wo,"screen","full","lh","dvh","lvh","svh","min","max","fit",..._()],le=()=>[e,ve,pe],ut=()=>[...C(),F4,T4,{position:[ve,pe]}],Ve=()=>["no-repeat",{repeat:["","x","y","space","round"]}],ht=()=>["auto","cover","contain",eO,YM,{size:[ve,pe]}],Dt=()=>[gc,aa,Dr],Ne=()=>["","none","full",c,ve,pe],ze=()=>["",Ie,aa,Dr],Z=()=>["solid","dashed","dotted","double"],ce=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],se=()=>[Ie,gc,F4,T4],Ee=()=>["","none",m,ve,pe],Te=()=>["none",Ie,ve,pe],Ge=()=>["none",Ie,ve,pe],T=()=>[Ie,ve,pe],M=()=>[Wo,"full",..._()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[xo],breakpoint:[xo],color:[cb],container:[xo],"drop-shadow":[xo],ease:["in","out","in-out"],font:[GM],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[xo],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[xo],shadow:[xo],spacing:["px",Ie],text:[xo],"text-shadow":[xo],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Wo,pe,ve,y]}],container:["container"],columns:[{columns:[Ie,pe,ve,s]}],"break-after":[{"break-after":v()}],"break-before":[{"break-before":v()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:w()}],overflow:[{overflow:B()}],"overflow-x":[{"overflow-x":B()}],"overflow-y":[{"overflow-y":B()}],overscroll:[{overscroll:x()}],"overscroll-x":[{"overscroll-x":x()}],"overscroll-y":[{"overscroll-y":x()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:S()}],"inset-x":[{"inset-x":S()}],"inset-y":[{"inset-y":S()}],start:[{"inset-s":S(),start:S()}],end:[{"inset-e":S(),end:S()}],"inset-bs":[{"inset-bs":S()}],"inset-be":[{"inset-be":S()}],top:[{top:S()}],right:[{right:S()}],bottom:[{bottom:S()}],left:[{left:S()}],visibility:["visible","invisible","collapse"],z:[{z:[Go,"auto",ve,pe]}],basis:[{basis:[Wo,"full","auto",s,..._()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Ie,Wo,"auto","initial","none",pe]}],grow:[{grow:["",Ie,ve,pe]}],shrink:[{shrink:["",Ie,ve,pe]}],order:[{order:[Go,"first","last","none",ve,pe]}],"grid-cols":[{"grid-cols":O()}],"col-start-end":[{col:H()}],"col-start":[{"col-start":N()}],"col-end":[{"col-end":N()}],"grid-rows":[{"grid-rows":O()}],"row-start-end":[{row:H()}],"row-start":[{"row-start":N()}],"row-end":[{"row-end":N()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":J()}],"auto-rows":[{"auto-rows":J()}],gap:[{gap:_()}],"gap-x":[{"gap-x":_()}],"gap-y":[{"gap-y":_()}],"justify-content":[{justify:[...G(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...G()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":G()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:_()}],px:[{px:_()}],py:[{py:_()}],ps:[{ps:_()}],pe:[{pe:_()}],pbs:[{pbs:_()}],pbe:[{pbe:_()}],pt:[{pt:_()}],pr:[{pr:_()}],pb:[{pb:_()}],pl:[{pl:_()}],m:[{m:I()}],mx:[{mx:I()}],my:[{my:I()}],ms:[{ms:I()}],me:[{me:I()}],mbs:[{mbs:I()}],mbe:[{mbe:I()}],mt:[{mt:I()}],mr:[{mr:I()}],mb:[{mb:I()}],ml:[{ml:I()}],"space-x":[{"space-x":_()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":_()}],"space-y-reverse":["space-y-reverse"],size:[{size:W()}],"inline-size":[{inline:["auto",...K()]}],"min-inline-size":[{"min-inline":["auto",...K()]}],"max-inline-size":[{"max-inline":["none",...K()]}],"block-size":[{block:["auto",...de()]}],"min-block-size":[{"min-block":["auto",...de()]}],"max-block-size":[{"max-block":["none",...de()]}],w:[{w:[s,"screen",...W()]}],"min-w":[{"min-w":[s,"screen","none",...W()]}],"max-w":[{"max-w":[s,"screen","none","prose",{screen:[a]},...W()]}],h:[{h:["screen","lh",...W()]}],"min-h":[{"min-h":["screen","lh","none",...W()]}],"max-h":[{"max-h":["screen","lh",...W()]}],"font-size":[{text:["base",n,aa,Dr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[o,nO,ZM]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",gc,pe]}],"font-family":[{font:[QM,XM,t]}],"font-features":[{"font-features":[pe]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[r,ve,pe]}],"line-clamp":[{"line-clamp":[Ie,"none",ve,S4]}],leading:[{leading:[u,..._()]}],"list-image":[{"list-image":["none",ve,pe]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",ve,pe]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:le()}],"text-color":[{text:le()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Z(),"wavy"]}],"text-decoration-thickness":[{decoration:[Ie,"from-font","auto",ve,Dr]}],"text-decoration-color":[{decoration:le()}],"underline-offset":[{"underline-offset":[Ie,"auto",ve,pe]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:_()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ve,pe]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ve,pe]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:ut()}],"bg-repeat":[{bg:Ve()}],"bg-size":[{bg:ht()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Go,ve,pe],radial:["",ve,pe],conic:[Go,ve,pe]},tO,JM]}],"bg-color":[{bg:le()}],"gradient-from-pos":[{from:Dt()}],"gradient-via-pos":[{via:Dt()}],"gradient-to-pos":[{to:Dt()}],"gradient-from":[{from:le()}],"gradient-via":[{via:le()}],"gradient-to":[{to:le()}],rounded:[{rounded:Ne()}],"rounded-s":[{"rounded-s":Ne()}],"rounded-e":[{"rounded-e":Ne()}],"rounded-t":[{"rounded-t":Ne()}],"rounded-r":[{"rounded-r":Ne()}],"rounded-b":[{"rounded-b":Ne()}],"rounded-l":[{"rounded-l":Ne()}],"rounded-ss":[{"rounded-ss":Ne()}],"rounded-se":[{"rounded-se":Ne()}],"rounded-ee":[{"rounded-ee":Ne()}],"rounded-es":[{"rounded-es":Ne()}],"rounded-tl":[{"rounded-tl":Ne()}],"rounded-tr":[{"rounded-tr":Ne()}],"rounded-br":[{"rounded-br":Ne()}],"rounded-bl":[{"rounded-bl":Ne()}],"border-w":[{border:ze()}],"border-w-x":[{"border-x":ze()}],"border-w-y":[{"border-y":ze()}],"border-w-s":[{"border-s":ze()}],"border-w-e":[{"border-e":ze()}],"border-w-bs":[{"border-bs":ze()}],"border-w-be":[{"border-be":ze()}],"border-w-t":[{"border-t":ze()}],"border-w-r":[{"border-r":ze()}],"border-w-b":[{"border-b":ze()}],"border-w-l":[{"border-l":ze()}],"divide-x":[{"divide-x":ze()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":ze()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Z(),"hidden","none"]}],"divide-style":[{divide:[...Z(),"hidden","none"]}],"border-color":[{border:le()}],"border-color-x":[{"border-x":le()}],"border-color-y":[{"border-y":le()}],"border-color-s":[{"border-s":le()}],"border-color-e":[{"border-e":le()}],"border-color-bs":[{"border-bs":le()}],"border-color-be":[{"border-be":le()}],"border-color-t":[{"border-t":le()}],"border-color-r":[{"border-r":le()}],"border-color-b":[{"border-b":le()}],"border-color-l":[{"border-l":le()}],"divide-color":[{divide:le()}],"outline-style":[{outline:[...Z(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Ie,ve,pe]}],"outline-w":[{outline:["",Ie,aa,Dr]}],"outline-color":[{outline:le()}],shadow:[{shadow:["","none",l,zs,Vs]}],"shadow-color":[{shadow:le()}],"inset-shadow":[{"inset-shadow":["none",d,zs,Vs]}],"inset-shadow-color":[{"inset-shadow":le()}],"ring-w":[{ring:ze()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:le()}],"ring-offset-w":[{"ring-offset":[Ie,Dr]}],"ring-offset-color":[{"ring-offset":le()}],"inset-ring-w":[{"inset-ring":ze()}],"inset-ring-color":[{"inset-ring":le()}],"text-shadow":[{"text-shadow":["none",p,zs,Vs]}],"text-shadow-color":[{"text-shadow":le()}],opacity:[{opacity:[Ie,ve,pe]}],"mix-blend":[{"mix-blend":[...ce(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ce()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Ie]}],"mask-image-linear-from-pos":[{"mask-linear-from":se()}],"mask-image-linear-to-pos":[{"mask-linear-to":se()}],"mask-image-linear-from-color":[{"mask-linear-from":le()}],"mask-image-linear-to-color":[{"mask-linear-to":le()}],"mask-image-t-from-pos":[{"mask-t-from":se()}],"mask-image-t-to-pos":[{"mask-t-to":se()}],"mask-image-t-from-color":[{"mask-t-from":le()}],"mask-image-t-to-color":[{"mask-t-to":le()}],"mask-image-r-from-pos":[{"mask-r-from":se()}],"mask-image-r-to-pos":[{"mask-r-to":se()}],"mask-image-r-from-color":[{"mask-r-from":le()}],"mask-image-r-to-color":[{"mask-r-to":le()}],"mask-image-b-from-pos":[{"mask-b-from":se()}],"mask-image-b-to-pos":[{"mask-b-to":se()}],"mask-image-b-from-color":[{"mask-b-from":le()}],"mask-image-b-to-color":[{"mask-b-to":le()}],"mask-image-l-from-pos":[{"mask-l-from":se()}],"mask-image-l-to-pos":[{"mask-l-to":se()}],"mask-image-l-from-color":[{"mask-l-from":le()}],"mask-image-l-to-color":[{"mask-l-to":le()}],"mask-image-x-from-pos":[{"mask-x-from":se()}],"mask-image-x-to-pos":[{"mask-x-to":se()}],"mask-image-x-from-color":[{"mask-x-from":le()}],"mask-image-x-to-color":[{"mask-x-to":le()}],"mask-image-y-from-pos":[{"mask-y-from":se()}],"mask-image-y-to-pos":[{"mask-y-to":se()}],"mask-image-y-from-color":[{"mask-y-from":le()}],"mask-image-y-to-color":[{"mask-y-to":le()}],"mask-image-radial":[{"mask-radial":[ve,pe]}],"mask-image-radial-from-pos":[{"mask-radial-from":se()}],"mask-image-radial-to-pos":[{"mask-radial-to":se()}],"mask-image-radial-from-color":[{"mask-radial-from":le()}],"mask-image-radial-to-color":[{"mask-radial-to":le()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":C()}],"mask-image-conic-pos":[{"mask-conic":[Ie]}],"mask-image-conic-from-pos":[{"mask-conic-from":se()}],"mask-image-conic-to-pos":[{"mask-conic-to":se()}],"mask-image-conic-from-color":[{"mask-conic-from":le()}],"mask-image-conic-to-color":[{"mask-conic-to":le()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:ut()}],"mask-repeat":[{mask:Ve()}],"mask-size":[{mask:ht()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",ve,pe]}],filter:[{filter:["","none",ve,pe]}],blur:[{blur:Ee()}],brightness:[{brightness:[Ie,ve,pe]}],contrast:[{contrast:[Ie,ve,pe]}],"drop-shadow":[{"drop-shadow":["","none",h,zs,Vs]}],"drop-shadow-color":[{"drop-shadow":le()}],grayscale:[{grayscale:["",Ie,ve,pe]}],"hue-rotate":[{"hue-rotate":[Ie,ve,pe]}],invert:[{invert:["",Ie,ve,pe]}],saturate:[{saturate:[Ie,ve,pe]}],sepia:[{sepia:["",Ie,ve,pe]}],"backdrop-filter":[{"backdrop-filter":["","none",ve,pe]}],"backdrop-blur":[{"backdrop-blur":Ee()}],"backdrop-brightness":[{"backdrop-brightness":[Ie,ve,pe]}],"backdrop-contrast":[{"backdrop-contrast":[Ie,ve,pe]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Ie,ve,pe]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Ie,ve,pe]}],"backdrop-invert":[{"backdrop-invert":["",Ie,ve,pe]}],"backdrop-opacity":[{"backdrop-opacity":[Ie,ve,pe]}],"backdrop-saturate":[{"backdrop-saturate":[Ie,ve,pe]}],"backdrop-sepia":[{"backdrop-sepia":["",Ie,ve,pe]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":_()}],"border-spacing-x":[{"border-spacing-x":_()}],"border-spacing-y":[{"border-spacing-y":_()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",ve,pe]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Ie,"initial",ve,pe]}],ease:[{ease:["linear","initial",E,ve,pe]}],delay:[{delay:[Ie,ve,pe]}],animate:[{animate:["none",b,ve,pe]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[g,ve,pe]}],"perspective-origin":[{"perspective-origin":w()}],rotate:[{rotate:Te()}],"rotate-x":[{"rotate-x":Te()}],"rotate-y":[{"rotate-y":Te()}],"rotate-z":[{"rotate-z":Te()}],scale:[{scale:Ge()}],"scale-x":[{"scale-x":Ge()}],"scale-y":[{"scale-y":Ge()}],"scale-z":[{"scale-z":Ge()}],"scale-3d":["scale-3d"],skew:[{skew:T()}],"skew-x":[{"skew-x":T()}],"skew-y":[{"skew-y":T()}],transform:[{transform:[ve,pe,"","none","gpu","cpu"]}],"transform-origin":[{origin:w()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:M()}],"translate-x":[{"translate-x":M()}],"translate-y":[{"translate-y":M()}],"translate-z":[{"translate-z":M()}],"translate-none":["translate-none"],accent:[{accent:le()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:le()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ve,pe]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":_()}],"scroll-mx":[{"scroll-mx":_()}],"scroll-my":[{"scroll-my":_()}],"scroll-ms":[{"scroll-ms":_()}],"scroll-me":[{"scroll-me":_()}],"scroll-mbs":[{"scroll-mbs":_()}],"scroll-mbe":[{"scroll-mbe":_()}],"scroll-mt":[{"scroll-mt":_()}],"scroll-mr":[{"scroll-mr":_()}],"scroll-mb":[{"scroll-mb":_()}],"scroll-ml":[{"scroll-ml":_()}],"scroll-p":[{"scroll-p":_()}],"scroll-px":[{"scroll-px":_()}],"scroll-py":[{"scroll-py":_()}],"scroll-ps":[{"scroll-ps":_()}],"scroll-pe":[{"scroll-pe":_()}],"scroll-pbs":[{"scroll-pbs":_()}],"scroll-pbe":[{"scroll-pbe":_()}],"scroll-pt":[{"scroll-pt":_()}],"scroll-pr":[{"scroll-pr":_()}],"scroll-pb":[{"scroll-pb":_()}],"scroll-pl":[{"scroll-pl":_()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ve,pe]}],fill:[{fill:["none",...le()]}],"stroke-w":[{stroke:[Ie,aa,Dr,S4]}],stroke:[{stroke:["none",...le()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},rO=(e,{cacheSize:t,prefix:n,experimentalParseClassName:o,extend:r={},override:u={}})=>(ma(e,"cacheSize",t),ma(e,"prefix",n),ma(e,"experimentalParseClassName",o),Us(e.theme,u.theme),Us(e.classGroups,u.classGroups),Us(e.conflictingClassGroups,u.conflictingClassGroups),Us(e.conflictingClassGroupModifiers,u.conflictingClassGroupModifiers),ma(e,"orderSensitiveModifiers",u.orderSensitiveModifiers),Hs(e.theme,r.theme),Hs(e.classGroups,r.classGroups),Hs(e.conflictingClassGroups,r.conflictingClassGroups),Hs(e.conflictingClassGroupModifiers,r.conflictingClassGroupModifiers),yb(e,r,"orderSensitiveModifiers"),e),ma=(e,t,n)=>{n!==void 0&&(e[t]=n)},Us=(e,t)=>{if(t)for(const n in t)ma(e,n,t[n])},Hs=(e,t)=>{if(t)for(const n in t)yb(e,t,n)},yb=(e,t,n)=>{const o=t[n];o!==void 0&&(e[n]=e[n]?e[n].concat(o):o)},uO=(e,...t)=>typeof e=="function"?V0(z0,e,...t):V0(()=>rO(z0(),e),...t),aO=V0(z0);var sO=e=>dn(e)?aO:uO({...e,extend:{theme:e.theme,classGroups:e.classGroups,conflictingClassGroupModifiers:e.conflictingClassGroupModifiers,conflictingClassGroups:e.conflictingClassGroups,...e.extend}}),iO=(e,t)=>{const n=qi(e);return!n||!(t?.twMerge??!0)?n:((!Ao.cachedTwMerge||Ao.didTwMergeConfigChange)&&(Ao.didTwMergeConfigChange=!1,Ao.cachedTwMerge=sO(Ao.cachedTwMergeConfig)),Ao.cachedTwMerge(n)||void 0)},lO=(...e)=>t=>iO(e,t),{createTV:cO}=vM(lO);const dO=c3,Se=cO(dO.ui?.tv);function bb(e){const t=Pe(),n=F(()=>ke(e)),o=F(()=>n.value.icon&&n.value.leading||n.value.icon&&!n.value.trailing||n.value.loading&&!n.value.trailing||!!n.value.leadingIcon),r=F(()=>n.value.icon&&n.value.trailing||n.value.loading&&n.value.trailing||!!n.value.trailingIcon),u=F(()=>n.value.loading?n.value.loadingIcon||t.ui.icons.loading:n.value.leadingIcon||n.value.icon),a=F(()=>n.value.loading&&!o.value?n.value.loadingIcon||t.ui.icons.loading:n.value.trailingIcon||n.value.icon);return{isLeading:o,isTrailing:r,leadingIconName:u,trailingIconName:a}}const fO=Symbol("nuxt-ui.field-group");function Eb(e){const t=Ue(fO,void 0);return{orientation:F(()=>t?.value.orientation),size:F(()=>e?.size??t?.value.size)}}const pO=Symbol("nuxt-ui.form-options"),hO=Symbol("nuxt-ui.form-events"),P4=Symbol("nuxt-ui.form-field"),mO=Symbol("nuxt-ui.input-id"),gO=Symbol("nuxt-ui.form-loading");function aH(e,t){const n=Ue(pO,void 0),o=Ue(hO,void 0),r=Ue(P4,void 0),u=Ue(mO,void 0);Pt(P4,void 0),r&&u&&(t?.bind===!1?u.value=void 0:e?.id&&(u.value=e?.id));function a(d,p,h){o&&r&&p&&o.emit({type:d,name:p,eager:h})}function s(){a("blur",r?.value.name)}function i(){a("focus",r?.value.name)}function c(){a("change",r?.value.name)}const l=V3(()=>{a("input",r?.value.name,r?.value.eagerValidation)},r?.value.validateOnInputDelay??n?.value.validateOnInputDelay??0);return{id:F(()=>e?.id??u?.value),name:F(()=>e?.name??r?.value.name),size:F(()=>e?.size??r?.value.size),color:F(()=>r?.value.error?"error":e?.color),highlight:F(()=>r?.value.error?!0:e?.highlight),disabled:F(()=>n?.value.disabled||e?.disabled),emitFormBlur:s,emitFormInput:l,emitFormChange:c,emitFormFocus:i,ariaAttrs:F(()=>{if(!r?.value)return;const d=["error","hint","description","help"].filter(h=>r?.value?.[h]).map(h=>`${r?.value.ariaId}-${h}`)||[],p={"aria-invalid":!!r?.value.error};return d.length>0&&(p["aria-describedby"]=d.join(" ")),p})}}const vO=["active","activeClass","ariaCurrentValue","as","disabled","download","exact","exactActiveClass","exactHash","exactQuery","external","form","formaction","formenctype","formmethod","formnovalidate","formtarget","href","hreflang","inactiveClass","media","noPrefetch","noRel","onClick","ping","prefetch","prefetchOn","prefetchedClass","referrerpolicy","rel","replace","target","title","to","trailingSlash","type","viewTransition"];function xu(e){const t=Object.keys(e),n=t.filter(u=>u.startsWith("aria-")),o=t.filter(u=>u.startsWith("data-")),r=[...vO,...n,...o];return Jt(e,...r)}function yO(e,t){const n=nM(e,t).reduce((u,a)=>(a.type==="added"&&u.add(a.key),u),new Set),o=Object.fromEntries(Object.entries(e).filter(([u])=>!n.has(u))),r=Object.fromEntries(Object.entries(t).filter(([u])=>!n.has(u)));return Ur(o,r)}const bO=Object.freeze({left:0,top:0,width:16,height:16}),Cb=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Pf=Object.freeze({...bO,...Cb});Object.freeze({...Pf,body:"",hidden:!1});function EO(e){const[t,n,o,r]=e;if(o!==r){const u=Math.max(o,r);return[t-(u-o)/2,n-(u-r)/2,u,u]}return e}const CO=/(-?[0-9.]*[0-9]+[0-9.]*)/g,xO=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function U0(e,t,n){if(t===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*t*n)/n;if(typeof e!="string")return e;const o=e.split(CO);if(o===null||!o.length)return e;const r=[];let u=o.shift(),a=xO.test(u);for(;;){if(a){const s=parseFloat(u);isNaN(s)?r.push(u):r.push(Math.ceil(s*t*n)/n)}else r.push(u);if(u=o.shift(),u===void 0)return r.join("");a=!a}}const wO=Object.freeze({width:null,height:null}),DO=Object.freeze({...wO,...Cb});function AO(e,t="defs"){let n="";const o=e.indexOf("<"+t);for(;o>=0;){const r=e.indexOf(">",o),u=e.indexOf("",u);if(a===-1)break;n+=e.slice(r+1,u).trim(),e=e.slice(0,o).trim()+e.slice(a+1)}return{defs:n,content:e}}function BO(e,t){return e?""+e+""+t:t}function _O(e,t,n){const o=AO(e);return BO(o.defs,t+o.content+n)}const kO=e=>e==="unset"||e==="undefined"||e==="none";function SO(e,t){const n={...Pf,...e},o={...DO,...t},r={left:n.left,top:n.top,width:n.width,height:n.height};let u=n.body;[n,o].forEach(g=>{const y=[],E=g.hFlip,b=g.vFlip;let v=g.rotate;E?b?v+=2:(y.push("translate("+(r.width+r.left).toString()+" "+(0-r.top).toString()+")"),y.push("scale(-1 1)"),r.top=r.left=0):b&&(y.push("translate("+(0-r.left).toString()+" "+(r.height+r.top).toString()+")"),y.push("scale(1 -1)"),r.top=r.left=0);let C;switch(v<0&&(v-=Math.floor(v/4)*4),v=v%4,v){case 1:C=r.height/2+r.top,y.unshift("rotate(90 "+C.toString()+" "+C.toString()+")");break;case 2:y.unshift("rotate(180 "+(r.width/2+r.left).toString()+" "+(r.height/2+r.top).toString()+")");break;case 3:C=r.width/2+r.left,y.unshift("rotate(-90 "+C.toString()+" "+C.toString()+")");break}v%2===1&&(r.left!==r.top&&(C=r.left,r.left=r.top,r.top=C),r.width!==r.height&&(C=r.width,r.width=r.height,r.height=C)),y.length&&(u=_O(u,'',""))});const a=o.width,s=o.height,i=r.width,c=r.height;let l,d;a===null?(d=s===null?"1em":s==="auto"?c:s,l=U0(d,i/c)):(l=a==="auto"?i:a,d=s===null?U0(l,c/i):s==="auto"?c:s);const p={},h=(g,y)=>{kO(y)||(p[g]=y.toString())};h("width",l),h("height",d);const m=[r.left,r.top,i,c];return p.viewBox=m.join(" "),{attributes:p,viewBox:m,body:u}}function TO(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function FO(e){return"data:image/svg+xml,"+TO(e)}function PO(e){return'url("'+FO(e)+'")'}function MO(e,t){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const o in t)n+=" "+o+'="'+t[o]+'"';return'"+e+""}function OO(e){const t={display:"inline-block",width:"1em",height:"1em"},n=e.varName;switch(e.pseudoSelector&&(t.content="''"),e.mode){case"background":n&&(t["background-image"]="var(--"+n+")"),t["background-repeat"]="no-repeat",t["background-size"]="100% 100%";break;case"mask":t["background-color"]="currentColor",n&&(t["mask-image"]=t["-webkit-mask-image"]="var(--"+n+")"),t["mask-repeat"]=t["-webkit-mask-repeat"]="no-repeat",t["mask-size"]=t["-webkit-mask-size"]="100% 100%";break}return t}function IO(e,t){const n={},o=t.varName,r=SO(e);let u=r.viewBox;u[2]!==u[3]&&(t.forceSquare?u=EO(u):n.width=U0("1em",u[2]/u[3]));const a=PO(MO(r.body.replace(/currentColor/g,t.color||"black"),{viewBox:`${u[0]} ${u[1]} ${u[2]} ${u[3]}`,width:`${u[2]}`,height:`${u[3]}`}));if(o)n["--"+o]=a;else switch(t.mode){case"background":n["background-image"]=a;break;case"mask":n["mask-image"]=n["-webkit-mask-image"]=a;break}return n}const vc={selectorStart:{compressed:"{",compact:" {",expanded:" {"},selectorEnd:{compressed:"}",compact:`; } +`,expanded:`; +} +`},rule:{compressed:"{key}:",compact:" {key}: ",expanded:` + {key}: `}};function RO(e,t="expanded"){const n=[];for(let o=0;o"},"arrow-left-right":{"width":24,"height":24,"body":""},"arrow-right":{"width":24,"height":24,"body":""},"boxes":{"width":24,"height":24,"body":""},"building-2":{"width":24,"height":24,"body":""},"car-front":{"width":24,"height":24,"body":""},"database":{"width":24,"height":24,"body":""},"database-zap":{"width":24,"height":24,"body":""},"flag":{"width":24,"height":24,"body":""},"key-round":{"width":24,"height":24,"body":""},"layers-3":{"width":24,"height":24,"body":"","hidden":true},"map":{"width":24,"height":24,"body":""},"monitor-smartphone":{"width":24,"height":24,"body":""},"network":{"width":24,"height":24,"body":""},"package":{"width":24,"height":24,"body":""},"rocket":{"width":24,"height":24,"body":""},"server":{"width":24,"height":24,"body":""},"server-cog":{"width":24,"height":24,"body":""},"shopping-cart":{"width":24,"height":24,"body":""},"smartphone":{"width":24,"height":24,"body":""},"user-round":{"width":24,"height":24,"body":""},"wallet":{"width":24,"height":24,"body":""},"wrench":{"width":24,"height":24,"body":""}}},{"prefix":"simple-icons","icons":{"github":{"width":24,"height":24,"body":""}}},{"prefix":"custom","icons":{"ai":{"width":20,"height":20,"body":"artificial-intelligence"}}}]');for(const n of t)for(const[o,r]of Object.entries(n.icons))e(n.prefix?n.prefix+":"+o:o,r);M4=!0}async function qO(e,t){if(!e)return null;xb(Va);const n=v0(e);return n||(await aB(e).catch(()=>(console.warn(`[Icon] failed to load icon \`${e}\``),null)),v0(e))}function wb(e){const t=Pe().icon,n=(t.collections||[]).sort((o,r)=>r.length-o.length);return F(()=>{const o=e(),r=o.startsWith(t.cssSelectorPrefix)?o.slice(t.cssSelectorPrefix.length):o,u=t.aliases?.[r]||r;if(!u.includes(":")){const a=n.find(s=>u.startsWith(s+"-"));return a?a+":"+u.slice(a.length+1):u}return u})}function Db(e,t){if(e!==!1)return e===!0||e===null?t:e}let sa;function $O(e){return e.replace(/([^\w-])/g,"\\$1")}function NO(){if(sa)return sa;sa=new Set;const e=n=>{if(n=n.replace(/^:where\((.*)\)$/,"$1").trim(),n.startsWith("."))return n},t=n=>{if(n?.length)for(const o of n){o?.cssRules&&t(o.cssRules);const r=o?.selectorText;if(typeof r=="string"){const u=e(r);u&&sa.add(u)}}};if(typeof document<"u")for(const n of document.styleSheets)try{const o=n.cssRules||n.rules;t(o)}catch{}return sa}const jO=L({name:"NuxtIconCss",props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e){const t=Re(),n=Pe().icon,o=F(()=>e.name?n.cssSelectorPrefix+e.name:"");function r(s){if(!s)return;const i=v0(s);if(i)return i;const c=t.payload?.data?.[s];if(c)return Va(s,c),c}const u=F(()=>"."+$O(o.value));function a(s,i=!0){let c=u.value;n.cssWherePseudo&&(c=`:where(${c})`);const l=LO(s,{iconSelector:c,format:"compressed",customise:Db(e.customize,n.customize)});return n.cssLayer&&i?`@layer ${n.cssLayer} { ${l} }`:l}{const s=NO();async function i(c){if(s.has(u.value)||typeof document>"u")return;const l=document.createElement("style");l.textContent=a(c);const d=document.head.querySelector('style, link[rel="stylesheet"]');d?document.head.insertBefore(l,d):document.head.appendChild(l),s.add(u.value)}ye(()=>e.name,()=>{if(s.has(u.value))return;const c=r(e.name);c?i(c):qO(e.name).then(l=>{l&&i(l)}).catch(()=>null)},{immediate:!0})}return()=>qe("span",{class:["iconify",o.value]})}}),VO=L({name:"NuxtIconSvg",props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e,{slots:t}){const n=Re(),o=Pe().icon,r=wb(()=>e.name),u="i-"+r.value;if(r.value){const a=n.payload.data[u];a?Va(r.value,a):xb(Va)}return()=>qe(bB,{icon:r.value,ssr:!0,customise:Db(e.customize,o.customize)},t)}}),Ab=L({name:"NuxtIcon",props:{name:{type:String,required:!0},mode:{type:String,required:!1,default:null},size:{type:[Number,String],required:!1,default:null},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e,{slots:t}){const n=Re(),o=Pe().icon,r=wb(()=>e.name),u=F(()=>n.vueApp?.component(r.value)||((e.mode||o.mode)==="svg"?VO:jO)),a=F(()=>{const s=e.size||o.size;return s?{fontSize:Number.isNaN(+s)?s:s+"px"}:null});return()=>qe(u.value,{...o.attrs,name:r.value,class:o.class,style:a.value,customize:e.customize},t)}}),zO=Object.freeze(Object.defineProperty({__proto__:null,default:Ab},Symbol.toStringTag,{value:"Module"})),st={__name:"UIcon",props:{name:{type:null,required:!0},mode:{type:String,required:!1},size:{type:[String,Number],required:!1},customize:{type:[Function,Boolean,null],required:!1}},setup(e){const n=ln(Jt(e,"mode","size","customize"));return(o,r)=>{const u=Ab;return typeof e.name=="string"?(D(),k(u,j({key:0,name:e.name},f(n)),null,16,["name"])):(D(),k(Rt(e.name),{key:1}))}}};async function UO(e,t){return await HO(t).catch(o=>(console.error("Failed to get image meta for "+t,o+""),{width:0,height:0,ratio:0}))}async function HO(e){if(typeof Image>"u")throw new TypeError("Image not supported");return new Promise((t,n)=>{const o=new Image;o.onload=()=>{const r={width:o.width,height:o.height,ratio:o.width/o.height};t(r)},o.onerror=r=>n(r),o.src=e})}function O4(e){return(t=>t!==void 0?e[t]||t:e.missingValue)}function KO(e={}){const t=e.formatter,n=e.keyMap&&typeof e.keyMap!="function"?O4(e.keyMap):e.keyMap,o={};for(const r in e.valueMap){const u=r,a=e.valueMap[u];o[u]=typeof a=="object"?O4(a):a}return r=>{const u=[];for(const a in r){const s=a;if(typeof r[s]>"u")continue;const i=typeof o[s]=="function"?o[s](r[s]):r[s];u.push([n?n(s):s,i])}return t?u.map(a=>t(...a)).join(e.joinWith??"&"):new URLSearchParams(u).toString()}}function WO(e=""){if(e===void 0||!e.length)return[];const t=new Set;for(const n of e.split(" ")){const o=Number.parseInt(n.replace("x",""));o&&t.add(o)}return Array.from(t)}function GO(e){if(e.length===0)throw new Error("`densities` must not be empty, configure to `1` to render regular size only (DPR 1.0)")}function Pu(e=""){if(typeof e=="number")return e;if(typeof e=="string"&&e.replace("px","").match(/^\d+$/g))return Number.parseInt(e,10)}function YO(e){const t={};if(typeof e=="string")for(const n of e.split(/[\s,]+/).filter(o=>o)){const o=n.split(":");o.length!==2?t["1px"]=o[0].trim():t[o[0].trim()]=o[1].trim()}else Object.assign(t,e);return t}function ZO(e){const t={options:e},n=(r,u={})=>Bb(t,r,u),o=((r,u,a)=>n(r,wt({modifiers:u},a)).url);for(const r in e.presets)o[r]=((u,a,s)=>o(u,a,{...e.presets[r],...s}));return o.options=e,o.getImage=n,o.getMeta=((r,u)=>XO(t,r,u)),o.getSizes=((r,u)=>QO(t,r,u)),t.$img=o,o}async function XO(e,t,n){const o=Bb(e,t,{...n});return typeof o.getMeta=="function"?await o.getMeta():await UO(e,o.url)}function Bb(e,t,n){if(t&&typeof t!="string")throw new TypeError(`input must be a string (received ${typeof t}: ${JSON.stringify(t)})`);if(!t||t.startsWith("data:"))return{url:t};const{setup:o,defaults:r}=JO(e,n.provider||e.options.provider),u=o(),a=_b(e,n.preset);if(t=Ln(t)?t:iy(t),!u.supportsAlias){for(const l in e.options.alias)if(t.startsWith(l)){const d=e.options.alias[l];d&&(t=cr(d,t.slice(l.length)))}}if(u.validateDomains&&Ln(t)){const l=cl(t).host;if(!e.options.domains.find(d=>d===l))return{url:t}}const s=wt(n,a,r),i={...s,modifiers:{...s.modifiers,width:s.modifiers?.width?Pu(s.modifiers.width):void 0,height:s.modifiers?.height?Pu(s.modifiers.height):void 0}},c=u.getImage(t,i,e);return c.format||=i.modifiers.format||"",c}function JO(e,t){const n=e.options.providers[t];if(!n)throw new Error("Unknown provider: "+t);return n}function _b(e,t){if(!t)return{};if(!e.options.presets[t])throw new Error("Unknown preset: "+t);return e.options.presets[t]}function QO(e,t,n){const o=_b(e,n.preset),r=wt(n,o),u=Pu(r.modifiers?.width),a=Pu(r.modifiers?.height),s=r.sizes?YO(r.sizes):{},i=r.densities?.trim(),c=i?WO(i):e.options.densities;GO(c);const l=u&&a?a/u:0,d=[],p=[];if(Object.keys(s).length>=1){for(const E in s){const b=I4(E,String(s[E]),a,l,e);if(b!==void 0){d.push({size:b.size,screenMaxWidth:b.screenMaxWidth,media:`(max-width: ${b.screenMaxWidth}px)`});for(const v of c)p.push({width:b._cWidth*v,src:R4(e,t,n,b,v)})}}eI(d)}else for(const E of c){const b=Object.keys(s)[0];let v=b?I4(b,String(s[b]),a,l,e):void 0;v===void 0&&(v={size:"",screenMaxWidth:0,_cWidth:n.modifiers?.width,_cHeight:n.modifiers?.height}),p.push({width:E,src:R4(e,t,n,v,E)})}tI(p);const h=p[p.length-1],m=d.length?d.map(E=>`${E.media?E.media+" ":""}${E.size}`).join(", "):void 0,g=m?"w":"x",y=p.map(E=>`${E.src} ${E.width}${g}`).join(", ");return{sizes:m,srcset:y,src:h?.src}}function I4(e,t,n,o,r){const u=r.options.screens&&r.options.screens[e]||Number.parseInt(e),a=t.endsWith("vw");if(!a&&/^\d+$/.test(t)&&(t=t+"px"),!a&&!t.endsWith("px"))return;let s=Number.parseInt(t);if(!u||!s)return;a&&(s=Math.round(s/100*u));const i=o?Math.round(s*o):n;return{size:t,screenMaxWidth:u,_cWidth:s,_cHeight:i}}function R4(e,t,n,o,r){return e.$img(t,{...n.modifiers,width:o._cWidth?o._cWidth*r:void 0,height:o._cHeight?o._cHeight*r:void 0},n)}function eI(e){e.sort((n,o)=>n.screenMaxWidth-o.screenMaxWidth);let t=null;for(let n=e.length-1;n>=0;n--){const o=e[n];o.media===t&&e.splice(n,1),t=o.media}for(let n=0;nn.width-o.width);let t=null;for(let n=e.length-1;n>=0;n--){const o=e[n];o.width===t&&e.splice(n,1),t=o.width}}function nI(e){let t;return()=>t||(t=typeof e=="function"?e():e,t)}const oI=KO({keyMap:{format:"f",width:"w",height:"h",resize:"s",quality:"q",background:"b",position:"pos"},formatter:(e,t)=>Kp(e)+"_"+Kp(t.toString())}),rI=nI({validateDomains:!0,supportsAlias:!0,getImage(e,{modifiers:t,baseURL:n},o){t.width&&t.height&&(t.resize=`${t.width}x${t.height}`,delete t.width,delete t.height);const r=oI(t)||"_";return n||(n=cr(o.options.nuxt.baseURL,"/_ipx")),{url:cr(n,r,Nd(e).replace(/\/{2,}/g,"/"))}}}),uI={screens:{sm:640,md:768,lg:1024,xl:1280,"2xl":1536},presets:{},provider:"ipxStatic",domains:[],alias:{},densities:[1,2],format:["webp"],provider:"ipxStatic",providers:{ipxStatic:{setup:rI,defaults:{}}}},kb=e=>{const t=Bn(),n=Re();return n.$img||n._img||(n._img=ZO({...uI,event:n.ssrContext?.event,nuxt:{baseURL:t.app.baseURL},runtimeConfig:t}))};function aI(e){performance?.mark?.("mark_feature_usage",{detail:{feature:e}})}const sI=e=>{const t=kb(),n=F(()=>({provider:e.provider,preset:e.preset})),o=F(()=>({width:Pu(e.width),height:Pu(e.height),crossorigin:e.crossorigin===!0?"anonymous":e.crossorigin||void 0,nonce:e.nonce})),r=F(()=>({...e.modifiers,width:e.width,height:e.height,format:e.format,quality:e.quality||t.options.quality,background:e.background,fit:e.fit}));return{providerOptions:n,normalizedAttrs:o,imageModifiers:r}},iI=["src"],lI={__name:"NuxtImg",props:{custom:{type:Boolean,required:!1},placeholder:{type:[Boolean,String,Number,Array],required:!1},placeholderClass:{type:String,required:!1},src:{type:String,required:!1},format:{type:String,required:!1},quality:{type:[String,Number],required:!1},background:{type:String,required:!1},fit:{type:String,required:!1},modifiers:{type:Object,required:!1},preset:{type:String,required:!1},provider:{type:null,required:!1},sizes:{type:[String,Object],required:!1},densities:{type:String,required:!1},preload:{type:[Boolean,Object],required:!1},width:{type:[String,Number],required:!1},height:{type:[String,Number],required:!1},crossorigin:{type:[String,Boolean],required:!1},nonce:{type:String,required:!1}},emits:["load","error"],setup(e,{expose:t,emit:n}){const o=e,r=n,u=kb(),{providerOptions:a,normalizedAttrs:s,imageModifiers:i}=sI(o),c=F(()=>u.getSizes(o.src,{...a.value,sizes:o.sizes,densities:o.densities,modifiers:i.value})),l=R(!1),d=hv(),p=F(()=>({...s.value,"data-nuxt-img":"",...!o.placeholder||l.value?{sizes:c.value.sizes,srcset:c.value.srcset}:{},...d})),h=F(()=>{if(l.value)return!1;const b=o.placeholder===""?[10,10]:o.placeholder;if(!b)return!1;if(typeof b=="string")return b;const[v=10,C=v,w=50,B=3]=Array.isArray(b)?b:typeof b=="number"?[b]:[];return u(o.src,{...i.value,width:v,height:C,quality:w,blur:B},a.value)}),m=F(()=>o.sizes?c.value.src:u(o.src,i.value,a.value)),g=F(()=>h.value||m.value),y=Re().isHydrating,E=rv("imgEl");return t({imgEl:E}),$e(()=>{if(h.value||o.custom){const b=new Image;m.value&&(b.src=m.value),o.sizes&&(b.sizes=c.value.sizes||"",b.srcset=c.value.srcset),b.decode?b.decode().then(()=>{l.value=!0,r("load",new Event("load"))}).catch(v=>{r("error",v)}):(b.onload=v=>{l.value=!0,r("load",v)},b.onerror=v=>{r("error",v)}),aI("nuxt-image");return}E.value&&(E.value.complete&&y&&(E.value.getAttribute("data-error")?r("error",new Event("error")):r("load",new Event("load"))),E.value.onload=b=>{r("load",b)},E.value.onerror=b=>{r("error",b)})}),(b,v)=>e.custom?P(b.$slots,"default",me(j({key:1},{imgAttrs:p.value,isLoaded:l.value,src:g.value}))):(D(),re("img",j({key:0,ref_key:"imgEl",ref:E,class:h.value?e.placeholderClass:void 0},p.value,{src:g.value}),null,16,iI))}},H0=Object.assign(lI,{__name:"NuxtImg"}),L4=Symbol("nuxt-ui.avatar-group");function Sb(e){const t=Ue(L4,void 0),n=F(()=>e.size??t?.value.size);return Pt(L4,F(()=>({size:n.value}))),{size:n}}const cI={slots:{root:"relative inline-flex items-center justify-center shrink-0",base:"rounded-full ring ring-bg flex items-center justify-center text-inverted font-medium whitespace-nowrap"},variants:{color:{primary:"bg-primary",secondary:"bg-secondary",success:"bg-success",info:"bg-info",warning:"bg-warning",error:"bg-error",neutral:"bg-inverted"},size:{"3xs":"h-[4px] min-w-[4px] text-[4px]","2xs":"h-[5px] min-w-[5px] text-[5px]",xs:"h-[6px] min-w-[6px] text-[6px]",sm:"h-[7px] min-w-[7px] text-[7px]",md:"h-[8px] min-w-[8px] text-[8px]",lg:"h-[9px] min-w-[9px] text-[9px]",xl:"h-[10px] min-w-[10px] text-[10px]","2xl":"h-[11px] min-w-[11px] text-[11px]","3xl":"h-[12px] min-w-[12px] text-[12px]"},position:{"top-right":"top-0 right-0","bottom-right":"bottom-0 right-0","top-left":"top-0 left-0","bottom-left":"bottom-0 left-0"},inset:{false:""},standalone:{false:"absolute"}},compoundVariants:[{position:"top-right",inset:!1,class:"-translate-y-1/2 translate-x-1/2 transform"},{position:"bottom-right",inset:!1,class:"translate-y-1/2 translate-x-1/2 transform"},{position:"top-left",inset:!1,class:"-translate-y-1/2 -translate-x-1/2 transform"},{position:"bottom-left",inset:!1,class:"translate-y-1/2 -translate-x-1/2 transform"}],defaultVariants:{size:"md",color:"primary",position:"top-right"}},Tb=Object.assign({inheritAttrs:!1},{__name:"UChip",props:vv({as:{type:null,required:!1},text:{type:[String,Number],required:!1},color:{type:null,required:!1},size:{type:null,required:!1},position:{type:null,required:!1},inset:{type:Boolean,required:!1,default:!1},standalone:{type:Boolean,required:!1,default:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},{show:{type:Boolean,default:!0},showModifiers:{}}),emits:["update:show"],setup(e){const t=e,n=xv(e,"show",{type:Boolean,default:!0}),{size:o}=Sb(t),r=Pe(),u=Et("chip",t),a=F(()=>Se({extend:Se(cI),...r.ui?.chip||{}})({color:t.color,size:o.value,position:t.position,inset:t.inset,standalone:t.standalone}));return(s,i)=>(D(),k(f(we),{as:e.as,"data-slot":"root",class:U(a.value.root({class:[f(u)?.root,t.class]}))},{default:A(()=>[q(f(Ha),me(xe(s.$attrs)),{default:A(()=>[P(s.$slots,"default")]),_:3},16),n.value?(D(),re("span",{key:0,"data-slot":"base",class:U(a.value.base({class:f(u)?.base}))},[P(s.$slots,"content",{},()=>[Ke(Fe(e.text),1)])],2)):Y("",!0)]),_:3},8,["as","class"]))}}),dI={slots:{root:"inline-flex items-center justify-center shrink-0 select-none rounded-full align-middle bg-elevated",image:"h-full w-full rounded-[inherit] object-cover",fallback:"font-medium leading-none text-muted truncate",icon:"text-muted shrink-0"},variants:{size:{"3xs":{root:"size-4 text-[8px]"},"2xs":{root:"size-5 text-[10px]"},xs:{root:"size-6 text-xs"},sm:{root:"size-7 text-sm"},md:{root:"size-8 text-base"},lg:{root:"size-9 text-lg"},xl:{root:"size-10 text-xl"},"2xl":{root:"size-11 text-[22px]"},"3xl":{root:"size-12 text-2xl"}}},defaultVariants:{size:"md"}},Ku=Object.assign({inheritAttrs:!1},{__name:"UAvatar",props:{as:{type:null,required:!1},src:{type:String,required:!1},alt:{type:String,required:!1},icon:{type:null,required:!1},text:{type:String,required:!1},size:{type:null,required:!1},chip:{type:[Boolean,Object],required:!1},class:{type:null,required:!1},style:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=e,n=F(()=>typeof t.as=="string"||typeof t.as?.render=="function"?{root:t.as}:wt(t.as,{root:"span"})),o=F(()=>t.text||(t.alt||"").split(" ").map(p=>p.charAt(0)).join("").substring(0,2)),r=Pe(),u=Et("avatar",t),{size:a}=Sb(t),s=F(()=>Se({extend:Se(dI),...r.ui?.avatar||{}})({size:a.value})),i=F(()=>s.value.root({class:[u.value?.root,t.class]})),c=F(()=>{const p=i.value.split(" ").find(h=>/^size-\d+$/.test(h));if(p){const h=Number.parseFloat(p.split("-")[1]??"");if(!Number.isNaN(h))return h*4}return null}),l=R(!1);ye(()=>t.src,()=>{l.value&&(l.value=!1)});function d(){l.value=!0}return(p,h)=>(D(),k(Rt(t.chip?Tb:f(we)),j({as:n.value.root},t.chip?typeof t.chip=="object"?{inset:!0,...t.chip}:{inset:!0}:{},{"data-slot":"root",class:i.value,style:t.style}),{default:A(()=>[e.src&&!l.value?(D(),k(Rt(n.value.img||f(H0)),j({key:0,src:e.src,alt:e.alt,width:c.value,height:c.value},p.$attrs,{"data-slot":"image",class:s.value.image({class:f(u)?.image}),onError:d}),null,16,["src","alt","width","height","class"])):(D(),k(f(Ha),me(j({key:1},p.$attrs)),{default:A(()=>[P(p.$slots,"default",{},()=>[e.icon?(D(),k(st,{key:0,name:e.icon,"data-slot":"icon",class:U(s.value.icon({class:f(u)?.icon}))},null,8,["name","class"])):(D(),re("span",{key:1,"data-slot":"fallback",class:U(s.value.fallback({class:f(u)?.fallback}))},Fe(o.value||" "),3))])]),_:3},16))]),_:3},16,["as","class","style"]))}}),_o={__name:"ULinkBase",props:{as:{type:String,required:!1,default:"button"},type:{type:String,required:!1,default:"button"},disabled:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},href:{type:String,required:!1},navigate:{type:Function,required:!1},target:{type:[String,Object,null],required:!1},rel:{type:[String,Object,null],required:!1},active:{type:Boolean,required:!1},isExternal:{type:Boolean,required:!1}},setup(e){const t=e;function n(o){if(t.disabled){o.stopPropagation(),o.preventDefault();return}if(t.onClick)for(const r of Array.isArray(t.onClick)?t.onClick:[t.onClick])r(o);t.href&&t.navigate&&!t.isExternal&&t.navigate(o)}return(o,r)=>(D(),k(f(we),j(e.href?{as:"a",href:e.disabled?void 0:e.href,"aria-disabled":e.disabled?"true":void 0,role:e.disabled?"link":void 0,tabindex:e.disabled?-1:void 0}:e.as==="button"?{as:e.as,type:e.type,disabled:e.disabled}:{as:e.as},{rel:e.rel,target:e.target,onClick:n}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["rel","target"]))}},fI={base:"focus-visible:outline-primary",variants:{active:{true:"text-primary",false:"text-muted"},disabled:{true:"cursor-not-allowed opacity-75"}},compoundVariants:[{active:!1,disabled:!1,class:["hover:text-default","transition-colors"]}]},$r=Object.assign({inheritAttrs:!1},{__name:"ULink",props:{as:{type:null,required:!1,default:"button"},type:{type:null,required:!1,default:"button"},disabled:{type:Boolean,required:!1},active:{type:Boolean,required:!1,default:void 0},exact:{type:Boolean,required:!1},exactQuery:{type:[Boolean,String],required:!1},exactHash:{type:Boolean,required:!1},inactiveClass:{type:String,required:!1},custom:{type:Boolean,required:!1},raw:{type:Boolean,required:!1},class:{type:null,required:!1},to:{type:null,required:!1},href:{type:null,required:!1},external:{type:Boolean,required:!1},target:{type:[String,Object,null],required:!1},rel:{type:[String,Object,null],required:!1},noRel:{type:Boolean,required:!1},prefetchedClass:{type:String,required:!1},prefetch:{type:Boolean,required:!1},prefetchOn:{type:[String,Object],required:!1},noPrefetch:{type:Boolean,required:!1},trailingSlash:{type:String,required:!1},activeClass:{type:String,required:!1},exactActiveClass:{type:String,required:!1},ariaCurrentValue:{type:String,required:!1,default:"page"},viewTransition:{type:Boolean,required:!1},replace:{type:Boolean,required:!1}},setup(e){const t=e,n=Yn(),o=Pe(),r=ln(No(t,"as","type","disabled","active","exact","exactQuery","exactHash","activeClass","inactiveClass","to","href","raw","custom","class")),u=F(()=>Se({extend:Se(fI),...wt({variants:{active:{true:Li(o.ui?.link?.variants?.active?.true,t.activeClass),false:Li(o.ui?.link?.variants?.active?.false,t.inactiveClass)}}},o.ui?.link||{})})),a=F(()=>t.to??t.href);function s({route:c,isActive:l,isExactActive:d}){if(t.active!==void 0)return t.active;if(t.exactQuery==="partial"){if(!yO(c.query,n.query))return!1}else if(t.exactQuery===!0&&!Ur(c.query,n.query))return!1;return t.exactHash&&c.hash!==n.hash?!1:!!(t.exact&&d||!t.exact&&l)}function i({route:c,isActive:l,isExactActive:d}){const p=s({route:c,isActive:l,isExactActive:d});return t.raw?[t.class,p?t.activeClass:t.inactiveClass]:u.value({class:t.class,active:p,disabled:t.disabled})}return(c,l)=>{const d=nf;return D(),k(d,j(f(r),{to:a.value,custom:""}),{default:A(({href:p,navigate:h,route:m,isActive:g,isExactActive:y,...E})=>[e.custom?P(c.$slots,"default",me(j({key:0},{...c.$attrs,...e.exact&&y?{"aria-current":t.ariaCurrentValue}:{},as:e.as,type:e.type,disabled:e.disabled,href:p,navigate:h,rel:E.rel,target:E.target,isExternal:E.isExternal,active:s({route:m,isActive:g,isExactActive:y})}))):(D(),k(_o,j({key:1},{...c.$attrs,...e.exact&&y?{"aria-current":t.ariaCurrentValue}:{},as:e.as,type:e.type,disabled:e.disabled,href:p,navigate:h,rel:E.rel,target:E.target,isExternal:E.isExternal},{class:i({route:m,isActive:g,isExactActive:y})}),{default:A(()=>[P(c.$slots,"default",{active:s({route:m,isActive:g,isExactActive:y})})]),_:2},1040,["class"]))]),_:3},16,["to"])}}}),pI={slots:{base:["rounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75","transition-colors"],label:"truncate",leadingIcon:"shrink-0",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailingIcon:"shrink-0"},variants:{fieldGroup:{horizontal:"not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]",vertical:"not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{solid:"",outline:"",soft:"",subtle:"",ghost:"",link:""},size:{xs:{base:"px-2 py-1 text-xs gap-1",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},sm:{base:"px-2.5 py-1.5 text-xs gap-1.5",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},md:{base:"px-2.5 py-1.5 text-sm gap-1.5",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},lg:{base:"px-3 py-2 text-sm gap-2",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},xl:{base:"px-3 py-2 text-base gap-2",leadingIcon:"size-6",leadingAvatarSize:"xs",trailingIcon:"size-6"}},block:{true:{base:"w-full justify-center",trailingIcon:"ms-auto"}},square:{true:""},leading:{true:""},trailing:{true:""},loading:{true:""},active:{true:{base:""},false:{base:""}}},compoundVariants:[{color:"primary",variant:"solid",class:"text-inverted bg-primary hover:bg-primary/75 active:bg-primary/75 disabled:bg-primary aria-disabled:bg-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"},{color:"secondary",variant:"solid",class:"text-inverted bg-secondary hover:bg-secondary/75 active:bg-secondary/75 disabled:bg-secondary aria-disabled:bg-secondary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary"},{color:"success",variant:"solid",class:"text-inverted bg-success hover:bg-success/75 active:bg-success/75 disabled:bg-success aria-disabled:bg-success focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success"},{color:"info",variant:"solid",class:"text-inverted bg-info hover:bg-info/75 active:bg-info/75 disabled:bg-info aria-disabled:bg-info focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info"},{color:"warning",variant:"solid",class:"text-inverted bg-warning hover:bg-warning/75 active:bg-warning/75 disabled:bg-warning aria-disabled:bg-warning focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning"},{color:"error",variant:"solid",class:"text-inverted bg-error hover:bg-error/75 active:bg-error/75 disabled:bg-error aria-disabled:bg-error focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-error"},{color:"primary",variant:"outline",class:"ring ring-inset ring-primary/50 text-primary hover:bg-primary/10 active:bg-primary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-primary"},{color:"secondary",variant:"outline",class:"ring ring-inset ring-secondary/50 text-secondary hover:bg-secondary/10 active:bg-secondary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary"},{color:"success",variant:"outline",class:"ring ring-inset ring-success/50 text-success hover:bg-success/10 active:bg-success/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-success"},{color:"info",variant:"outline",class:"ring ring-inset ring-info/50 text-info hover:bg-info/10 active:bg-info/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-info"},{color:"warning",variant:"outline",class:"ring ring-inset ring-warning/50 text-warning hover:bg-warning/10 active:bg-warning/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-warning"},{color:"error",variant:"outline",class:"ring ring-inset ring-error/50 text-error hover:bg-error/10 active:bg-error/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-error"},{color:"primary",variant:"soft",class:"text-primary bg-primary/10 hover:bg-primary/15 active:bg-primary/15 focus:outline-none focus-visible:bg-primary/15 disabled:bg-primary/10 aria-disabled:bg-primary/10"},{color:"secondary",variant:"soft",class:"text-secondary bg-secondary/10 hover:bg-secondary/15 active:bg-secondary/15 focus:outline-none focus-visible:bg-secondary/15 disabled:bg-secondary/10 aria-disabled:bg-secondary/10"},{color:"success",variant:"soft",class:"text-success bg-success/10 hover:bg-success/15 active:bg-success/15 focus:outline-none focus-visible:bg-success/15 disabled:bg-success/10 aria-disabled:bg-success/10"},{color:"info",variant:"soft",class:"text-info bg-info/10 hover:bg-info/15 active:bg-info/15 focus:outline-none focus-visible:bg-info/15 disabled:bg-info/10 aria-disabled:bg-info/10"},{color:"warning",variant:"soft",class:"text-warning bg-warning/10 hover:bg-warning/15 active:bg-warning/15 focus:outline-none focus-visible:bg-warning/15 disabled:bg-warning/10 aria-disabled:bg-warning/10"},{color:"error",variant:"soft",class:"text-error bg-error/10 hover:bg-error/15 active:bg-error/15 focus:outline-none focus-visible:bg-error/15 disabled:bg-error/10 aria-disabled:bg-error/10"},{color:"primary",variant:"subtle",class:"text-primary ring ring-inset ring-primary/25 bg-primary/10 hover:bg-primary/15 active:bg-primary/15 disabled:bg-primary/10 aria-disabled:bg-primary/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary"},{color:"secondary",variant:"subtle",class:"text-secondary ring ring-inset ring-secondary/25 bg-secondary/10 hover:bg-secondary/15 active:bg-secondary/15 disabled:bg-secondary/10 aria-disabled:bg-secondary/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary"},{color:"success",variant:"subtle",class:"text-success ring ring-inset ring-success/25 bg-success/10 hover:bg-success/15 active:bg-success/15 disabled:bg-success/10 aria-disabled:bg-success/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-success"},{color:"info",variant:"subtle",class:"text-info ring ring-inset ring-info/25 bg-info/10 hover:bg-info/15 active:bg-info/15 disabled:bg-info/10 aria-disabled:bg-info/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-info"},{color:"warning",variant:"subtle",class:"text-warning ring ring-inset ring-warning/25 bg-warning/10 hover:bg-warning/15 active:bg-warning/15 disabled:bg-warning/10 aria-disabled:bg-warning/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-warning"},{color:"error",variant:"subtle",class:"text-error ring ring-inset ring-error/25 bg-error/10 hover:bg-error/15 active:bg-error/15 disabled:bg-error/10 aria-disabled:bg-error/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-error"},{color:"primary",variant:"ghost",class:"text-primary hover:bg-primary/10 active:bg-primary/10 focus:outline-none focus-visible:bg-primary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"secondary",variant:"ghost",class:"text-secondary hover:bg-secondary/10 active:bg-secondary/10 focus:outline-none focus-visible:bg-secondary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"success",variant:"ghost",class:"text-success hover:bg-success/10 active:bg-success/10 focus:outline-none focus-visible:bg-success/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"info",variant:"ghost",class:"text-info hover:bg-info/10 active:bg-info/10 focus:outline-none focus-visible:bg-info/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"warning",variant:"ghost",class:"text-warning hover:bg-warning/10 active:bg-warning/10 focus:outline-none focus-visible:bg-warning/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"error",variant:"ghost",class:"text-error hover:bg-error/10 active:bg-error/10 focus:outline-none focus-visible:bg-error/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent"},{color:"primary",variant:"link",class:"text-primary hover:text-primary/75 active:text-primary/75 disabled:text-primary aria-disabled:text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary"},{color:"secondary",variant:"link",class:"text-secondary hover:text-secondary/75 active:text-secondary/75 disabled:text-secondary aria-disabled:text-secondary focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-secondary"},{color:"success",variant:"link",class:"text-success hover:text-success/75 active:text-success/75 disabled:text-success aria-disabled:text-success focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-success"},{color:"info",variant:"link",class:"text-info hover:text-info/75 active:text-info/75 disabled:text-info aria-disabled:text-info focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-info"},{color:"warning",variant:"link",class:"text-warning hover:text-warning/75 active:text-warning/75 disabled:text-warning aria-disabled:text-warning focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-warning"},{color:"error",variant:"link",class:"text-error hover:text-error/75 active:text-error/75 disabled:text-error aria-disabled:text-error focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-error"},{color:"neutral",variant:"solid",class:"text-inverted bg-inverted hover:bg-inverted/90 active:bg-inverted/90 disabled:bg-inverted aria-disabled:bg-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-inverted"},{color:"neutral",variant:"outline",class:"ring ring-inset ring-accented text-default bg-default hover:bg-elevated active:bg-elevated disabled:bg-default aria-disabled:bg-default focus:outline-none focus-visible:ring-2 focus-visible:ring-inverted"},{color:"neutral",variant:"soft",class:"text-default bg-elevated hover:bg-accented/75 active:bg-accented/75 focus:outline-none focus-visible:bg-accented/75 disabled:bg-elevated aria-disabled:bg-elevated"},{color:"neutral",variant:"subtle",class:"ring ring-inset ring-accented text-default bg-elevated hover:bg-accented/75 active:bg-accented/75 disabled:bg-elevated aria-disabled:bg-elevated focus:outline-none focus-visible:ring-2 focus-visible:ring-inverted"},{color:"neutral",variant:"ghost",class:"text-default hover:bg-elevated active:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent"},{color:"neutral",variant:"link",class:"text-muted hover:text-default active:text-default disabled:text-muted aria-disabled:text-muted focus:outline-none focus-visible:ring-inset focus-visible:ring-2 focus-visible:ring-inverted"},{size:"xs",square:!0,class:"p-1"},{size:"sm",square:!0,class:"p-1.5"},{size:"md",square:!0,class:"p-1.5"},{size:"lg",square:!0,class:"p-2"},{size:"xl",square:!0,class:"p-2"},{loading:!0,leading:!0,class:{leadingIcon:"animate-spin"}},{loading:!0,leading:!1,trailing:!0,class:{trailingIcon:"animate-spin"}}],defaultVariants:{color:"primary",variant:"solid",size:"md"}},hn={__name:"UButton",props:{label:{type:String,required:!1},color:{type:null,required:!1},activeColor:{type:null,required:!1},variant:{type:null,required:!1},activeVariant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},block:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},as:{type:null,required:!1},type:{type:null,required:!1},disabled:{type:Boolean,required:!1},active:{type:Boolean,required:!1},exact:{type:Boolean,required:!1},exactQuery:{type:[Boolean,String],required:!1},exactHash:{type:Boolean,required:!1},inactiveClass:{type:String,required:!1},to:{type:null,required:!1},href:{type:null,required:!1},external:{type:Boolean,required:!1},target:{type:[String,Object,null],required:!1},rel:{type:[String,Object,null],required:!1},noRel:{type:Boolean,required:!1},prefetchedClass:{type:String,required:!1},prefetch:{type:Boolean,required:!1},prefetchOn:{type:[String,Object],required:!1},noPrefetch:{type:Boolean,required:!1},trailingSlash:{type:String,required:!1},activeClass:{type:String,required:!1},exactActiveClass:{type:String,required:!1},ariaCurrentValue:{type:String,required:!1},viewTransition:{type:Boolean,required:!1},replace:{type:Boolean,required:!1}},setup(e){const t=e,n=qt(),o=Pe(),r=Et("button",t),{orientation:u,size:a}=Eb(t),s=ln(xu(t)),i=R(!1),c=Ue(gO,void 0);async function l(E){i.value=!0;const b=Array.isArray(t.onClick)?t.onClick:[t.onClick];try{await Promise.all(b.map(v=>v?.(E)))}finally{i.value=!1}}const d=F(()=>t.loading||t.loadingAuto&&(i.value||c?.value&&t.type==="submit")),{isLeading:p,isTrailing:h,leadingIconName:m,trailingIconName:g}=bb(F(()=>({...t,loading:d.value}))),y=F(()=>Se({extend:Se(pI),...wt({variants:{active:{true:{base:Li(o.ui?.button?.variants?.active?.true?.base,t.activeClass)},false:{base:Li(o.ui?.button?.variants?.active?.false?.base,t.inactiveClass)}}}},o.ui?.button||{})})({color:t.color,variant:t.variant,size:a.value,loading:d.value,block:t.block,square:t.square||!n.default&&!t.label,leading:p.value,trailing:h.value,fieldGroup:u.value}));return(E,b)=>(D(),k($r,j({type:e.type,disabled:e.disabled||d.value},f(ms)(f(s),["type","disabled","onClick"]),{custom:""}),{default:A(({active:v,...C})=>[q(_o,j(C,{"data-slot":"base",class:y.value.base({class:[f(r)?.base,t.class],active:v,...v&&e.activeVariant?{variant:e.activeVariant}:{},...v&&e.activeColor?{color:e.activeColor}:{}}),onClick:l}),{default:A(()=>[P(E.$slots,"leading",{ui:y.value},()=>[f(p)&&f(m)?(D(),k(st,{key:0,name:f(m),"data-slot":"leadingIcon",class:U(y.value.leadingIcon({class:f(r)?.leadingIcon,active:v}))},null,8,["name","class"])):e.avatar?(D(),k(Ku,j({key:1,size:f(r)?.leadingAvatarSize||y.value.leadingAvatarSize()},e.avatar,{"data-slot":"leadingAvatar",class:y.value.leadingAvatar({class:f(r)?.leadingAvatar,active:v})}),null,16,["size","class"])):Y("",!0)]),P(E.$slots,"default",{ui:y.value},()=>[e.label!==void 0&&e.label!==null?(D(),re("span",{key:0,"data-slot":"label",class:U(y.value.label({class:f(r)?.label,active:v}))},Fe(e.label),3)):Y("",!0)]),P(E.$slots,"trailing",{ui:y.value},()=>[f(h)&&f(g)?(D(),k(st,{key:0,name:f(g),"data-slot":"trailingIcon",class:U(y.value.trailingIcon({class:f(r)?.trailingIcon,active:v}))},null,8,["name","class"])):Y("",!0)])]),_:2},1040,["class"])]),_:3},16,["type","disabled"]))}},sH=Object.freeze(Object.defineProperty({__proto__:null,default:hn},Symbol.toStringTag,{value:"Module"})),Ks={meta:"",ctrl:"",alt:"",win:"⊞",command:"⌘",shift:"⇧",control:"⌃",option:"⌥",enter:"↵",delete:"⌦",backspace:"⌫",escape:"Esc",tab:"⇥",capslock:"⇪",arrowup:"↑",arrowright:"→",arrowdown:"↓",arrowleft:"←",pageup:"⇞",pagedown:"⇟",home:"↖",end:"↘"},hI=()=>{const e=F(()=>navigator&&navigator.userAgent&&navigator.userAgent.match(/Macintosh;/)),t=_t({meta:" ",alt:" ",ctrl:" "});$e(()=>{t.meta=e.value?Ks.command:"Ctrl",t.ctrl=e.value?Ks.control:"Ctrl",t.alt=e.value?Ks.option:"Alt"});function n(o){if(o)return["meta","alt","ctrl"].includes(o)?t[o]:Ks[o]||o}return{macOS:e,getKbdKey:n}},mI=Nu(hI),gI={base:"inline-flex items-center justify-center px-1 rounded-sm font-medium font-sans uppercase",variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{solid:"",outline:"",soft:"",subtle:""},size:{sm:"h-4 min-w-[16px] text-[10px]",md:"h-5 min-w-[20px] text-[11px]",lg:"h-6 min-w-[24px] text-[12px]"}},compoundVariants:[{color:"primary",variant:"solid",class:"text-inverted bg-primary"},{color:"secondary",variant:"solid",class:"text-inverted bg-secondary"},{color:"success",variant:"solid",class:"text-inverted bg-success"},{color:"info",variant:"solid",class:"text-inverted bg-info"},{color:"warning",variant:"solid",class:"text-inverted bg-warning"},{color:"error",variant:"solid",class:"text-inverted bg-error"},{color:"primary",variant:"outline",class:"ring ring-inset ring-primary/50 text-primary"},{color:"secondary",variant:"outline",class:"ring ring-inset ring-secondary/50 text-secondary"},{color:"success",variant:"outline",class:"ring ring-inset ring-success/50 text-success"},{color:"info",variant:"outline",class:"ring ring-inset ring-info/50 text-info"},{color:"warning",variant:"outline",class:"ring ring-inset ring-warning/50 text-warning"},{color:"error",variant:"outline",class:"ring ring-inset ring-error/50 text-error"},{color:"primary",variant:"soft",class:"text-primary bg-primary/10"},{color:"secondary",variant:"soft",class:"text-secondary bg-secondary/10"},{color:"success",variant:"soft",class:"text-success bg-success/10"},{color:"info",variant:"soft",class:"text-info bg-info/10"},{color:"warning",variant:"soft",class:"text-warning bg-warning/10"},{color:"error",variant:"soft",class:"text-error bg-error/10"},{color:"primary",variant:"subtle",class:"text-primary ring ring-inset ring-primary/25 bg-primary/10"},{color:"secondary",variant:"subtle",class:"text-secondary ring ring-inset ring-secondary/25 bg-secondary/10"},{color:"success",variant:"subtle",class:"text-success ring ring-inset ring-success/25 bg-success/10"},{color:"info",variant:"subtle",class:"text-info ring ring-inset ring-info/25 bg-info/10"},{color:"warning",variant:"subtle",class:"text-warning ring ring-inset ring-warning/25 bg-warning/10"},{color:"error",variant:"subtle",class:"text-error ring ring-inset ring-error/25 bg-error/10"},{color:"neutral",variant:"solid",class:"text-inverted bg-inverted"},{color:"neutral",variant:"outline",class:"ring ring-inset ring-accented text-default bg-default"},{color:"neutral",variant:"soft",class:"text-default bg-elevated"},{color:"neutral",variant:"subtle",class:"ring ring-inset ring-accented text-default bg-elevated"}],defaultVariants:{variant:"outline",color:"neutral",size:"md"}},Mf={__name:"UKbd",props:{as:{type:null,required:!1,default:"kbd"},value:{type:null,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=e,{getKbdKey:n}=mI(),o=Pe(),r=Et("kbd",t),u=F(()=>Se({extend:Se(gI),...o.ui?.kbd||{}}));return(a,s)=>(D(),k(f(we),{as:e.as,class:U(u.value({class:[f(r)?.base,t.class],color:t.color,variant:t.variant,size:t.size}))},{default:A(()=>[P(a.$slots,"default",{},()=>[Ke(Fe(f(n)(e.value)),1)])]),_:3},8,["as","class"]))}},Fb=Symbol("nuxt-ui.portal-target");function tu(e){const t=Ue(Fb,void 0),n=F(()=>e.value===!0?t?.value:e.value),o=F(()=>typeof n.value=="boolean"?!n.value:!1),r=F(()=>typeof n.value=="boolean"?"body":n.value);return F(()=>({to:r.value,disabled:o.value}))}const vI={slots:{content:"flex items-center gap-1 bg-default text-highlighted shadow-sm rounded-sm ring ring-default h-6 px-2.5 py-1 text-xs select-none data-[state=delayed-open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-tooltip-content-transform-origin) pointer-events-auto",arrow:"fill-bg stroke-default",text:"truncate",kbds:"hidden lg:inline-flex items-center shrink-0 gap-0.5 not-first-of-type:before:content-['·'] not-first-of-type:before:me-0.5",kbdsSize:"sm"}},Pb={__name:"UTooltip",props:{text:{type:String,required:!1},kbds:{type:Array,required:!1},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},reference:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},delayDuration:{type:Number,required:!1},disableHoverableContent:{type:Boolean,required:!1},disableClosingTrigger:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},ignoreNonKeyboardFocus:{type:Boolean,required:!1}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t,r=qt(),u=Pe(),a=Et("tooltip",n),s=hs(),i=it(Jt(n,"defaultOpen","open","delayDuration","disableHoverableContent","disableClosingTrigger","ignoreNonKeyboardFocus"),o),c=tu(Ye(()=>n.portal)),l=Ye(()=>wt(n.content,s.content.value,{side:"bottom",sideOffset:8,collisionPadding:8})),d=Ye(()=>wt(n.arrow,{rounded:!0})),p=F(()=>Se({extend:Se(vI),...u.ui?.tooltip||{}})({side:l.value.side}));return(h,m)=>(D(),k(f(KP),j(f(i),{disabled:!(e.text||e.kbds?.length||r.content)||n.disabled}),{default:A(({open:g})=>[r.default||e.reference?(D(),k(f(tM),j({key:0},h.$attrs,{"as-child":"",reference:e.reference,class:n.class}),{default:A(()=>[P(h.$slots,"default",{open:g})]),_:2},1040,["reference","class"])):Y("",!0),q(f(QP),me(xe(f(c))),{default:A(()=>[q(f(XP),j(l.value,{"data-slot":"content",class:p.value.content({class:[!r.default&&n.class,f(a)?.content]})}),{default:A(()=>[P(h.$slots,"content",{ui:p.value},()=>[e.text?(D(),re("span",{key:0,"data-slot":"text",class:U(p.value.text({class:f(a)?.text}))},Fe(e.text),3)):Y("",!0),e.kbds?.length?(D(),re("span",{key:1,"data-slot":"kbds",class:U(p.value.kbds({class:f(a)?.kbds}))},[(D(!0),re(Ce,null,yt(e.kbds,(y,E)=>(D(),k(Mf,j({key:E,size:f(a)?.kbdsSize||p.value.kbdsSize()},{ref_for:!0},typeof y=="string"?{value:y}:y),null,16,["size"]))),128))],2)):Y("",!0)]),e.arrow?(D(),k(f(NP),j({key:0},d.value,{"data-slot":"arrow",class:p.value.arrow({class:f(a)?.arrow})}),null,16,["class"])):Y("",!0)]),_:3},16,["class"])]),_:3},16)]),_:3},16,["disabled"]))}},yI={slots:{base:"",label:"",trailing:"hidden lg:flex items-center gap-0.5 ms-auto"},variants:{collapsed:{true:{label:"hidden",trailing:"lg:hidden"}}}},Mb=Object.assign({inheritAttrs:!1},{__name:"UContentSearchButton",props:{icon:{type:null,required:!1},label:{type:String,required:!1},color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1},collapsed:{type:Boolean,required:!1,default:!0},tooltip:{type:[Boolean,Object],required:!1,default:!1},kbds:{type:Array,required:!1,default:()=>["meta","k"]},ui:{type:Object,required:!1},class:{type:null,required:!1},activeColor:{type:null,required:!1},activeVariant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},block:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},as:{type:null,required:!1},type:{type:null,required:!1},disabled:{type:Boolean,required:!1},exactActiveClass:{type:String,required:!1},viewTransition:{type:Boolean,required:!1}},setup(e){const t=e,n=qt(),[o,r]=To(),u=()=>ms(n,["trailing"]),a=ln(No(t,"icon","label","variant","collapsed","tooltip","kbds","class","ui")),s=Ye(()=>wt(typeof t.tooltip=="boolean"?{}:t.tooltip,{delayDuration:0,content:{side:"right"}})),{t:i}=Vo(),{open:c}=aM(),l=Pe(),d=Et("contentSearchButton",t),p=F(()=>Se({extend:Se(yI),...l.ui?.contentSearchButton||{}})({collapsed:t.collapsed}));return(h,m)=>(D(),re(Ce,null,[q(f(o),null,{default:A(()=>[q(hn,j({icon:e.icon||f(l).ui.icons.search,label:e.label||f(i)("contentSearchButton.label"),variant:e.variant||(e.collapsed?"ghost":"outline")},{...f(a),...e.collapsed?{square:!0,"aria-label":e.label||f(i)("contentSearchButton.label")}:{},...h.$attrs},{class:p.value.base({class:[f(d)?.base,t.class]}),ui:f(oM)(p.value,f(d)),onClick:m[0]||(m[0]=g=>c.value=!0)}),us({trailing:A(({ui:g})=>[je("div",{"data-slot":"trailing",class:U(p.value.trailing({class:f(d)?.trailing}))},[P(h.$slots,"trailing",{ui:g},()=>[e.kbds?.length?(D(!0),re(Ce,{key:0},yt(e.kbds,(y,E)=>(D(),k(Mf,j({key:E,variant:"subtle"},{ref_for:!0},typeof y=="string"?{value:y}:y),null,16))),128)):Y("",!0)])],2)]),_:2},[yt(u(),(g,y)=>({name:y,fn:A(E=>[P(h.$slots,y,me(xe(E)))])}))]),1040,["icon","label","variant","class","ui"])]),_:3}),e.collapsed&&e.tooltip?(D(),k(Pb,j({key:0,text:e.label||f(i)("contentSearchButton.label")},s.value),{default:A(()=>[q(f(r))]),_:1},16,["text"])):(D(),k(f(r),{key:1}))],64))}}),Wu=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},bI={};function EI(e,t){const n=Mb;return D(),k(n,{collapsed:!1,class:"w-full",variant:"soft",ui:{leadingIcon:"size-4 mr-1"}})}const CI=Object.assign(Wu(bI,[["render",EI]]),{__name:"AppHeaderCenter"}),xI=Object.assign({inheritAttrs:!1},{__name:"UColorModeImage",props:{dark:{type:String,required:!0},light:{type:String,required:!0}},setup(e){const t=e,n=F(()=>D4(t.light,Bn().app.baseURL)),o=F(()=>D4(t.dark,Bn().app.baseURL));return(r,u)=>(D(),re(Ce,null,[(D(),k(Rt(f(H0)),j({src:n.value,class:"dark:hidden"},r.$attrs),null,16,["src"])),(D(),k(Rt(f(H0)),j({src:o.value,class:"hidden dark:block"},r.$attrs),null,16,["src"]))],64))}}),qn={Root:N1,Trigger:j1,Portal:n8,Content:KT,Arrow:NT,Item:ZT,Group:GT,Separator:i8,CheckboxItem:VT,ItemIndicator:JT,Label:e8,RadioGroup:r8,RadioItem:a8,Sub:c8,SubContent:f8,SubTrigger:h8},iH={Root:V8,Trigger:gF,Portal:nF,Content:U8,Arrow:L8,Item:Z8,Group:G8,Separator:iF,CheckboxItem:$8,ItemIndicator:J8,Label:eF,RadioGroup:rF,RadioItem:aF,Sub:cF,SubContent:fF,SubTrigger:hF,Filter:K8},wI={Root:CF,Trigger:TF,Portal:kF,Content:BF,Arrow:yF},DI={Root:y8,Trigger:I8,Portal:M8,Content:F8,Arrow:x8,Close:D8,Anchor:E8},Ob={__name:"UContextMenuContent",props:{items:{type:null,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0},sub:{type:Boolean,required:!1},labelKey:{type:null,required:!0},descriptionKey:{type:null,required:!0},checkedIcon:{type:null,required:!1},loadingIcon:{type:null,required:!1},externalIcon:{type:[Boolean,String],required:!1,skipCheck:!0},class:{type:null,required:!1},ui:{type:null,required:!0},uiOverride:{type:null,required:!1},loop:{type:Boolean,required:!1},sideFlip:{type:Boolean,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=qt(),{dir:u}=Vo(),a=Pe(),s=tu(Ye(()=>n.portal)),i=it(No(n,"sub","items","portal","labelKey","descriptionKey","checkedIcon","loadingIcon","externalIcon","class","ui","uiOverride"),o),c=()=>ms(r,["default"]),[l,d]=To(),p=F(()=>u.value==="rtl"?a.ui.icons.chevronLeft:a.ui.icons.chevronRight),h=F(()=>n.items?.length?eb(n.items)?n.items:[n.items]:[]);return(m,g)=>(D(),re(Ce,null,[q(f(l),null,{default:A(({item:y,active:E,index:b})=>[P(m.$slots,y.slot||"item",{item:y,index:b,ui:e.ui},()=>[P(m.$slots,y.slot?`${y.slot}-leading`:"item-leading",{item:y,active:E,index:b,ui:e.ui},()=>[y.loading?(D(),k(st,{key:0,name:e.loadingIcon||f(a).ui.icons.loading,"data-slot":"itemLeadingIcon",class:U(e.ui.itemLeadingIcon({class:[e.uiOverride?.itemLeadingIcon,y.ui?.itemLeadingIcon],color:y?.color,loading:!0}))},null,8,["name","class"])):y.icon?(D(),k(st,{key:1,name:y.icon,"data-slot":"itemLeadingIcon",class:U(e.ui.itemLeadingIcon({class:[e.uiOverride?.itemLeadingIcon,y.ui?.itemLeadingIcon],color:y?.color,active:E}))},null,8,["name","class"])):y.avatar?(D(),k(Ku,j({key:2,size:y.ui?.itemLeadingAvatarSize||e.uiOverride?.itemLeadingAvatarSize||e.ui.itemLeadingAvatarSize()},y.avatar,{"data-slot":"itemLeadingAvatar",class:e.ui.itemLeadingAvatar({class:[e.uiOverride?.itemLeadingAvatar,y.ui?.itemLeadingAvatar],active:E})}),null,16,["size","class"])):Y("",!0)]),f(jt)(y,n.labelKey)||r[y.slot?`${y.slot}-label`:"item-label"]||f(jt)(y,n.descriptionKey)||r[y.slot?`${y.slot}-description`:"item-description"]?(D(),re("span",{key:0,"data-slot":"itemWrapper",class:U(e.ui.itemWrapper({class:[e.uiOverride?.itemWrapper,y.ui?.itemWrapper]}))},[je("span",{"data-slot":"itemLabel",class:U(e.ui.itemLabel({class:[e.uiOverride?.itemLabel,y.ui?.itemLabel],active:E}))},[P(m.$slots,y.slot?`${y.slot}-label`:"item-label",{item:y,active:E,index:b},()=>[Ke(Fe(f(jt)(y,n.labelKey)),1)]),y.target==="_blank"&&e.externalIcon!==!1?(D(),k(st,{key:0,name:typeof e.externalIcon=="string"?e.externalIcon:f(a).ui.icons.external,"data-slot":"itemLabelExternalIcon",class:U(e.ui.itemLabelExternalIcon({class:[e.uiOverride?.itemLabelExternalIcon,y.ui?.itemLabelExternalIcon],color:y?.color,active:E}))},null,8,["name","class"])):Y("",!0)],2),f(jt)(y,n.descriptionKey)||r[y.slot?`${y.slot}-description`:"item-description"]?(D(),re("span",{key:0,"data-slot":"itemDescription",class:U(e.ui.itemDescription({class:[e.uiOverride?.itemDescription,y.ui?.itemDescription]}))},[P(m.$slots,y.slot?`${y.slot}-description`:"item-description",{item:y,active:E,index:b},()=>[Ke(Fe(f(jt)(y,n.descriptionKey)),1)])],2)):Y("",!0)],2)):Y("",!0),je("span",{"data-slot":"itemTrailing",class:U(e.ui.itemTrailing({class:[e.uiOverride?.itemTrailing,y.ui?.itemTrailing]}))},[P(m.$slots,y.slot?`${y.slot}-trailing`:"item-trailing",{item:y,active:E,index:b,ui:e.ui},()=>[y.children?.length?(D(),k(st,{key:0,name:p.value,"data-slot":"itemTrailingIcon",class:U(e.ui.itemTrailingIcon({class:[e.uiOverride?.itemTrailingIcon,y.ui?.itemTrailingIcon],color:y?.color,active:E}))},null,8,["name","class"])):y.kbds?.length?(D(),re("span",{key:1,"data-slot":"itemTrailingKbds",class:U(e.ui.itemTrailingKbds({class:[e.uiOverride?.itemTrailingKbds,y.ui?.itemTrailingKbds]}))},[(D(!0),re(Ce,null,yt(y.kbds,(v,C)=>(D(),k(Mf,j({key:C,size:y.ui?.itemTrailingKbdsSize||e.uiOverride?.itemTrailingKbdsSize||e.ui.itemTrailingKbdsSize()},{ref_for:!0},typeof v=="string"?{value:v}:v),null,16,["size"]))),128))],2)):Y("",!0)]),q(f(qn).ItemIndicator,{"as-child":""},{default:A(()=>[q(st,{name:e.checkedIcon||f(a).ui.icons.check,"data-slot":"itemTrailingIcon",class:U(e.ui.itemTrailingIcon({class:[e.uiOverride?.itemTrailingIcon,y.ui?.itemTrailingIcon],color:y?.color}))},null,8,["name","class"])]),_:2},1024)],2)])]),_:3}),q(f(qn).Portal,me(xe(f(s))),{default:A(()=>[(D(),k(Rt(e.sub?f(qn).SubContent:f(qn).Content),j({"data-slot":"content",class:e.ui.content({class:[e.uiOverride?.content,n.class]})},f(i)),{default:A(()=>[P(m.$slots,"content-top",{sub:e.sub??!1}),je("div",{role:"presentation","data-slot":"viewport",class:U(e.ui.viewport({class:e.uiOverride?.viewport}))},[(D(!0),re(Ce,null,yt(h.value,(y,E)=>(D(),k(f(qn).Group,{key:`group-${E}`,"data-slot":"group",class:U(e.ui.group({class:e.uiOverride?.group}))},{default:A(()=>[(D(!0),re(Ce,null,yt(y,(b,v)=>(D(),re(Ce,{key:`group-${E}-${v}`},[b.type==="label"?(D(),k(f(qn).Label,{key:0,"data-slot":"label",class:U(e.ui.label({class:[e.uiOverride?.label,b.ui?.label,b.class]}))},{default:A(()=>[q(f(d),{item:b,index:v},null,8,["item","index"])]),_:2},1032,["class"])):b.type==="separator"?(D(),k(f(qn).Separator,{key:1,"data-slot":"separator",class:U(e.ui.separator({class:[e.uiOverride?.separator,b.ui?.separator,b.class]}))},null,8,["class"])):b?.children?.length?(D(),k(f(qn).Sub,{key:2,open:b.open,"default-open":b.defaultOpen},{default:A(()=>[q(f(qn).SubTrigger,{as:"button",type:"button",disabled:b.disabled,"text-value":f(jt)(b,n.labelKey),"data-slot":"item",class:U(e.ui.item({class:[e.uiOverride?.item,b.ui?.item,b.class],color:b?.color}))},{default:A(()=>[q(f(d),{item:b,index:v},null,8,["item","index"])]),_:2},1032,["disabled","text-value","class"]),q(Ob,j({sub:"",class:b.ui?.content,ui:e.ui,"ui-override":e.uiOverride,portal:e.portal,items:b.children,"align-offset":-4,"label-key":e.labelKey,"description-key":e.descriptionKey,"checked-icon":e.checkedIcon,"loading-icon":e.loadingIcon,"external-icon":e.externalIcon},{ref_for:!0},b.content),us({_:2},[yt(c(),(C,w)=>({name:w,fn:A(B=>[P(m.$slots,w,j({ref_for:!0},B))])}))]),1040,["class","ui","ui-override","portal","items","label-key","description-key","checked-icon","loading-icon","external-icon"])]),_:2},1032,["open","default-open"])):b.type==="checkbox"?(D(),k(f(qn).CheckboxItem,{key:3,"model-value":b.checked,disabled:b.disabled,"text-value":f(jt)(b,n.labelKey),"data-slot":"item",class:U(e.ui.item({class:[e.uiOverride?.item,b.ui?.item,b.class],color:b?.color})),"onUpdate:modelValue":b.onUpdateChecked,onSelect:b.onSelect},{default:A(()=>[q(f(d),{item:b,index:v},null,8,["item","index"])]),_:2},1032,["model-value","disabled","text-value","class","onUpdate:modelValue","onSelect"])):(D(),k($r,j({key:4,ref_for:!0},f(xu)(b),{custom:""}),{default:A(({active:C,...w})=>[q(f(qn).Item,{"as-child":"",disabled:b.disabled,"text-value":f(jt)(b,n.labelKey),onSelect:b.onSelect},{default:A(()=>[q(_o,j({ref_for:!0},w,{"data-slot":"item",class:e.ui.item({class:[e.uiOverride?.item,b.ui?.item,b.class],active:C,color:b?.color})}),{default:A(()=>[q(f(d),{item:b,active:C,index:v},null,8,["item","active","index"])]),_:2},1040,["class"])]),_:2},1032,["disabled","text-value","onSelect"])]),_:2},1040))],64))),128))]),_:2},1032,["class"]))),128))],2),P(m.$slots,"default"),P(m.$slots,"content-bottom",{sub:e.sub??!1})]),_:3},16,["class"]))]),_:3},16)],64))}},AI={slots:{content:"min-w-32 bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-context-menu-content-transform-origin) flex flex-col",viewport:"relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",group:"p-1 isolate",label:"w-full flex items-center font-semibold text-highlighted",separator:"-mx-1 my-1 h-px bg-border",item:"group relative w-full flex items-start select-none outline-none before:absolute before:z-[-1] before:inset-px before:rounded-md data-disabled:cursor-not-allowed data-disabled:opacity-75",itemLeadingIcon:"shrink-0",itemLeadingAvatar:"shrink-0",itemLeadingAvatarSize:"",itemTrailing:"ms-auto inline-flex gap-1.5 items-center",itemTrailingIcon:"shrink-0",itemTrailingKbds:"hidden lg:inline-flex items-center shrink-0",itemTrailingKbdsSize:"",itemWrapper:"flex-1 flex flex-col text-start min-w-0",itemLabel:"truncate",itemDescription:"truncate text-muted",itemLabelExternalIcon:"inline-block size-3 align-top text-dimmed"},variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},active:{true:{item:"text-highlighted before:bg-elevated",itemLeadingIcon:"text-default"},false:{item:["text-default data-highlighted:text-highlighted data-[state=open]:text-highlighted data-highlighted:before:bg-elevated/50 data-[state=open]:before:bg-elevated/50","transition-colors before:transition-colors"],itemLeadingIcon:["text-dimmed group-data-highlighted:text-default group-data-[state=open]:text-default","transition-colors"]}},loading:{true:{itemLeadingIcon:"animate-spin"}},size:{xs:{label:"p-1 text-xs gap-1",item:"p-1 text-xs gap-1",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemTrailingIcon:"size-4",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"sm"},sm:{label:"p-1.5 text-xs gap-1.5",item:"p-1.5 text-xs gap-1.5",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemTrailingIcon:"size-4",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"sm"},md:{label:"p-1.5 text-sm gap-1.5",item:"p-1.5 text-sm gap-1.5",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemTrailingIcon:"size-5",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"md"},lg:{label:"p-2 text-sm gap-2",item:"p-2 text-sm gap-2",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemTrailingIcon:"size-5",itemTrailingKbds:"gap-1",itemTrailingKbdsSize:"md"},xl:{label:"p-2 text-base gap-2",item:"p-2 text-base gap-2",itemLeadingIcon:"size-6",itemLeadingAvatarSize:"xs",itemTrailingIcon:"size-6",itemTrailingKbds:"gap-1",itemTrailingKbdsSize:"lg"}}},compoundVariants:[{color:"primary",active:!1,class:{item:"text-primary data-highlighted:text-primary data-highlighted:before:bg-primary/10 data-[state=open]:before:bg-primary/10",itemLeadingIcon:"text-primary/75 group-data-highlighted:text-primary group-data-[state=open]:text-primary"}},{color:"secondary",active:!1,class:{item:"text-secondary data-highlighted:text-secondary data-highlighted:before:bg-secondary/10 data-[state=open]:before:bg-secondary/10",itemLeadingIcon:"text-secondary/75 group-data-highlighted:text-secondary group-data-[state=open]:text-secondary"}},{color:"success",active:!1,class:{item:"text-success data-highlighted:text-success data-highlighted:before:bg-success/10 data-[state=open]:before:bg-success/10",itemLeadingIcon:"text-success/75 group-data-highlighted:text-success group-data-[state=open]:text-success"}},{color:"info",active:!1,class:{item:"text-info data-highlighted:text-info data-highlighted:before:bg-info/10 data-[state=open]:before:bg-info/10",itemLeadingIcon:"text-info/75 group-data-highlighted:text-info group-data-[state=open]:text-info"}},{color:"warning",active:!1,class:{item:"text-warning data-highlighted:text-warning data-highlighted:before:bg-warning/10 data-[state=open]:before:bg-warning/10",itemLeadingIcon:"text-warning/75 group-data-highlighted:text-warning group-data-[state=open]:text-warning"}},{color:"error",active:!1,class:{item:"text-error data-highlighted:text-error data-highlighted:before:bg-error/10 data-[state=open]:before:bg-error/10",itemLeadingIcon:"text-error/75 group-data-highlighted:text-error group-data-[state=open]:text-error"}},{color:"primary",active:!0,class:{item:"text-primary before:bg-primary/10",itemLeadingIcon:"text-primary"}},{color:"secondary",active:!0,class:{item:"text-secondary before:bg-secondary/10",itemLeadingIcon:"text-secondary"}},{color:"success",active:!0,class:{item:"text-success before:bg-success/10",itemLeadingIcon:"text-success"}},{color:"info",active:!0,class:{item:"text-info before:bg-info/10",itemLeadingIcon:"text-info"}},{color:"warning",active:!0,class:{item:"text-warning before:bg-warning/10",itemLeadingIcon:"text-warning"}},{color:"error",active:!0,class:{item:"text-error before:bg-error/10",itemLeadingIcon:"text-error"}}],defaultVariants:{size:"md"}},BI={__name:"UContextMenu",props:{size:{type:null,required:!1},items:{type:null,required:!1},checkedIcon:{type:null,required:!1},loadingIcon:{type:null,required:!1},externalIcon:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},content:{type:Object,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},labelKey:{type:null,required:!1,default:"label"},descriptionKey:{type:null,required:!1,default:"description"},disabled:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},pressOpenDelay:{type:Number,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(e,{emit:t}){const n=e,o=t,r=qt(),u=Pe(),a=Et("contextMenu",n),s=it(Jt(n,"modal"),o),i=Ye(()=>n.content),c=()=>ms(r,["default"]),l=F(()=>Se({extend:Se(AI),...u.ui?.contextMenu||{}})({size:n.size}));return(d,p)=>(D(),k(f(N1),me(xe(f(s))),{default:A(()=>[r.default?(D(),k(f(j1),{key:0,"as-child":"",disabled:e.disabled,class:U(n.class)},{default:A(()=>[P(d.$slots,"default")]),_:3},8,["disabled","class"])):Y("",!0),q(Ob,j({class:l.value.content({class:[!r.default&&n.class,f(a)?.content]}),ui:l.value,"ui-override":f(a)},i.value,{items:e.items,portal:e.portal,"label-key":e.labelKey,"description-key":e.descriptionKey,"checked-icon":e.checkedIcon,"loading-icon":e.loadingIcon,"external-icon":e.externalIcon}),us({_:2},[yt(c(),(h,m)=>({name:m,fn:A(g=>[P(d.$slots,m,me(xe(g)))])}))]),1040,["class","ui","ui-override","items","portal","label-key","description-key","checked-icon","loading-icon","external-icon"])]),_:3},16))}},Ib=()=>nr("color-mode").value,Rb=Symbol("nuxt-ui.toast-max");function Lb(){const e=nr("toasts",()=>[]),t=Ue(Rb,void 0),n=R(!1),o=[],r=()=>`${Date.now()}-${Math.random().toString(36).slice(2,9)}`;async function u(){if(!(n.value||o.length===0)){for(n.value=!0;o.length>0;){const l=o.shift();await Oe(),e.value=[...e.value,l].slice(-(t?.value??5))}n.value=!1}}function a(l){const d={id:r(),open:!0,...l},p=e.value.findIndex(h=>h.id===d.id);return p!==-1?(e.value[p]={...e.value[p],...d,_duplicate:(e.value[p]._duplicate||0)+1},d):(o.push(d),u(),d)}function s(l,d){const p=e.value.findIndex(h=>h.id===l);p!==-1&&(e.value[p]={...e.value[p],...d,duration:d.duration,open:!0,_updated:!0},Oe(()=>{const h=e.value.findIndex(m=>m.id===l);h!==-1&&e.value[h]._updated&&(e.value[h]={...e.value[h],_updated:void 0})}))}function i(l){const d=e.value.findIndex(p=>p.id===l);d!==-1&&e.value[d]._updated||(d!==-1&&(e.value[d]={...e.value[d],open:!1}),setTimeout(()=>{e.value=e.value.filter(p=>p.id!==l)},200))}function c(){e.value=[]}return{toasts:e,add:a,update:s,remove:i,clear:c}}const Gu=()=>{const e=Bn().public,t=Re(),n=R(!!e.i18n);if(!n.value){const a=t.$locale||"en",s=t.$localeMessages||{};return{isEnabled:n,locale:R(a),locales:[],localePath:i=>i,switchLocalePath:()=>{},t:i=>i.split(".").reduce((l,d)=>l?.[d],s)}}const o=t.$i18n?.locale||R("en"),r=t.$i18n?.t||(a=>a),u=e.docus?.filteredLocales||[];return{isEnabled:n,locale:o,locales:u,t:r,localePath:t.$localePath||(a=>a),switchLocalePath:t.$switchLocalePath||(()=>"")}};function q4(e){return e.toLowerCase().endsWith(".svg")}function $4(e){const t=e.match(/\.([a-z0-9]+)(?:\?|$)/i);return t?.[1]?`.${t[1].toLowerCase()}`:".png"}function _I(e,t){let n=e.replace(/fill="(black|white|#[0-9a-fA-F]{3,8}|rgba?\([^)]+\))"/g,'fill="currentColor"');return t&&(n=n.replace(/]*>)/,`$1${t}`)),n}async function ia(e,t){try{const n=new URL(e,window.location.origin).href,o=await fetch(n);if(!o.ok)return null;const r=await o.text();return _I(r,t)}catch{return null}}async function yc(e){try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function N4(e,t){const n=URL.createObjectURL(e),o=document.createElement("a");o.href=n,o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(n)}function j4(e,t){const n=document.createElement("a");n.href=e,n.download=t,document.body.appendChild(n),n.click(),document.body.removeChild(n)}const kI=()=>{const e=Pe(),t=Ib(),n=Lb(),{t:o}=Gu(),r=F(()=>!!(e.header?.logo?.light||e.header?.logo?.dark)),u=F(()=>e.header?.logo?.display||"logo"),a=F(()=>{const S=e.header?.logo;return S?t.value==="dark"?S.dark||S.light||"":S.light||S.dark||"":""}),s=F(()=>{const S=e.header?.logo?.wordmark;return!!(S?.light||S?.dark)}),i=F(()=>{const S=e.header?.logo?.wordmark;return S?t.value==="dark"?S.dark||S.light||"":S.light||S.dark||"":""}),c=F(()=>{const S=e.header?.logo;return S?u.value==="wordmark"&&s.value?S.wordmark?.light||S.wordmark?.dark||S.light||S.dark||"":S.light||S.dark||"":""}),l=F(()=>{const S=e.header?.logo;return S?u.value==="wordmark"&&s.value?S.wordmark?.dark||S.wordmark?.light||S.dark||S.light||"":S.dark||S.light||"":""}),d=F(()=>e.header?.logo?.favicon||"/favicon.ico"),p=F(()=>e.header?.logo?.alt||e.header?.title||""),h=F(()=>e.header?.title||p.value||""),m=F(()=>{const S=h.value;return S?S.toLowerCase().replace(/\s+/g,"-"):"logo"}),g=F(()=>{const S=h.value;return S?`${S} Logo`:"Logo"}),y=F(()=>{const S=h.value;return S?`${S} Wordmark`:"Wordmark"}),E=F(()=>q4(a.value)),b=F(()=>q4(i.value));async function v(){if(!E.value)return;const S=await ia(a.value,g.value);if(!S){n.add({title:o("logo.copyLogoFailed"),icon:"i-lucide-circle-x",color:"error"});return}const O=await yc(S);n.add(O?{title:o("logo.logoCopied"),icon:"i-lucide-circle-check",color:"success"}:{title:o("logo.copyLogoFailed"),icon:"i-lucide-circle-x",color:"error"})}async function C(){if(!b.value)return;const S=await ia(i.value,y.value);if(!S){n.add({title:o("logo.copyWordmarkFailed"),icon:"i-lucide-circle-x",color:"error"});return}const O=await yc(S);n.add(O?{title:o("logo.wordmarkCopied"),icon:"i-lucide-circle-check",color:"success"}:{title:o("logo.copyWordmarkFailed"),icon:"i-lucide-circle-x",color:"error"})}async function w(){const S=a.value;if(E.value){const O=await ia(S,g.value);if(!O)return;N4(new Blob([O],{type:"image/svg+xml"}),`${m.value}-logo.svg`)}else j4(S,`${m.value}-logo${$4(S)}`);n.add({title:o("logo.logoDownloaded"),icon:"i-lucide-download",color:"success"})}async function B(){const S=i.value;if(b.value){const O=await ia(S,y.value);if(!O)return;N4(new Blob([O],{type:"image/svg+xml"}),`${m.value}-wordmark.svg`)}else j4(S,`${m.value}-wordmark${$4(S)}`);n.add({title:o("logo.wordmarkDownloaded"),icon:"i-lucide-download",color:"success"})}const x=F(()=>e.header?.logo?.brandAssetsUrl||""),_=F(()=>{if(!r.value)return[];const S=[];E.value&&S.push({label:o("logo.copyLogo"),icon:"i-lucide-copy",onSelect:v}),s.value&&b.value&&S.push({label:o("logo.copyWordmark"),icon:"i-lucide-copy",onSelect:C});const O=[{label:o("logo.downloadLogo"),icon:"i-lucide-download",onSelect:w}];s.value&&O.push({label:o("logo.downloadWordmark"),icon:"i-lucide-download",onSelect:B});const H=[];return S.length&&H.push(S),H.push(O),x.value&&H.push([{label:o("logo.brandAssets"),icon:"i-lucide-palette",onSelect(){window.open(x.value,"_blank")}}]),H});return{hasLogo:r,displayMode:u,currentLogoUrl:a,headerLightUrl:c,headerDarkUrl:l,hasWordmark:s,currentWordmarkUrl:i,faviconUrl:d,logoAlt:p,contextMenuItems:_,copyLogo:v,downloadLogo:w,copyWordmark:C,downloadWordmark:B,copyTextToClipboard:yc,fetchSvgContent:ia}},SI={key:1},TI=L({__name:"AppHeaderLogo",setup(e){const t=Pe(),{hasLogo:n,headerLightUrl:o,headerDarkUrl:r,contextMenuItems:u}=kI();return(a,s)=>{const i=xI,c=BI;return f(n)?(D(),k(c,{key:0,items:f(u)},{default:A(()=>[q(i,{light:f(o),dark:f(r),alt:f(t).header?.logo?.alt||f(t).header?.title,class:U(["h-6 w-auto shrink-0",f(t).header?.logo?.class])},null,8,["light","dark","alt","class"])]),_:1},8,["items"])):(D(),re("span",SI,Fe(f(t).header?.title||"{appConfig.header.title}"),1))}}}),FI=Object.assign(TI,{__name:"AppHeaderLogo"});function qb(e){const t=_t({});return Ze(()=>{const n=Re().$nuxtSiteConfig.get(wt({resolveRefs:!0},e));t&&n&&Object.assign(t,n)}),delete t._priority,t}const PI=L({__name:"AppHeaderLeft",setup(e){const t=Pe(),n=qb(),{localePath:o}=Gu(),r=t.header?.title||n.name;return(u,a)=>{const s=FI,i=nf;return D(),k(i,{to:f(o)("/"),"aria-label":f(r)},{default:A(()=>[q(s,{class:"h-6 w-auto shrink-0"})]),_:1},8,["to","aria-label"])}}}),MI=Object.assign(PI,{__name:"AppHeaderLeft"}),OI={};function II(e,t){return D(),re("div")}const RI=Object.assign(Wu(OI,[["render",II]]),{__name:"AppHeaderCTA"}),LI={};function qI(e,t){return D(),re("div")}const $b=Object.assign(Wu(LI,[["render",qI]]),{__name:"AssistantChat"}),Nb=Object.freeze(Object.defineProperty({__proto__:null,default:$b},Symbol.toStringTag,{value:"Module"}));function Fl(e,t={}){const n=e.detail.originalEvent,o=n.target;if(!o?.isConnected){e.preventDefault();return}t.scrollable&&(n.offsetX>o.clientWidth||n.offsetY>o.clientHeight)&&e.preventDefault()}const $I={slots:{content:"bg-default shadow-lg rounded-md ring ring-default data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-popover-content-transform-origin) focus:outline-none pointer-events-auto",arrow:"fill-bg stroke-default"}},jb={__name:"UPopover",props:{mode:{type:null,required:!1,default:"click"},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},reference:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:null,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},modal:{type:Boolean,required:!1},openDelay:{type:Number,required:!1,default:0},closeDelay:{type:Number,required:!1,default:0}},emits:["close:prevent","update:open"],setup(e,{emit:t}){const n=e,o=t,r=qt(),u=Pe(),a=Et("popover",n),s=n.mode==="hover"?Jt(n,"defaultOpen","open","openDelay","closeDelay"):Jt(n,"defaultOpen","open","modal"),i=it(s,o),c=tu(Ye(()=>n.portal)),l=Ye(()=>wt(n.content,{side:"bottom",sideOffset:8,collisionPadding:8})),d=F(()=>n.dismissible?{pointerDownOutside:Fl}:["interactOutside","escapeKeyDown"].reduce((y,E)=>(y[E]=b=>{b.preventDefault(),o("close:prevent")},y),{})),p=Ye(()=>wt(n.arrow,{rounded:!0})),h=F(()=>Se({extend:Se($I),...u.ui?.popover||{}})({side:l.value.side})),m=F(()=>n.mode==="hover"?wI:DI);return(g,y)=>(D(),k(f(m).Root,me(xe(f(i))),{default:A(({open:E,close:b})=>[r.default||e.reference?(D(),k(f(m).Trigger,{key:0,"as-child":"",reference:e.reference,class:U(n.class)},{default:A(()=>[P(g.$slots,"default",{open:E})]),_:2},1032,["reference","class"])):Y("",!0),"Anchor"in m.value&&r.anchor?(D(),k(f(m).Anchor,{key:1,"as-child":""},{default:A(()=>[P(g.$slots,"anchor",me(xe(b?{close:b}:{})))]),_:2},1024)):Y("",!0),q(f(m).Portal,me(xe(f(c))),{default:A(()=>[q(f(m).Content,j(l.value,{"data-slot":"content",class:h.value.content({class:[!r.default&&n.class,f(a)?.content]})},as(d.value)),{default:A(()=>[P(g.$slots,"content",me(xe(b?{close:b}:{}))),e.arrow?(D(),k(f(m).Arrow,j({key:0},p.value,{"data-slot":"arrow",class:h.value.arrow({class:f(a)?.arrow})}),null,16,["class"])):Y("",!0)]),_:2},1040,["class"])]),_:2},1040)]),_:3},16))}},NI={class:"text-lg"},jI={class:"flex flex-col"},VI={class:"text-sm"},zI={class:"size-5 text-center"},UI=L({__name:"LanguageSelect",setup(e){const{locale:t,locales:n,switchLocalePath:o}=Gu();function r(u){const a={ar:"sa",bn:"bd",ca:"es",ckb:"iq",cs:"cz",da:"dk",el:"gr",en:"gb",et:"ee",he:"il",hi:"in",hy:"am",ja:"jp",kk:"kz",km:"kh",ko:"kr",ky:"kg",lb:"lu",ms:"my",nb:"no",sl:"si",sv:"se",uk:"ua",ur:"pk",vi:"vn",es:"es",id:"id"},s=u.split("-")[0]?.toLowerCase()||u;return(a[s]||u.replace(/^.*-/,"").slice(0,2)).toUpperCase().split("").map(c=>String.fromCodePoint(127397+c.charCodeAt(0))).join("")}return(u,a)=>{const s=hn,i=nf,c=jb;return D(),k(c,{content:{align:"end"}},{content:A(()=>[je("ul",jI,[(D(!0),re(Ce,null,yt(f(n),l=>(D(),re("li",{key:l.code},[q(i,{class:"flex justify-between py-1.5 px-2 gap-1 hover:bg-muted",to:f(o)(l.code),"aria-label":l.name},{default:A(()=>[je("span",VI,Fe(l.name),1),je("span",zI,Fe(r(l.code)),1)]),_:2},1032,["to","aria-label"])]))),128))])]),default:A(()=>[q(s,{color:"neutral",variant:"ghost",class:"size-8"},{trailing:A(()=>[je("span",NI,Fe(r(f(t))),1)]),_:1})]),_:1})}}}),HI=Object.assign(UI,{__name:"LanguageSelect"}),KI={slots:{root:"flex items-center align-center text-center",border:"",container:"font-medium text-default flex",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xs",label:"text-sm"},variants:{color:{primary:{border:"border-primary"},secondary:{border:"border-secondary"},success:{border:"border-success"},info:{border:"border-info"},warning:{border:"border-warning"},error:{border:"border-error"},neutral:{border:"border-default"}},orientation:{horizontal:{root:"w-full flex-row",border:"w-full",container:"mx-3 whitespace-nowrap"},vertical:{root:"h-full flex-col",border:"h-full",container:"my-2"}},size:{xs:"",sm:"",md:"",lg:"",xl:""},type:{solid:{border:"border-solid"},dashed:{border:"border-dashed"},dotted:{border:"border-dotted"}}},compoundVariants:[{orientation:"horizontal",size:"xs",class:{border:"border-t"}},{orientation:"horizontal",size:"sm",class:{border:"border-t-[2px]"}},{orientation:"horizontal",size:"md",class:{border:"border-t-[3px]"}},{orientation:"horizontal",size:"lg",class:{border:"border-t-[4px]"}},{orientation:"horizontal",size:"xl",class:{border:"border-t-[5px]"}},{orientation:"vertical",size:"xs",class:{border:"border-s"}},{orientation:"vertical",size:"sm",class:{border:"border-s-[2px]"}},{orientation:"vertical",size:"md",class:{border:"border-s-[3px]"}},{orientation:"vertical",size:"lg",class:{border:"border-s-[4px]"}},{orientation:"vertical",size:"xl",class:{border:"border-s-[5px]"}}],defaultVariants:{color:"neutral",size:"xs",type:"solid"}},Vb={__name:"USeparator",props:{as:{type:null,required:!1},label:{type:String,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},size:{type:null,required:!1},type:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},class:{type:null,required:!1},ui:{type:null,required:!1},decorative:{type:Boolean,required:!1}},setup(e){const t=e,n=qt(),o=Pe(),r=Et("separator",t),u=ln(Jt(t,"as","decorative","orientation")),a=F(()=>Se({extend:Se(KI),...o.ui?.separator||{}})({color:t.color,orientation:t.orientation,size:t.size,type:t.type}));return(s,i)=>(D(),k(f(cP),j(f(u),{"data-slot":"root",class:a.value.root({class:[f(r)?.root,t.class]})}),{default:A(()=>[je("div",{"data-slot":"border",class:U(a.value.border({class:f(r)?.border}))},null,2),e.label||e.icon||e.avatar||n.default?(D(),re(Ce,{key:0},[je("div",{"data-slot":"container",class:U(a.value.container({class:f(r)?.container}))},[P(s.$slots,"default",{ui:a.value},()=>[e.label?(D(),re("span",{key:0,"data-slot":"label",class:U(a.value.label({class:f(r)?.label}))},Fe(e.label),3)):e.icon?(D(),k(st,{key:1,name:e.icon,"data-slot":"icon",class:U(a.value.icon({class:f(r)?.icon}))},null,8,["name","class"])):e.avatar?(D(),k(Ku,j({key:2,size:f(r)?.avatarSize||a.value.avatarSize()},e.avatar,{"data-slot":"avatar",class:a.value.avatar({class:f(r)?.avatar})}),null,16,["size","class"])):Y("",!0)])],2),je("div",{"data-slot":"border",class:U(a.value.border({class:f(r)?.border}))},null,2)],64)):Y("",!0)]),_:3},16,["class"]))}},zb=Object.assign({inheritAttrs:!1},{__name:"UColorModeButton",props:{color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"ghost"},label:{type:String,required:!1},activeColor:{type:null,required:!1},activeVariant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},block:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},as:{type:null,required:!1},type:{type:null,required:!1},disabled:{type:Boolean,required:!1},exactActiveClass:{type:String,required:!1},viewTransition:{type:Boolean,required:!1}},setup(e){const t=e,{t:n}=Vo(),o=Ib(),r=Pe(),u=Et("button",t),a=ln(No(t,"icon")),s=F({get(){return o.value==="dark"},set(i){o.preference=i?"dark":"light"}});return(i,c)=>(D(),k(hn,j({...f(a),"aria-label":s.value?f(n)("colorMode.switchToLight"):f(n)("colorMode.switchToDark"),...i.$attrs},{onClick:c[0]||(c[0]=l=>s.value=!s.value)}),{leading:A(({ui:l})=>[q(st,{class:U(l.leadingIcon({class:[f(u)?.leadingIcon,"hidden dark:inline-block"]})),name:f(r).ui.icons.dark},null,8,["class","name"]),q(st,{class:U(l.leadingIcon({class:[f(u)?.leadingIcon,"dark:hidden"]})),name:f(r).ui.icons.light},null,8,["class","name"])]),_:1},16))}});function gs(e,t){const n=typeof e=="string"&&!t?`${e}Context`:t,o=Symbol(n);return[a=>{const s=Ue(o,a);if(s===void 0)throw new Error(`Injection \`${o.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`);return s},a=>(Pt(o,a),a),o]}function WI(e,t){const{layoutGroup:n,presenceContext:o,config:r}=t,u=n.id&&e.layoutId?`${n.id}-${e.layoutId}`:e.layoutId||void 0;return{...e,layoutId:u,transition:e.transition??r.transition,layoutGroup:n,motionConfig:r,inViewOptions:e.inViewOptions??r.inViewOptions,presenceContext:o,initial:o.initial===!1?o.initial:e.initial===!0?void 0:e.initial}}function Of(e,t){e.indexOf(t)===-1&&e.push(t)}function Ni(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const po=(e,t,n)=>n>t?t:n{};const pr={},Ub=e=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e);function Hb(e){return typeof e=="object"&&e!==null}const Kb=e=>/^0[^.\s]+$/u.test(e);function Wb(e){let t;return()=>(t===void 0&&(t=e()),t)}const In=e=>e,GI=(e,t)=>n=>t(e(n)),vs=(...e)=>e.reduce(GI),Ga=(e,t,n)=>{const o=t-e;return o===0?1:(n-e)/o};class Rf{constructor(){this.subscriptions=[]}add(t){return Of(this.subscriptions,t),()=>Ni(this.subscriptions,t)}notify(t,n,o){const r=this.subscriptions.length;if(r)if(r===1)this.subscriptions[0](t,n,o);else for(let u=0;ue*1e3,Mn=e=>e/1e3;function Gb(e,t){return t?e*(1e3/t):0}const Yb=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,YI=1e-7,ZI=12;function XI(e,t,n,o,r){let u,a,s=0;do a=t+(n-t)/2,u=Yb(a,o,r)-e,u>0?n=a:t=a;while(Math.abs(u)>YI&&++sXI(u,0,1,e,n);return u=>u===0||u===1?u:Yb(r(u),t,o)}const Zb=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,Xb=e=>t=>1-e(1-t),Jb=ys(.33,1.53,.69,.99),Lf=Xb(Jb),Qb=Zb(Lf),e6=e=>e>=1?1:(e*=2)<1?.5*Lf(e):.5*(2-Math.pow(2,-10*(e-1))),qf=e=>1-Math.sin(Math.acos(e)),t6=Xb(qf),n6=Zb(qf),JI=ys(.42,0,1,1),QI=ys(0,0,.58,1),o6=ys(.42,0,.58,1),eR=e=>Array.isArray(e)&&typeof e[0]!="number",r6=e=>Array.isArray(e)&&typeof e[0]=="number",tR={linear:In,easeIn:JI,easeInOut:o6,easeOut:QI,circIn:qf,circInOut:n6,circOut:t6,backIn:Lf,backInOut:Qb,backOut:Jb,anticipate:e6},nR=e=>typeof e=="string",V4=e=>{if(r6(e)){If(e.length===4);const[t,n,o,r]=e;return ys(t,n,o,r)}else if(nR(e))return tR[e];return e},Ws=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"];function oR(e,t){let n=new Set,o=new Set,r=!1,u=!1;const a=new WeakSet;let s={delta:0,timestamp:0,isProcessing:!1};function i(l){a.has(l)&&(c.schedule(l),e()),l(s)}const c={schedule:(l,d=!1,p=!1)=>{const m=p&&r?n:o;return d&&a.add(l),m.add(l),l},cancel:l=>{o.delete(l),a.delete(l)},process:l=>{if(s=l,r){u=!0;return}r=!0;const d=n;n=o,o=d,n.forEach(i),n.clear(),r=!1,u&&(u=!1,c.process(l))}};return c}const rR=40;function u6(e,t){let n=!1,o=!0;const r={delta:0,timestamp:0,isProcessing:!1},u=()=>n=!0,a=Ws.reduce((v,C)=>(v[C]=oR(u),v),{}),{setup:s,read:i,resolveKeyframes:c,preUpdate:l,update:d,preRender:p,render:h,postRender:m}=a,g=()=>{const v=pr.useManualTiming,C=v?r.timestamp:performance.now();n=!1,v||(r.delta=o?1e3/60:Math.max(Math.min(C-r.timestamp,rR),1)),r.timestamp=C,r.isProcessing=!0,s.process(r),i.process(r),c.process(r),l.process(r),d.process(r),p.process(r),h.process(r),m.process(r),r.isProcessing=!1,n&&t&&(o=!1,e(g))},y=()=>{n=!0,o=!0,r.isProcessing||e(g)};return{schedule:Ws.reduce((v,C)=>{const w=a[C];return v[C]=(B,x=!1,_=!1)=>(n||y(),w.schedule(B,x,_)),v},{}),cancel:v=>{for(let C=0;C(ii===void 0&&rn.set(Nt.isProcessing||pr.useManualTiming?Nt.timestamp:performance.now()),ii),set:e=>{ii=e,queueMicrotask(uR)}},a6=e=>t=>typeof t=="string"&&t.startsWith(e),$f=a6("--"),aR=a6("var(--"),Nf=e=>aR(e)?sR.test(e.split("/*")[0].trim()):!1,sR=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function z4(e){return typeof e!="string"?!1:e.split("/*")[0].includes("var(--")}const Yu={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Ya={...Yu,transform:e=>po(0,1,e)},Gs={...Yu,default:1},Ba=e=>Math.round(e*1e5)/1e5,jf=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function iR(e){return e==null}const lR=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,Vf=(e,t)=>n=>!!(typeof n=="string"&&lR.test(n)&&n.startsWith(e)||t&&!iR(n)&&Object.prototype.hasOwnProperty.call(n,t)),s6=(e,t,n)=>o=>{if(typeof o!="string")return o;const[r,u,a,s]=o.match(jf);return{[e]:parseFloat(r),[t]:parseFloat(u),[n]:parseFloat(a),alpha:s!==void 0?parseFloat(s):1}},cR=e=>po(0,255,e),Ec={...Yu,transform:e=>Math.round(cR(e))},Pr={test:Vf("rgb","red"),parse:s6("red","green","blue"),transform:({red:e,green:t,blue:n,alpha:o=1})=>"rgba("+Ec.transform(e)+", "+Ec.transform(t)+", "+Ec.transform(n)+", "+Ba(Ya.transform(o))+")"};function dR(e){let t="",n="",o="",r="";return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),o=e.substring(5,7),r=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),o=e.substring(3,4),r=e.substring(4,5),t+=t,n+=n,o+=o,r+=r),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(o,16),alpha:r?parseInt(r,16)/255:1}}const K0={test:Vf("#"),parse:dR,transform:Pr.transform},bs=e=>({test:t=>typeof t=="string"&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),Xo=bs("deg"),co=bs("%"),he=bs("px"),fR=bs("vh"),pR=bs("vw"),U4={...co,parse:e=>co.parse(e)/100,transform:e=>co.transform(e*100)},cu={test:Vf("hsl","hue"),parse:s6("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:n,alpha:o=1})=>"hsla("+Math.round(e)+", "+co.transform(Ba(t))+", "+co.transform(Ba(n))+", "+Ba(Ya.transform(o))+")"},Tt={test:e=>Pr.test(e)||K0.test(e)||cu.test(e),parse:e=>Pr.test(e)?Pr.parse(e):cu.test(e)?cu.parse(e):K0.parse(e),transform:e=>typeof e=="string"?e:e.hasOwnProperty("red")?Pr.transform(e):cu.transform(e),getAnimatableNone:e=>{const t=Tt.parse(e);return t.alpha=0,Tt.transform(t)}},hR=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function mR(e){return isNaN(e)&&typeof e=="string"&&(e.match(jf)?.length||0)+(e.match(hR)?.length||0)>0}const i6="number",l6="color",gR="var",vR="var(",H4="${}",yR=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Mu(e){const t=e.toString(),n=[],o={color:[],number:[],var:[]},r=[];let u=0;const s=t.replace(yR,i=>(Tt.test(i)?(o.color.push(u),r.push(l6),n.push(Tt.parse(i))):i.startsWith(vR)?(o.var.push(u),r.push(gR),n.push(i)):(o.number.push(u),r.push(i6),n.push(parseFloat(i))),++u,H4)).split(H4);return{values:n,split:s,indexes:o,types:r}}function bR(e){return Mu(e).values}function c6({split:e,types:t}){const n=e.length;return o=>{let r="";for(let u=0;utypeof e=="number"?0:Tt.test(e)?Tt.getAnimatableNone(e):e,xR=(e,t)=>typeof e=="number"?t?.trim().endsWith("/")?e:0:CR(e);function wR(e){const t=Mu(e);return c6(t)(t.values.map((o,r)=>xR(o,t.split[r])))}const zn={test:mR,parse:bR,createTransformer:ER,getAnimatableNone:wR};function Cc(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function DR({hue:e,saturation:t,lightness:n,alpha:o}){e/=360,t/=100,n/=100;let r=0,u=0,a=0;if(!t)r=u=a=n;else{const s=n<.5?n*(1+t):n+t-n*t,i=2*n-s;r=Cc(i,s,e+1/3),u=Cc(i,s,e),a=Cc(i,s,e-1/3)}return{red:Math.round(r*255),green:Math.round(u*255),blue:Math.round(a*255),alpha:o}}function ji(e,t){return n=>n>0?t:e}const ft=(e,t,n)=>e+(t-e)*n,xc=(e,t,n)=>{const o=e*e,r=n*(t*t-o)+o;return r<0?0:Math.sqrt(r)},AR=[K0,Pr,cu],BR=e=>AR.find(t=>t.test(e));function K4(e){const t=BR(e);if(!t)return!1;let n=t.parse(e);return t===cu&&(n=DR(n)),n}const W4=(e,t)=>{const n=K4(e),o=K4(t);if(!n||!o)return ji(e,t);const r={...n};return u=>(r.red=xc(n.red,o.red,u),r.green=xc(n.green,o.green,u),r.blue=xc(n.blue,o.blue,u),r.alpha=ft(n.alpha,o.alpha,u),Pr.transform(r))},W0=new Set(["none","hidden"]);function _R(e,t){return W0.has(e)?n=>n<=0?e:t:n=>n>=1?t:e}function kR(e,t){return n=>ft(e,t,n)}function zf(e){return typeof e=="number"?kR:typeof e=="string"?Nf(e)?ji:Tt.test(e)?W4:FR:Array.isArray(e)?d6:typeof e=="object"?Tt.test(e)?W4:SR:ji}function d6(e,t){const n=[...e],o=n.length,r=e.map((u,a)=>zf(u)(u,t[a]));return u=>{for(let a=0;a{for(const u in o)n[u]=o[u](r);return n}}function TR(e,t){const n=[],o={color:0,var:0,number:0};for(let r=0;r{const n=zn.createTransformer(t),o=Mu(e),r=Mu(t);return o.indexes.var.length===r.indexes.var.length&&o.indexes.color.length===r.indexes.color.length&&o.indexes.number.length>=r.indexes.number.length?W0.has(e)&&!r.values.length||W0.has(t)&&!o.values.length?_R(e,t):vs(d6(TR(o,r),r.values),n):ji(e,t)};function f6(e,t,n){return typeof e=="number"&&typeof t=="number"&&typeof n=="number"?ft(e,t,n):zf(e)(e,t)}const PR=e=>{const t=({timestamp:n})=>e(n);return{start:(n=!0)=>Je.update(t,n),stop:()=>hr(t),now:()=>Nt.isProcessing?Nt.timestamp:rn.now()}},p6=(e,t,n=10)=>{let o="";const r=Math.max(Math.round(t/n),2);for(let u=0;u=Vi?1/0:t}function MR(e,t=100,n){const o=n({...e,keyframes:[0,t]}),r=Math.min(Uf(o),Vi);return{type:"keyframes",ease:u=>o.next(r*u).value/t,duration:Mn(r)}}const xt={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1};function G0(e,t){return e*Math.sqrt(1-t*t)}const OR=12;function IR(e,t,n){let o=n;for(let r=1;r{const l=c*a,d=l*e,p=l-n,h=G0(c,a),m=Math.exp(-d);return wc-p/h*m},u=c=>{const d=c*a*e,p=d*n+n,h=Math.pow(a,2)*Math.pow(c,2)*e,m=Math.exp(-d),g=G0(Math.pow(c,2),a);return(-r(c)+wc>0?-1:1)*((p-h)*m)/g}):(r=c=>{const l=Math.exp(-c*e),d=(c-n)*e+1;return-wc+l*d},u=c=>{const l=Math.exp(-c*e),d=(n-c)*(e*e);return l*d});const s=5/e,i=IR(r,u,s);if(e=Rn(e),isNaN(i))return{stiffness:xt.stiffness,damping:xt.damping,duration:e};{const c=Math.pow(i,2)*o;return{stiffness:c,damping:a*2*Math.sqrt(o*c),duration:e}}}const LR=["duration","bounce"],qR=["stiffness","damping","mass"];function G4(e,t){return t.some(n=>e[n]!==void 0)}function $R(e){let t={velocity:xt.velocity,stiffness:xt.stiffness,damping:xt.damping,mass:xt.mass,isResolvedFromDuration:!1,...e};if(!G4(e,qR)&&G4(e,LR))if(t.velocity=0,e.visualDuration){const n=e.visualDuration,o=2*Math.PI/(n*1.2),r=o*o,u=2*po(.05,1,1-(e.bounce||0))*Math.sqrt(r);t={...t,mass:xt.mass,stiffness:r,damping:u}}else{const n=RR({...e,velocity:0});t={...t,...n,mass:xt.mass},t.isResolvedFromDuration=!0}return t}function zi(e=xt.visualDuration,t=xt.bounce){const n=typeof e!="object"?{visualDuration:e,keyframes:[0,1],bounce:t}:e;let{restSpeed:o,restDelta:r}=n;const u=n.keyframes[0],a=n.keyframes[n.keyframes.length-1],s={done:!1,value:u},{stiffness:i,damping:c,mass:l,duration:d,velocity:p,isResolvedFromDuration:h}=$R({...n,velocity:-Mn(n.velocity||0)}),m=p||0,g=c/(2*Math.sqrt(i*l)),y=a-u,E=Mn(Math.sqrt(i/l)),b=Math.abs(y)<5;o||(o=b?xt.restSpeed.granular:xt.restSpeed.default),r||(r=b?xt.restDelta.granular:xt.restDelta.default);let v,C,w,B,x,_;if(g<1)w=G0(E,g),B=(m+g*E*y)/w,v=O=>{const H=Math.exp(-g*E*O);return a-H*(B*Math.sin(w*O)+y*Math.cos(w*O))},x=g*E*B+y*w,_=g*E*y-B*w,C=O=>Math.exp(-g*E*O)*(x*Math.sin(w*O)+_*Math.cos(w*O));else if(g===1){v=H=>a-Math.exp(-E*H)*(y+(m+E*y)*H);const O=m+E*y;C=H=>Math.exp(-E*H)*(E*O*H-m)}else{const O=E*Math.sqrt(g*g-1);v=G=>{const $=Math.exp(-g*E*G),I=Math.min(O*G,300);return a-$*((m+g*E*y)*Math.sinh(I)+O*y*Math.cosh(I))/O};const H=(m+g*E*y)/O,N=g*E*H-y*O,J=g*E*y-H*O;C=G=>{const $=Math.exp(-g*E*G),I=Math.min(O*G,300);return $*(N*Math.sinh(I)+J*Math.cosh(I))}}const S={calculatedDuration:h&&d||null,velocity:O=>Rn(C(O)),next:O=>{if(!h&&g<1){const N=Math.exp(-g*E*O),J=Math.sin(w*O),G=Math.cos(w*O),$=a-N*(B*J+y*G),I=Rn(N*(x*J+_*G));return s.done=Math.abs(I)<=o&&Math.abs(a-$)<=r,s.value=s.done?a:$,s}const H=v(O);if(h)s.done=O>=d;else{const N=Rn(C(O));s.done=Math.abs(N)<=o&&Math.abs(a-H)<=r}return s.value=s.done?a:H,s},toString:()=>{const O=Math.min(Uf(S),Vi),H=p6(N=>S.next(O*N).value,O,30);return O+"ms "+H},toTransition:()=>{}};return S}zi.applyToOptions=e=>{const t=MR(e,100,zi);return e.ease=t.ease,e.duration=Rn(t.duration),e.type="keyframes",e};const NR=5;function h6(e,t,n){const o=Math.max(t-NR,0);return Gb(n-e(o),t-o)}function Y0({keyframes:e,velocity:t=0,power:n=.8,timeConstant:o=325,bounceDamping:r=10,bounceStiffness:u=500,modifyTarget:a,min:s,max:i,restDelta:c=.5,restSpeed:l}){const d=e[0],p={done:!1,value:d},h=_=>s!==void 0&&_i,m=_=>s===void 0?i:i===void 0||Math.abs(s-_)-g*Math.exp(-_/o),v=_=>E+b(_),C=_=>{const S=b(_),O=v(_);p.done=Math.abs(S)<=c,p.value=p.done?E:O};let w,B;const x=_=>{h(p.value)&&(w=_,B=zi({keyframes:[p.value,m(p.value)],velocity:h6(v,_,p.value),damping:r,stiffness:u,restDelta:c,restSpeed:l}))};return x(0),{calculatedDuration:null,next:_=>{let S=!1;return!B&&w===void 0&&(S=!0,C(_),x(_)),w!==void 0&&_>=w?B.next(_-w):(!S&&C(_),p)}}}function jR(e,t,n){const o=[],r=n||pr.mix||f6,u=e.length-1;for(let a=0;at[0];if(u===2&&t[0]===t[1])return()=>t[1];const a=e[0]===e[1];e[0]>e[u-1]&&(e=[...e].reverse(),t=[...t].reverse());const s=jR(t,o,r),i=s.length,c=l=>{if(a&&l1)for(;dc(po(e[0],e[u-1],l)):c}function zR(e,t){const n=e[e.length-1];for(let o=1;o<=t;o++){const r=Ga(0,t,o);e.push(ft(n,1,r))}}function UR(e){const t=[0];return zR(t,e.length-1),t}function HR(e,t){return e.map(n=>n*t)}function KR(e,t){return e.map(()=>t||o6).splice(0,e.length-1)}function _a({duration:e=300,keyframes:t,times:n,ease:o="easeInOut"}){const r=eR(o)?o.map(V4):V4(o),u={done:!1,value:t[0]},a=HR(n&&n.length===t.length?n:UR(t),e),s=VR(a,t,{ease:Array.isArray(r)?r:KR(t,r)});return{calculatedDuration:e,next:i=>(u.value=s(i),u.done=i>=e,u)}}const WR=e=>e!==null;function Pl(e,{repeat:t,repeatType:n="loop"},o,r=1){const u=e.filter(WR),s=r<0||t&&n!=="loop"&&t%2===1?0:u.length-1;return!s||o===void 0?u[s]:o}const GR={decay:Y0,inertia:Y0,tween:_a,keyframes:_a,spring:zi};function m6(e){typeof e.type=="string"&&(e.type=GR[e.type])}class Hf{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(t=>{this.resolve=t})}notifyFinished(){this.resolve()}then(t,n){return this.finished.then(t,n)}}const YR=e=>e/100;class Ui extends Hf{constructor(t){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.delayState={done:!1,value:void 0},this.stop=()=>{const{motionValue:n}=this.options;n&&n.updatedAt!==rn.now()&&this.tick(rn.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),this.options.onStop?.())},this.options=t,this.initAnimation(),this.play(),t.autoplay===!1&&this.pause()}initAnimation(){const{options:t}=this;m6(t);const{type:n=_a,repeat:o=0,repeatDelay:r=0,repeatType:u,velocity:a=0}=t;let{keyframes:s}=t;const i=n||_a;i!==_a&&typeof s[0]!="number"&&(this.mixKeyframes=vs(YR,f6(s[0],s[1])),s=[0,100]);const c=i({...t,keyframes:s});u==="mirror"&&(this.mirroredGenerator=i({...t,keyframes:[...s].reverse(),velocity:-a})),c.calculatedDuration===null&&(c.calculatedDuration=Uf(c));const{calculatedDuration:l}=c;this.calculatedDuration=l,this.resolvedDuration=l+r,this.totalDuration=this.resolvedDuration*(o+1)-r,this.generator=c}updateTime(t){const n=Math.round(t-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=n}tick(t,n=!1){const{generator:o,totalDuration:r,mixKeyframes:u,mirroredGenerator:a,resolvedDuration:s,calculatedDuration:i}=this;if(this.startTime===null)return o.next(0);const{delay:c=0,keyframes:l,repeat:d,repeatType:p,repeatDelay:h,type:m,onUpdate:g,finalKeyframe:y}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,t):this.speed<0&&(this.startTime=Math.min(t-r/this.speed,this.startTime)),n?this.currentTime=t:this.updateTime(t);const E=this.currentTime-c*(this.playbackSpeed>=0?1:-1),b=this.playbackSpeed>=0?E<0:E>r;this.currentTime=Math.max(E,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=r);let v=this.currentTime,C=o;if(d){const _=Math.min(this.currentTime,r)/s;let S=Math.floor(_),O=_%1;!O&&_>=1&&(O=1),O===1&&S--,S=Math.min(S,d+1),S%2&&(p==="reverse"?(O=1-O,h&&(O-=h/s)):p==="mirror"&&(C=a)),v=po(0,1,O)*s}let w;b?(this.delayState.value=l[0],w=this.delayState):w=C.next(v),u&&!b&&(w.value=u(w.value));let{done:B}=w;!b&&i!==null&&(B=this.playbackSpeed>=0?this.currentTime>=r:this.currentTime<=0);const x=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&B);return x&&m!==Y0&&(w.value=Pl(l,this.options,y,this.speed)),g&&g(w.value),x&&this.finish(),w}then(t,n){return this.finished.then(t,n)}get duration(){return Mn(this.calculatedDuration)}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+Mn(t)}get time(){return Mn(this.currentTime)}set time(t){t=Rn(t),this.currentTime=t,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=t:this.driver&&(this.startTime=this.driver.now()-t/this.playbackSpeed),this.driver?this.driver.start(!1):(this.startTime=0,this.state="paused",this.holdTime=t,this.tick(t))}getGeneratorVelocity(){const t=this.currentTime;if(t<=0)return this.options.velocity||0;if(this.generator.velocity)return this.generator.velocity(t);const n=this.generator.next(t).value;return h6(o=>this.generator.next(o).value,t,n)}get speed(){return this.playbackSpeed}set speed(t){const n=this.playbackSpeed!==t;n&&this.driver&&this.updateTime(rn.now()),this.playbackSpeed=t,n&&this.driver&&(this.time=Mn(this.currentTime))}play(){if(this.isStopped)return;const{driver:t=PR,startTime:n}=this.options;this.driver||(this.driver=t(r=>this.tick(r))),this.options.onPlay?.();const o=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=o):this.holdTime!==null?this.startTime=o-this.holdTime:this.startTime||(this.startTime=n??o),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(rn.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state="finished",this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(t){return this.startTime=0,this.tick(t,!0)}attachTimeline(t){return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),this.driver?.stop(),t.observe(this)}}function ZR(e){for(let t=1;te*180/Math.PI,Z0=e=>{const t=Mr(Math.atan2(e[1],e[0]));return X0(t)},XR={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:Z0,rotateZ:Z0,skewX:e=>Mr(Math.atan(e[1])),skewY:e=>Mr(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},X0=e=>(e=e%360,e<0&&(e+=360),e),Y4=Z0,Z4=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),X4=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),JR={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:Z4,scaleY:X4,scale:e=>(Z4(e)+X4(e))/2,rotateX:e=>X0(Mr(Math.atan2(e[6],e[5]))),rotateY:e=>X0(Mr(Math.atan2(-e[2],e[0]))),rotateZ:Y4,rotate:Y4,skewX:e=>Mr(Math.atan(e[4])),skewY:e=>Mr(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function J0(e){return e.includes("scale")?1:0}function Q0(e,t){if(!e||e==="none")return J0(t);const n=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let o,r;if(n)o=JR,r=n;else{const s=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);o=XR,r=s}if(!r)return J0(t);const u=o[t],a=r[1].split(",").map(eL);return typeof u=="function"?u(a):a[u]}const QR=(e,t)=>{const{transform:n="none"}=getComputedStyle(e);return Q0(n,t)};function eL(e){return parseFloat(e.trim())}const Zu=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],Xu=new Set(Zu),J4=e=>e===Yu||e===he,tL=new Set(["x","y","z"]),nL=Zu.filter(e=>!tL.has(e));function oL(e){const t=[];return nL.forEach(n=>{const o=e.getValue(n);o!==void 0&&(t.push([n,o.get()]),o.set(n.startsWith("scale")?1:0))}),t}const rr={width:({x:e},{paddingLeft:t="0",paddingRight:n="0",boxSizing:o})=>{const r=e.max-e.min;return o==="border-box"?r:r-parseFloat(t)-parseFloat(n)},height:({y:e},{paddingTop:t="0",paddingBottom:n="0",boxSizing:o})=>{const r=e.max-e.min;return o==="border-box"?r:r-parseFloat(t)-parseFloat(n)},top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:(e,{transform:t})=>Q0(t,"x"),y:(e,{transform:t})=>Q0(t,"y")};rr.translateX=rr.x;rr.translateY=rr.y;const Nr=new Set;let ed=!1,td=!1,nd=!1;function g6(){if(td){const e=Array.from(Nr).filter(o=>o.needsMeasurement),t=new Set(e.map(o=>o.element)),n=new Map;t.forEach(o=>{const r=oL(o);r.length&&(n.set(o,r),o.render())}),e.forEach(o=>o.measureInitialState()),t.forEach(o=>{o.render();const r=n.get(o);r&&r.forEach(([u,a])=>{o.getValue(u)?.set(a)})}),e.forEach(o=>o.measureEndState()),e.forEach(o=>{o.suspendedScrollY!==void 0&&window.scrollTo(0,o.suspendedScrollY)})}td=!1,ed=!1,Nr.forEach(e=>e.complete(nd)),Nr.clear()}function v6(){Nr.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(td=!0)})}function rL(){nd=!0,v6(),g6(),nd=!1}class Kf{constructor(t,n,o,r,u,a=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...t],this.onComplete=n,this.name=o,this.motionValue=r,this.element=u,this.isAsync=a}scheduleResolve(){this.state="scheduled",this.isAsync?(Nr.add(this),ed||(ed=!0,Je.read(v6),Je.resolveKeyframes(g6))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:t,name:n,element:o,motionValue:r}=this;if(t[0]===null){const u=r?.get(),a=t[t.length-1];if(u!==void 0)t[0]=u;else if(o&&n){const s=o.readValue(n,a);s!=null&&(t[0]=s)}t[0]===void 0&&(t[0]=a),r&&u===void 0&&r.set(t[0])}ZR(t)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(t=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,t),Nr.delete(this)}cancel(){this.state==="scheduled"&&(Nr.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const uL=e=>e.startsWith("--");function y6(e,t,n){uL(t)?e.style.setProperty(t,n):e.style[t]=n}const aL={};function b6(e,t){const n=Wb(e);return()=>aL[t]??n()}const sL=b6(()=>window.ScrollTimeline!==void 0,"scrollTimeline"),E6=b6(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),ga=([e,t,n,o])=>`cubic-bezier(${e}, ${t}, ${n}, ${o})`,Q4={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:ga([0,.65,.55,1]),circOut:ga([.55,0,1,.45]),backIn:ga([.31,.01,.66,-.59]),backOut:ga([.33,1.53,.69,.99])};function C6(e,t){if(e)return typeof e=="function"?E6()?p6(e,t):"ease-out":r6(e)?ga(e):Array.isArray(e)?e.map(n=>C6(n,t)||Q4.easeOut):Q4[e]}function iL(e,t,n,{delay:o=0,duration:r=300,repeat:u=0,repeatType:a="loop",ease:s="easeOut",times:i}={},c=void 0){const l={[t]:n};i&&(l.offset=i);const d=C6(s,r);Array.isArray(d)&&(l.easing=d);const p={delay:o,duration:r,easing:Array.isArray(d)?"linear":d,fill:"both",iterations:u+1,direction:a==="reverse"?"alternate":"normal"};return c&&(p.pseudoElement=c),e.animate(l,p)}function x6(e){return typeof e=="function"&&"applyToOptions"in e}function lL({type:e,...t}){return x6(e)&&E6()?e.applyToOptions(t):(t.duration??(t.duration=300),t.ease??(t.ease="easeOut"),t)}class w6 extends Hf{constructor(t){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!t)return;const{element:n,name:o,keyframes:r,pseudoElement:u,allowFlatten:a=!1,finalKeyframe:s,onComplete:i}=t;this.isPseudoElement=!!u,this.allowFlatten=a,this.options=t,If(typeof t.type!="string");const c=lL(t);this.animation=iL(n,o,r,c,u),c.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!u){const l=Pl(r,this.options,s,this.speed);this.updateMotionValue&&this.updateMotionValue(l),y6(n,o,l),this.animation.cancel()}i?.(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:t}=this;t==="idle"||t==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){const t=this.options?.element;!this.isPseudoElement&&t?.isConnected&&this.animation.commitStyles?.()}get duration(){const t=this.animation.effect?.getComputedTiming?.().duration||0;return Mn(Number(t))}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+Mn(t)}get time(){return Mn(Number(this.animation.currentTime)||0)}set time(t){const n=this.finishedTime!==null;this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=Rn(t),n&&this.animation.pause()}get speed(){return this.animation.playbackRate}set speed(t){t<0&&(this.finishedTime=null),this.animation.playbackRate=t}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(t){this.manualStartTime=this.animation.startTime=t}attachTimeline({timeline:t,rangeStart:n,rangeEnd:o,observe:r}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:"linear"}),this.animation.onfinish=null,t&&sL()?(this.animation.timeline=t,n&&(this.animation.rangeStart=n),o&&(this.animation.rangeEnd=o),In):r(this)}}const D6={anticipate:e6,backInOut:Qb,circInOut:n6};function cL(e){return e in D6}function dL(e){typeof e.ease=="string"&&cL(e.ease)&&(e.ease=D6[e.ease])}const Dc=10;class fL extends w6{constructor(t){dL(t),m6(t),super(t),t.startTime!==void 0&&t.autoplay!==!1&&(this.startTime=t.startTime),this.options=t}updateMotionValue(t){const{motionValue:n,onUpdate:o,onComplete:r,element:u,...a}=this.options;if(!n)return;if(t!==void 0){n.set(t);return}const s=new Ui({...a,autoplay:!1}),i=Math.max(Dc,rn.now()-this.startTime),c=po(0,Dc,i-Dc),l=s.sample(i).value,{name:d}=this.options;u&&d&&y6(u,d,l),n.setWithVelocity(s.sample(Math.max(0,i-c)).value,l,c),s.stop()}}const em=(e,t)=>t==="zIndex"?!1:!!(typeof e=="number"||Array.isArray(e)||typeof e=="string"&&(zn.test(e)||e==="0")&&!e.startsWith("url("));function pL(e){const t=e[0];if(e.length===1)return!0;for(let n=0;nObject.hasOwnProperty.call(Element.prototype,"animate"));function bL(e){const{motionValue:t,name:n,repeatDelay:o,repeatType:r,damping:u,type:a,keyframes:s}=e;if(!(t?.owner?.current instanceof HTMLElement))return!1;const{onUpdate:c,transformTemplate:l}=t.owner.getProps();return yL()&&n&&(A6.has(n)||vL.has(n)&&gL(s))&&(n!=="transform"||!l)&&!c&&!o&&r!=="mirror"&&u!==0&&a!=="inertia"}const EL=40;class CL extends Hf{constructor({autoplay:t=!0,delay:n=0,type:o="keyframes",repeat:r=0,repeatDelay:u=0,repeatType:a="loop",keyframes:s,name:i,motionValue:c,element:l,...d}){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=rn.now();const p={autoplay:t,delay:n,type:o,repeat:r,repeatDelay:u,repeatType:a,name:i,motionValue:c,element:l,...d},h=l?.KeyframeResolver||Kf;this.keyframeResolver=new h(s,(m,g,y)=>this.onKeyframesResolved(m,g,p,!y),i,c,l),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(t,n,o,r){this.keyframeResolver=void 0;const{name:u,type:a,velocity:s,delay:i,isHandoff:c,onUpdate:l}=o;this.resolvedAt=rn.now();let d=!0;hL(t,u,a,s)||(d=!1,(pr.instantAnimations||!i)&&l?.(Pl(t,o,n)),t[0]=t[t.length-1],od(o),o.repeat=0);const h={startTime:r?this.resolvedAt?this.resolvedAt-this.createdAt>EL?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:n,...o,keyframes:t},m=d&&!c&&bL(h),g=h.motionValue?.owner?.current;let y;if(m)try{y=new fL({...h,element:g})}catch{y=new Ui(h)}else y=new Ui(h);y.finished.then(()=>{this.notifyFinished()}).catch(In),this.pendingTimeline&&(this.stopTimeline=y.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=y}get finished(){return this._animation?this.animation.finished:this._finished}then(t,n){return this.finished.finally(t).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),rL()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(t){this.animation.time=t}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(t){this.animation.speed=t}get startTime(){return this.animation.startTime}attachTimeline(t){return this._animation?this.stopTimeline=this.animation.attachTimeline(t):this.pendingTimeline=t,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}}function B6(e,t,n,o=0,r=1){const u=Array.from(e).sort((c,l)=>c.sortNodePosition(l)).indexOf(t),a=e.size,s=(a-1)*o;return typeof n=="function"?n(u,a):r===1?u*o:s-u*o}const xL=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function wL(e){const t=xL.exec(e);if(!t)return[,];const[,n,o,r]=t;return[`--${n??o}`,r]}function _6(e,t,n=1){const[o,r]=wL(e);if(!o)return;const u=window.getComputedStyle(t).getPropertyValue(o);if(u){const a=u.trim();return Ub(a)?parseFloat(a):a}return Nf(r)?_6(r,t,n+1):r}const DL={type:"spring",stiffness:500,damping:25,restSpeed:10},AL=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),BL={type:"keyframes",duration:.8},_L={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},kL=(e,{keyframes:t})=>t.length>2?BL:Xu.has(e)?e.startsWith("scale")?AL(t[1]):DL:_L;function k6(e,t){if(e?.inherit&&t){const{inherit:n,...o}=e;return{...t,...o}}return e}function Wf(e,t){const n=e?.[t]??e?.default??e;return n!==e?k6(n,e):n}const SL=new Set(["when","delay","delayChildren","staggerChildren","staggerDirection","repeat","repeatType","repeatDelay","from","elapsed"]);function TL(e){for(const t in e)if(!SL.has(t))return!0;return!1}const Gf=(e,t,n,o={},r,u)=>a=>{const s=Wf(o,e)||{},i=s.delay||o.delay||0;let{elapsed:c=0}=o;c=c-Rn(i);const l={keyframes:Array.isArray(n)?n:[null,n],ease:"easeOut",velocity:t.getVelocity(),...s,delay:-c,onUpdate:p=>{t.set(p),s.onUpdate&&s.onUpdate(p)},onComplete:()=>{a(),s.onComplete&&s.onComplete()},name:e,motionValue:t,element:u?void 0:r};TL(s)||Object.assign(l,kL(e,l)),l.duration&&(l.duration=Rn(l.duration)),l.repeatDelay&&(l.repeatDelay=Rn(l.repeatDelay)),l.from!==void 0&&(l.keyframes[0]=l.from);let d=!1;if((l.type===!1||l.duration===0&&!l.repeatDelay)&&(od(l),l.delay===0&&(d=!0)),(pr.instantAnimations||pr.skipAnimations||r?.shouldSkipAnimations)&&(d=!0,od(l),l.delay=0),l.allowFlatten=!s.type&&!s.ease,d&&!u&&t.get()!==void 0){const p=Pl(l.keyframes,s);if(p!==void 0){Je.update(()=>{l.onUpdate(p),l.onComplete()});return}}return s.isSync?new Ui(l):new CL(l)};function tm(e){const t=[{},{}];return e?.values.forEach((n,o)=>{t[0][o]=n.get(),t[1][o]=n.getVelocity()}),t}function S6(e,t,n,o){if(typeof t=="function"){const[r,u]=tm(o);t=t(n!==void 0?n:e.custom,r,u)}if(typeof t=="string"&&(t=e.variants&&e.variants[t]),typeof t=="function"){const[r,u]=tm(o);t=t(n!==void 0?n:e.custom,r,u)}return t}function wu(e,t,n){const o=e.getProps();return S6(o,t,n!==void 0?n:o.custom,e)}const T6=new Set(["width","height","top","left","right","bottom",...Zu]),nm=30,FL=e=>!isNaN(parseFloat(e));class PL{constructor(t,n={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=o=>{const r=rn.now();if(this.updatedAt!==r&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(o),this.current!==this.prev&&(this.events.change?.notify(this.current),this.dependents))for(const u of this.dependents)u.dirty()},this.hasAnimated=!1,this.setCurrent(t),this.owner=n.owner}setCurrent(t){this.current=t,this.updatedAt=rn.now(),this.canTrackVelocity===null&&t!==void 0&&(this.canTrackVelocity=FL(this.current))}setPrevFrameValue(t=this.current){this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt}onChange(t){return this.on("change",t)}on(t,n){this.events[t]||(this.events[t]=new Rf);const o=this.events[t].add(n);return t==="change"?()=>{o(),Je.read(()=>{this.events.change.getSize()||this.stop()})}:o}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,n){this.passiveEffect=t,this.stopPassiveEffect=n}set(t){this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t)}setWithVelocity(t,n,o){this.set(n),this.prev=void 0,this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt-o}jump(t,n=!0){this.updateAndNotify(t),this.prev=t,this.prevUpdatedAt=this.prevFrameValue=void 0,n&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.events.change?.notify(this.current)}addDependent(t){this.dependents||(this.dependents=new Set),this.dependents.add(t)}removeDependent(t){this.dependents&&this.dependents.delete(t)}get(){return this.current}getPrevious(){return this.prev}getVelocity(){const t=rn.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||t-this.updatedAt>nm)return 0;const n=Math.min(this.updatedAt-this.prevUpdatedAt,nm);return Gb(parseFloat(this.current)-parseFloat(this.prevFrameValue),n)}start(t){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=t(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function Ou(e,t){return new PL(e,t)}const ML=e=>Array.isArray(e);function OL(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,Ou(n))}function IL(e){return ML(e)?e[e.length-1]||0:e}function RL(e,t){const n=wu(e,t);let{transitionEnd:o={},transition:r={},...u}=n||{};u={...u,...o};for(const a in u){const s=IL(u[a]);OL(e,a,s)}}const Zt=e=>!!(e&&e.getVelocity);function LL(e){return!!(Zt(e)&&e.add)}function rd(e,t){const n=e.getValue("willChange");if(LL(n))return n.add(t);if(!n&&pr.WillChange){const o=new pr.WillChange("auto");e.addValue("willChange",o),o.add(t)}}function Yf(e){return e.replace(/([A-Z])/g,t=>`-${t.toLowerCase()}`)}const qL="framerAppearId",$L="data-"+Yf(qL);function F6(e){return e.props[$L]}function NL({protectedKeys:e,needsAnimating:t},n){const o=e.hasOwnProperty(n)&&t[n]!==!0;return t[n]=!1,o}function P6(e,t,{delay:n=0,transitionOverride:o,type:r}={}){let{transition:u,transitionEnd:a,...s}=t;const i=e.getDefaultTransition();u=u?k6(u,i):i;const c=u?.reduceMotion;o&&(u=o);const l=[],d=r&&e.animationState&&e.animationState.getState()[r];for(const p in s){const h=e.getValue(p,e.latestValues[p]??null),m=s[p];if(m===void 0||d&&NL(d,p))continue;const g={delay:n,...Wf(u||{},p)},y=h.get();if(y!==void 0&&!h.isAnimating()&&!Array.isArray(m)&&m===y&&!g.velocity){Je.update(()=>h.set(m));continue}let E=!1;if(window.MotionHandoffAnimation){const C=F6(e);if(C){const w=window.MotionHandoffAnimation(C,p,Je);w!==null&&(g.startTime=w,E=!0)}}rd(e,p);const b=c??e.shouldReduceMotion;h.start(Gf(p,h,m,b&&T6.has(p)?{type:!1}:g,e,E));const v=h.animation;v&&l.push(v)}if(a){const p=()=>Je.update(()=>{a&&RL(e,a)});l.length?Promise.all(l).then(p):p()}return l}function ud(e,t,n={}){const o=wu(e,t,n.type==="exit"?e.presenceContext?.custom:void 0);let{transition:r=e.getDefaultTransition()||{}}=o||{};n.transitionOverride&&(r=n.transitionOverride);const u=o?()=>Promise.all(P6(e,o,n)):()=>Promise.resolve(),a=e.variantChildren&&e.variantChildren.size?(i=0)=>{const{delayChildren:c=0,staggerChildren:l,staggerDirection:d}=r;return jL(e,t,i,c,l,d,n)}:()=>Promise.resolve(),{when:s}=r;if(s){const[i,c]=s==="beforeChildren"?[u,a]:[a,u];return i().then(()=>c())}else return Promise.all([u(),a(n.delay)])}function jL(e,t,n=0,o=0,r=0,u=1,a){const s=[];for(const i of e.variantChildren)i.notify("AnimationStart",t),s.push(ud(i,t,{...a,delay:n+(typeof o=="function"?0:o)+B6(e.variantChildren,i,o,r,u)}).then(()=>i.notify("AnimationComplete",t)));return Promise.all(s)}function VL(e,t,n={}){e.notify("AnimationStart",t);let o;if(Array.isArray(t)){const r=t.map(u=>ud(e,u,n));o=Promise.all(r)}else if(typeof t=="string")o=ud(e,t,n);else{const r=typeof t=="function"?wu(e,t,n.custom):t;o=Promise.all(P6(e,r,n))}return o.then(()=>{e.notify("AnimationComplete",t)})}const zL={test:e=>e==="auto",parse:e=>e},M6=e=>t=>t.test(e),O6=[Yu,he,co,Xo,pR,fR,zL],om=e=>O6.find(M6(e));function UL(e){return typeof e=="number"?e===0:e!==null?e==="none"||e==="0"||Kb(e):!0}const HL=new Set(["brightness","contrast","saturate","opacity"]);function KL(e){const[t,n]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[o]=n.match(jf)||[];if(!o)return e;const r=n.replace(o,"");let u=HL.has(t)?1:0;return o!==n&&(u*=100),t+"("+u+r+")"}const WL=/\b([a-z-]*)\(.*?\)/gu,ad={...zn,getAnimatableNone:e=>{const t=e.match(WL);return t?t.map(KL).join(" "):e}},sd={...zn,getAnimatableNone:e=>{const t=zn.parse(e);return zn.createTransformer(e)(t.map(o=>typeof o=="number"?0:typeof o=="object"?{...o,alpha:1}:o))}},rm={...Yu,transform:Math.round},GL={rotate:Xo,rotateX:Xo,rotateY:Xo,rotateZ:Xo,scale:Gs,scaleX:Gs,scaleY:Gs,scaleZ:Gs,skew:Xo,skewX:Xo,skewY:Xo,distance:he,translateX:he,translateY:he,translateZ:he,x:he,y:he,z:he,perspective:he,transformPerspective:he,opacity:Ya,originX:U4,originY:U4,originZ:he},Zf={borderWidth:he,borderTopWidth:he,borderRightWidth:he,borderBottomWidth:he,borderLeftWidth:he,borderRadius:he,borderTopLeftRadius:he,borderTopRightRadius:he,borderBottomRightRadius:he,borderBottomLeftRadius:he,width:he,maxWidth:he,height:he,maxHeight:he,top:he,right:he,bottom:he,left:he,inset:he,insetBlock:he,insetBlockStart:he,insetBlockEnd:he,insetInline:he,insetInlineStart:he,insetInlineEnd:he,padding:he,paddingTop:he,paddingRight:he,paddingBottom:he,paddingLeft:he,paddingBlock:he,paddingBlockStart:he,paddingBlockEnd:he,paddingInline:he,paddingInlineStart:he,paddingInlineEnd:he,margin:he,marginTop:he,marginRight:he,marginBottom:he,marginLeft:he,marginBlock:he,marginBlockStart:he,marginBlockEnd:he,marginInline:he,marginInlineStart:he,marginInlineEnd:he,fontSize:he,backgroundPositionX:he,backgroundPositionY:he,...GL,zIndex:rm,fillOpacity:Ya,strokeOpacity:Ya,numOctaves:rm},YL={...Zf,color:Tt,backgroundColor:Tt,outlineColor:Tt,fill:Tt,stroke:Tt,borderColor:Tt,borderTopColor:Tt,borderRightColor:Tt,borderBottomColor:Tt,borderLeftColor:Tt,filter:ad,WebkitFilter:ad,mask:sd,WebkitMask:sd},I6=e=>YL[e],ZL=new Set([ad,sd]);function R6(e,t){let n=I6(e);return ZL.has(n)||(n=zn),n.getAnimatableNone?n.getAnimatableNone(t):void 0}const XL=new Set(["auto","none","0"]);function JL(e,t,n){let o=0,r;for(;o{t.getValue(s).set(i)}),this.resolveNoneKeyframes()}}function L6(e,t,n){if(e==null)return[];if(e instanceof EventTarget)return[e];if(typeof e=="string"){let o=document;const r=n?.[e]??o.querySelectorAll(e);return r?Array.from(r):[]}return Array.from(e).filter(o=>o!=null)}const q6=(e,t)=>t&&typeof e=="number"?t.transform(e):e;function eq(e){return Hb(e)&&"offsetHeight"in e&&!("ownerSVGElement"in e)}const{schedule:$6}=u6(queueMicrotask,!1),tq={y:!1};function nq(){return tq.y}function N6(e,t){const n=L6(e),o=new AbortController,r={passive:!0,...t,signal:o.signal};return[n,r,()=>o.abort()]}function oq(e){return!(e.pointerType==="touch"||nq())}function rq(e,t,n={}){const[o,r,u]=N6(e,n);return o.forEach(a=>{let s=!1,i=!1,c;const l=()=>{a.removeEventListener("pointerleave",m)},d=y=>{c&&(c(y),c=void 0),l()},p=y=>{s=!1,window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p),i&&(i=!1,d(y))},h=()=>{s=!0,window.addEventListener("pointerup",p,r),window.addEventListener("pointercancel",p,r)},m=y=>{if(y.pointerType!=="touch"){if(s){i=!0;return}d(y)}},g=y=>{if(!oq(y))return;i=!1;const E=t(a,y);typeof E=="function"&&(c=E,a.addEventListener("pointerleave",m,r))};a.addEventListener("pointerenter",g,r),a.addEventListener("pointerdown",h,r)}),u}const j6=(e,t)=>t?e===t?!0:j6(e,t.parentElement):!1,uq=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1,aq=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function sq(e){return aq.has(e.tagName)||e.isContentEditable===!0}const li=new WeakSet;function um(e){return t=>{t.key==="Enter"&&e(t)}}function Ac(e,t){e.dispatchEvent(new PointerEvent("pointer"+t,{isPrimary:!0,bubbles:!0}))}const iq=(e,t)=>{const n=e.currentTarget;if(!n)return;const o=um(()=>{if(li.has(n))return;Ac(n,"down");const r=um(()=>{Ac(n,"up")}),u=()=>Ac(n,"cancel");n.addEventListener("keyup",r,t),n.addEventListener("blur",u,t)});n.addEventListener("keydown",o,t),n.addEventListener("blur",()=>n.removeEventListener("keydown",o),t)};function am(e){return uq(e)&&!0}const sm=new WeakSet;function lq(e,t,n={}){const[o,r,u]=N6(e,n),a=s=>{const i=s.currentTarget;if(!am(s)||sm.has(s))return;li.add(i),n.stopPropagation&&sm.add(s);const c=t(i,s),l=(h,m)=>{window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",p),li.has(i)&&li.delete(i),am(h)&&typeof c=="function"&&c(h,{success:m})},d=h=>{l(h,i===window||i===document||n.useGlobalTarget||j6(i,h.target))},p=h=>{l(h,!1)};window.addEventListener("pointerup",d,r),window.addEventListener("pointercancel",p,r)};return o.forEach(s=>{(n.useGlobalTarget?window:s).addEventListener("pointerdown",a,r),eq(s)&&(s.addEventListener("focus",c=>iq(c,r)),!sq(s)&&!s.hasAttribute("tabindex")&&(s.tabIndex=0))}),u}function V6(e){return Hb(e)&&"ownerSVGElement"in e}function cq(e){return V6(e)&&e.tagName==="svg"}const dq=[...O6,Tt,zn],fq=e=>dq.find(M6(e)),im=()=>({translate:0,scale:1,origin:0,originPoint:0}),du=()=>({x:im(),y:im()}),lm=()=>({min:0,max:0}),It=()=>({x:lm(),y:lm()}),pq=new WeakMap;function Xf(e){return e!==null&&typeof e=="object"&&typeof e.start=="function"}function Ml(e){return typeof e=="string"||Array.isArray(e)}const hq=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],mq=["initial",...hq];function z6(e){return Xf(e.animate)||mq.some(t=>Ml(e[t]))}function gq(e){return!!(z6(e)||e.variants)}function vq(e,t,n){for(const o in t){const r=t[o],u=n[o];if(Zt(r))e.addValue(o,r);else if(Zt(u))e.addValue(o,Ou(r,{owner:e}));else if(u!==r)if(e.hasValue(o)){const a=e.getValue(o);a.liveStyle===!0?a.jump(r):a.hasAnimated||a.set(r)}else{const a=e.getStaticValue(o);e.addValue(o,Ou(a!==void 0?a:r,{owner:e}))}}for(const o in n)t[o]===void 0&&e.removeValue(o);return t}const id={current:null},U6={current:!1},yq=typeof window<"u";function bq(){if(U6.current=!0,!!yq)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),t=()=>id.current=e.matches;e.addEventListener("change",t),t()}else id.current=!1}const cm=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];let dm={};class Eq{scrapeMotionValuesFromProps(t,n,o){return{}}constructor({parent:t,props:n,presenceContext:o,reducedMotionConfig:r,skipAnimations:u,blockInitialAnimation:a,visualState:s},i={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=Kf,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const h=rn.now();this.renderScheduledAtthis.bindToMotionValue(o,n)),this.reducedMotionConfig==="never"?this.shouldReduceMotion=!1:this.reducedMotionConfig==="always"?this.shouldReduceMotion=!0:(U6.current||bq(),this.shouldReduceMotion=id.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,this.parent?.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){this.projection&&this.projection.unmount(),hr(this.notifyUpdate),hr(this.render),this.valueSubscriptions.forEach(t=>t()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(const t in this.events)this.events[t].clear();for(const t in this.features){const n=this.features[t];n&&(n.unmount(),n.isMounted=!1)}this.current=null}addChild(t){this.children.add(t),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(t)}removeChild(t){this.children.delete(t),this.enteringChildren&&this.enteringChildren.delete(t)}bindToMotionValue(t,n){if(this.valueSubscriptions.has(t)&&this.valueSubscriptions.get(t)(),n.accelerate&&A6.has(t)&&this.current instanceof HTMLElement){const{factory:a,keyframes:s,times:i,ease:c,duration:l}=n.accelerate,d=new w6({element:this.current,name:t,keyframes:s,times:i,ease:c,duration:Rn(l)}),p=a(d);this.valueSubscriptions.set(t,()=>{p(),d.cancel()});return}const o=Xu.has(t);o&&this.onBindTransform&&this.onBindTransform();const r=n.on("change",a=>{this.latestValues[t]=a,this.props.onUpdate&&Je.preRender(this.notifyUpdate),o&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let u;typeof window<"u"&&window.MotionCheckAppearSync&&(u=window.MotionCheckAppearSync(this,t,n)),this.valueSubscriptions.set(t,()=>{r(),u&&u(),n.owner&&n.stop()})}sortNodePosition(t){return!this.current||!this.sortInstanceNodePosition||this.type!==t.type?0:this.sortInstanceNodePosition(this.current,t.current)}updateFeatures(){let t="animation";for(t in dm){const n=dm[t];if(!n)continue;const{isEnabled:o,Feature:r}=n;if(!this.features[t]&&r&&o(this.props)&&(this.features[t]=new r(this)),this.features[t]){const u=this.features[t];u.isMounted?u.update():(u.mount(),u.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):It()}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,n){this.latestValues[t]=n}update(t,n){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let o=0;on.variantChildren.delete(t)}addValue(t,n){const o=this.values.get(t);n!==o&&(o&&this.removeValue(t),this.bindToMotionValue(t,n),this.values.set(t,n),this.latestValues[t]=n.get())}removeValue(t){this.values.delete(t);const n=this.valueSubscriptions.get(t);n&&(n(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,n){if(this.props.values&&this.props.values[t])return this.props.values[t];let o=this.values.get(t);return o===void 0&&n!==void 0&&(o=Ou(n===null?void 0:n,{owner:this}),this.addValue(t,o)),o}readValue(t,n){let o=this.latestValues[t]!==void 0||!this.current?this.latestValues[t]:this.getBaseTargetFromProps(this.props,t)??this.readValueFromInstance(this.current,t,this.options);return o!=null&&(typeof o=="string"&&(Ub(o)||Kb(o))?o=parseFloat(o):!fq(o)&&zn.test(n)&&(o=R6(t,n)),this.setBaseTarget(t,Zt(o)?o.get():o)),Zt(o)?o.get():o}setBaseTarget(t,n){this.baseTarget[t]=n}getBaseTarget(t){const{initial:n}=this.props;let o;if(typeof n=="string"||typeof n=="object"){const u=S6(this.props,n,this.presenceContext?.custom);u&&(o=u[t])}if(n&&o!==void 0)return o;const r=this.getBaseTargetFromProps(this.props,t);return r!==void 0&&!Zt(r)?r:this.initialValues[t]!==void 0&&o===void 0?void 0:this.baseTarget[t]}on(t,n){return this.events[t]||(this.events[t]=new Rf),this.events[t].add(n)}notify(t,...n){this.events[t]&&this.events[t].notify(...n)}scheduleRenderMicrotask(){$6.render(this.render)}}class H6 extends Eq{constructor(){super(...arguments),this.KeyframeResolver=QL}sortInstanceNodePosition(t,n){return t.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(t,n){const o=t.style;return o?o[n]:void 0}removeValueFromRenderState(t,{vars:n,style:o}){delete n[t],delete o[t]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;Zt(t)&&(this.childSubscription=t.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}}function K6({top:e,left:t,right:n,bottom:o}){return{x:{min:t,max:n},y:{min:e,max:o}}}function Cq({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function xq(e,t){if(!t)return e;const n=t({x:e.left,y:e.top}),o=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:o.y,right:o.x}}function Bc(e){return e===void 0||e===1}function ld({scale:e,scaleX:t,scaleY:n}){return!Bc(e)||!Bc(t)||!Bc(n)}function Sr(e){return ld(e)||W6(e)||e.z||e.rotate||e.rotateX||e.rotateY||e.skewX||e.skewY}function W6(e){return fm(e.x)||fm(e.y)}function fm(e){return e&&e!=="0%"}function Hi(e,t,n){const o=e-n,r=t*o;return n+r}function pm(e,t,n,o,r){return r!==void 0&&(e=Hi(e,r,o)),Hi(e,n,o)+t}function cd(e,t=0,n=1,o,r){e.min=pm(e.min,t,n,o,r),e.max=pm(e.max,t,n,o,r)}function G6(e,{x:t,y:n}){cd(e.x,t.translate,t.scale,t.originPoint),cd(e.y,n.translate,n.scale,n.originPoint)}const hm=.999999999999,mm=1.0000000000001;function wq(e,t,n,o=!1){const r=n.length;if(!r)return;t.x=t.y=1;let u,a;for(let s=0;shm&&(t.x=1),t.yhm&&(t.y=1)}function uo(e,t){e.min+=t,e.max+=t}function gm(e,t,n,o,r=.5){const u=ft(e.min,e.max,r);cd(e,t,n,u,o)}function vm(e,t){return typeof e=="string"?parseFloat(e)/100*(t.max-t.min):e}function ci(e,t,n){const o=n??e;gm(e.x,vm(t.x,o.x),t.scaleX,t.scale,t.originX),gm(e.y,vm(t.y,o.y),t.scaleY,t.scale,t.originY)}function Y6(e,t){return K6(xq(e.getBoundingClientRect(),t))}function Dq(e,t,n){const o=Y6(e,n),{scroll:r}=t;return r&&(uo(o.x,r.offset.x),uo(o.y,r.offset.y)),o}const Aq={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},Bq=Zu.length;function _q(e,t,n){let o="",r=!0;for(let u=0;u{if(!t.target)return e;if(typeof e=="string")if(he.test(e))e=parseFloat(e);else return e;const n=ym(e,t.target.x),o=ym(e,t.target.y);return`${n}% ${o}%`}},X6={correct:(e,{treeScale:t,projectionDelta:n})=>{const o=e,r=zn.parse(e);if(r.length>5)return o;const u=zn.createTransformer(e),a=typeof r[0]!="number"?1:0,s=n.x.scale*t.x,i=n.y.scale*t.y;r[0+a]/=s,r[1+a]/=i;const c=ft(s,i,.5);return typeof r[2+a]=="number"&&(r[2+a]/=c),typeof r[3+a]=="number"&&(r[3+a]/=c),u(r)}},Za={borderRadius:{...ao,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:ao,borderTopRightRadius:ao,borderBottomLeftRadius:ao,borderBottomRightRadius:ao,boxShadow:X6};function J6(e){for(const t in e)Za[t]=e[t],$f(t)&&(Za[t].isCSSVariable=!0)}function kq(e,{layout:t,layoutId:n}){return Xu.has(e)||e.startsWith("origin")||(t||n!==void 0)&&(!!Za[e]||e==="opacity")}function Q6(e,t,n){const o=e.style,r=t?.style,u={};if(!o)return u;for(const a in o)(Zt(o[a])||r&&Zt(r[a])||kq(a,e)||n?.getValue(a)?.liveStyle!==void 0)&&(u[a]=o[a]);return u}function Sq(e){return window.getComputedStyle(e)}class Tq extends H6{constructor(){super(...arguments),this.type="html",this.renderInstance=Z6}readValueFromInstance(t,n){if(Xu.has(n))return this.projection?.isProjecting?J0(n):QR(t,n);{const o=Sq(t),r=($f(n)?o.getPropertyValue(n):o[n])||0;return typeof r=="string"?r.trim():r}}measureInstanceViewportBox(t,{transformPagePoint:n}){return Y6(t,n)}build(t,n,o){Jf(t,n,o.transformTemplate)}scrapeMotionValuesFromProps(t,n,o){return Q6(t,n,o)}}const Fq={offset:"stroke-dashoffset",array:"stroke-dasharray"},Pq={offset:"strokeDashoffset",array:"strokeDasharray"};function Mq(e,t,n=1,o=0,r=!0){e.pathLength=1;const u=r?Fq:Pq;e[u.offset]=`${-o}`,e[u.array]=`${t} ${n}`}const Oq=["offsetDistance","offsetPath","offsetRotate","offsetAnchor"];function eE(e,{attrX:t,attrY:n,attrScale:o,pathLength:r,pathSpacing:u=1,pathOffset:a=0,...s},i,c,l){if(Jf(e,s,c),i){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:d,style:p}=e;d.transform&&(p.transform=d.transform,delete d.transform),(p.transform||d.transformOrigin)&&(p.transformOrigin=d.transformOrigin??"50% 50%",delete d.transformOrigin),p.transform&&(p.transformBox=l?.transformBox??"fill-box",delete d.transformBox);for(const h of Oq)d[h]!==void 0&&(p[h]=d[h],delete d[h]);t!==void 0&&(d.x=t),n!==void 0&&(d.y=n),o!==void 0&&(d.scale=o),r!==void 0&&Mq(d,r,u,a,!1)}const Qf=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]),tE=e=>typeof e=="string"&&e.toLowerCase()==="svg";function Iq(e,t,n,o){Z6(e,t,void 0,o);for(const r in t.attrs)e.setAttribute(Qf.has(r)?r:Yf(r),t.attrs[r])}function Rq(e,t,n){const o=Q6(e,t,n);for(const r in e)if(Zt(e[r])||Zt(t[r])){const u=Zu.indexOf(r)!==-1?"attr"+r.charAt(0).toUpperCase()+r.substring(1):r;o[u]=e[r]}return o}class Lq extends H6{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=It}getBaseTargetFromProps(t,n){return t[n]}readValueFromInstance(t,n){if(Xu.has(n)){const o=I6(n);return o&&o.default||0}return n=Qf.has(n)?n:Yf(n),t.getAttribute(n)}scrapeMotionValuesFromProps(t,n,o){return Rq(t,n,o)}build(t,n,o){eE(t,n,this.isSVGTag,o.transformTemplate,o.style)}renderInstance(t,n,o,r){Iq(t,n,o,r)}mount(t){this.isSVGTag=tE(t.tagName),super.mount(t)}}function dd(e,t){e.min=t.min,e.max=t.max}function $n(e,t){dd(e.x,t.x),dd(e.y,t.y)}function bm(e,t){e.translate=t.translate,e.scale=t.scale,e.originPoint=t.originPoint,e.origin=t.origin}const nE=1e-4,qq=1-nE,$q=1+nE,oE=.01,Nq=0-oE,jq=0+oE;function un(e){return e.max-e.min}function Vq(e,t,n){return Math.abs(e-t)<=n}function Em(e,t,n,o=.5){e.origin=o,e.originPoint=ft(t.min,t.max,e.origin),e.scale=un(n)/un(t),e.translate=ft(n.min,n.max,e.origin)-e.originPoint,(e.scale>=qq&&e.scale<=$q||isNaN(e.scale))&&(e.scale=1),(e.translate>=Nq&&e.translate<=jq||isNaN(e.translate))&&(e.translate=0)}function ka(e,t,n,o){Em(e.x,t.x,n.x,o?o.originX:void 0),Em(e.y,t.y,n.y,o?o.originY:void 0)}function Cm(e,t,n,o=0){const r=o?ft(n.min,n.max,o):n.min;e.min=r+t.min,e.max=e.min+un(t)}function zq(e,t,n,o){Cm(e.x,t.x,n.x,o?.x),Cm(e.y,t.y,n.y,o?.y)}function xm(e,t,n,o=0){const r=o?ft(n.min,n.max,o):n.min;e.min=t.min-r,e.max=e.min+un(t)}function Ki(e,t,n,o){xm(e.x,t.x,n.x,o?.x),xm(e.y,t.y,n.y,o?.y)}function wm(e,t,n,o,r){return e-=t,e=Hi(e,1/n,o),r!==void 0&&(e=Hi(e,1/r,o)),e}function Uq(e,t=0,n=1,o=.5,r,u=e,a=e){if(co.test(t)&&(t=parseFloat(t),t=ft(a.min,a.max,t/100)-a.min),typeof t!="number")return;let s=ft(u.min,u.max,o);e===u&&(s-=t),e.min=wm(e.min,t,n,s,r),e.max=wm(e.max,t,n,s,r)}function Dm(e,t,[n,o,r],u,a){Uq(e,t[n],t[o],t[r],t.scale,u,a)}const Hq=["x","scaleX","originX"],Kq=["y","scaleY","originY"];function Am(e,t,n,o){Dm(e.x,t,Hq,n?n.x:void 0,o?o.x:void 0),Dm(e.y,t,Kq,n?n.y:void 0,o?o.y:void 0)}function Bm(e){return e.translate===0&&e.scale===1}function rE(e){return Bm(e.x)&&Bm(e.y)}function _m(e,t){return e.min===t.min&&e.max===t.max}function Wq(e,t){return _m(e.x,t.x)&&_m(e.y,t.y)}function km(e,t){return Math.round(e.min)===Math.round(t.min)&&Math.round(e.max)===Math.round(t.max)}function uE(e,t){return km(e.x,t.x)&&km(e.y,t.y)}function Sm(e){return un(e.x)/un(e.y)}function Tm(e,t){return e.translate===t.translate&&e.scale===t.scale&&e.originPoint===t.originPoint}function Tn(e){return[e("x"),e("y")]}function Gq(e,t,n){let o="";const r=e.x.translate/t.x,u=e.y.translate/t.y,a=n?.z||0;if((r||u||a)&&(o=`translate3d(${r}px, ${u}px, ${a}px) `),(t.x!==1||t.y!==1)&&(o+=`scale(${1/t.x}, ${1/t.y}) `),n){const{transformPerspective:c,rotate:l,rotateX:d,rotateY:p,skewX:h,skewY:m}=n;c&&(o=`perspective(${c}px) ${o}`),l&&(o+=`rotate(${l}deg) `),d&&(o+=`rotateX(${d}deg) `),p&&(o+=`rotateY(${p}deg) `),h&&(o+=`skewX(${h}deg) `),m&&(o+=`skewY(${m}deg) `)}const s=e.x.scale*t.x,i=e.y.scale*t.y;return(s!==1||i!==1)&&(o+=`scale(${s}, ${i})`),o||"none"}const aE=["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"],Yq=aE.length,Fm=e=>typeof e=="string"?parseFloat(e):e,Pm=e=>typeof e=="number"||he.test(e);function Zq(e,t,n,o,r,u){r?(e.opacity=ft(0,n.opacity??1,Xq(o)),e.opacityExit=ft(t.opacity??1,0,Jq(o))):u&&(e.opacity=ft(t.opacity??1,n.opacity??1,o));for(let a=0;aot?1:n(Ga(e,t,o))}function Qq(e,t,n){const o=Zt(e)?e:Ou(e);return o.start(Gf("",o,t,n)),o.animation}function e$(e,t,n,o={passive:!0}){return e.addEventListener(t,n,o),()=>e.removeEventListener(t,n)}const t$=(e,t)=>e.depth-t.depth;class n${constructor(){this.children=[],this.isDirty=!1}add(t){Of(this.children,t),this.isDirty=!0}remove(t){Ni(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(t$),this.isDirty=!1,this.children.forEach(t)}}function o$(e,t){const n=rn.now(),o=({timestamp:r})=>{const u=r-n;u>=t&&(hr(o),e(u-t))};return Je.setup(o,!0),()=>hr(o)}function _c(e){return Zt(e)?e.get():e}class r${constructor(){this.members=[]}add(t){Of(this.members,t);for(let n=this.members.length-1;n>=0;n--){const o=this.members[n];if(o===t||o===this.lead||o===this.prevLead)continue;const r=o.instance;(!r||r.isConnected===!1)&&!o.snapshot&&(Ni(this.members,o),o.unmount())}t.scheduleRender()}remove(t){if(Ni(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(t){for(let n=this.members.indexOf(t)-1;n>=0;n--){const o=this.members[n];if(o.isPresent!==!1&&o.instance?.isConnected!==!1)return this.promote(o),!0}return!1}promote(t,n){const o=this.lead;if(t!==o&&(this.prevLead=o,this.lead=t,t.show(),o)){o.updateSnapshot(),t.scheduleRender();const{layoutDependency:r}=o.options,{layoutDependency:u}=t.options;(r===void 0||r!==u)&&(t.resumeFrom=o,n&&(o.preserveOpacity=!0),o.snapshot&&(t.snapshot=o.snapshot,t.snapshot.latestValues=o.animationValues||o.latestValues),t.root?.isUpdating&&(t.isLayoutDirty=!0)),t.options.crossfade===!1&&o.hide()}}exitAnimationComplete(){this.members.forEach(t=>{t.options.onExitComplete?.(),t.resumingFrom?.options.onExitComplete?.()})}scheduleRender(){this.members.forEach(t=>t.instance&&t.scheduleRender(!1))}removeLeadSnapshot(){this.lead?.snapshot&&(this.lead.snapshot=void 0)}}const di={hasAnimatedSinceResize:!0,hasEverUpdated:!1},kc=["","X","Y","Z"],u$=1e3;let a$=0;function Sc(e,t,n,o){const{latestValues:r}=t;r[e]&&(n[e]=r[e],t.setStaticValue(e,0),o&&(o[e]=0))}function iE(e){if(e.hasCheckedOptimisedAppear=!0,e.root===e)return;const{visualElement:t}=e.options;if(!t)return;const n=F6(t);if(window.MotionHasOptimisedAnimation(n,"transform")){const{layout:r,layoutId:u}=e.options;window.MotionCancelOptimisedAnimation(n,"transform",Je,!(r||u))}const{parent:o}=e;o&&!o.hasCheckedOptimisedAppear&&iE(o)}function lE({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:o,resetTransform:r}){return class{constructor(a={},s=t?.()){this.id=a$++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(l$),this.nodes.forEach(m$),this.nodes.forEach(g$),this.nodes.forEach(c$)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=a,this.root=s?s.root||s:this,this.path=s?[...s.path,s]:[],this.parent=s,this.depth=s?s.depth+1:0;for(let i=0;ithis.root.updateBlockedByResize=!1;Je.read(()=>{d=window.innerWidth}),e(a,()=>{const h=window.innerWidth;h!==d&&(d=h,this.root.updateBlockedByResize=!0,l&&l(),l=o$(p,250),di.hasAnimatedSinceResize&&(di.hasAnimatedSinceResize=!1,this.nodes.forEach(Rm)))})}s&&this.root.registerSharedNode(s,this),this.options.animate!==!1&&c&&(s||i)&&this.addEventListener("didUpdate",({delta:l,hasLayoutChanged:d,hasRelativeLayoutChanged:p,layout:h})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||c.getDefaultTransition()||C$,{onLayoutAnimationStart:g,onLayoutAnimationComplete:y}=c.getProps(),E=!this.targetLayout||!uE(this.targetLayout,h),b=!d&&p;if(this.options.layoutRoot||this.resumeFrom||b||d&&(E||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const v={...Wf(m,"layout"),onPlay:g,onComplete:y};(c.shouldReduceMotion||this.options.layoutRoot)&&(v.delay=0,v.type=!1),this.startAnimation(v),this.setAnimationOrigin(l,b)}else d||Rm(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=h})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const a=this.getStack();a&&a.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),hr(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(v$),this.animationId++)}getTransformTemplate(){const{visualElement:a}=this.options;return a&&a.getProps().transformTemplate}willUpdate(a=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&iE(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let l=0;l{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!un(this.snapshot.measuredBox.x)&&!un(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let i=0;i{const w=C/1e3;Lm(d.x,a.x,w),Lm(d.y,a.y,w),this.setTargetDelta(d),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(Ki(p,this.layout.layoutBox,this.relativeParent.layout.layoutBox,this.options.layoutAnchor||void 0),b$(this.relativeTarget,this.relativeTargetOrigin,p,w),v&&Wq(this.relativeTarget,v)&&(this.isProjectionDirty=!1),v||(v=It()),$n(v,this.relativeTarget)),g&&(this.animationValues=l,Zq(l,c,this.latestValues,w,b,E)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=w},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(a){this.notifyListeners("animationStart"),this.currentAnimation?.stop(),this.resumingFrom?.currentAnimation?.stop(),this.pendingAnimation&&(hr(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Je.update(()=>{di.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=Ou(0)),this.motionValue.jump(0,!1),this.currentAnimation=Qq(this.motionValue,[0,1e3],{...a,velocity:0,isSync:!0,onUpdate:s=>{this.mixTargetDelta(s),a.onUpdate&&a.onUpdate(s)},onStop:()=>{},onComplete:()=>{a.onComplete&&a.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const a=this.getStack();a&&a.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(u$),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const a=this.getLead();let{targetWithTransforms:s,target:i,layout:c,latestValues:l}=a;if(!(!s||!i||!c)){if(this!==a&&this.layout&&c&&cE(this.options.animationType,this.layout.layoutBox,c.layoutBox)){i=this.target||It();const d=un(this.layout.layoutBox.x);i.x.min=a.target.x.min,i.x.max=i.x.min+d;const p=un(this.layout.layoutBox.y);i.y.min=a.target.y.min,i.y.max=i.y.min+p}$n(s,i),ci(s,l),ka(this.projectionDeltaWithTransform,this.layoutCorrected,s,l)}}registerSharedNode(a,s){this.sharedNodes.has(a)||this.sharedNodes.set(a,new r$),this.sharedNodes.get(a).add(s);const c=s.options.initialPromotionConfig;s.promote({transition:c?c.transition:void 0,preserveFollowOpacity:c&&c.shouldPreserveFollowOpacity?c.shouldPreserveFollowOpacity(s):void 0})}isLead(){const a=this.getStack();return a?a.lead===this:!0}getLead(){const{layoutId:a}=this.options;return a?this.getStack()?.lead||this:this}getPrevLead(){const{layoutId:a}=this.options;return a?this.getStack()?.prevLead:void 0}getStack(){const{layoutId:a}=this.options;if(a)return this.root.sharedNodes.get(a)}promote({needsReset:a,transition:s,preserveFollowOpacity:i}={}){const c=this.getStack();c&&c.promote(this,i),a&&(this.projectionDelta=void 0,this.needsReset=!0),s&&this.setOptions({transition:s})}relegate(){const a=this.getStack();return a?a.relegate(this):!1}resetSkewAndRotation(){const{visualElement:a}=this.options;if(!a)return;let s=!1;const{latestValues:i}=a;if((i.z||i.rotate||i.rotateX||i.rotateY||i.rotateZ||i.skewX||i.skewY)&&(s=!0),!s)return;const c={};i.z&&Sc("z",a,c,this.animationValues);for(let l=0;la.currentAnimation?.stop()),this.root.nodes.forEach(Om),this.root.sharedNodes.clear()}}}function s$(e){e.updateLayout()}function i$(e){const t=e.resumeFrom?.snapshot||e.snapshot;if(e.isLead()&&e.layout&&t&&e.hasListeners("didUpdate")){const{layoutBox:n,measuredBox:o}=e.layout,{animationType:r}=e.options,u=t.source!==e.layout.source;if(r==="size")Tn(l=>{const d=u?t.measuredBox[l]:t.layoutBox[l],p=un(d);d.min=n[l].min,d.max=d.min+p});else if(r==="x"||r==="y"){const l=r==="x"?"y":"x";dd(u?t.measuredBox[l]:t.layoutBox[l],n[l])}else cE(r,t.layoutBox,n)&&Tn(l=>{const d=u?t.measuredBox[l]:t.layoutBox[l],p=un(n[l]);d.max=d.min+p,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[l].max=e.relativeTarget[l].min+p)});const a=du();ka(a,n,t.layoutBox);const s=du();u?ka(s,e.applyTransform(o,!0),t.measuredBox):ka(s,n,t.layoutBox);const i=!rE(a);let c=!1;if(!e.resumeFrom){const l=e.getClosestProjectingParent();if(l&&!l.resumeFrom){const{snapshot:d,layout:p}=l;if(d&&p){const h=e.options.layoutAnchor||void 0,m=It();Ki(m,t.layoutBox,d.layoutBox,h);const g=It();Ki(g,n,p.layoutBox,h),uE(m,g)||(c=!0),l.options.layoutRoot&&(e.relativeTarget=g,e.relativeTargetOrigin=m,e.relativeParent=l)}}}e.notifyListeners("didUpdate",{layout:n,snapshot:t,delta:s,layoutDelta:a,hasLayoutChanged:i,hasRelativeLayoutChanged:c})}else if(e.isLead()){const{onExitComplete:n}=e.options;n&&n()}e.options.transition=void 0}function l$(e){e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function c$(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function d$(e){e.clearSnapshot()}function Om(e){e.clearMeasurements()}function f$(e){e.isLayoutDirty=!0,e.updateLayout()}function Im(e){e.isLayoutDirty=!1}function p$(e){e.isAnimationBlocked&&e.layout&&!e.isLayoutDirty&&(e.snapshot=e.layout,e.isLayoutDirty=!0)}function h$(e){const{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify("BeforeLayoutMeasure"),e.resetTransform()}function Rm(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function m$(e){e.resolveTargetDelta()}function g$(e){e.calcProjection()}function v$(e){e.resetSkewAndRotation()}function y$(e){e.removeLeadSnapshot()}function Lm(e,t,n){e.translate=ft(t.translate,0,n),e.scale=ft(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function qm(e,t,n,o){e.min=ft(t.min,n.min,o),e.max=ft(t.max,n.max,o)}function b$(e,t,n,o){qm(e.x,t.x,n.x,o),qm(e.y,t.y,n.y,o)}function E$(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const C$={duration:.45,ease:[.4,0,.1,1]},$m=e=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(e),Nm=$m("applewebkit/")&&!$m("chrome/")?Math.round:In;function jm(e){e.min=Nm(e.min),e.max=Nm(e.max)}function x$(e){jm(e.x),jm(e.y)}function cE(e,t,n){return e==="position"||e==="preserve-aspect"&&!Vq(Sm(t),Sm(n),.2)}function w$(e){return e!==e.root&&e.scroll?.wasRoot}const D$=lE({attachResizeListener:(e,t)=>e$(e,"resize",t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body?.scrollLeft||0,y:document.documentElement.scrollTop||document.body?.scrollTop||0}),checkIsScrollRoot:()=>!0}),Tc={current:void 0},A$=lE({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!Tc.current){const e=new D$({});e.mount(window),e.setOptions({layoutScroll:!0}),Tc.current=e}return Tc.current},resetTransform:(e,t)=>{e.style.transform=t!==void 0?t:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),B$={some:0,all:1};function _$(e,t,{root:n,margin:o,amount:r="some"}={}){const u=L6(e),a=new WeakMap,s=c=>{c.forEach(l=>{const d=a.get(l.target);if(l.isIntersecting!==!!d)if(l.isIntersecting){const p=t(l.target,l);typeof p=="function"?a.set(l.target,p):i.unobserve(l.target)}else typeof d=="function"&&(d(l),a.delete(l.target))})},i=new IntersectionObserver(s,{root:n,rootMargin:o,threshold:typeof r=="number"?r:B$[r]});return u.forEach(c=>i.observe(c)),()=>i.disconnect()}const Vm=(e,t)=>Math.abs(e-t);function k$(e,t){const n=Vm(e.x,t.x),o=Vm(e.y,t.y);return Math.sqrt(n**2+o**2)}function dE({current:e}){return e?e.ownerDocument.defaultView:null}function fd(e){if(e)return e.nodeType===3||e.nodeType===8?fd(e.nextSibling):e}const[S$,T$]=gs("Motion"),[F$]=gs("LayoutGroup"),P$={reducedMotion:"never",transition:void 0,nonce:void 0},[M$]=gs("MotionConfig");function O$(){return M$(F(()=>P$))}const I$={motionAttribute:"data-ap"},pd=[];function fE(e){for(const t of e)t&&!pd.includes(t)&&pd.push(t)}function pE(e,t,n){if(Array.isArray(e))return e.reduce((o,r)=>{const u=pE(r,t,n);return u?{...o,...u}:o},{});if(typeof e=="object")return e;if(e&&t){const o=t[e];return typeof o=="function"?o(n):o}}function R$(e,t,n){const o=pE(e,t,n);if(!o)return;const{transition:r,transitionEnd:u,...a}=o;return{...a,...u}}function L$(e,t){const n=(e.initial===void 0&&e.variants?t?.initial:e.initial)===!1?["initial","animate"]:["initial"],o=e.custom??e.presenceContext?.custom;return n.reduce((r,u)=>({...r,...R$(e[u]||t?.[u],e.variants,o)}),{})}function hE(e,t){const n=t?.length;if(n!==e.length)return!1;for(let o=0;o{const n=this.options[t];return Ml(n)||t==="initial"&&n===!1?n:this.parent?.context[t]}})),this._context}updateFeatures(){if(this.visualElement)for(const e of pd){this.features.has(e.key)||this.features.set(e.key,new e(this));const t=this.features.get(e.key);this.isMounted()&&(t.isMount?t.update():(t.mount(),t.isMount=!0))}}updateOptions(e){this.options=e,this.visualElement?.update({...this.options,whileTap:this.options.whilePress},this.options.presenceContext??null)}mount(e){zm.set(e,this),this.element=e;const t=this.options.presenceContext?.presenceId;t!==void 0&&e.setAttribute(I$.motionAttribute,t),this.visualElement?.mount(e),this.updateFeatures()}beforeUnmount(){this.getSnapshot(this.options,!1)}unmount(){this.parent?.children?.delete(this),zm.delete(this.element),this.features.forEach(e=>e.unmount?.()),this.visualElement?.unmount()}beforeUpdate(){this.getSnapshot(this.options,void 0)}update(){this.updateFeatures(),this.didUpdate()}tryExitComplete(){this.isExiting||this.options?.layoutId&&this.visualElement.projection?.currentAnimation?.state==="running"||this.options.presenceContext?.onMotionExitComplete?.(this.presenceContainer,this)}setActive(e,t){e==="exit"&&t&&(this.isExiting=!0),this.visualElement?.animationState?.setActive(e,t).then(()=>{e==="exit"&&t&&(this.isExiting=!1,this.options?.layoutId?Je.postRender(()=>this.tryExitComplete()):this.tryExitComplete())})}isMounted(){return!!this.element}initVisualElement(e){this.visualElement||(this.visualElement=e(this.options.as,{presenceContext:this.options.presenceContext??null,parent:this.parent?.visualElement,props:{...this.options,whileTap:this.options.whilePress},visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{...this.latestValues}},reducedMotionConfig:this.options.motionConfig?.reducedMotion}),this.visualElement.parent?.addChild(this.visualElement),this.isMounted()&&this.visualElement.mount(this.element))}getSnapshot(e,t){}didUpdate(){}},zo=class{constructor(e){this.state=e}mount(){}unmount(){}update(){}};const gE=["initial","animate","exit","whileHover","whileDrag","whileFocus","whilePress"];var N$=gE.length;function vE(e){if(!e)return;if(!e.isControllingVariants){const n=e.parent?vE(e.parent)||{}:{};return e.props.initial!==void 0&&(n.initial=e.props.initial),n}const t={};for(let n=0;nPromise.all(t.map(({animation:n,options:o})=>VL(e,n,o)))}function H$(e){let t=U$(e),n=Um(),o=!0;const r=i=>(c,l)=>{const d=wu(e,l,i==="exit"?e.presenceContext?.custom:void 0);if(d){const{transition:p,transitionEnd:h,...m}=d;c={...c,...m,...h}}return c};function u(i){t=i(e)}function a(i){const{props:c}=e,l=vE(e.parent)||{},d=[],p=new Set;let h={},m=1/0;for(let y=0;ym&&C,S=!1;const O=Array.isArray(v)?v:[v];let H=O.reduce(r(E),{});w===!1&&(H={});const{prevResolvedValues:N={}}=b,J={...N,...H},G=I=>{_=!0,p.has(I)&&(S=!0,p.delete(I)),b.needsAnimating[I]=!0;const W=e.getValue(I);W&&(W.liveStyle=!1)};for(const I in J){const W=H[I],K=N[I];if(Object.hasOwnProperty.call(h,I))continue;let de=!1;Hm(W)&&Hm(K)?de=!hE(W,K):de=W!==K,de?W!=null?G(I):p.add(I):W!==void 0&&p.has(I)?G(I):b.protectedKeys[I]=!0}b.prevProp=v,b.prevResolvedValues=H,b.isActive&&(h={...h,...H}),o&&e.blockInitialAnimation&&(_=!1);const $=B&&x;_&&(!$||S)&&d.push(...O.map(I=>{const W={type:E};if(typeof I=="string"&&o&&!$&&e.manuallyAnimateOnMount&&e.parent){const{parent:K}=e,de=wu(K,I);if(K.enteringChildren&&de){const{delayChildren:le}=de.transition||{};W.delay=B6(K.enteringChildren,e,le)}}return{animation:I,options:W}}))}if(p.size){const y={};if(typeof c.initial!="boolean"){const E=wu(e,Array.isArray(c.initial)?c.initial[0]:c.initial);E&&E.transition&&(y.transition=E.transition)}p.forEach(E=>{const b=e.getBaseTarget(E),v=e.getValue(E);v&&(v.liveStyle=!0),y[E]=b??null}),d.push({animation:y})}let g=!!d.length;return o&&(c.initial===!1||c.initial===c.animate)&&!e.manuallyAnimateOnMount&&(g=!1),o=!1,g?t(d):Promise.resolve()}function s(i,c){if(n[i].isActive===c)return Promise.resolve();e.variantChildren?.forEach(d=>{d.animationState?.setActive(i,c)}),n[i].isActive=c;const l=a(i);for(const d in n)n[d].protectedKeys={};return l}return{animateChanges:a,setActive:s,setAnimateFunction:u,getState:()=>n,reset:()=>{n=Um(),o=!0}}}function bE(e){return e.style.display==="none"||e.offsetParent===null&&window.getComputedStyle(e).position!=="fixed"}var K$=class extends zo{static#e=this.key="animation";constructor(e){super(e);const t=e.visualElement;t.animationState||=H$(t)}updateAnimationControlsSubscription(){const{animate:e}=this.state.options;Xf(e)&&(this.unmountControls=e.subscribe(this.state.visualElement))}mount(){bE(this.state.element)?this.state.setActive("exit",!0):this.state.visualElement.animationState?.animateChanges(),this.updateAnimationControlsSubscription()}update(){this.state.visualElement.animationState?.animateChanges();const{animate:e}=this.state.visualElement.getProps(),{animate:t}=this.state.visualElement.prevProps||{};e!==t&&this.updateAnimationControlsSubscription()}unmount(){this.state.visualElement.animationState.reset(),this.unmountControls?.()}};function W$(e,t){return mE(e)?new Lq(t):new Tq(t)}function Km(e){return{point:{x:e.pageX,y:e.pageY}}}var G$=class extends zo{static#e=this.key="press";constructor(e){super(e)}isActive(){const{whilePress:e,onPress:t,onPressCancel:n,onPressStart:o}=this.state.options;return!!(e||t||n||o)}register(){const e=this.state.element;!e||!this.isActive()||(this.removePress?.(),this.removePress=lq(e,(t,n)=>{const o=this.state.options;return this.state.setActive("whilePress",!0),o.onPressStart&&Je.postRender(()=>o.onPressStart(n,Km(n))),(r,{success:u})=>{this.state.setActive("whilePress",!1);const a=u?"onPress":"onPressCancel",s=this.state.options[a];s&&Je.postRender(()=>s(r,Km(r)))}},{useGlobalTarget:this.state.options.globalPressTarget}))}mount(){this.register()}update(){const e=this.state.visualElement.prevProps;!(e?.whilePress||e?.whileTap||e?.onPress||e?.onPressCancel||e?.onPressStart)&&this.isActive()&&this.register()}unmount(){this.removePress?.(),this.removePress=void 0}};function EE(e){return e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1}function Xa(e,t="page"){return{point:{x:e[`${t}X`],y:e[`${t}Y`]}}}function Y$(e){return t=>EE(t)&&e(t,Xa(t))}var Z$=class extends zo{static#e=this.key="hover";constructor(e){super(e)}isActive(){const{whileHover:e,onHoverStart:t,onHoverEnd:n}=this.state.options;return!!(e||t||n)}register(){const e=this.state.element;!e||!this.isActive()||(this.removeHover?.(),this.removeHover=rq(e,(t,n)=>{const o=this.state.options;return this.state.setActive("whileHover",!0),o.onHoverStart&&Je.postRender(()=>o.onHoverStart(n,Xa(n))),r=>{this.state.setActive("whileHover",!1);const u=this.state.options.onHoverEnd;u&&Je.postRender(()=>u(r,Xa(r)))}}))}mount(){this.register()}update(){const e=this.state.visualElement.prevProps;!(e?.whileHover||e?.onHoverStart||e?.onHoverEnd)&&this.isActive()&&this.register()}unmount(){this.removeHover?.(),this.removeHover=void 0}},X$=class extends zo{static#e=this.key="inView";constructor(e){super(e)}isActive(){const{whileInView:e,onViewportEnter:t,onViewportLeave:n}=this.state.options;return!!(e||t||n)}startObserver(){const e=this.state.element;if(!e||!this.isActive())return;this.removeObserver?.();const{once:t,...n}=this.state.options.inViewOptions||{};this.removeObserver=_$(e,(o,r)=>{const u=this.state.options;if(this.state.setActive("whileInView",!0),u.onViewportEnter&&Je.postRender(()=>u.onViewportEnter(r)),!t)return()=>{this.state.setActive("whileInView",!1);const a=this.state.options.onViewportLeave;a&&Je.postRender(()=>a(r))}},n)}mount(){this.startObserver()}update(){const{props:e,prevProps:t}=this.state.visualElement;["amount","margin","root"].some(n=>e.inViewOptions?.[n]!==t?.inViewOptions?.[n])&&this.startObserver()}unmount(){this.removeObserver?.(),this.removeObserver=void 0}};function Wi(e,t,n,o={passive:!0}){return e.addEventListener(t,n,o),()=>e.removeEventListener(t,n)}var J$=class extends zo{static#e=this.key="focus";constructor(e){super(e),this.isFocused=!1}onFocus(){let e=!1;try{e=this.state.element.matches(":focus-visible")}catch{e=!0}e&&(this.state.setActive("whileFocus",!0),this.isFocused=!0)}onBlur(){this.isFocused&&(this.state.setActive("whileFocus",!1),this.isFocused=!1)}mount(){const e=this.state.element;this.removeFocus=vs(Wi(e,"focus",()=>this.onFocus()),Wi(e,"blur",()=>this.onBlur()))}unmount(){this.removeFocus?.(),this.removeFocus=void 0}};function CE(e){if(e)return e.options.allowProjection!==!1?e.projection:CE(e.parent)}const xE={borderRadius:{...ao,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:ao,borderTopRightRadius:ao,borderBottomLeftRadius:ao,borderBottomRightRadius:ao,boxShadow:X6};function va(e){return typeof e=="object"&&e!==null&&"nodeType"in e}const Q$=typeof window>"u";var eN=class extends zo{static#e=this.key="projection";constructor(e){super(e),J6(xE),Q$||this.initProjection()}initProjection(){const e=this.state.options;this.state.visualElement.projection=new A$(this.state.visualElement.latestValues,e["data-framer-portal-id"]?void 0:CE(this.state.visualElement.parent)),this.projection=this.state.visualElement.projection,this.projection.isPresent=!0,this.setOptions()}setOptions(){const e=this.state.options,{layoutId:t,layout:n,drag:o=!1,dragConstraints:r=!1}=e;this.projection?.setOptions({layout:n,layoutId:t,alwaysMeasureLayout:!!t||!!o||r&&va(r),visualElement:this.state.visualElement,animationType:typeof e.layout=="string"?e.layout:"both",layoutRoot:e.layoutRoot,layoutScroll:e.layoutScroll,crossfade:e.crossfade,onExitComplete:()=>{!this.projection?.isPresent&&this.state.options.layoutId&&!this.state.isExiting&&queueMicrotask(()=>{this.state.options.presenceContext?.onMotionExitComplete?.(this.state.presenceContainer,this.state)})}})}update(){this.setOptions()}mount(){this.projection?.mount(this.state.element)}};function Sa(e,t,n,o){return Wi(e,t,Y$(n),o)}var Wm=new Set(["auto","scroll"]),wE=class{constructor(e,t,{transformPagePoint:n,contextWindow:o,dragSnapToOrigin:r=!1,element:u}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.onElementScroll=l=>{this.handleScroll(l.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const l=Pc(this.lastMoveEventInfo,this.history),d=this.startEvent!==null,p=k$(l.offset,{x:0,y:0})>=3;if(!d&&!p)return;const{point:h}=l,{timestamp:m}=Nt;this.history.push({...h,timestamp:m});const{onStart:g,onMove:y}=this.handlers;d||(g&&g(this.lastMoveEvent,l),this.startEvent=this.lastMoveEvent),y&&y(this.lastMoveEvent,l)},this.handlePointerMove=(l,d)=>{this.lastMoveEvent=l,this.lastMoveEventInfo=Fc(d,this.transformPagePoint),Je.update(this.updatePoint,!0)},this.handlePointerUp=(l,d)=>{this.end();const{onEnd:p,onSessionEnd:h,resumeAnimation:m}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&m&&m(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const g=Pc(l.type==="pointercancel"?this.lastMoveEventInfo:Fc(d,this.transformPagePoint),this.history);this.startEvent&&p&&p(l,g),h&&h(l,g)},!EE(e))return;this.dragSnapToOrigin=r,this.handlers=t,this.transformPagePoint=n,this.contextWindow=o||window;const a=Fc(Xa(e),this.transformPagePoint),{point:s}=a,{timestamp:i}=Nt;this.history=[{...s,timestamp:i}];const{onSessionStart:c}=t;c&&c(e,Pc(a,this.history)),this.removeListeners=vs(Sa(this.contextWindow,"pointermove",this.handlePointerMove),Sa(this.contextWindow,"pointerup",this.handlePointerUp),Sa(this.contextWindow,"pointercancel",this.handlePointerUp)),u&&this.startScrollTracking(u)}isScrollable(e){const t=window.getComputedStyle(e);return t.overflow==="auto"||t.overflow==="scroll"||t.overflowX==="auto"||t.overflowX==="scroll"||t.overflowY==="auto"||t.overflowY==="scroll"}startScrollTracking(e){let t=e.parentElement;for(;t;){const n=getComputedStyle(t);(Wm.has(n.overflowX)||Wm.has(n.overflowY))&&this.scrollPositions.set(t,{x:t.scrollLeft,y:t.scrollTop}),t=t.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener("scroll",this.onElementScroll,{capture:!0,passive:!0}),window.addEventListener("scroll",this.onWindowScroll,{passive:!0}),this.removeScrollListeners=()=>{window.removeEventListener("scroll",this.onElementScroll,{capture:!0}),window.removeEventListener("scroll",this.onWindowScroll)}}handleScroll(e){const t=this.scrollPositions.get(e);if(!t)return;const n=e===window,o=n?{x:window.scrollX,y:window.scrollY}:{x:e.scrollLeft,y:e.scrollTop},r={x:o.x-t.x,y:o.y-t.y};r.x===0&&r.y===0||(n?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=r.x,this.lastMoveEventInfo.point.y+=r.y):this.history.length>0&&(this.history[0].x-=r.x,this.history[0].y-=r.y),this.scrollPositions.set(e,o),Je.update(this.updatePoint,!0))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners?.(),this.scrollPositions.clear(),hr(this.updatePoint)}};function Fc(e,t){return t?{point:t(e.point)}:e}function Gm(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Pc({point:e},t){return{point:e,delta:Gm(e,DE(t)),offset:Gm(e,tN(t)),velocity:nN(t,.1)}}function tN(e){return e[0]}function DE(e){return e[e.length-1]}function nN(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,o=null;const r=DE(e);for(;n>=0&&(o=e[n],!(r.timestamp-o.timestamp>Rn(t)));)n--;if(!o)return{x:0,y:0};const u=Mn(r.timestamp-o.timestamp);if(u===0)return{x:0,y:0};const a={x:(r.x-o.x)/u,y:(r.y-o.y)/u};return a.x===1/0&&(a.x=0),a.y===1/0&&(a.y=0),a}function Ym(e){return(t,n)=>{e&&Je.postRender(()=>e(t,n))}}var oN=class extends zo{constructor(...e){super(...e),this.removePointerDownListener=In}static#e=this.key="pan";onPointerDown(e){this.session=new wE(e,this.createPanHandlers(),{transformPagePoint:this.state.visualElement.getTransformPagePoint(),contextWindow:dE(this.state.visualElement)})}createPanHandlers(){return{onSessionStart:Ym((e,t)=>{const{onPanSessionStart:n}=this.state.options;n&&n(e,t)}),onStart:Ym((e,t)=>{const{onPanStart:n}=this.state.options;n&&n(e,t)}),onMove:(e,t)=>{const{onPan:n}=this.state.options;n&&n(e,t)},onEnd:(e,t)=>{const{onPanEnd:n}=this.state.options;delete this.session,n&&Je.postRender(()=>n(e,t))}}}mount(){this.removePointerDownListener=Sa(this.state.element,"pointerdown",this.onPointerDown.bind(this))}update(){}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}};function AE(e){let t=null;return()=>{const n=()=>{t=null};return t===null?(t=e,n):!1}}var Zm=AE("dragHorizontal"),Xm=AE("dragVertical");function rN(e){let t=!1;if(e==="y")t=Xm();else if(e==="x")t=Zm();else{const n=Zm(),o=Xm();n&&o?t=()=>{n(),o()}:(n&&n(),o&&o())}return t}function uN(e,{min:t,max:n},o){return t!==void 0&&en&&(e=o?ft(n,e,o.max):Math.min(e,n)),e}const hd=.35;function aN(e,{top:t,left:n,bottom:o,right:r}){return{x:Jm(e.x,n,r),y:Jm(e.y,t,o)}}function Jm(e,t,n){return{min:t!==void 0?e.min+t:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function sN(e=hd){return e===!1?e=0:e===!0&&(e=hd),{x:Qm(e,"left","right"),y:Qm(e,"top","bottom")}}function Qm(e,t,n){return{min:eg(e,t),max:eg(e,n)}}function eg(e,t){return typeof e=="number"?e:e[t]||0}function iN(e,t){const n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}function lN(e,t){return{x:tg(e.x,t.x),y:tg(e.y,t.y)}}function tg(e,t){let n=t.min-e.min,o=t.max-e.max;return t.max-t.mino?n=Ga(t.min,t.max-o,e.min):o>r&&(n=Ga(e.min,e.max-r,t.min)),po(0,1,n)}const dN=new WeakMap;var fN=class{constructor(e){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=It(),this.state=e}get visualElement(){return this.state.visualElement}start(e,{snapToCursor:t=!1}={}){const n=i=>{t?this.stopAnimation():this.pauseAnimation(),t&&this.snapToCursor(Xa(i,"page").point)},o=(i,c)=>{this.stopAnimation();const{drag:l,dragPropagation:d,onDragStart:p}=this.getProps();l&&!d&&(this.openGlobalLock&&this.openGlobalLock(),this.openGlobalLock=rN(l),!this.openGlobalLock)||(this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),Tn(h=>{let m=this.getAxisMotionValue(h).get()||0;if(co.test(m)){const{projection:g}=this.visualElement;if(g&&g.layout){const y=g.layout.layoutBox[h];y&&(m=un(y)*(parseFloat(m)/100))}}this.originPoint[h]=m}),p&&Je.postRender(()=>p(i,c)),rd(this.visualElement,"transform"),this.state.setActive("whileDrag",!0))},r=(i,c)=>{const{dragPropagation:l,dragDirectionLock:d,onDirectionLock:p,onDrag:h}=this.getProps();if(!l&&!this.openGlobalLock)return;const{offset:m}=c;if(d&&this.currentDirection===null){this.currentDirection=pN(m),this.currentDirection!==null&&p&&p(this.currentDirection);return}this.updateAxis("x",c.point,m),this.updateAxis("y",c.point,m),this.visualElement.render(),h&&h(i,c)},u=(i,c)=>this.stop(i,c),a=()=>Tn(i=>this.getAnimationState(i)==="paused"&&this.getAxisMotionValue(i).animation?.play()),{dragSnapToOrigin:s}=this.getProps();this.panSession=new wE(e,{onSessionStart:n,onStart:o,onMove:r,onSessionEnd:u,resumeAnimation:a},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:s,contextWindow:dE(this.visualElement),element:this.state.element})}stop(e,t){const n=this.isDragging;if(this.cancel(),!n)return;const{velocity:o}=t;this.startAnimation(o);const{onDragEnd:r}=this.getProps();r&&Je.postRender(()=>r(e,t))}cancel(){this.isDragging=!1;const{projection:e}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:t}=this.getProps();!t&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),this.state.setActive("whileDrag",!1)}updateAxis(e,t,n){const{drag:o}=this.getProps();if(!n||!Ys(e,o,this.currentDirection))return;const r=this.getAxisMotionValue(e);let u=this.originPoint[e]+n[e];this.constraints&&this.constraints[e]&&(u=uN(u,this.constraints[e],this.elastic[e])),r.set(u)}resolveConstraints(){const{dragConstraints:e,dragElastic:t}=this.getProps(),n=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,o=this.constraints;e&&va(e)?this.constraints||(this.constraints=this.resolveRefConstraints()):e&&n?this.constraints=aN(n.layoutBox,e):this.constraints=!1,this.elastic=sN(t),o!==this.constraints&&n&&this.constraints&&!this.hasMutatedConstraints&&Tn(r=>{this.constraints!==!1&&this.getAxisMotionValue(r)&&(this.constraints[r]=iN(n.layoutBox[r],this.constraints[r]))})}resolveRefConstraints(){const{dragConstraints:e,onMeasureDragConstraints:t}=this.getProps();if(!e||!va(e))return!1;const n=e,{projection:o}=this.visualElement;if(!o||!o.layout)return!1;const r=Dq(n,o.root,this.visualElement.getTransformPagePoint());let u=lN(o.layout.layoutBox,r);if(t){const a=t(Cq(u));this.hasMutatedConstraints=!!a,a&&(u=K6(a))}return u}startAnimation(e){const{drag:t,dragMomentum:n,dragElastic:o,dragTransition:r,dragSnapToOrigin:u,onDragTransitionEnd:a}=this.getProps(),s=this.constraints||{},i=Tn(c=>{if(!Ys(c,t,this.currentDirection))return;let l=s&&s[c]||{};u&&(l={min:0,max:0});const d=o?200:1e6,p=o?40:1e7,h={type:"inertia",velocity:n?e[c]:0,bounceStiffness:d,bounceDamping:p,timeConstant:750,restDelta:1,restSpeed:10,...r,...l};return this.startAxisValueAnimation(c,h)});return Promise.all(i).then(a)}startAxisValueAnimation(e,t){const n=this.getAxisMotionValue(e);return rd(this.visualElement,e),n.start(Gf(e,n,0,t,this.visualElement,!1))}stopAnimation(){this.visualElement.projection?.isPresent&&Tn(e=>this.getAxisMotionValue(e).stop())}pauseAnimation(){Tn(e=>this.getAxisMotionValue(e).animation?.pause())}getAnimationState(e){return this.getAxisMotionValue(e).animation?.state}getAxisMotionValue(e){const t=`_drag${e.toUpperCase()}`,n=this.visualElement.getProps();return n[t]||this.visualElement.getValue(e,(n.initial?n.initial[e]:void 0)||0)}snapToCursor(e){Tn(t=>{const{drag:n}=this.getProps();if(!Ys(t,n,this.currentDirection))return;const{projection:o}=this.visualElement,r=this.getAxisMotionValue(t);if(o&&o.layout){const{min:u,max:a}=o.layout.layoutBox[t];r.set(e[t]-ft(u,a,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:e,dragConstraints:t}=this.getProps(),{projection:n}=this.visualElement;if(!va(t)||!n||!this.constraints)return;this.stopAnimation();const o={x:0,y:0};Tn(u=>{const a=this.getAxisMotionValue(u);if(a&&this.constraints!==!1){const s=a.get();o[u]=cN({min:s,max:s},this.constraints[u])}});const{transformTemplate:r}=this.visualElement.getProps();this.state.element.style.transform=r?r({},""):"none",n.root&&n.root.updateScroll(),n.updateLayout(),this.resolveConstraints(),Tn(u=>{if(!Ys(u,e,null))return;const a=this.getAxisMotionValue(u),{min:s,max:i}=this.constraints[u];a.set(ft(s,i,o[u]))})}addListeners(){if(!this.state.element)return;dN.set(this.visualElement,this);const e=this.state.element,t=Sa(e,"pointerdown",s=>{const{drag:i,dragListener:c=!0}=this.getProps();i&&c&&this.start(s)}),n=()=>{const{dragConstraints:s}=this.getProps();va(s)&&(this.constraints=this.resolveRefConstraints())},{projection:o}=this.visualElement,r=o.addEventListener("measure",n);o&&!o.layout&&(o.root&&o.root.updateScroll(),o.updateLayout()),Je.read(n);const u=Wi(window,"resize",()=>this.scalePositionWithinConstraints()),a=o.addEventListener("didUpdate",(({delta:s,hasLayoutChanged:i})=>{this.isDragging&&i&&(Tn(c=>{const l=this.getAxisMotionValue(c);l&&(this.originPoint[c]+=s[c].translate,l.set(l.get()+s[c].translate))}),this.visualElement.render())}));return()=>{u(),t(),r(),a&&a()}}getProps(){const e=this.visualElement.getProps(),{drag:t=!1,dragDirectionLock:n=!1,dragPropagation:o=!1,dragConstraints:r=!1,dragElastic:u=hd,dragMomentum:a=!0}=e;return{...e,drag:t,dragDirectionLock:n,dragPropagation:o,dragConstraints:r,dragElastic:u,dragMomentum:a}}};function Ys(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function pN(e,t=10){let n=null;return Math.abs(e.y)>t?n="y":Math.abs(e.x)>t&&(n="x"),n}var hN=class extends zo{static#e=this.key="drag";constructor(e){super(e),this.removeGroupControls=In,this.removeListeners=In,this.controls=new fN(e)}mount(){const{dragControls:e}=this.state.options;e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||In}unmount(){this.removeGroupControls(),this.removeListeners()}},la=!1,mN=class extends zo{static#e=this.key="layout";constructor(e){super(e),this.hasMountSettled=!1,J6(xE),e.getSnapshot=this.getSnapshot.bind(this),e.didUpdate=this.didUpdate.bind(this)}updatePrevLead(e){const t=e.getStack();t?.prevLead&&!t.prevLead.snapshot&&(t.prevLead.willUpdate(),la=!0)}didUpdate(){la&&(this.state.options.layout||this.state.options.layoutId||this.state.options.drag)&&(la=!1,this.state.visualElement.projection?.root?.didUpdate())}mount(){const e=this.state.options,t=this.state.options.layoutGroup;if(e.layout||e.layoutId){const n=this.state.visualElement.projection;if(e.layoutId){const o=!bE(this.state.element);n.isPresent=o,o?n.promote():n.relegate(),this.updatePrevLead(n)}t?.group?.add(n),di.hasEverUpdated=!0}this.didUpdate(),Je.postRender(()=>{this.hasMountSettled=!0})}unmount(){const e=this.state.options.layoutGroup,t=this.state.visualElement.projection;t&&(e?.group&&(this.state.options.layout||this.state.options.layoutId)&&e.group.remove(t),this.state.options.layoutId&&(la=!0),this.didUpdate())}getSnapshot(e,t){const n=this.state.visualElement.projection,{drag:o,layoutDependency:r,layout:u,layoutId:a}=e;if(!n||!u&&!a&&!o||!this.hasMountSettled)return;la=!0;const s=this.state.options;(o||s.layoutDependency!==r||r===void 0||x0(t)&&n.isPresent!==t)&&n.willUpdate(),x0(t)&&t!==n.isPresent&&(n.isPresent=t,t?(n.promote(),this.updatePrevLead(n)):n.relegate())}};const gN={renderer:W$,features:[K$,G$,Z$,X$,J$,eN,oN,hN,mN]},[vN]=gs("LazyMotionContext"),[yN,cH]=gs("AnimatePresenceContext");function bN(e){return e.replace(/([A-Z])/g,t=>`-${t.toLowerCase()}`)}function BE(){return{transform:{},transformOrigin:{},style:{},vars:{}}}function EN(){return{...BE(),attrs:{}}}function CN(e){const t=BE();Jf(t,e);const n={...t.style};for(const o in t.vars)n[o]=t.vars[o];return Object.keys(n).length===0?null:n}function xN(e,t,n){const o=EN();eE(o,e,tE(t),void 0,n);const r={};for(const u in o.attrs){const a=Qf.has(u)?u:bN(u);r[a]=o.attrs[u]}return{attrs:r,style:{...o.style,...o.vars}}}function wN(e,t){const n=S$(null),o=F$({}),r=O$(),u=yN({}),a=vN({features:R({}),strict:!1}),s=hv();function i(){return WI(e,{layoutGroup:o,presenceContext:u,config:r.value})}function c(){return{...s,...i()}}const l=new $$(c(),n);T$(l),t&&l.initVisualElement(t),ye(a.features,h=>{h.features?.length&&fE(h.features),h.renderer&&l.initVisualElement(h.renderer),l.updateFeatures()},{immediate:!0,flush:"pre"});function d(){const h=l.type==="svg",m={...s};Object.keys(s).forEach(b=>{Zt(s[b])&&(m[b]=s[b].get())});const g=l.visualElement?.latestValues||l.latestValues;let y={...e.style,...h?{}:g};for(const b in y)Zt(y[b])&&(y[b]=y[b].get());if(h){const{attrs:b,style:v}=xN({...g,...y},l.options.as,e.style);Object.assign(m,b),y=v}e.drag&&e.dragListener!==!1&&Object.assign(y,{userSelect:"none",WebkitUserSelect:"none",WebkitTouchCallout:"none",touchAction:e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`});const E=CN(y);return E&&(m.style=E),m}const p=We().proxy;return $e(()=>{const h=fd(p.$el);l.mount(h)}),mo(()=>l.beforeUnmount()),Ht(()=>{fd(p.$el)?.isConnected||l.unmount()}),iv(()=>{l.beforeUpdate(),l.updateOptions(c())}),Gr(()=>{l.update()}),{getProps:i,getAttrs:d,layoutGroup:o,state:l}}const DN={ignoreStrict:{type:Boolean},forwardMotionProps:{type:Boolean,default:!1},asChild:{type:Boolean,default:!1},whileDrag:{type:[String,Array,Object]},whileHover:{type:[String,Array,Object]},whilePress:{type:[String,Array,Object]},whileInView:{type:[String,Array,Object]},whileFocus:{type:[String,Array,Object]},custom:{type:[String,Number,Object,Array]},initial:{type:[String,Array,Object,Boolean],default:void 0},animate:{type:[String,Array,Object],default:void 0},exit:{type:[String,Array,Object]},variants:{type:Object},inherit:{type:Boolean},style:{type:Object},transformTemplate:{type:Function},transition:{type:Object},onAnimationComplete:{type:Function},onUpdate:{type:Function},layout:{type:[Boolean,String],default:!1},layoutId:{type:String,default:void 0},layoutScroll:{type:Boolean,default:!1},layoutRoot:{type:Boolean,default:!1},"data-framer-portal-id":{type:String},crossfade:{type:Boolean,default:!0},layoutDependency:{type:null,default:void 0},onBeforeLayoutMeasure:{type:Function},onLayoutMeasure:{type:Function},onLayoutAnimationStart:{type:Function},onLayoutAnimationComplete:{type:Function},globalPressTarget:{type:Boolean},onPressStart:{type:Function},onPress:{type:Function},onPressCancel:{type:Function},onHoverStart:{type:Function},onHoverEnd:{type:Function},inViewOptions:{type:Object},onViewportEnter:{type:Function},onViewportLeave:{type:Function},drag:{type:[Boolean,String]},dragSnapToOrigin:{type:Boolean},dragDirectionLock:{type:Boolean},dragPropagation:{type:Boolean},dragConstraints:{type:[Boolean,Object]},dragElastic:{type:[Boolean,Number,Object],default:.5},dragMomentum:{type:Boolean,default:!0},dragTransition:{type:Object},dragListener:{type:Boolean,default:!0},dragControls:{type:Object},onDragStart:{type:Function},onDragEnd:{type:Function},onDrag:{type:Function},onDirectionLock:{type:Function},onDragTransitionEnd:{type:Function},onMeasureDragConstraints:{type:Function},onPanSessionStart:{type:Function},onPanStart:{type:Function},onPan:{type:Function},onPanEnd:{type:Function}};var AN=new Map,BN=new Map;function _N(e){if(!Array.isArray(e))return[e];const t=[];for(const n of e)Array.isArray(n)?t.push(...n):t.push(n);return t}var kN=["area","img","input"];function SN(e,t,n){if(typeof e=="string"&&kN.includes(e))return qe(e,t);if(e==="template"){if(!n.default)return null;const o=_N(n.default()),r=o.findIndex(i=>i.type!==bt);if(r===-1)return o;const u=o[r];delete u.props?.ref;const a=u.props?j(t,u.props):t;t.class&&u.props?.class&&delete u.props.class;const s=An(u,a);for(const i in a)i.startsWith("on")&&(s.props||={},s.props[i]=a[i]);return o.length===1?s:(o[r]=s,o)}return null}function ng(e,t={}){const n=typeof e=="string",o=n?e:e.name||"",r=t.renderer?AN:BN;if(n&&r?.has(e))return r.get(e);const u=L({inheritAttrs:!1,props:{...DN,as:{type:[String,Object],default:e||"div"}},name:o?`motion.${o}`:"Motion",setup(a,{slots:s}){const{getProps:i,getAttrs:c,state:l}=wN(a,t.renderer);function d(){const p=l.element;if((typeof a.as!="object"||a.asChild)&&p){const{style:h}=c();if(h)for(const[m,g]of Object.entries(h))p.style[m]=g}}return()=>{const p=i(),h=c(),m=a.asChild?"template":a.as,g={...a.forwardMotionProps?p:{},...h,onVnodeUpdated:d},y=SN(m,g,s);return y!==null?y:qe(m,{...g},s)}}});return n&&r?.set(e,u),u}function TN(e){const t=e?.renderer;return fE(e?.features||[]),new Proxy({},{get(n,o){return o==="create"?(r,u)=>ng(r,{...u,renderer:t}):ng(o,{renderer:t})}})}const fi=TN(gN),dH=fi.create("div"),FN={xmlns:"http://www.w3.org/2000/svg",class:"size-5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},PN=L({__name:"IconMenuToggle",props:{open:{type:Boolean}},setup(e){const t=e,n={normal:{rotate:0,y:0,opacity:1},close:r=>{const u=r;return{rotate:u===1?45:u===3?-45:0,y:u===1?6:u===3?-6:0,opacity:u===2?0:1,transition:{type:"spring",stiffness:260,damping:20}}}},o=F(()=>t.open?"close":"normal");return(r,u)=>{const a=hn;return D(),k(a,{size:"sm",variant:"ghost",color:"neutral",class:"-me-1.5",square:""},{default:A(()=>[(D(),re("svg",FN,[q(f(fi).line,{x1:"4",y1:"6",x2:"20",y2:"6",variants:n,animate:f(o),custom:1,class:"outline-none"},null,8,["animate"]),q(f(fi).line,{x1:"4",y1:"12",x2:"20",y2:"12",variants:n,animate:f(o),custom:2,class:"outline-none"},null,8,["animate"]),q(f(fi).line,{x1:"4",y1:"18",x2:"20",y2:"18",variants:n,animate:f(o),custom:3,class:"outline-none"},null,8,["animate"])]))]),_:1})}}}),MN=Object.assign(PN,{__name:"IconMenuToggle"}),ON={slots:{base:"font-medium inline-flex items-center",label:"truncate",leadingIcon:"shrink-0",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailingIcon:"shrink-0"},variants:{fieldGroup:{horizontal:"not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]",vertical:"not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{solid:"",outline:"",soft:"",subtle:""},size:{xs:{base:"text-[8px]/3 px-1 py-0.5 gap-1 rounded-sm",leadingIcon:"size-3",leadingAvatarSize:"3xs",trailingIcon:"size-3"},sm:{base:"text-[10px]/3 px-1.5 py-1 gap-1 rounded-sm",leadingIcon:"size-3",leadingAvatarSize:"3xs",trailingIcon:"size-3"},md:{base:"text-xs px-2 py-1 gap-1 rounded-md",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},lg:{base:"text-sm px-2 py-1 gap-1.5 rounded-md",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},xl:{base:"text-base px-2.5 py-1 gap-1.5 rounded-md",leadingIcon:"size-6",leadingAvatarSize:"2xs",trailingIcon:"size-6"}},square:{true:""}},compoundVariants:[{color:"primary",variant:"solid",class:"bg-primary text-inverted"},{color:"secondary",variant:"solid",class:"bg-secondary text-inverted"},{color:"success",variant:"solid",class:"bg-success text-inverted"},{color:"info",variant:"solid",class:"bg-info text-inverted"},{color:"warning",variant:"solid",class:"bg-warning text-inverted"},{color:"error",variant:"solid",class:"bg-error text-inverted"},{color:"primary",variant:"outline",class:"text-primary ring ring-inset ring-primary/50"},{color:"secondary",variant:"outline",class:"text-secondary ring ring-inset ring-secondary/50"},{color:"success",variant:"outline",class:"text-success ring ring-inset ring-success/50"},{color:"info",variant:"outline",class:"text-info ring ring-inset ring-info/50"},{color:"warning",variant:"outline",class:"text-warning ring ring-inset ring-warning/50"},{color:"error",variant:"outline",class:"text-error ring ring-inset ring-error/50"},{color:"primary",variant:"soft",class:"bg-primary/10 text-primary"},{color:"secondary",variant:"soft",class:"bg-secondary/10 text-secondary"},{color:"success",variant:"soft",class:"bg-success/10 text-success"},{color:"info",variant:"soft",class:"bg-info/10 text-info"},{color:"warning",variant:"soft",class:"bg-warning/10 text-warning"},{color:"error",variant:"soft",class:"bg-error/10 text-error"},{color:"primary",variant:"subtle",class:"bg-primary/10 text-primary ring ring-inset ring-primary/25"},{color:"secondary",variant:"subtle",class:"bg-secondary/10 text-secondary ring ring-inset ring-secondary/25"},{color:"success",variant:"subtle",class:"bg-success/10 text-success ring ring-inset ring-success/25"},{color:"info",variant:"subtle",class:"bg-info/10 text-info ring ring-inset ring-info/25"},{color:"warning",variant:"subtle",class:"bg-warning/10 text-warning ring ring-inset ring-warning/25"},{color:"error",variant:"subtle",class:"bg-error/10 text-error ring ring-inset ring-error/25"},{color:"neutral",variant:"solid",class:"text-inverted bg-inverted"},{color:"neutral",variant:"outline",class:"ring ring-inset ring-accented text-default bg-default"},{color:"neutral",variant:"soft",class:"text-default bg-elevated"},{color:"neutral",variant:"subtle",class:"ring ring-inset ring-accented text-default bg-elevated"},{size:"xs",square:!0,class:"p-0.5"},{size:"sm",square:!0,class:"p-1"},{size:"md",square:!0,class:"p-1"},{size:"lg",square:!0,class:"p-1"},{size:"xl",square:!0,class:"p-1"}],defaultVariants:{color:"primary",variant:"solid",size:"md"}},_E={__name:"UBadge",props:{as:{type:null,required:!1,default:"span"},label:{type:[String,Number],required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1}},setup(e){const t=e,n=qt(),o=Pe(),r=Et("badge",t),{orientation:u,size:a}=Eb(t),{isLeading:s,isTrailing:i,leadingIconName:c,trailingIconName:l}=bb(t),d=F(()=>Se({extend:Se(ON),...o.ui?.badge||{}})({color:t.color,variant:t.variant,size:a.value||t.size,square:t.square||!n.default&&!t.label,fieldGroup:u.value}));return(p,h)=>(D(),k(f(we),{as:e.as,"data-slot":"base",class:U(d.value.base({class:[f(r)?.base,t.class]}))},{default:A(()=>[P(p.$slots,"leading",{ui:d.value},()=>[f(s)&&f(c)?(D(),k(st,{key:0,name:f(c),"data-slot":"leadingIcon",class:U(d.value.leadingIcon({class:f(r)?.leadingIcon}))},null,8,["name","class"])):e.avatar?(D(),k(Ku,j({key:1,size:f(r)?.leadingAvatarSize||d.value.leadingAvatarSize()},e.avatar,{"data-slot":"leadingAvatar",class:d.value.leadingAvatar({class:f(r)?.leadingAvatar})}),null,16,["size","class"])):Y("",!0)]),P(p.$slots,"default",{ui:d.value},()=>[e.label!==void 0&&e.label!==null?(D(),re("span",{key:0,"data-slot":"label",class:U(d.value.label({class:f(r)?.label}))},Fe(e.label),3)):Y("",!0)]),P(p.$slots,"trailing",{ui:d.value},()=>[f(i)&&f(l)?(D(),k(st,{key:0,name:f(l),"data-slot":"trailingIcon",class:U(d.value.trailingIcon({class:f(r)?.trailingIcon}))},null,8,["name","class"])):Y("",!0)])]),_:3},8,["as","class"]))}},IN={slots:{root:"",content:"data-[state=open]:animate-[accordion-down_200ms_ease-out] data-[state=closed]:animate-[accordion-up_200ms_ease-out] overflow-hidden focus:outline-none",list:"isolate -mx-2.5 -mt-1.5",item:"",listWithChildren:"ms-5 border-s border-default",itemWithChildren:"flex flex-col data-[state=open]:mb-1.5",trigger:"font-semibold",link:"group relative w-full px-2.5 py-1.5 before:inset-y-px before:inset-x-0 flex items-center gap-1.5 text-sm before:absolute before:z-[-1] before:rounded-md focus:outline-none focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2",linkLeadingIcon:"shrink-0 size-5",linkTrailing:"ms-auto inline-flex gap-1.5 items-center",linkTrailingBadge:"shrink-0",linkTrailingBadgeSize:"sm",linkTrailingIcon:"size-5 transform transition-transform duration-200 shrink-0 group-data-[state=open]:rotate-180",linkTitle:"truncate",linkTitleExternalIcon:"size-3 align-top text-dimmed"},variants:{color:{primary:{trigger:"focus-visible:ring-primary",link:"focus-visible:before:ring-primary"},secondary:{trigger:"focus-visible:ring-secondary",link:"focus-visible:before:ring-secondary"},success:{trigger:"focus-visible:ring-success",link:"focus-visible:before:ring-success"},info:{trigger:"focus-visible:ring-info",link:"focus-visible:before:ring-info"},warning:{trigger:"focus-visible:ring-warning",link:"focus-visible:before:ring-warning"},error:{trigger:"focus-visible:ring-error",link:"focus-visible:before:ring-error"},neutral:{trigger:"focus-visible:ring-inverted",link:"focus-visible:before:ring-inverted"}},highlightColor:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{pill:"",link:""},active:{true:{link:"font-medium"},false:{link:"text-muted",linkLeadingIcon:"text-dimmed"}},disabled:{true:{trigger:"data-[state=open]:text-highlighted"}},highlight:{true:{}},level:{true:{item:"ps-1.5 -ms-px",itemWithChildren:"ps-1.5 -ms-px"}}},compoundVariants:[{highlight:!0,level:!0,class:{link:["after:absolute after:-left-1.5 after:inset-y-0.5 after:block after:w-px after:rounded-full","after:transition-colors"]}},{disabled:!1,active:!1,variant:"pill",class:{link:["hover:text-highlighted hover:before:bg-elevated/50 data-[state=open]:text-highlighted","transition-colors before:transition-colors"],linkLeadingIcon:["group-hover:text-default group-data-[state=open]:text-default","transition-colors"]}},{color:"primary",variant:"pill",active:!0,class:{link:"text-primary",linkLeadingIcon:"text-primary group-data-[state=open]:text-primary"}},{color:"secondary",variant:"pill",active:!0,class:{link:"text-secondary",linkLeadingIcon:"text-secondary group-data-[state=open]:text-secondary"}},{color:"success",variant:"pill",active:!0,class:{link:"text-success",linkLeadingIcon:"text-success group-data-[state=open]:text-success"}},{color:"info",variant:"pill",active:!0,class:{link:"text-info",linkLeadingIcon:"text-info group-data-[state=open]:text-info"}},{color:"warning",variant:"pill",active:!0,class:{link:"text-warning",linkLeadingIcon:"text-warning group-data-[state=open]:text-warning"}},{color:"error",variant:"pill",active:!0,class:{link:"text-error",linkLeadingIcon:"text-error group-data-[state=open]:text-error"}},{color:"neutral",variant:"pill",active:!0,class:{link:"text-highlighted",linkLeadingIcon:"text-highlighted group-data-[state=open]:text-highlighted"}},{variant:"pill",active:!0,highlight:!1,class:{link:"before:bg-elevated"}},{variant:"pill",active:!0,highlight:!0,disabled:!1,class:{link:["hover:before:bg-elevated/50","before:transition-colors"]}},{disabled:!1,active:!1,variant:"link",class:{link:["hover:text-highlighted data-[state=open]:text-highlighted","transition-colors"],linkLeadingIcon:["group-hover:text-default group-data-[state=open]:text-default","transition-colors"]}},{color:"primary",variant:"link",active:!0,class:{link:"text-primary",linkLeadingIcon:"text-primary group-data-[state=open]:text-primary"}},{color:"secondary",variant:"link",active:!0,class:{link:"text-secondary",linkLeadingIcon:"text-secondary group-data-[state=open]:text-secondary"}},{color:"success",variant:"link",active:!0,class:{link:"text-success",linkLeadingIcon:"text-success group-data-[state=open]:text-success"}},{color:"info",variant:"link",active:!0,class:{link:"text-info",linkLeadingIcon:"text-info group-data-[state=open]:text-info"}},{color:"warning",variant:"link",active:!0,class:{link:"text-warning",linkLeadingIcon:"text-warning group-data-[state=open]:text-warning"}},{color:"error",variant:"link",active:!0,class:{link:"text-error",linkLeadingIcon:"text-error group-data-[state=open]:text-error"}},{color:"neutral",variant:"link",active:!0,class:{link:"text-highlighted",linkLeadingIcon:"text-highlighted group-data-[state=open]:text-highlighted"}},{highlightColor:"primary",highlight:!0,level:!0,active:!0,class:{link:"after:bg-primary"}},{highlightColor:"secondary",highlight:!0,level:!0,active:!0,class:{link:"after:bg-secondary"}},{highlightColor:"success",highlight:!0,level:!0,active:!0,class:{link:"after:bg-success"}},{highlightColor:"info",highlight:!0,level:!0,active:!0,class:{link:"after:bg-info"}},{highlightColor:"warning",highlight:!0,level:!0,active:!0,class:{link:"after:bg-warning"}},{highlightColor:"error",highlight:!0,level:!0,active:!0,class:{link:"after:bg-error"}},{highlightColor:"neutral",highlight:!0,level:!0,active:!0,class:{link:"after:bg-inverted"}}],defaultVariants:{color:"primary",highlightColor:"primary",variant:"pill"}},kE=Object.assign({inheritAttrs:!1},{__name:"UContentNavigation",props:{as:{type:null,required:!1,default:"nav"},defaultOpen:{type:Boolean,required:!1,default:void 0},trailingIcon:{type:null,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},highlight:{type:Boolean,required:!1,default:!1},highlightColor:{type:null,required:!1},collapsible:{type:Boolean,required:!1,default:!0},level:{type:Number,required:!1,default:0},navigation:{type:Array,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},disabled:{type:Boolean,required:!1},type:{type:String,required:!1,default:"multiple"},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,o=t,r=qt(),u=it(Jt(n,"collapsible","type","unmountOnHide"),o),a=Yn(),s=Pe(),i=Et("contentNavigation",n),[c,l]=To(),d=F(()=>Se({extend:Se(IN),...s.ui?.contentNavigation||{}})({color:n.color,variant:n.variant,highlight:n.highlight,highlightColor:n.highlightColor||n.color})),p=F(()=>n.disabled||n.type==="multiple"&&n.collapsible===!1);function h(g,y){return g.children?.length?g.children.some(E=>h(E,y)):y===g.path}const m=F(()=>{if(n.defaultOpen===!1)return;if(n.defaultOpen===void 0)return n.type==="single"?"0":n.navigation?.map((y,E)=>y.defaultOpen!==!1&&String(E)).filter(Boolean);const g=n.navigation?.reduce((y,E,b)=>(h(E,a.path)&&y.push(String(b)),y),[])||[];return n.type==="multiple"?g:g[0]});return(g,y)=>(D(),re(Ce,null,[q(f(c),null,{default:A(({link:E,active:b})=>[P(g.$slots,"link",{link:E,active:b,ui:d.value},()=>[P(g.$slots,"link-leading",{link:E,active:b,ui:d.value},()=>[E.icon?(D(),k(st,{key:0,name:E.icon,"data-slot":"linkLeadingIcon",class:U(d.value.linkLeadingIcon({class:[f(i)?.linkLeadingIcon,E.ui?.linkLeadingIcon],active:b}))},null,8,["name","class"])):Y("",!0)]),E.title||r["link-title"]?(D(),re("span",{key:0,"data-slot":"linkTitle",class:U(d.value.linkTitle({class:[f(i)?.linkTitle,E.ui?.linkTitle],active:b}))},[P(g.$slots,"link-title",{link:E,active:b,ui:d.value},()=>[Ke(Fe(E.title),1)]),E.target==="_blank"?(D(),k(st,{key:0,name:f(s).ui.icons.external,"data-slot":"linkTitleExternalIcon",class:U(d.value.linkTitleExternalIcon({class:[f(i)?.linkTitleExternalIcon,E.ui?.linkTitleExternalIcon],active:b}))},null,8,["name","class"])):Y("",!0)],2)):Y("",!0),E.badge||E.badge===0||E.children?.length&&!p.value||E.trailingIcon||r["link-trailing"]?(D(),re("span",{key:1,"data-slot":"linkTrailing",class:U(d.value.linkTrailing({class:[f(i)?.linkTrailing,E.ui?.linkTrailing]}))},[P(g.$slots,"link-trailing",{link:E,active:b,ui:d.value},()=>[E.badge||E.badge===0?(D(),k(_E,j({key:0,color:"neutral",variant:"outline",size:f(i)?.linkTrailingBadgeSize||d.value.linkTrailingBadgeSize()},typeof E.badge=="string"||typeof E.badge=="number"?{label:E.badge}:E.badge,{"data-slot":"linkTrailingBadge",class:d.value.linkTrailingBadge({class:f(i)?.linkTrailingBadge})}),null,16,["size","class"])):Y("",!0),E.children?.length&&!p.value?(D(),k(st,{key:1,name:E.trailingIcon||e.trailingIcon||f(s).ui.icons.chevronDown,"data-slot":"linkTrailingIcon",class:U(d.value.linkTrailingIcon({class:[f(i)?.linkTrailingIcon,E.ui?.linkTrailingIcon]}))},null,8,["name","class"])):E.trailingIcon?(D(),k(st,{key:2,name:E.trailingIcon,"data-slot":"linkTrailingIcon",class:U(d.value.linkTrailingIcon({class:[f(i)?.linkTrailingIcon,E.ui?.linkTrailingIcon]}))},null,8,["name","class"])):Y("",!0)])],2)):Y("",!0)])]),_:3}),q(f(we),j({as:e.as},g.$attrs,{"as-child":e.level>0,"data-slot":"root",class:d.value.root({class:[f(i)?.root,n.class]})}),{default:A(()=>[q(f(D0),j({as:"ul",disabled:p.value},f(u),{"default-value":m.value,class:e.level>0?d.value.listWithChildren({class:f(i)?.listWithChildren}):d.value.list({class:f(i)?.list})}),{default:A(()=>[(D(!0),re(Ce,null,yt(e.navigation,(E,b)=>(D(),re(Ce,{key:b},[E.children?.length?(D(),k(f(t1),{key:0,as:"li",disabled:!!E.disabled,"data-slot":"itemWithChildren",class:U(d.value.itemWithChildren({class:[f(i)?.itemWithChildren,E.ui?.itemWithChildren],level:e.level>0})),value:String(b)},{default:A(()=>[q(f(B0),{as:"button",class:U([d.value.link({class:[f(i)?.link,E.ui?.link,E.class],active:E.active,disabled:!!E.disabled||p.value}),d.value.trigger({class:[f(i)?.trigger,E.ui?.trigger],disabled:!!E.disabled||p.value})])},{default:A(()=>[q(f(l),{link:E,active:E.active||!1},null,8,["link","active"])]),_:2},1032,["class"]),q(f(n1),{"data-slot":"content",class:U(d.value.content({class:[f(i)?.content,E.ui?.content]}))},{default:A(()=>[q(kE,j({ref_for:!0},f(u),{navigation:E.children,"default-open":e.defaultOpen,level:e.level+1,"trailing-icon":e.trailingIcon,color:e.color,variant:e.variant,highlight:e.highlight,"highlight-color":e.highlightColor,ui:f(i)}),us({_:2},[yt(r,(v,C)=>({name:C,fn:A(w=>[P(g.$slots,C,j({ref_for:!0},{...w,link:w.link}))])}))]),1040,["navigation","default-open","level","trailing-icon","color","variant","highlight","highlight-color","ui"])]),_:2},1032,["class"])]),_:2},1032,["disabled","class","value"])):(D(),re("li",{key:1,"data-slot":"item",class:U(d.value.item({class:[f(i)?.item,E.ui?.item],level:e.level>0}))},[q($r,j({ref_for:!0},f(xu)(f(Q1)(E)),{custom:""}),{default:A(({active:v,...C})=>[q(_o,j({ref_for:!0},C,{"data-slot":"link",class:d.value.link({class:[f(i)?.link,E.ui?.link,E.class],active:v,disabled:!!E.disabled,level:e.level>0})}),{default:A(()=>[q(f(l),{link:E,active:v},null,8,["link","active"])]),_:2},1040,["class"])]),_:2},1040)],2))],64))),128))]),_:3},16,["disabled","default-value","class"])]),_:3},16,["as","as-child","class"])],64))}});function SE(e){const t=Pe();return F(()=>t.ui?.[e]?.defaultVariants||{})}const RN=L({__name:"AppHeaderBody",setup(e){const t=Ue("navigation"),n=SE("contentNavigation");return(o,r)=>{const u=kE;return D(),k(u,{highlight:f(n).highlight??!0,"highlight-color":f(n).highlightColor,variant:f(n).variant??"link",color:f(n).color,navigation:f(t)},null,8,["highlight","highlight-color","variant","color","navigation"])}}}),LN=Object.assign(RN,{__name:"AppHeaderBody"}),qN={slots:{root:"relative flex gap-1.5 [&>div]:min-w-0",list:"isolate min-w-0",label:"w-full flex items-center gap-1.5 font-semibold text-xs/5 text-highlighted px-2.5 py-1.5",item:"min-w-0",link:"group relative w-full flex items-center gap-1.5 font-medium text-sm before:absolute before:z-[-1] before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2",linkLeadingIcon:"shrink-0 size-5",linkLeadingAvatar:"shrink-0",linkLeadingAvatarSize:"2xs",linkLeadingChipSize:"sm",linkTrailing:"group ms-auto inline-flex gap-1.5 items-center",linkTrailingBadge:"shrink-0",linkTrailingBadgeSize:"sm",linkTrailingIcon:"size-5 transform shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",linkLabel:"truncate",linkLabelExternalIcon:"inline-block size-3 align-top text-dimmed",childList:"isolate",childLabel:"text-xs text-highlighted",childItem:"",childLink:"group relative size-full flex items-start text-start text-sm before:absolute before:z-[-1] before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2",childLinkWrapper:"min-w-0",childLinkIcon:"size-5 shrink-0",childLinkLabel:"truncate",childLinkLabelExternalIcon:"inline-block size-3 align-top text-dimmed",childLinkDescription:"text-muted",separator:"px-2 h-px bg-border",viewportWrapper:"absolute top-full left-0 flex w-full",viewport:"relative overflow-hidden bg-default shadow-lg rounded-md ring ring-default h-(--reka-navigation-menu-viewport-height) w-full transition-[width,height,left,right] duration-200 origin-[top_center] data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] z-1",content:"",indicator:"absolute left-0 data-[state=visible]:animate-[fade-in_100ms_ease-out] data-[state=hidden]:animate-[fade-out_100ms_ease-in] data-[state=hidden]:opacity-0 bottom-0 z-2 w-(--reka-navigation-menu-indicator-size) translate-x-(--reka-navigation-menu-indicator-position) flex h-2.5 items-end justify-center overflow-hidden transition-[translate,width] duration-200",arrow:"relative top-[50%] size-2.5 rotate-45 border border-default bg-default z-1 rounded-xs"},variants:{color:{primary:{link:"focus-visible:before:ring-primary",childLink:"focus-visible:before:ring-primary"},secondary:{link:"focus-visible:before:ring-secondary",childLink:"focus-visible:before:ring-secondary"},success:{link:"focus-visible:before:ring-success",childLink:"focus-visible:before:ring-success"},info:{link:"focus-visible:before:ring-info",childLink:"focus-visible:before:ring-info"},warning:{link:"focus-visible:before:ring-warning",childLink:"focus-visible:before:ring-warning"},error:{link:"focus-visible:before:ring-error",childLink:"focus-visible:before:ring-error"},neutral:{link:"focus-visible:before:ring-inverted",childLink:"focus-visible:before:ring-inverted"}},highlightColor:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{pill:"",link:""},orientation:{horizontal:{root:"items-center justify-between",list:"flex items-center",item:"py-2",link:"px-2.5 py-1.5 before:inset-x-px before:inset-y-0",childList:"grid p-2",childLink:"px-3 py-2 gap-2 before:inset-x-px before:inset-y-0",childLinkLabel:"font-medium",content:"absolute top-0 left-0 w-full max-h-[70vh] overflow-y-auto"},vertical:{root:"flex-col",link:"flex-row px-2.5 py-1.5 before:inset-y-px before:inset-x-0",childLabel:"px-1.5 py-0.5",childLink:"p-1.5 gap-1.5 before:inset-y-px before:inset-x-0"}},contentOrientation:{horizontal:{viewportWrapper:"justify-center",content:"data-[motion=from-start]:animate-[enter-from-left_200ms_ease] data-[motion=from-end]:animate-[enter-from-right_200ms_ease] data-[motion=to-start]:animate-[exit-to-left_200ms_ease] data-[motion=to-end]:animate-[exit-to-right_200ms_ease]"},vertical:{viewport:"sm:w-(--reka-navigation-menu-viewport-width) left-(--reka-navigation-menu-viewport-left) rtl:left-auto rtl:right-[calc(100%-var(--reka-navigation-menu-viewport-left)-var(--reka-navigation-menu-viewport-width))]"}},active:{true:{childLink:"before:bg-elevated text-highlighted",childLinkIcon:"text-default"},false:{link:"text-muted",linkLeadingIcon:"text-dimmed",childLink:["hover:before:bg-elevated/50 text-default hover:text-highlighted","transition-colors before:transition-colors"],childLinkIcon:["text-dimmed group-hover:text-default","transition-colors"]}},disabled:{true:{link:"cursor-not-allowed opacity-75"}},highlight:{true:""},level:{true:""},collapsed:{true:""}},compoundVariants:[{orientation:"horizontal",contentOrientation:"horizontal",class:{childList:"grid-cols-2 gap-2"}},{orientation:"horizontal",contentOrientation:"vertical",class:{childList:"gap-1",content:"w-60"}},{orientation:"vertical",collapsed:!1,class:{childList:"ms-5 border-s border-default",childItem:"ps-1.5 -ms-px",content:"data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] overflow-hidden"}},{orientation:"vertical",collapsed:!0,class:{link:"px-1.5",linkLabel:"hidden",linkTrailing:"hidden",content:"shadow-sm rounded-sm min-h-6 p-1"}},{orientation:"horizontal",highlight:!0,class:{link:["after:absolute after:-bottom-2 after:inset-x-2.5 after:block after:h-px after:rounded-full","after:transition-colors"]}},{orientation:"vertical",highlight:!0,level:!0,class:{link:["after:absolute after:-start-1.5 after:inset-y-0.5 after:block after:w-px after:rounded-full","after:transition-colors"]}},{disabled:!1,active:!1,variant:"pill",class:{link:["hover:text-highlighted hover:before:bg-elevated/50","transition-colors before:transition-colors"],linkLeadingIcon:["group-hover:text-default","transition-colors"]}},{disabled:!1,active:!1,variant:"pill",orientation:"horizontal",class:{link:"data-[state=open]:text-highlighted",linkLeadingIcon:"group-data-[state=open]:text-default"}},{disabled:!1,variant:"pill",highlight:!0,orientation:"horizontal",class:{link:"data-[state=open]:before:bg-elevated/50"}},{disabled:!1,variant:"pill",highlight:!1,active:!1,orientation:"horizontal",class:{link:"data-[state=open]:before:bg-elevated/50"}},{color:"primary",variant:"pill",active:!0,class:{link:"text-primary",linkLeadingIcon:"text-primary group-data-[state=open]:text-primary"}},{color:"secondary",variant:"pill",active:!0,class:{link:"text-secondary",linkLeadingIcon:"text-secondary group-data-[state=open]:text-secondary"}},{color:"success",variant:"pill",active:!0,class:{link:"text-success",linkLeadingIcon:"text-success group-data-[state=open]:text-success"}},{color:"info",variant:"pill",active:!0,class:{link:"text-info",linkLeadingIcon:"text-info group-data-[state=open]:text-info"}},{color:"warning",variant:"pill",active:!0,class:{link:"text-warning",linkLeadingIcon:"text-warning group-data-[state=open]:text-warning"}},{color:"error",variant:"pill",active:!0,class:{link:"text-error",linkLeadingIcon:"text-error group-data-[state=open]:text-error"}},{color:"neutral",variant:"pill",active:!0,class:{link:"text-highlighted",linkLeadingIcon:"text-highlighted group-data-[state=open]:text-highlighted"}},{variant:"pill",active:!0,highlight:!1,class:{link:"before:bg-elevated"}},{variant:"pill",active:!0,highlight:!0,disabled:!1,class:{link:["hover:before:bg-elevated/50","before:transition-colors"]}},{disabled:!1,active:!1,variant:"link",class:{link:["hover:text-highlighted","transition-colors"],linkLeadingIcon:["group-hover:text-default","transition-colors"]}},{disabled:!1,active:!1,variant:"link",orientation:"horizontal",class:{link:"data-[state=open]:text-highlighted",linkLeadingIcon:"group-data-[state=open]:text-default"}},{color:"primary",variant:"link",active:!0,class:{link:"text-primary",linkLeadingIcon:"text-primary group-data-[state=open]:text-primary"}},{color:"secondary",variant:"link",active:!0,class:{link:"text-secondary",linkLeadingIcon:"text-secondary group-data-[state=open]:text-secondary"}},{color:"success",variant:"link",active:!0,class:{link:"text-success",linkLeadingIcon:"text-success group-data-[state=open]:text-success"}},{color:"info",variant:"link",active:!0,class:{link:"text-info",linkLeadingIcon:"text-info group-data-[state=open]:text-info"}},{color:"warning",variant:"link",active:!0,class:{link:"text-warning",linkLeadingIcon:"text-warning group-data-[state=open]:text-warning"}},{color:"error",variant:"link",active:!0,class:{link:"text-error",linkLeadingIcon:"text-error group-data-[state=open]:text-error"}},{color:"neutral",variant:"link",active:!0,class:{link:"text-highlighted",linkLeadingIcon:"text-highlighted group-data-[state=open]:text-highlighted"}},{highlightColor:"primary",highlight:!0,level:!0,active:!0,class:{link:"after:bg-primary"}},{highlightColor:"secondary",highlight:!0,level:!0,active:!0,class:{link:"after:bg-secondary"}},{highlightColor:"success",highlight:!0,level:!0,active:!0,class:{link:"after:bg-success"}},{highlightColor:"info",highlight:!0,level:!0,active:!0,class:{link:"after:bg-info"}},{highlightColor:"warning",highlight:!0,level:!0,active:!0,class:{link:"after:bg-warning"}},{highlightColor:"error",highlight:!0,level:!0,active:!0,class:{link:"after:bg-error"}},{highlightColor:"neutral",highlight:!0,level:!0,active:!0,class:{link:"after:bg-inverted"}}],defaultVariants:{color:"primary",highlightColor:"primary",variant:"pill"}},$N=Object.assign({inheritAttrs:!1},{__name:"UNavigationMenu",props:{as:{type:null,required:!1},type:{type:null,required:!1,default:"multiple"},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},trailingIcon:{type:null,required:!1},externalIcon:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},items:{type:null,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},collapsed:{type:Boolean,required:!1},tooltip:{type:[Boolean,Object],required:!1},popover:{type:[Boolean,Object],required:!1},highlight:{type:Boolean,required:!1},highlightColor:{type:null,required:!1},content:{type:Object,required:!1},contentOrientation:{type:null,required:!1,default:"horizontal"},arrow:{type:Boolean,required:!1},valueKey:{type:null,required:!1,default:"value"},labelKey:{type:null,required:!1,default:"label"},class:{type:null,required:!1},ui:{type:Object,required:!1},delayDuration:{type:Number,required:!1,default:0},disableClickTrigger:{type:Boolean,required:!1},disableHoverTrigger:{type:Boolean,required:!1},skipDelayDuration:{type:Number,required:!1},disablePointerLeaveClose:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},disabled:{type:Boolean,required:!1},collapsible:{type:Boolean,required:!1,default:!0}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,o=t,r=qt(),u=Pe(),a=Et("navigationMenu",n),s=it(F(()=>({as:n.as,delayDuration:n.delayDuration,skipDelayDuration:n.skipDelayDuration,orientation:n.orientation,disableClickTrigger:n.disableClickTrigger,disableHoverTrigger:n.disableHoverTrigger,disablePointerLeaveClose:n.disablePointerLeaveClose,unmountOnHide:n.unmountOnHide})),o),i=it(Jt(n,"collapsible","disabled","type","unmountOnHide"),o),c=Ye(()=>n.content),l=Ye(()=>wt(typeof n.tooltip=="boolean"?{}:n.tooltip,{...n.orientation==="vertical"&&{delayDuration:0,content:{side:"right"}}})),d=Ye(()=>wt(typeof n.popover=="boolean"?{}:n.popover,{mode:"hover",content:{side:"right",align:"start",alignOffset:2}})),[p,h]=To(),[m,g]=To({props:{item:Object,index:Number,level:Number,listIndex:Number}}),y=F(()=>Se({extend:Se(qN),...u.ui?.navigationMenu||{}})({orientation:n.orientation,contentOrientation:n.orientation==="vertical"?void 0:n.contentOrientation,collapsed:n.collapsed,color:n.color,variant:n.variant,highlight:n.highlight,highlightColor:n.highlightColor||n.color})),E=F(()=>n.items?.length?eb(n.items)?n.items:[n.items]:[]);function b(w,B,x,_){const S=E.value.length>1?`group-${_}-`:"";return jt(w,n.valueKey)??(x>0?`${S}item-${x}-${B}`:`${S}item-${B}`)}function v(w,B=0,x=0){const _=w.reduce((S,O,H)=>((O.defaultOpen||O.open)&&S.push(b(O,H,B,x)),S),[]);return n.type==="single"?_[0]:_}function C(w,B){B.children?.length&&(n.orientation==="horizontal"?w.preventDefault():n.orientation==="vertical"&&!n.collapsed&&(w.preventDefault(),w.stopPropagation()))}return(w,B)=>(D(),re(Ce,null,[q(f(p),null,{default:A(({item:x,active:_,index:S})=>[P(w.$slots,x.slot||"item",{item:x,index:S,active:_,ui:y.value},()=>[P(w.$slots,x.slot?`${x.slot}-leading`:"item-leading",{item:x,active:_,index:S,ui:y.value},()=>[x.avatar?(D(),k(Ku,j({key:0,size:x.ui?.linkLeadingAvatarSize||f(a)?.linkLeadingAvatarSize||y.value.linkLeadingAvatarSize()},x.avatar,{"data-slot":"linkLeadingAvatar",class:y.value.linkLeadingAvatar({class:[f(a)?.linkLeadingAvatar,x.ui?.linkLeadingAvatar],active:_,disabled:!!x.disabled})}),null,16,["size","class"])):x.icon&&x.chip?(D(),k(Tb,j({key:1,size:x.ui?.linkLeadingChipSize||f(a)?.linkLeadingChipSize||y.value.linkLeadingChipSize(),inset:""},typeof x.chip=="object"?x.chip:{},{"data-slot":"linkLeadingChip"}),{default:A(()=>[q(st,{name:x.icon,"data-slot":"linkLeadingIcon",class:U(y.value.linkLeadingIcon({class:[f(a)?.linkLeadingIcon,x.ui?.linkLeadingIcon],active:_,disabled:!!x.disabled}))},null,8,["name","class"])]),_:2},1040,["size"])):x.icon?(D(),k(st,{key:2,name:x.icon,"data-slot":"linkLeadingIcon",class:U(y.value.linkLeadingIcon({class:[f(a)?.linkLeadingIcon,x.ui?.linkLeadingIcon],active:_,disabled:!!x.disabled}))},null,8,["name","class"])):Y("",!0)]),f(jt)(x,n.labelKey)||r[x.slot?`${x.slot}-label`:"item-label"]?(D(),re("span",{key:0,"data-slot":"linkLabel",class:U(y.value.linkLabel({class:[f(a)?.linkLabel,x.ui?.linkLabel]}))},[P(w.$slots,x.slot?`${x.slot}-label`:"item-label",{item:x,active:_,index:S},()=>[Ke(Fe(f(jt)(x,n.labelKey)),1)]),x.target==="_blank"&&e.externalIcon!==!1?(D(),k(st,{key:0,name:typeof e.externalIcon=="string"?e.externalIcon:f(u).ui.icons.external,"data-slot":"linkLabelExternalIcon",class:U(y.value.linkLabelExternalIcon({class:[f(a)?.linkLabelExternalIcon,x.ui?.linkLabelExternalIcon],active:_}))},null,8,["name","class"])):Y("",!0)],2)):Y("",!0),x.badge||x.badge===0||e.orientation==="horizontal"&&(x.children?.length||r[x.slot?`${x.slot}-content`:"item-content"])||e.orientation==="vertical"&&x.children?.length||x.trailingIcon||r[x.slot?`${x.slot}-trailing`:"item-trailing"]?(D(),k(Rt(e.orientation==="vertical"&&x.children?.length&&!e.collapsed?f(B0):"span"),{key:1,as:e.orientation==="vertical"&&x.children?.length&&!e.collapsed?"span":void 0,"data-slot":"linkTrailing",class:U(y.value.linkTrailing({class:[f(a)?.linkTrailing,x.ui?.linkTrailing]})),onClick:O=>C(O,x)},{default:A(()=>[P(w.$slots,x.slot?`${x.slot}-trailing`:"item-trailing",{item:x,active:_,index:S,ui:y.value},()=>[x.badge||x.badge===0?(D(),k(_E,j({key:0,color:"neutral",variant:"outline",size:x.ui?.linkTrailingBadgeSize||f(a)?.linkTrailingBadgeSize||y.value.linkTrailingBadgeSize()},typeof x.badge=="string"||typeof x.badge=="number"?{label:x.badge}:x.badge,{"data-slot":"linkTrailingBadge",class:y.value.linkTrailingBadge({class:[f(a)?.linkTrailingBadge,x.ui?.linkTrailingBadge]})}),null,16,["size","class"])):Y("",!0),e.orientation==="horizontal"&&(x.children?.length||r[x.slot?`${x.slot}-content`:"item-content"])||e.orientation==="vertical"&&x.children?.length?(D(),k(st,{key:1,name:x.trailingIcon||e.trailingIcon||f(u).ui.icons.chevronDown,"data-slot":"linkTrailingIcon",class:U(y.value.linkTrailingIcon({class:[f(a)?.linkTrailingIcon,x.ui?.linkTrailingIcon],active:_}))},null,8,["name","class"])):x.trailingIcon?(D(),k(st,{key:2,name:x.trailingIcon,"data-slot":"linkTrailingIcon",class:U(y.value.linkTrailingIcon({class:[f(a)?.linkTrailingIcon,x.ui?.linkTrailingIcon],active:_}))},null,8,["name","class"])):Y("",!0)])]),_:2},1032,["as","class","onClick"])):Y("",!0)])]),_:3}),q(f(m),null,{default:A(({item:x,index:_,level:S=0,listIndex:O=0})=>[(D(),k(Rt(e.orientation==="vertical"&&!e.collapsed?f(t1):f(qF)),j({as:"li"},e.orientation==="vertical"&&!e.collapsed?{disabled:!!x.disabled}:{},{value:b(x,_,S,O)}),{default:A(()=>[e.orientation==="vertical"&&x.type==="label"&&!e.collapsed?(D(),re("div",{key:0,"data-slot":"label",class:U(y.value.label({class:[f(a)?.label,x.ui?.label,x.class]}))},[q(f(h),{item:x,index:_},null,8,["item","index"])],2)):x.type!=="label"?(D(),k($r,j({key:1},e.orientation==="vertical"&&x.children?.length&&!e.collapsed&&x.type==="trigger"?{}:f(xu)(x),{custom:""}),{default:A(({active:H,...N})=>[(D(),k(Rt(e.orientation==="horizontal"&&(x.children?.length||r[x.slot?`${x.slot}-content`:"item-content"])?f(ZF):e.orientation==="vertical"&&x.children?.length&&!e.collapsed&&!N.href?f(B0):f(mc)),{"as-child":"",active:H||x.active,disabled:x.disabled,onSelect:x.onSelect},{default:A(()=>[e.orientation==="vertical"&&e.collapsed&&x.children?.length&&(n.popover||x.popover)?(D(),k(jb,j({key:0},{...d.value,...typeof x.popover=="boolean"?{}:x.popover||{}},{ui:{content:y.value.content({class:[f(a)?.content,x.ui?.content]})}}),{content:A(({close:J})=>[P(w.$slots,x.slot?`${x.slot}-content`:"item-content",{item:x,active:H||x.active,index:_,ui:y.value,close:J},()=>[je("ul",{"data-slot":"childList",class:U(y.value.childList({class:[f(a)?.childList,x.ui?.childList]}))},[je("li",{"data-slot":"childLabel",class:U(y.value.childLabel({class:[f(a)?.childLabel,x.ui?.childLabel]}))},Fe(f(jt)(x,n.labelKey)),3),(D(!0),re(Ce,null,yt(x.children,(G,$)=>(D(),re("li",{key:$,"data-slot":"childItem",class:U(y.value.childItem({class:[f(a)?.childItem,x.ui?.childItem]}))},[q($r,j({ref_for:!0},f(xu)(G),{custom:""}),{default:A(({active:I,...W})=>[q(f(mc),{"as-child":"",active:I,onSelect:G.onSelect},{default:A(()=>[q(_o,j({ref_for:!0},W,{"data-slot":"childLink",class:y.value.childLink({class:[f(a)?.childLink,x.ui?.childLink,G.class],active:I})}),{default:A(()=>[G.icon?(D(),k(st,{key:0,name:G.icon,"data-slot":"childLinkIcon",class:U(y.value.childLinkIcon({class:[f(a)?.childLinkIcon,x.ui?.childLinkIcon],active:I}))},null,8,["name","class"])):Y("",!0),je("span",{"data-slot":"childLinkLabel",class:U(y.value.childLinkLabel({class:[f(a)?.childLinkLabel,x.ui?.childLinkLabel],active:I}))},[Ke(Fe(f(jt)(G,n.labelKey))+" ",1),G.target==="_blank"&&e.externalIcon!==!1?(D(),k(st,{key:0,name:typeof e.externalIcon=="string"?e.externalIcon:f(u).ui.icons.external,"data-slot":"childLinkLabelExternalIcon",class:U(y.value.childLinkLabelExternalIcon({class:[f(a)?.childLinkLabelExternalIcon,x.ui?.childLinkLabelExternalIcon],active:I}))},null,8,["name","class"])):Y("",!0)],2)]),_:2},1040,["class"])]),_:2},1032,["active","onSelect"])]),_:2},1040)],2))),128))],2)])]),default:A(()=>[q(_o,j(N,{"data-slot":"link",class:y.value.link({class:[f(a)?.link,x.ui?.link,x.class],active:H||x.active,disabled:!!x.disabled,level:S>0})}),{default:A(()=>[q(f(h),{item:x,active:H||x.active,index:_},null,8,["item","active","index"])]),_:2},1040,["class"])]),_:2},1040,["ui"])):e.orientation==="vertical"&&e.collapsed&&(n.tooltip||x.tooltip)||e.orientation==="horizontal"&&x.tooltip?(D(),k(Pb,j({key:1,text:f(jt)(x,n.labelKey)},{...l.value,...typeof x.tooltip=="boolean"?{}:x.tooltip||{}}),{default:A(()=>[q(_o,j(N,{"data-slot":"link",class:y.value.link({class:[f(a)?.link,x.ui?.link,x.class],active:H||x.active,disabled:!!x.disabled,level:S>0})}),{default:A(()=>[q(f(h),{item:x,active:H||x.active,index:_},null,8,["item","active","index"])]),_:2},1040,["class"])]),_:2},1040,["text"])):(D(),k(_o,j({key:2},N,{"data-slot":"link",class:y.value.link({class:[f(a)?.link,x.ui?.link,x.class],active:H||x.active,disabled:!!x.disabled,level:e.orientation==="horizontal"||S>0})}),{default:A(()=>[q(f(h),{item:x,active:H||x.active,index:_},null,8,["item","active","index"])]),_:2},1040,["class"]))]),_:2},1064,["active","disabled","onSelect"])),e.orientation==="horizontal"&&(x.children?.length||r[x.slot?`${x.slot}-content`:"item-content"])?(D(),k(f(VF),j({key:0},c.value,{"data-slot":"content",class:y.value.content({class:[f(a)?.content,x.ui?.content]})}),{default:A(()=>[P(w.$slots,x.slot?`${x.slot}-content`:"item-content",{item:x,active:H||x.active,index:_,ui:y.value},()=>[je("ul",{"data-slot":"childList",class:U(y.value.childList({class:[f(a)?.childList,x.ui?.childList]}))},[(D(!0),re(Ce,null,yt(x.children,(J,G)=>(D(),re("li",{key:G,"data-slot":"childItem",class:U(y.value.childItem({class:[f(a)?.childItem,x.ui?.childItem]}))},[q($r,j({ref_for:!0},f(xu)(J),{custom:""}),{default:A(({active:$,...I})=>[q(f(mc),{"as-child":"",active:$,onSelect:J.onSelect},{default:A(()=>[q(_o,j({ref_for:!0},I,{"data-slot":"childLink",class:y.value.childLink({class:[f(a)?.childLink,x.ui?.childLink,J.class],active:$})}),{default:A(()=>[J.icon?(D(),k(st,{key:0,name:J.icon,"data-slot":"childLinkIcon",class:U(y.value.childLinkIcon({class:[f(a)?.childLinkIcon,x.ui?.childLinkIcon],active:$}))},null,8,["name","class"])):Y("",!0),je("div",{"data-slot":"childLinkWrapper",class:U(y.value.childLinkWrapper({class:[f(a)?.childLinkWrapper,x.ui?.childLinkWrapper]}))},[je("p",{"data-slot":"childLinkLabel",class:U(y.value.childLinkLabel({class:[f(a)?.childLinkLabel,x.ui?.childLinkLabel],active:$}))},[Ke(Fe(f(jt)(J,n.labelKey))+" ",1),J.target==="_blank"&&e.externalIcon!==!1?(D(),k(st,{key:0,name:typeof e.externalIcon=="string"?e.externalIcon:f(u).ui.icons.external,"data-slot":"childLinkLabelExternalIcon",class:U(y.value.childLinkLabelExternalIcon({class:[f(a)?.childLinkLabelExternalIcon,x.ui?.childLinkLabelExternalIcon],active:$}))},null,8,["name","class"])):Y("",!0)],2),J.description?(D(),re("p",{key:0,"data-slot":"childLinkDescription",class:U(y.value.childLinkDescription({class:[f(a)?.childLinkDescription,x.ui?.childLinkDescription],active:$}))},Fe(J.description),3)):Y("",!0)],2)]),_:2},1040,["class"])]),_:2},1032,["active","onSelect"])]),_:2},1040)],2))),128))],2)])]),_:2},1040,["class"])):Y("",!0)]),_:2},1040)):Y("",!0),e.orientation==="vertical"&&x.children?.length&&!e.collapsed?(D(),k(f(n1),{key:2,"data-slot":"content",class:U(y.value.content({class:[f(a)?.content,x.ui?.content]}))},{default:A(()=>[q(f(D0),j({...f(i),defaultValue:v(x.children,S+1,O)},{as:"ul","data-slot":"childList",class:y.value.childList({class:[f(a)?.childList,x.ui?.childList]})}),{default:A(()=>[(D(!0),re(Ce,null,yt(x.children,(H,N)=>(D(),k(f(g),{key:N,item:H,index:N,level:S+1,"list-index":O,"data-slot":"childItem",class:U(y.value.childItem({class:[f(a)?.childItem,H.ui?.childItem]}))},null,8,["item","index","level","list-index","class"]))),128))]),_:2},1040,["class"])]),_:2},1032,["class"])):Y("",!0)]),_:2},1040,["value"]))]),_:3}),q(f(IF),j({...f(s),...e.orientation==="horizontal"?{modelValue:e.modelValue,defaultValue:e.defaultValue}:{},...w.$attrs},{"data-collapsed":e.collapsed,"data-slot":"root",class:y.value.root({class:[f(a)?.root,n.class]})}),{default:A(()=>[P(w.$slots,"list-leading"),(D(!0),re(Ce,null,yt(E.value,(x,_)=>(D(),re(Ce,{key:`list-${_}`},[(D(),k(Rt(e.orientation==="vertical"?f(D0):f(WF)),j({ref_for:!0},e.orientation==="vertical"&&!e.collapsed?{...f(i),modelValue:e.modelValue,defaultValue:e.defaultValue??v(x,0,_)}:{},{as:"ul","data-slot":"list",class:y.value.list({class:f(a)?.list})}),{default:A(()=>[(D(!0),re(Ce,null,yt(x,(S,O)=>(D(),k(f(g),{key:`list-${_}-${O}`,item:S,index:O,"list-index":_,"data-slot":"item",class:U(y.value.item({class:[f(a)?.item,S.ui?.item]}))},null,8,["item","index","list-index","class"]))),128))]),_:2},1040,["class"])),e.orientation==="vertical"&&_[je("div",{"data-slot":"arrow",class:U(y.value.arrow({class:f(a)?.arrow}))},null,2)]),_:1},8,["class"])):Y("",!0),q(f(JF),{"data-slot":"viewport",class:U(y.value.viewport({class:f(a)?.viewport}))},null,8,["class"])],2)):Y("",!0)]),_:3},16,["data-collapsed","class"])],64))}}),NN={};function jN(e,t){return D(),re("div")}const VN=Object.assign(Wu(NN,[["render",jN]]),{__name:"AppHeaderBottomRight"}),zN={base:"w-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8"},ep={__name:"UContainer",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=e,n=Pe(),o=Et("container",t),r=F(()=>Se({extend:Se(zN),...n.ui?.container||{}}));return(u,a)=>(D(),k(f(we),{as:e.as,class:U(r.value({class:[f(o)?.base,t.class]}))},{default:A(()=>[P(u.$slots,"default")]),_:3},8,["as","class"]))}};function UN(e){let t=e;for(;t.children?.length;)t=t.children[0];return t.path}function tp(e){const t=Yn(),n=Pe(),o=e??Ue("navigation"),r=F(()=>t.meta.layout==="docs"),u=F(()=>{if(r.value)return n.navigation?.sub}),a=F(()=>{if(!(!u.value||!o?.value))return o.value.find(c=>t.path===c.path||t.path.startsWith(c.path+"/"))}),s=F(()=>!u.value||!o?.value?[]:o.value.filter(c=>c.children?.length).map(c=>({label:c.title,icon:c.icon,to:UN(c),active:t.path===c.path||t.path.startsWith(c.path+"/")}))),i=F(()=>u.value&&a.value?a.value.children||[]:o?.value||[]);return{subNavigationMode:u,sections:s,currentSection:a,sidebarNavigation:i}}const HN=L({__name:"AppHeaderBottom",setup(e){const{sections:t}=tp(),n=SE("navigationMenu");return(o,r)=>{const u=Vb,a=$N,s=VN,i=ep;return D(),re(Ce,null,[q(u,{class:"hidden lg:flex"}),q(i,{class:"hidden lg:flex items-center justify-between"},{default:A(()=>[q(a,{items:f(t),highlight:f(n).highlight??!0,"highlight-color":f(n).highlightColor,variant:f(n).variant??"pill",color:f(n).color,class:"-mx-2.5 -mb-px"},null,8,["items","highlight","highlight-color","variant","color"]),q(s)]),_:1})],64)}}}),KN=Object.assign(HN,{__name:"AppHeaderBottom"}),WN={slots:{overlay:"fixed inset-0 bg-elevated/75",content:"fixed bg-default divide-y divide-default sm:ring ring-default sm:shadow-lg flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-(--ui-header-height)",wrapper:"",body:"flex-1 overflow-y-auto p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{side:{top:{content:""},right:{content:"max-w-md"},bottom:{content:""},left:{content:"max-w-md"}},inset:{true:{content:"rounded-lg"}},transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]"}}},compoundVariants:[{side:"top",inset:!0,class:{content:"max-h-[calc(100%-2rem)] inset-x-4 top-4"}},{side:"top",inset:!1,class:{content:"max-h-full inset-x-0 top-0"}},{side:"right",inset:!0,class:{content:"w-[calc(100%-2rem)] inset-y-4 right-4"}},{side:"right",inset:!1,class:{content:"w-full inset-y-0 right-0"}},{side:"bottom",inset:!0,class:{content:"max-h-[calc(100%-2rem)] inset-x-4 bottom-4"}},{side:"bottom",inset:!1,class:{content:"max-h-full inset-x-0 bottom-0"}},{side:"left",inset:!0,class:{content:"w-[calc(100%-2rem)] inset-y-4 left-4"}},{side:"left",inset:!1,class:{content:"w-full inset-y-0 left-0"}},{transition:!0,side:"top",class:{content:"data-[state=open]:animate-[slide-in-from-top_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-top_200ms_ease-in-out]"}},{transition:!0,side:"right",class:{content:"data-[state=open]:animate-[slide-in-from-right_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-right_200ms_ease-in-out]"}},{transition:!0,side:"bottom",class:{content:"data-[state=open]:animate-[slide-in-from-bottom_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-bottom_200ms_ease-in-out]"}},{transition:!0,side:"left",class:{content:"data-[state=open]:animate-[slide-in-from-left_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-left_200ms_ease-in-out]"}}]},GN={__name:"USlideover",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},transition:{type:Boolean,required:!1,default:!0},side:{type:null,required:!1,default:"right"},inset:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["after:leave","after:enter","close:prevent","update:open"],setup(e,{emit:t}){const n=e,o=t,r=qt(),{t:u}=Vo(),a=Pe(),s=Et("slideover",n),i=it(Jt(n,"open","defaultOpen","modal"),o),c=tu(Ye(()=>n.portal)),l=Ye(()=>n.content),d=F(()=>n.dismissible?{pointerDownOutside:Fl}:["interactOutside","escapeKeyDown"].reduce((m,g)=>(m[g]=y=>{y.preventDefault(),o("close:prevent")},m),{})),p=F(()=>Se({extend:Se(WN),...a.ui?.slideover||{}})({transition:n.transition,side:n.side,inset:n.inset}));return(h,m)=>(D(),k(f(o1),me(xe(f(i))),{default:A(({open:g,close:y})=>[r.default?(D(),k(f(c1),{key:0,"as-child":"",class:U(n.class)},{default:A(()=>[P(h.$slots,"default",{open:g})]),_:2},1032,["class"])):Y("",!0),q(f(l1),me(xe(f(c))),{default:A(()=>[e.overlay?(D(),k(f(k0),{key:0,"data-slot":"overlay",class:U(p.value.overlay({class:f(s)?.overlay}))},null,8,["class"])):Y("",!0),q(f(i1),j({"data-side":e.side,"data-slot":"content",class:p.value.content({class:[!r.default&&n.class,f(s)?.content]})},l.value,{onAfterEnter:m[0]||(m[0]=E=>o("after:enter")),onAfterLeave:m[1]||(m[1]=E=>o("after:leave"))},as(d.value)),{default:A(()=>[!e.title&&!r.title||!e.description&&!r.description||r.content?(D(),k(f(Yr),{key:0},{default:A(()=>[!e.title&&!r.title?(D(),k(f(Eu),{key:0})):r.content?(D(),k(f(Eu),{key:1},{default:A(()=>[P(h.$slots,"title",{},()=>[Ke(Fe(e.title),1)])]),_:3})):Y("",!0),!e.description&&!r.description?(D(),k(f(bu),{key:2})):r.content?(D(),k(f(bu),{key:3},{default:A(()=>[P(h.$slots,"description",{},()=>[Ke(Fe(e.description),1)])]),_:3})):Y("",!0)]),_:3})):Y("",!0),P(h.$slots,"content",{close:y},()=>[r.header||e.title||r.title||e.description||r.description||n.close||r.close?(D(),re("div",{key:0,"data-slot":"header",class:U(p.value.header({class:f(s)?.header}))},[P(h.$slots,"header",{close:y},()=>[je("div",{"data-slot":"wrapper",class:U(p.value.wrapper({class:f(s)?.wrapper}))},[e.title||r.title?(D(),k(f(Eu),{key:0,"data-slot":"title",class:U(p.value.title({class:f(s)?.title}))},{default:A(()=>[P(h.$slots,"title",{},()=>[Ke(Fe(e.title),1)])]),_:3},8,["class"])):Y("",!0),e.description||r.description?(D(),k(f(bu),{key:1,"data-slot":"description",class:U(p.value.description({class:f(s)?.description}))},{default:A(()=>[P(h.$slots,"description",{},()=>[Ke(Fe(e.description),1)])]),_:3},8,["class"])):Y("",!0)],2),P(h.$slots,"actions"),n.close||r.close?(D(),k(f(r1),{key:0,"as-child":""},{default:A(()=>[P(h.$slots,"close",{ui:p.value},()=>[n.close?(D(),k(hn,j({key:0,icon:e.closeIcon||f(a).ui.icons.close,color:"neutral",variant:"ghost","aria-label":f(u)("slideover.close")},typeof n.close=="object"?n.close:{},{"data-slot":"close",class:p.value.close({class:f(s)?.close})}),null,16,["icon","aria-label","class"])):Y("",!0)])]),_:2},1024)):Y("",!0)])],2)):Y("",!0),je("div",{"data-slot":"body",class:U(p.value.body({class:f(s)?.body}))},[P(h.$slots,"body",{close:y})],2),r.footer?(D(),re("div",{key:1,"data-slot":"footer",class:U(p.value.footer({class:f(s)?.footer}))},[P(h.$slots,"footer",{close:y})],2)):Y("",!0)])]),_:2},1040,["data-side","class"])]),_:2},1040)]),_:3},16))}},YN={slots:{overlay:"fixed inset-0",content:"bg-default divide-y divide-default flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-(--ui-header-height)",wrapper:"",body:"flex-1 p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]",content:"data-[state=open]:animate-[scale-in_200ms_ease-out] data-[state=closed]:animate-[scale-out_200ms_ease-in]"}},fullscreen:{true:{content:"inset-0"},false:{content:"w-[calc(100vw-2rem)] max-w-lg rounded-lg shadow-lg ring ring-default"}},overlay:{true:{overlay:"bg-elevated/75"}},scrollable:{true:{overlay:"overflow-y-auto",content:"relative"},false:{content:"fixed",body:"overflow-y-auto"}}},compoundVariants:[{scrollable:!0,fullscreen:!1,class:{overlay:"grid place-items-center p-4 sm:py-8"}},{scrollable:!1,fullscreen:!1,class:{content:"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 max-h-[calc(100dvh-2rem)] sm:max-h-[calc(100dvh-4rem)] overflow-hidden"}}]},ZN={__name:"UModal",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},scrollable:{type:Boolean,required:!1},transition:{type:Boolean,required:!1,default:!0},fullscreen:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["after:leave","after:enter","close:prevent","update:open"],setup(e,{emit:t}){const n=e,o=t,r=qt(),{t:u}=Vo(),a=Pe(),s=Et("modal",n),i=it(Jt(n,"open","defaultOpen","modal"),o),c=tu(Ye(()=>n.portal)),l=Ye(()=>n.content),d=F(()=>n.dismissible?{pointerDownOutside:g=>Fl(g,{scrollable:n.scrollable})}:["interactOutside","escapeKeyDown"].reduce((y,E)=>(y[E]=b=>{b.preventDefault(),o("close:prevent")},y),{})),[p,h]=To(),m=F(()=>Se({extend:Se(YN),...a.ui?.modal||{}})({transition:n.transition,fullscreen:n.fullscreen,overlay:n.overlay,scrollable:n.scrollable}));return(g,y)=>(D(),k(f(o1),me(xe(f(i))),{default:A(({open:E,close:b})=>[q(f(p),null,{default:A(()=>[q(f(i1),j({"data-slot":"content",class:m.value.content({class:[!r.default&&n.class,f(s)?.content]})},l.value,{onAfterEnter:y[0]||(y[0]=v=>o("after:enter")),onAfterLeave:y[1]||(y[1]=v=>o("after:leave"))},as(d.value)),{default:A(()=>[!e.title&&!r.title||!e.description&&!r.description||r.content?(D(),k(f(Yr),{key:0},{default:A(()=>[!e.title&&!r.title?(D(),k(f(Eu),{key:0})):r.content?(D(),k(f(Eu),{key:1},{default:A(()=>[P(g.$slots,"title",{},()=>[Ke(Fe(e.title),1)])]),_:3})):Y("",!0),!e.description&&!r.description?(D(),k(f(bu),{key:2})):r.content?(D(),k(f(bu),{key:3},{default:A(()=>[P(g.$slots,"description",{},()=>[Ke(Fe(e.description),1)])]),_:3})):Y("",!0)]),_:3})):Y("",!0),P(g.$slots,"content",{close:b},()=>[r.header||e.title||r.title||e.description||r.description||n.close||r.close?(D(),re("div",{key:0,"data-slot":"header",class:U(m.value.header({class:f(s)?.header}))},[P(g.$slots,"header",{close:b},()=>[je("div",{"data-slot":"wrapper",class:U(m.value.wrapper({class:f(s)?.wrapper}))},[e.title||r.title?(D(),k(f(Eu),{key:0,"data-slot":"title",class:U(m.value.title({class:f(s)?.title}))},{default:A(()=>[P(g.$slots,"title",{},()=>[Ke(Fe(e.title),1)])]),_:3},8,["class"])):Y("",!0),e.description||r.description?(D(),k(f(bu),{key:1,"data-slot":"description",class:U(m.value.description({class:f(s)?.description}))},{default:A(()=>[P(g.$slots,"description",{},()=>[Ke(Fe(e.description),1)])]),_:3},8,["class"])):Y("",!0)],2),P(g.$slots,"actions"),n.close||r.close?(D(),k(f(r1),{key:0,"as-child":""},{default:A(()=>[P(g.$slots,"close",{ui:m.value},()=>[n.close?(D(),k(hn,j({key:0,icon:e.closeIcon||f(a).ui.icons.close,color:"neutral",variant:"ghost","aria-label":f(u)("modal.close")},typeof n.close=="object"?n.close:{},{"data-slot":"close",class:m.value.close({class:f(s)?.close})}),null,16,["icon","aria-label","class"])):Y("",!0)])]),_:2},1024)):Y("",!0)])],2)):Y("",!0),r.body?(D(),re("div",{key:1,"data-slot":"body",class:U(m.value.body({class:f(s)?.body}))},[P(g.$slots,"body",{close:b})],2)):Y("",!0),r.footer?(D(),re("div",{key:2,"data-slot":"footer",class:U(m.value.footer({class:f(s)?.footer}))},[P(g.$slots,"footer",{close:b})],2)):Y("",!0)])]),_:2},1040,["class"])]),_:2},1024),r.default?(D(),k(f(c1),{key:0,"as-child":"",class:U(n.class)},{default:A(()=>[P(g.$slots,"default",{open:E})]),_:2},1032,["class"])):Y("",!0),q(f(l1),me(xe(f(c))),{default:A(()=>[e.scrollable?(D(),k(f(k0),{key:0,"data-slot":"overlay",class:U(m.value.overlay({class:f(s)?.overlay}))},{default:A(()=>[q(f(h))]),_:1},8,["class"])):(D(),re(Ce,{key:1},[e.overlay?(D(),k(f(k0),{key:0,"data-slot":"overlay",class:U(m.value.overlay({class:f(s)?.overlay}))},null,8,["class"])):Y("",!0),q(f(h))],64))]),_:1},16)]),_:3},16))}};function np(e,t){const n=typeof e=="string"&&!t?`${e}Context`:t,o=Symbol(n);return[a=>{const s=Ue(o,a);if(s||s===null)return s;throw new Error(`Injection \`${o.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`)},a=>(Pt(o,a),a)]}function sr(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}function TE(e,t,n){const o=n.originalEvent.target,r=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),o.dispatchEvent(r)}function XN(e){return e==null}function JN(e,t){return ho()?(ir(e,t),!0):!1}function QN(e){let t=!1,n;const o=Qa(!0);return((...r)=>(t||(n=o.run(()=>e(...r)),t=!0),n))}const gr=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ej=e=>typeof e<"u",tj=Object.prototype.toString,nj=e=>tj.call(e)==="[object Object]",og=oj();function oj(){var e,t,n;return gr&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function Mc(e){return Array.isArray(e)?e:[e]}function rj(e){return We()}function uj(e){if(!gr)return e;let t=0,n,o;const r=()=>{t-=1,o&&t<=0&&(o.stop(),n=void 0,o=void 0)};return((...u)=>(t+=1,o||(o=Qa(!0),n=o.run(()=>e(...u))),JN(r),n))}function aj(e,t){rj()&&mo(e,t)}function sj(e,t,n){return ye(e,t,{...n,immediate:!0})}const op=gr?window:void 0;function Ol(e){var t;const n=ke(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function FE(...e){const t=(o,r,u,a)=>(o.addEventListener(r,u,a),()=>o.removeEventListener(r,u,a)),n=F(()=>{const o=Mc(ke(e[0])).filter(r=>r!=null);return o.every(r=>typeof r!="string")?o:void 0});return sj(()=>{var o,r;return[(o=(r=n.value)===null||r===void 0?void 0:r.map(u=>Ol(u)))!==null&&o!==void 0?o:[op].filter(u=>u!=null),Mc(ke(n.value?e[1]:e[0])),Mc(f(n.value?e[2]:e[1])),ke(n.value?e[3]:e[2])]},([o,r,u,a],s,i)=>{if(!o?.length||!r?.length||!u?.length)return;const c=nj(a)?{...a}:a,l=o.flatMap(d=>r.flatMap(p=>u.map(h=>t(d,p,h,c))));i(()=>{l.forEach(d=>d())})},{flush:"post"})}function ij(){const e=Me(!1),t=We();return t&&$e(()=>{e.value=!0},t),e}function lj(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function cj(...e){let t,n,o={};e.length===3?(t=e[0],n=e[1],o=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],o=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=op,eventName:u="keydown",passive:a=!1,dedupe:s=!1}=o,i=lj(t);return FE(r,u,l=>{l.repeat&&ke(s)||i(l)&&n(l)},a)}function dj(e){return JSON.parse(JSON.stringify(e))}function fj(e,t,n,o={}){var r,u;const{clone:a=!1,passive:s=!1,eventName:i,deep:c=!1,defaultValue:l,shouldEmit:d}=o,p=We(),h=n||p?.emit||(p==null||(r=p.$emit)===null||r===void 0?void 0:r.bind(p))||(p==null||(u=p.proxy)===null||u===void 0||(u=u.$emit)===null||u===void 0?void 0:u.bind(p?.proxy));let m=i;m=m||`update:${t.toString()}`;const g=b=>a?typeof a=="function"?a(b):dj(b):b,y=()=>ej(e[t])?g(e[t]):l,E=b=>{d?d(b)&&h(m,b):h(m,b)};if(s){const b=R(y());let v=!1;return ye(()=>e[t],C=>{v||(v=!0,b.value=g(C),Oe(()=>v=!1))}),ye(b,C=>{!v&&(C!==e[t]||c)&&E(C)},{deep:c}),b}else return F({get(){return y()},set(b){E(b)}})}function rp(e){return e?e.flatMap(t=>t.type===Ce?rp(t.children):[t]):[]}const[pj]=np("ConfigProvider"),hj=uj(()=>{const e=R(new Map),t=R(),n=F(()=>{for(const a of e.value.values())if(a)return!0;return!1}),o=pj({scrollBody:R(!0)});let r=null;const u=()=>{document.body.style.paddingRight="",document.body.style.marginRight="",document.body.style.pointerEvents="",document.documentElement.style.removeProperty("--scrollbar-width"),document.body.style.overflow=t.value??"",og&&r?.(),t.value=void 0};return ye(n,(a,s)=>{if(!gr)return;if(!a){s&&u();return}t.value===void 0&&(t.value=document.body.style.overflow);const i=window.innerWidth-document.documentElement.clientWidth,c={padding:i,margin:0},l=o.scrollBody?.value?typeof o.scrollBody.value=="object"?wt({padding:o.scrollBody.value.padding===!0?i:o.scrollBody.value.padding,margin:o.scrollBody.value.margin===!0?i:o.scrollBody.value.margin},c):c:{padding:0,margin:0};i>0&&(document.body.style.paddingRight=typeof l.padding=="number"?`${l.padding}px`:String(l.padding),document.body.style.marginRight=typeof l.margin=="number"?`${l.margin}px`:String(l.margin),document.documentElement.style.setProperty("--scrollbar-width",`${i}px`),document.body.style.overflow="hidden"),og&&(r=FE(document,"touchmove",d=>gj(d),{passive:!1})),Oe(()=>{n.value&&(document.body.style.pointerEvents="none",document.body.style.overflow="hidden")})},{immediate:!0,flush:"sync"}),e});function mj(e){const t=Math.random().toString(36).substring(2,7),n=hj();n.value.set(t,e);const o=F({get:()=>n.value.get(t)??!1,set:r=>n.value.set(t,r)});return aj(()=>{n.value.delete(t)}),o}function PE(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.cancelable&&t.preventDefault(),!1)}function Il(e){const t=We(),n=t?.type.emits,o={};return n?.length||console.warn(`No emitted event found. Please check component: ${t?.type.__name}`),n?.forEach(r=>{o[hu(Ft(r))]=(...u)=>e(r,...u)}),o}function Jn(){const e=We(),t=R(),n=F(()=>o());Gr(()=>{n.value!==o()&&jg(t)});function o(){return t.value&&"$el"in t.value&&["#text","#comment"].includes(t.value.$el.nodeName)?t.value.$el.nextElementSibling:Ol(t)}const r=Object.assign({},e.exposed),u={};for(const s in e.props)Object.defineProperty(u,s,{enumerable:!0,configurable:!0,get:()=>e.props[s]});if(Object.keys(r).length>0)for(const s in r)Object.defineProperty(u,s,{enumerable:!0,configurable:!0,get:()=>r[s]});Object.defineProperty(u,"$el",{enumerable:!0,configurable:!0,get:()=>e.vnode.el}),e.exposed=u;function a(s){if(t.value=s,!!s&&(Object.defineProperty(u,"$el",{enumerable:!0,configurable:!0,get:()=>s instanceof Element?s:s.$el}),!(s instanceof Element)&&!Object.hasOwn(s,"$el"))){const i=s.$.exposed,c=Object.assign({},u);for(const l in i)Object.defineProperty(c,l,{enumerable:!0,configurable:!0,get:()=>i[l]});e.exposed=c}}return{forwardRef:a,currentRef:t,currentElement:n}}function vj(e){const t=We(),n=Object.keys(t?.type.props??{}).reduce((r,u)=>{const a=(t?.type.props[u]).default;return a!==void 0&&(r[u]=a),r},{}),o=Ye(e);return F(()=>{const r={},u=t?.vnode.props??{};return Object.keys(u).forEach(a=>{r[Ft(a)]=u[a]}),Object.keys({...n,...r}).reduce((a,s)=>(o.value[s]!==void 0&&(a[s]=o.value[s]),a),{})})}function yj(e,t){const n=vj(e),o=t?Il(t):{};return F(()=>({...n.value,...o}))}function bj(e){let t;ye(()=>Ol(e),n=>{let o=!1;try{o=!!n?.closest("[popover]:not(:popover-open)")}catch{}n&&!o?t=J3(n):t&&t()}),Ht(()=>{t&&t()})}function md(e,t="reka"){let n;return n=Td?.(),t?`${t}-${n}`:n}function Ej(e,t){const n=R(e);function o(u){return t[n.value][u]??n.value}return{state:n,dispatch:u=>{n.value=o(u)}}}function Cj(e,t){const n=R({}),o=R("none"),r=R(e),u=e.value?"mounted":"unmounted";let a;const s=t.value?.ownerDocument.defaultView??op,{state:i,dispatch:c}=Ej(u,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}}),l=y=>{if(gr){const E=new CustomEvent(y,{bubbles:!1,cancelable:!1});t.value?.dispatchEvent(E)}};ye(e,async(y,E)=>{const b=E!==y;if(await Oe(),b){const v=o.value,C=Zs(t.value);y?(c("MOUNT"),l("enter"),C==="none"&&l("after-enter")):C==="none"||C==="undefined"||n.value?.display==="none"?(c("UNMOUNT"),l("leave"),l("after-leave")):E&&v!==C?(c("ANIMATION_OUT"),l("leave")):(c("UNMOUNT"),l("after-leave"))}},{immediate:!0});const d=y=>{const E=Zs(t.value),b=E.includes(CSS.escape(y.animationName)),v=i.value==="mounted"?"enter":"leave";if(y.target===t.value&&b&&(l(`after-${v}`),c("ANIMATION_END"),!r.value)){const C=t.value.style.animationFillMode;t.value.style.animationFillMode="forwards",a=s?.setTimeout(()=>{t.value?.style.animationFillMode==="forwards"&&(t.value.style.animationFillMode=C)})}y.target===t.value&&E==="none"&&c("ANIMATION_END")},p=y=>{y.target===t.value&&(o.value=Zs(t.value))},h=ye(t,(y,E)=>{y?(n.value=getComputedStyle(y),y.addEventListener("animationstart",p),y.addEventListener("animationcancel",d),y.addEventListener("animationend",d)):(c("ANIMATION_END"),a!==void 0&&s?.clearTimeout(a),E?.removeEventListener("animationstart",p),E?.removeEventListener("animationcancel",d),E?.removeEventListener("animationend",d))},{immediate:!0}),m=ye(i,()=>{const y=Zs(t.value);o.value=i.value==="mounted"?y:"none"});return Ht(()=>{h(),m()}),{isPresent:F(()=>["mounted","unmountSuspended"].includes(i.value))}}function Zs(e){return e&&getComputedStyle(e).animationName||"none"}var ME=L({name:"Presence",props:{present:{type:Boolean,required:!0},forceMount:{type:Boolean}},slots:{},setup(e,{slots:t,expose:n}){const{present:o,forceMount:r}=mt(e),u=R(),{isPresent:a}=Cj(o,u);n({present:a});let s=t.default({present:a.value});s=rp(s||[]);const i=We();if(s&&s?.length>1){const c=i?.parent?.type.name?`<${i.parent.type.name} />`:"component";throw new Error([`Detected an invalid children for \`${c}\` for \`Presence\` component.`,"","Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.","You can apply a few solutions:",["Provide a single child element so that `presence` directive attach correctly.","Ensure the first child is an actual element instead of a raw text node or comment node."].map(l=>` - ${l}`).join(` +`)].join(` +`))}return()=>r.value||o.value||a.value?qe(t.default({present:a.value})[0],{ref:c=>{const l=Ol(c);return typeof l?.hasAttribute>"u"||(l?.hasAttribute("data-reka-popper-content-wrapper")?u.value=l.firstElementChild:u.value=l),l}}):null}});const xj=L({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{if(!n.default)return null;const o=rp(n.default()),r=o.findIndex(i=>i.type!==bt);if(r===-1)return o;const u=o[r];delete u.props?.ref;const a=u.props?j(t,u.props):t,s=An({...u,props:{}},a);return o.length===1?s:(o[r]=s,o)}}}),wj=["area","img","input"],Ju=L({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:t,slots:n}){const o=e.asChild?"template":e.as;return typeof o=="string"&&wj.includes(o)?()=>qe(o,t):o!=="template"?()=>qe(e.as,t,{default:n.default}):()=>qe(xj,t,{default:n.default})}}),[Uo,Dj]=np("DialogRoot");var Aj=L({inheritAttrs:!1,__name:"DialogRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1,default:!1},modal:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(e,{emit:t}){const n=e,r=fj(n,"open",t,{defaultValue:n.defaultOpen,passive:n.open===void 0}),u=R(),a=R(),{modal:s}=mt(n);return Dj({open:r,modal:s,openModal:()=>{r.value=!0},onOpenChange:i=>{r.value=i},onOpenToggle:()=>{r.value=!r.value},contentId:"",titleId:"",descriptionId:"",triggerElement:u,contentElement:a}),(i,c)=>P(i.$slots,"default",{open:f(r),close:()=>r.value=!1})}}),Bj=Aj;const _j="dismissableLayer.pointerDownOutside",kj="dismissableLayer.focusOutside";function OE(e,t){if(!(t instanceof Element))return!1;const n=t.closest("[data-dismissable-layer]"),o=e.dataset.dismissableLayer===""?e:e.querySelector("[data-dismissable-layer]"),r=Array.from(e.ownerDocument.querySelectorAll("[data-dismissable-layer]"));return!!(n&&(o===n||r.indexOf(o){});return Ze(a=>{if(!gr||!ke(n))return;const s=async c=>{const l=c.target;if(!(!t?.value||!l)){if(OE(t.value,l)){r.value=!1;return}if(c.target&&!r.value){let p=function(){TE(_j,e,d)};const d={originalEvent:c};c.pointerType==="touch"?(o.removeEventListener("click",u.value),u.value=p,o.addEventListener("click",u.value,{once:!0})):p()}else o.removeEventListener("click",u.value);r.value=!1}},i=window.setTimeout(()=>{o.addEventListener("pointerdown",s)},0);a(()=>{window.clearTimeout(i),o.removeEventListener("pointerdown",s),o.removeEventListener("click",u.value)})}),{onPointerDownCapture:()=>{ke(n)&&(r.value=!0)}}}function Tj(e,t,n=!0){const o=t?.value?.ownerDocument??globalThis?.document,r=R(!1);return Ze(u=>{if(!gr||!ke(n))return;const a=async s=>{if(!t?.value)return;await Oe(),await Oe();const i=s.target;!t.value||!i||OE(t.value,i)||s.target&&!r.value&&TE(kj,e,{originalEvent:s})};o.addEventListener("focusin",a),u(()=>o.removeEventListener("focusin",a))}),{onFocusCapture:()=>{ke(n)&&(r.value=!0)},onBlurCapture:()=>{ke(n)&&(r.value=!1)}}}const Sn=_t({layersRoot:new Set,layersWithOutsidePointerEventsDisabled:new Set,originalBodyPointerEvents:void 0,branches:new Set});var Fj=L({__name:"DismissableLayer",props:{disableOutsidePointerEvents:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","dismiss"],setup(e,{emit:t}){const n=e,o=t,{forwardRef:r,currentElement:u}=Jn(),a=F(()=>u.value?.ownerDocument??globalThis.document),s=F(()=>Sn.layersRoot),i=F(()=>u.value?Array.from(s.value).indexOf(u.value):-1),c=F(()=>Sn.layersWithOutsidePointerEventsDisabled.size>0),l=F(()=>{const h=Array.from(s.value),[m]=[...Sn.layersWithOutsidePointerEventsDisabled].slice(-1),g=h.indexOf(m);return i.value>=g}),d=Sj(async h=>{const m=[...Sn.branches].some(g=>g?.contains(h.target));!l.value||m||(o("pointerDownOutside",h),o("interactOutside",h),await Oe(),h.defaultPrevented||o("dismiss"))},u),p=Tj(h=>{[...Sn.branches].some(g=>g?.contains(h.target))||(o("focusOutside",h),o("interactOutside",h),h.defaultPrevented||o("dismiss"))},u);return cj("Escape",h=>{i.value===s.value.size-1&&(o("escapeKeyDown",h),h.defaultPrevented||o("dismiss"))}),Ze(h=>{u.value&&(n.disableOutsidePointerEvents&&(Sn.layersWithOutsidePointerEventsDisabled.size===0&&(Sn.originalBodyPointerEvents=a.value.body.style.pointerEvents,a.value.body.style.pointerEvents="none"),Sn.layersWithOutsidePointerEventsDisabled.add(u.value)),s.value.add(u.value),h(()=>{n.disableOutsidePointerEvents&&Sn.layersWithOutsidePointerEventsDisabled.size===1&&!XN(Sn.originalBodyPointerEvents)&&(a.value.body.style.pointerEvents=Sn.originalBodyPointerEvents)}))}),Ze(h=>{h(()=>{u.value&&(s.value.delete(u.value),Sn.layersWithOutsidePointerEventsDisabled.delete(u.value))})}),(h,m)=>(D(),k(f(Ju),{ref:f(r),"as-child":h.asChild,as:h.as,"data-dismissable-layer":"",style:mn({pointerEvents:c.value?l.value?"auto":"none":void 0}),onFocusCapture:f(p).onFocusCapture,onBlurCapture:f(p).onBlurCapture,onPointerdownCapture:f(d).onPointerDownCapture},{default:A(()=>[P(h.$slots,"default")]),_:3},8,["as-child","as","style","onFocusCapture","onBlurCapture","onPointerdownCapture"]))}}),Pj=Fj;const Mj=QN(()=>R([]));function Oj(){const e=Mj();return{add(t){const n=e.value[0];t!==n&&n?.pause(),e.value=rg(e.value,t),e.value.unshift(t)},remove(t){e.value=rg(e.value,t),e.value[0]?.resume()}}}function rg(e,t){const n=[...e],o=n.indexOf(t);return o!==-1&&n.splice(o,1),n}const Oc="focusScope.autoFocusOnMount",Ic="focusScope.autoFocusOnUnmount",ug={bubbles:!1,cancelable:!0};function Ij(e,{select:t=!1}={}){const n=sr();for(const o of e)if(Jo(o,{select:t}),sr()!==n)return!0}function Rj(e){const t=IE(e),n=ag(t,e),o=ag(t.reverse(),e);return[n,o]}function IE(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function ag(e,t){for(const n of e)if(!Lj(n,{upTo:t}))return n}function Lj(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function qj(e){return e instanceof HTMLInputElement&&"select"in e}function Jo(e,{select:t=!1}={}){if(e&&e.focus){const n=sr();e.focus({preventScroll:!0}),e!==n&&qj(e)&&t&&e.select()}}var $j=L({__name:"FocusScope",props:{loop:{type:Boolean,required:!1,default:!1},trapped:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["mountAutoFocus","unmountAutoFocus"],setup(e,{emit:t}){const n=e,o=t,{currentRef:r,currentElement:u}=Jn(),a=R(null),s=Oj(),i=_t({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});Ze(l=>{if(!gr)return;const d=u.value;if(!n.trapped)return;function p(y){if(i.paused||!d)return;const E=y.target;d.contains(E)?a.value=E:Jo(a.value,{select:!0})}function h(y){if(i.paused||!d)return;const E=y.relatedTarget;E!==null&&(d.contains(E)||Jo(a.value,{select:!0}))}function m(y){const E=a.value;if(E===null||!y.some(C=>C.removedNodes.length>0))return;d.contains(E)||Jo(d)}document.addEventListener("focusin",p),document.addEventListener("focusout",h);const g=new MutationObserver(m);d&&g.observe(d,{childList:!0,subtree:!0}),l(()=>{document.removeEventListener("focusin",p),document.removeEventListener("focusout",h),g.disconnect()})}),Ze(async l=>{const d=u.value;if(await Oe(),!d)return;s.add(i);const p=sr();if(!d.contains(p)){const m=new CustomEvent(Oc,ug);d.addEventListener(Oc,g=>o("mountAutoFocus",g)),d.dispatchEvent(m),m.defaultPrevented||(Ij(IE(d),{select:!0}),sr()===p&&Jo(d))}l(()=>{d.removeEventListener(Oc,y=>o("mountAutoFocus",y));const m=new CustomEvent(Ic,ug),g=y=>{o("unmountAutoFocus",y)};d.addEventListener(Ic,g),d.dispatchEvent(m),setTimeout(()=>{m.defaultPrevented||Jo(p??document.body,{select:!0}),d.removeEventListener(Ic,g),s.remove(i)},0)})});function c(l){if(!n.loop&&!n.trapped||i.paused)return;const d=l.key==="Tab"&&!l.altKey&&!l.ctrlKey&&!l.metaKey,p=sr();if(d&&p){const h=l.currentTarget,[m,g]=Rj(h);m&&g?!l.shiftKey&&p===g?(l.preventDefault(),n.loop&&Jo(m,{select:!0})):l.shiftKey&&p===m&&(l.preventDefault(),n.loop&&Jo(g,{select:!0})):p===h&&l.preventDefault()}}return(l,d)=>(D(),k(f(Ju),{ref_key:"currentRef",ref:r,tabindex:"-1","as-child":l.asChild,as:l.as,onKeydown:c},{default:A(()=>[P(l.$slots,"default")]),_:3},8,["as-child","as"]))}}),Nj=$j;function jj(e){return e?"open":"closed"}var Vj=L({__name:"DialogContentImpl",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=Uo(),{forwardRef:u,currentElement:a}=Jn();return r.titleId||=md(void 0,"reka-dialog-title"),r.descriptionId||=md(void 0,"reka-dialog-description"),$e(()=>{r.contentElement=a,sr()!==document.body&&(r.triggerElement.value=sr())}),(s,i)=>(D(),k(f(Nj),{"as-child":"",loop:"",trapped:n.trapFocus,onMountAutoFocus:i[5]||(i[5]=c=>o("openAutoFocus",c)),onUnmountAutoFocus:i[6]||(i[6]=c=>o("closeAutoFocus",c))},{default:A(()=>[q(f(Pj),j({id:f(r).contentId,ref:f(u),as:s.as,"as-child":s.asChild,"disable-outside-pointer-events":s.disableOutsidePointerEvents,role:"dialog","aria-describedby":f(r).descriptionId,"aria-labelledby":f(r).titleId,"data-state":f(jj)(f(r).open.value)},s.$attrs,{onDismiss:i[0]||(i[0]=c=>f(r).onOpenChange(!1)),onEscapeKeyDown:i[1]||(i[1]=c=>o("escapeKeyDown",c)),onFocusOutside:i[2]||(i[2]=c=>o("focusOutside",c)),onInteractOutside:i[3]||(i[3]=c=>o("interactOutside",c)),onPointerDownOutside:i[4]||(i[4]=c=>o("pointerDownOutside",c))}),{default:A(()=>[P(s.$slots,"default")]),_:3},16,["id","as","as-child","disable-outside-pointer-events","aria-describedby","aria-labelledby","data-state"])]),_:3},8,["trapped"]))}}),RE=Vj,zj=L({__name:"DialogContentModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=Uo(),u=Il(o),{forwardRef:a,currentElement:s}=Jn();return bj(s),(i,c)=>(D(),k(RE,j({...n,...f(u)},{ref:f(a),"trap-focus":f(r).open.value,"disable-outside-pointer-events":!0,onCloseAutoFocus:c[0]||(c[0]=l=>{l.defaultPrevented||(l.preventDefault(),f(r).triggerElement.value?.focus())}),onPointerDownOutside:c[1]||(c[1]=l=>{const d=l.detail.originalEvent,p=d.button===0&&d.ctrlKey===!0;(d.button===2||p)&&l.preventDefault()}),onFocusOutside:c[2]||(c[2]=l=>{l.preventDefault()})}),{default:A(()=>[P(i.$slots,"default")]),_:3},16,["trap-focus"]))}}),Uj=zj,Hj=L({__name:"DialogContentNonModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,r=Il(t);Jn();const u=Uo(),a=R(!1),s=R(!1);return(i,c)=>(D(),k(RE,j({...n,...f(r)},{"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:c[0]||(c[0]=l=>{l.defaultPrevented||(a.value||f(u).triggerElement.value?.focus(),l.preventDefault()),a.value=!1,s.value=!1}),onInteractOutside:c[1]||(c[1]=l=>{l.defaultPrevented||(a.value=!0,l.detail.originalEvent.type==="pointerdown"&&(s.value=!0));const d=l.target;f(u).triggerElement.value?.contains(d)&&l.preventDefault(),l.detail.originalEvent.type==="focusin"&&s.value&&l.preventDefault()})}),{default:A(()=>[P(i.$slots,"default")]),_:3},16))}}),Kj=Hj,Wj=L({__name:"DialogContent",props:{forceMount:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:t}){const n=e,o=t,r=Uo(),u=Il(o),{forwardRef:a}=Jn();return(s,i)=>(D(),k(f(ME),{present:s.forceMount||f(r).open.value},{default:A(()=>[f(r).modal.value?(D(),k(Uj,j({key:0,ref:f(a)},{...n,...f(u),...s.$attrs}),{default:A(()=>[P(s.$slots,"default")]),_:3},16)):(D(),k(Kj,j({key:1,ref:f(a)},{...n,...f(u),...s.$attrs}),{default:A(()=>[P(s.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),Gj=Wj,Yj=L({__name:"DialogDescription",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"p"}},setup(e){const t=e;Jn();const n=Uo();return(o,r)=>(D(),k(f(Ju),j(t,{id:f(n).descriptionId}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["id"]))}}),Rc=Yj,Zj=L({__name:"DialogOverlayImpl",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=Uo();return mj(!0),Jn(),(n,o)=>(D(),k(f(Ju),{as:n.as,"as-child":n.asChild,"data-state":f(t).open.value?"open":"closed",style:{"pointer-events":"auto"}},{default:A(()=>[P(n.$slots,"default")]),_:3},8,["as","as-child","data-state"]))}}),Xj=Zj,Jj=L({__name:"DialogOverlay",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=Uo(),{forwardRef:n}=Jn();return(o,r)=>f(t)?.modal.value?(D(),k(f(ME),{key:0,present:o.forceMount||f(t).open.value},{default:A(()=>[q(Xj,j(o.$attrs,{ref:f(n),as:o.as,"as-child":o.asChild}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["as","as-child"])]),_:3},8,["present"])):Y("v-if",!0)}}),Qj=Jj,eV=L({__name:"Teleport",props:{to:{type:null,required:!1,default:"body"},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=ij();return(n,o)=>f(t)||n.forceMount?(D(),k(os,{key:0,to:n.to,disabled:n.disabled,defer:n.defer},[P(n.$slots,"default")],8,["to","disabled","defer"])):Y("v-if",!0)}}),tV=eV,nV=L({__name:"DialogPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(D(),k(f(tV),me(xe(t)),{default:A(()=>[P(n.$slots,"default")]),_:3},16))}}),oV=nV,rV=L({__name:"DialogTitle",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"h2"}},setup(e){const t=e,n=Uo();return Jn(),(o,r)=>(D(),k(f(Ju),j(t,{id:f(n).titleId}),{default:A(()=>[P(o.$slots,"default")]),_:3},16,["id"]))}}),Lc=rV,uV=L({__name:"DialogTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=Uo(),{forwardRef:o,currentElement:r}=Jn();return n.contentId||=md(void 0,"reka-dialog-content"),$e(()=>{n.triggerElement.value=r.value}),(u,a)=>(D(),k(f(Ju),j(t,{ref:f(o),type:u.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":f(n).open.value||!1,"aria-controls":f(n).open.value?f(n).contentId:void 0,"data-state":f(n).open.value?"open":"closed",onClick:f(n).onOpenToggle}),{default:A(()=>[P(u.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","onClick"]))}}),aV=uV;(function(){var e;try{if(typeof document<"u"){var t=document.createElement("style");t.nonce=(e=document.head.querySelector("meta[property=csp-nonce]"))==null?void 0:e.content,t.appendChild(document.createTextNode('[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32,.72,0,1);animation-duration:.5s;animation-timing-function:cubic-bezier(.32,.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform, 100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform, 100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform, 100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform, 100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top],[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height, 0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left],[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height, 0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(.32,.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32,.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true]):after{content:"";position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]:after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]:after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]:after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]:after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not([data-state=closed]){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:hover,[data-vaul-handle]:active{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover: hover) and (pointer: fine){[data-vaul-drawer]{-webkit-user-select:none;user-select:none}}@media (pointer: fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{0%{transform:translate3d(0,var(--initial-transform, 100%),0)}to{transform:translateZ(0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform, 100%),0)}}@keyframes slideFromTop{0%{transform:translate3d(0,calc(var(--initial-transform, 100%) * -1),0)}to{transform:translateZ(0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform, 100%) * -1),0)}}@keyframes slideFromLeft{0%{transform:translate3d(calc(var(--initial-transform, 100%) * -1),0,0)}to{transform:translateZ(0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform, 100%) * -1),0,0)}}@keyframes slideFromRight{0%{transform:translate3d(var(--initial-transform, 100%),0,0)}to{transform:translateZ(0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform, 100%),0,0)}}')),document.head.appendChild(t)}}catch(n){console.error("vite-plugin-css-injected-by-js",n)}})();const sV=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const iV=e=>typeof e<"u";function lV(e){return JSON.parse(JSON.stringify(e))}function sg(e,t,n,o={}){var r,u,a;const{clone:s=!1,passive:i=!1,eventName:c,deep:l=!1,defaultValue:d,shouldEmit:p}=o,h=We(),m=n||h?.emit||((r=h?.$emit)==null?void 0:r.bind(h))||((a=(u=h?.proxy)==null?void 0:u.$emit)==null?void 0:a.bind(h?.proxy));let g=c;t||(t="modelValue"),g=g||`update:${t.toString()}`;const y=v=>s?typeof s=="function"?s(v):lV(v):v,E=()=>iV(e[t])?y(e[t]):d,b=v=>{p?p(v)&&m(g,v):m(g,v)};if(i){const v=E(),C=R(v);let w=!1;return ye(()=>e[t],B=>{w||(w=!0,C.value=y(B),Oe(()=>w=!1))}),ye(C,B=>{!w&&(B!==e[t]||l)&&b(B)},{deep:l}),C}else return F({get(){return E()},set(v){b(v)}})}const[Es,cV]=np("DrawerRoot"),LE=new WeakMap;function $t(e,t,n=!1){if(!e||!(e instanceof HTMLElement)||!t)return;const o={};Object.entries(t).forEach(([r,u])=>{if(r.startsWith("--")){e.style.setProperty(r,u);return}o[r]=e.style[r],e.style[r]=u}),!n&&LE.set(e,o)}function dV(e,t){if(!e||!(e instanceof HTMLElement))return;const n=LE.get(e);n&&Object.entries(n).forEach(([o,r])=>{e.style[o]=r})}function Xs(e,t){const n=window.getComputedStyle(e),o=n.transform||n.webkitTransform||n.mozTransform;let r=o.match(/^matrix3d\((.+)\)$/);return r?Number.parseFloat(r[1].split(", ")[St(t)?13:12]):(r=o.match(/^matrix\((.+)\)$/),r?Number.parseFloat(r[1].split(", ")[St(t)?5:4]):null)}function fV(e){return 8*(Math.log(e+1)-2)}function St(e){switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}}function qc(e,t){if(!e)return()=>{};const n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}function pV(...e){return(...t)=>{for(const n of e)typeof n=="function"&&n(...t)}}const vt={DURATION:.5,EASE:[.32,.72,0,1]},qE=.4,hV=.25,mV=100,$E=8,Js=16,NE=26,ig="vaul-dragging";function gV({activeSnapPoint:e,snapPoints:t,drawerRef:n,overlayRef:o,fadeFromIndex:r,onSnapPointChange:u,direction:a}){const s=R(typeof window<"u"?{innerWidth:window.innerWidth,innerHeight:window.innerHeight}:void 0);function i(){s.value={innerWidth:window.innerWidth,innerHeight:window.innerHeight}}$e(()=>{typeof window<"u"&&window.addEventListener("resize",i)}),mo(()=>{typeof window<"u"&&window.removeEventListener("resize",i)});const c=F(()=>(t.value&&e.value===t.value[t.value.length-1])??null),l=F(()=>t.value&&t.value.length>0&&(r?.value||r?.value===0)&&!Number.isNaN(r?.value)&&t.value[r?.value??-1]===e.value||!t.value),d=F(()=>{var b;return((b=t.value)==null?void 0:b.findIndex(v=>v===e.value))??null}),p=F(()=>{var b;return((b=t.value)==null?void 0:b.map(v=>{const C=typeof v=="string";let w=0;if(C&&(w=Number.parseInt(v,10)),St(a.value)){const x=C?w:s.value?v*s.value.innerHeight:0;return s.value?a.value==="bottom"?s.value.innerHeight-x:-s.value.innerHeight+x:x}const B=C?w:s.value?v*s.value.innerWidth:0;return s.value?a.value==="right"?s.value.innerWidth-B:-s.value.innerWidth+B:B}))??[]}),h=F(()=>{var b;return d.value!==null?(b=p.value)==null?void 0:b[d.value]:null}),m=b=>{var v,C,w,B;const x=((v=p.value)==null?void 0:v.findIndex(_=>_===b))??null;Oe(()=>{var _;u(x,p.value),$t((_=n.value)==null?void 0:_.$el,{transition:`transform ${vt.DURATION}s cubic-bezier(${vt.EASE.join(",")})`,transform:St(a.value)?`translate3d(0, ${b}px, 0)`:`translate3d(${b}px, 0, 0)`})}),p.value&&x!==p.value.length-1&&x!==r?.value?$t((C=o.value)==null?void 0:C.$el,{transition:`opacity ${vt.DURATION}s cubic-bezier(${vt.EASE.join(",")})`,opacity:"0"}):$t((w=o.value)==null?void 0:w.$el,{transition:`opacity ${vt.DURATION}s cubic-bezier(${vt.EASE.join(",")})`,opacity:"1"}),e.value=x!==null?((B=t.value)==null?void 0:B[x])??null:null};ye([e,p,t],()=>{var b;if(e.value){const v=((b=t.value)==null?void 0:b.findIndex(C=>C===e.value))??-1;p.value&&v!==-1&&typeof p.value[v]=="number"&&m(p.value[v])}},{immediate:!0});function g({draggedDistance:b,closeDrawer:v,velocity:C,dismissible:w}){var B,x,_;if(r.value===void 0)return;const S=a.value==="bottom"||a.value==="right"?(h.value??0)-b:(h.value??0)+b,O=d.value===r.value-1,H=d.value===0,N=b>0;if(O&&$t((B=o.value)==null?void 0:B.$el,{transition:`opacity ${vt.DURATION}s cubic-bezier(${vt.EASE.join(",")})`}),C>2&&!N){w?v():m(p.value[0]);return}if(C>2&&N&&p&&t.value){m(p.value[t.value.length-1]);return}const J=(x=p.value)==null?void 0:x.reduce(($,I)=>typeof $!="number"||typeof I!="number"?$:Math.abs(I-S)qE&&Math.abs(b)0&&c){m(p.value[(((_=t.value)==null?void 0:_.length)??0)-1]);return}if(H&&$<0&&w&&v(),d.value===null)return;m(p.value[d.value+$]);return}m(J)}function y({draggedDistance:b}){var v;if(h.value===null)return;const C=a.value==="bottom"||a.value==="right"?h.value-b:h.value+b;(a.value==="bottom"||a.value==="right")&&Cp.value[p.value.length-1]||$t((v=n.value)==null?void 0:v.$el,{transform:St(a.value)?`translate3d(0, ${C}px, 0)`:`translate3d(${C}px, 0, 0)`})}function E(b,v){if(!t.value||typeof d.value!="number"||!p.value||r.value===void 0)return null;const C=d.value===r.value-1;if(d.value>=r.value&&v)return 0;if(C&&!v)return 1;if(!l.value&&!C)return null;const w=C?d.value+1:d.value-1,B=C?p.value[w]-p.value[w-1]:p.value[w+1]-p.value[w],x=b/Math.abs(B);return C?1-x:x}return{isLastSnapPoint:c,shouldFade:l,getPercentageDragged:E,activeSnapPointIndex:d,onRelease:g,onDrag:y,snapPointsOffset:p}}function lg(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}let ca=null;function vV(e){const{isOpen:t,modal:n,nested:o,hasBeenOpened:r,preventScrollRestoration:u,noBodyStyles:a}=e,s=R(typeof window<"u"?window.location.href:""),i=R(0);function c(){if(lg()&&ca===null&&t.value&&!a.value){ca={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left,height:document.body.style.height};const{scrollX:d,innerHeight:p}=window;document.body.style.setProperty("position","fixed","important"),Object.assign(document.body.style,{top:`${-i.value}px`,left:`${-d}px`,right:"0px",height:"auto"}),setTimeout(()=>{requestAnimationFrame(()=>{const h=p-window.innerHeight;h&&i.value>=p&&(document.body.style.top=`-${i.value+h}px`)})},300)}}function l(){if(lg()&&ca!==null&&!a.value){const d=-Number.parseInt(document.body.style.top,10),p=-Number.parseInt(document.body.style.left,10);Object.assign(document.body.style,ca),window.requestAnimationFrame(()=>{if(u.value&&s.value!==window.location.href){s.value=window.location.href;return}window.scrollTo(p,d)}),ca=null}}return $e(()=>{function d(){i.value=window.scrollY}d(),window.addEventListener("scroll",d),Ht(()=>{window.removeEventListener("scroll",d)})}),ye([t,r,s],()=>{o.value||!r.value||(t.value?(window.matchMedia("(display-mode: standalone)").matches||c(),n.value||setTimeout(()=>{l()},500)):l())}),{restorePositionSetting:l}}function yV(e,t){return e&&e.value?e:t}function bV(e){const{emitDrag:t,emitRelease:n,emitClose:o,emitOpenChange:r,open:u,dismissible:a,nested:s,modal:i,shouldScaleBackground:c,setBackgroundColorOnScale:l,scrollLockTimeout:d,closeThreshold:p,activeSnapPoint:h,fadeFromIndex:m,direction:g,noBodyStyles:y,handleOnly:E,preventScrollRestoration:b}=e,v=R(u.value??!1),C=R(!1),w=R(!1),B=R(!1),x=R(null),_=R(null),S=R(null),O=R(null),H=R(null),N=R(!1),J=R(null),G=R(0),$=R(!1),I=R(null),W=F(()=>{var z;return((z=I.value)==null?void 0:z.$el.getBoundingClientRect().height)||0}),K=yV(e.snapPoints,R(void 0)),de=F(()=>{var z;return K&&(((z=K.value)==null?void 0:z.length)??0)>0}),le=R(null),{activeSnapPointIndex:ut,onRelease:Ve,snapPointsOffset:ht,onDrag:Dt,shouldFade:Ne,getPercentageDragged:ze}=gV({snapPoints:K,activeSnapPoint:h,drawerRef:I,fadeFromIndex:m,overlayRef:x,onSnapPointChange:Z,direction:g});function Z(z,ue){K.value&&z===ue.length-1&&(_.value=new Date)}vV({isOpen:v,modal:i,nested:s,hasBeenOpened:C,noBodyStyles:y,preventScrollRestoration:b});function ce(){return(window.innerWidth-NE)/window.innerWidth}function se(z,ue){var oe;if(!z)return!1;let ee=z;const Q=(oe=window.getSelection())==null?void 0:oe.toString(),fe=I.value?Xs(I.value.$el,g.value):null,ie=new Date;if(ee.hasAttribute("data-vaul-no-drag")||ee.closest("[data-vaul-no-drag]"))return!1;if(g.value==="right"||g.value==="left")return!0;if(_.value&&ie.getTime()-_.value.getTime()<500)return!1;if(fe!==null&&(g.value==="bottom"?fe>0:fe<0))return!0;if(Q&&Q.length>0)return!1;if(H.value&&ie.getTime()-H.value.getTime()ee.clientHeight){if(ee.scrollTop!==0)return H.value=new Date,!1;if(ee.getAttribute("role")==="dialog")return!0}ee=ee.parentNode}return!0}function Ee(z){!a.value&&!K.value||I.value&&!I.value.$el.contains(z.target)||(w.value=!0,S.value=new Date,z.target.setPointerCapture(z.pointerId),G.value=St(g.value)?z.clientY:z.clientX)}function Te(z){var ue,oe,ee,Q,fe,ie;if(I.value&&w.value){const ge=g.value==="bottom"||g.value==="right"?1:-1,Be=(G.value-(St(g.value)?z.clientY:z.clientX))*ge,Le=Be>0,et=K.value&&!a.value&&!Le;if(et&&ut.value===0)return;const tt=Math.abs(Be),gt=document.querySelector("[data-vaul-drawer-wrapper]")||document.querySelector("[vaul-drawer-wrapper]");let at=tt/W.value;const cn=ze(tt,Le);if(cn!==null&&(at=cn),et&&at>=1||!N.value&&!se(z.target,Le))return;if((ue=I?.value)==null||ue.$el.classList.add(ig),N.value=!0,$t((oe=I.value)==null?void 0:oe.$el,{transition:"none"}),$t((ee=x.value)==null?void 0:ee.$el,{transition:"none"}),K.value&&Dt({draggedDistance:Be}),Le&&!K.value){const yn=fV(Be),vr=Math.min(yn*-1,0)*ge;$t((Q=I.value)==null?void 0:Q.$el,{transform:St(g.value)?`translate3d(0, ${vr}px, 0)`:`translate3d(${vr}px, 0, 0)`});return}const Qt=1-at;if((Ne.value||m.value&&ut.value===m.value-1)&&(t(at),$t((fe=x.value)==null?void 0:fe.$el,{opacity:`${Qt}`,transition:"none"},!0)),gt&&x.value&&c.value){const yn=Math.min(ce()+at*(1-ce()),1),vr=8-at*8,Kt=Math.max(0,14-at*14);$t(gt,{borderRadius:`${vr}px`,transform:St(g.value)?`scale(${yn}) translate3d(0, ${Kt}px, 0)`:`scale(${yn}) translate3d(${Kt}px, 0, 0)`,transition:"none"},!0)}if(!K.value){const yn=tt*ge;$t((ie=I.value)==null?void 0:ie.$el,{transform:St(g.value)?`translate3d(0, ${yn}px, 0)`:`translate3d(${yn}px, 0, 0)`})}}}function Ge(){var z;if(!I.value)return;const ue=document.querySelector("[data-vaul-drawer-wrapper]")||document.querySelector("[vaul-drawer-wrapper]"),oe=Xs(I.value.$el,g.value);$t(I.value.$el,{transform:"translate3d(0, 0, 0)",transition:`transform ${vt.DURATION}s cubic-bezier(${vt.EASE.join(",")})`}),$t((z=x.value)==null?void 0:z.$el,{transition:`opacity ${vt.DURATION}s cubic-bezier(${vt.EASE.join(",")})`,opacity:"1"}),c.value&&oe&&oe>0&&v.value&&$t(ue,{borderRadius:`${$E}px`,overflow:"hidden",...St(g.value)?{transform:`scale(${ce()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,transformOrigin:"top"}:{transform:`scale(${ce()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,transformOrigin:"left"},transitionProperty:"transform, border-radius",transitionDuration:`${vt.DURATION}s`,transitionTimingFunction:`cubic-bezier(${vt.EASE.join(",")})`},!0)}function T(z){I.value&&(o(),z||(v.value=!1),window.setTimeout(()=>{K.value&&(h.value=K.value[0])},vt.DURATION*1e3))}Ze(()=>{if(!v.value&&c.value&&sV){const z=setTimeout(()=>{dV(document.body)},200);return()=>clearTimeout(z)}}),ye(u,()=>{v.value=u.value,u.value||T()});function M(z){if(!w.value||!I.value)return;I.value.$el.classList.remove(ig),N.value=!1,w.value=!1,O.value=new Date;const ue=Xs(I.value.$el,g.value);if(!se(z.target,!1)||!ue||Number.isNaN(ue)||S.value===null)return;const oe=O.value.getTime()-S.value.getTime(),ee=G.value-(St(g.value)?z.clientY:z.clientX),Q=Math.abs(ee)/oe;if(Q>.05&&(B.value=!0,window.setTimeout(()=>{B.value=!1},200)),K.value){const ie=g.value==="bottom"||g.value==="right"?1:-1;Ve({draggedDistance:ee*ie,closeDrawer:T,velocity:Q,dismissible:a.value}),n(!0);return}if(g.value==="bottom"||g.value==="right"?ee>0:ee<0){Ge(),n(!0);return}if(Q>qE){T(),n(!1);return}const fe=Math.min(I.value.$el.getBoundingClientRect().height??0,window.innerHeight);if(ue>=fe*p.value){T(),n(!1);return}n(!0),Ge()}ye(v,z=>{z&&(_.value=new Date),r(z)},{immediate:!0});function V(z){var ue,oe;const ee=z?(window.innerWidth-Js)/window.innerWidth:1,Q=z?-16:0;J.value&&window.clearTimeout(J.value),$t((ue=I.value)==null?void 0:ue.$el,{transition:`transform ${vt.DURATION}s cubic-bezier(${vt.EASE.join(",")})`,transform:`scale(${ee}) translate3d(0, ${Q}px, 0)`}),!z&&(oe=I.value)!=null&&oe.$el&&(J.value=window.setTimeout(()=>{var fe,ie;const ge=Xs((fe=I.value)==null?void 0:fe.$el,g.value);$t((ie=I.value)==null?void 0:ie.$el,{transition:"none",transform:St(g.value)?`translate3d(0, ${ge}px, 0)`:`translate3d(${ge}px, 0, 0)`})},500))}function te(z){var ue;if(z<0)return;const oe=St(g.value)?window.innerHeight:window.innerWidth,ee=(oe-Js)/oe,Q=ee+z*(1-ee),fe=-16+z*Js;$t((ue=I.value)==null?void 0:ue.$el,{transform:St(g.value)?`scale(${Q}) translate3d(0, ${fe}px, 0)`:`scale(${Q}) translate3d(${fe}px, 0, 0)`,transition:"none"})}function X(z){var ue;const oe=St(g.value)?window.innerHeight:window.innerWidth,ee=z?(oe-Js)/oe:1,Q=z?-16:0;z&&$t((ue=I.value)==null?void 0:ue.$el,{transition:`transform ${vt.DURATION}s cubic-bezier(${vt.EASE.join(",")})`,transform:St(g.value)?`scale(${ee}) translate3d(0, ${Q}px, 0)`:`scale(${ee}) translate3d(${Q}px, 0, 0)`})}return{open:u,isOpen:v,modal:i,keyboardIsOpen:$,hasBeenOpened:C,drawerRef:I,drawerHeightRef:W,overlayRef:x,handleRef:le,isDragging:w,dragStartTime:S,isAllowedToDrag:N,snapPoints:K,activeSnapPoint:h,hasSnapPoints:de,pointerStart:G,dismissible:a,snapPointsOffset:ht,direction:g,shouldFade:Ne,fadeFromIndex:m,shouldScaleBackground:c,setBackgroundColorOnScale:l,onPress:Ee,onDrag:Te,onRelease:M,closeDrawer:T,onNestedDrag:te,onNestedRelease:X,onNestedOpenChange:V,emitClose:o,emitDrag:t,emitRelease:n,emitOpenChange:r,nested:s,handleOnly:E,noBodyStyles:y}}const jE=L({__name:"DrawerRoot",props:{activeSnapPoint:{default:void 0},closeThreshold:{default:hV},shouldScaleBackground:{type:Boolean,default:void 0},setBackgroundColorOnScale:{type:Boolean,default:!0},scrollLockTimeout:{default:mV},fixed:{type:Boolean,default:void 0},dismissible:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:void 0},nested:{type:Boolean,default:!1},direction:{default:"bottom"},noBodyStyles:{type:Boolean},handleOnly:{type:Boolean,default:!1},preventScrollRestoration:{type:Boolean},snapPoints:{default:void 0},fadeFromIndex:{default:void 0}},emits:["drag","release","close","update:open","update:activeSnapPoint","animationEnd"],setup(e,{expose:t,emit:n}){const o=e,r=n;qt();const u=F(()=>o.fadeFromIndex??(o.snapPoints&&o.snapPoints.length-1)),a=sg(o,"open",r,{defaultValue:o.defaultOpen,passive:o.open===void 0}),s=sg(o,"activeSnapPoint",r,{passive:o.activeSnapPoint===void 0}),i={emitDrag:m=>r("drag",m),emitRelease:m=>r("release",m),emitClose:()=>r("close"),emitOpenChange:m=>{r("update:open",m),setTimeout(()=>{r("animationEnd",m)},vt.DURATION*1e3)}},{closeDrawer:c,hasBeenOpened:l,modal:d,isOpen:p}=cV(bV({...i,...mt(o),activeSnapPoint:s,fadeFromIndex:u,open:a}));function h(m){if(a.value!==void 0){i.emitOpenChange(m);return}p.value=m,m?l.value=!0:c()}return t({open:p}),(m,g)=>(D(),k(f(Bj),{open:f(p),modal:f(d),"onUpdate:open":h},{default:A(()=>[P(m.$slots,"default",{open:f(p)})]),_:3},8,["open","modal"]))}}),EV=L({__name:"DrawerRootNested",props:{activeSnapPoint:{},closeThreshold:{},shouldScaleBackground:{type:Boolean},setBackgroundColorOnScale:{type:Boolean},scrollLockTimeout:{},fixed:{type:Boolean},dismissible:{type:Boolean},modal:{type:Boolean},open:{type:Boolean},defaultOpen:{type:Boolean},nested:{type:Boolean},direction:{},noBodyStyles:{type:Boolean},handleOnly:{type:Boolean},preventScrollRestoration:{type:Boolean},snapPoints:{},fadeFromIndex:{}},emits:["drag","release","close","update:open","update:activeSnapPoint","animationEnd"],setup(e,{emit:t}){const n=e,o=t,{onNestedDrag:r,onNestedOpenChange:u,onNestedRelease:a}=Es();function s(){u(!1)}function i(d){r(d)}function c(d){d&&u(d),o("update:open",d)}const l=yj(n,o);return(d,p)=>(D(),k(jE,j(f(l),{nested:"",onClose:s,onDrag:i,onRelease:f(a),"onUpdate:open":c}),{default:A(()=>[P(d.$slots,"default")]),_:3},16,["onRelease"]))}}),CV=L({__name:"DrawerOverlay",setup(e){const{overlayRef:t,hasSnapPoints:n,isOpen:o,shouldFade:r}=Es();return(u,a)=>(D(),k(f(Qj),{ref_key:"overlayRef",ref:t,"data-vaul-overlay":"","data-vaul-snap-points":f(o)&&f(n)?"true":"false","data-vaul-snap-points-overlay":f(o)&&f(r)?"true":"false"},null,8,["data-vaul-snap-points","data-vaul-snap-points-overlay"]))}}),xV=()=>()=>{};function wV(){const{direction:e,isOpen:t,shouldScaleBackground:n,setBackgroundColorOnScale:o,noBodyStyles:r}=Es(),u=R(null),a=R(document.body.style.backgroundColor);function s(){return(window.innerWidth-NE)/window.innerWidth}Ze(i=>{if(t.value&&n.value){u.value&&clearTimeout(u.value);const c=document.querySelector("[data-vaul-drawer-wrapper]")||document.querySelector("[vaul-drawer-wrapper]");if(!c)return;pV(o.value&&!r.value?qc(document.body,{background:"black"}):xV,qc(c,{transformOrigin:St(e.value)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:`${vt.DURATION}s`,transitionTimingFunction:`cubic-bezier(${vt.EASE.join(",")})`}));const l=qc(c,{borderRadius:`${$E}px`,overflow:"hidden",...St(e.value)?{transform:`scale(${s()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`}:{transform:`scale(${s()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`}});i(()=>{l(),u.value=window.setTimeout(()=>{a.value?document.body.style.background=a.value:document.body.style.removeProperty("background")},vt.DURATION*1e3)})}},{flush:"pre"})}const DV=L({__name:"DrawerContent",setup(e){const{open:t,isOpen:n,snapPointsOffset:o,hasSnapPoints:r,drawerRef:u,onPress:a,onDrag:s,onRelease:i,modal:c,emitOpenChange:l,dismissible:d,keyboardIsOpen:p,closeDrawer:h,direction:m,handleOnly:g}=Es();wV();const y=R(!1),E=F(()=>o.value&&o.value.length>0?`${o.value[0]}px`:"0");function b(w){if(!c.value||w.defaultPrevented){w.preventDefault();return}p.value&&(p.value=!1),d.value?l(!1):w.preventDefault()}function v(w){g.value||a(w)}function C(w){g.value||s(w)}return Ze(()=>{r.value&&window.requestAnimationFrame(()=>{y.value=!0})}),(w,B)=>(D(),k(f(Gj),{ref_key:"drawerRef",ref:u,"data-vaul-drawer":"","data-vaul-drawer-direction":f(m),"data-vaul-delayed-snap-points":y.value?"true":"false","data-vaul-snap-points":f(n)&&f(r)?"true":"false",style:mn({"--snap-point-height":E.value}),onPointerdown:v,onPointermove:C,onPointerup:f(i),onPointerDownOutside:b,onOpenAutoFocus:B[0]||(B[0]=On(()=>{},["prevent"])),onEscapeKeyDown:B[1]||(B[1]=x=>{f(d)||x.preventDefault()})},{default:A(()=>[P(w.$slots,"default")]),_:3},8,["data-vaul-drawer-direction","data-vaul-delayed-snap-points","data-vaul-snap-points","style","onPointerup"]))}}),AV=["data-vaul-drawer-visible"],BV={"data-vaul-handle-hitarea":"","aria-hidden":"true"},_V=250,kV=120,SV=L({__name:"DrawerHandle",props:{preventCycle:{type:Boolean,default:!1}},setup(e){const t=e,{onPress:n,onDrag:o,handleRef:r,handleOnly:u,isOpen:a,snapPoints:s,activeSnapPoint:i,isDragging:c,dismissible:l,closeDrawer:d}=Es(),p=R(null),h=R(!1);function m(){if(h.value){E();return}window.setTimeout(()=>{g()},kV)}function g(){if(c.value||t.preventCycle||h.value){E();return}if(E(),!s.value||s.value.length===0){l.value||d();return}const C=i.value===s.value[s.value.length-1];if(C&&l.value){d();return}const w=s.value.findIndex(x=>x===i.value);if(w===-1)return;const B=C?0:w+1;i.value=s.value[B]}function y(){p.value=window.setTimeout(()=>{h.value=!0},_V)}function E(){p.value&&window.clearTimeout(p.value),h.value=!1}function b(C){u.value&&n(C),y()}function v(C){u.value&&o(C)}return(C,w)=>(D(),re("div",{ref_key:"handleRef",ref:r,"data-vaul-drawer-visible":f(a)?"true":"false","data-vaul-handle":"","aria-hidden":"true",onClick:m,onPointercancel:E,onPointerdown:b,onPointermove:v},[je("span",BV,[P(C.$slots,"default")])],40,AV))}}),TV={slots:{overlay:"fixed inset-0 bg-elevated/75",content:"fixed bg-default ring ring-default flex focus:outline-none",handle:["shrink-0 !bg-accented","transition-opacity"],container:"w-full flex flex-col gap-4 p-4 overflow-y-auto",header:"",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",body:"flex-1",footer:"flex flex-col gap-1.5"},variants:{direction:{top:{content:"mb-24 flex-col-reverse",handle:"mb-4"},right:{content:"flex-row",handle:"!ml-4"},bottom:{content:"mt-24 flex-col",handle:"mt-4"},left:{content:"flex-row-reverse",handle:"!mr-4"}},inset:{true:{content:"rounded-lg after:hidden overflow-hidden [--initial-transform:calc(100%+1.5rem)]"}},snapPoints:{true:""}},compoundVariants:[{direction:["top","bottom"],class:{content:"h-auto max-h-[96%]",handle:"!w-12 !h-1.5 mx-auto"}},{direction:["top","bottom"],snapPoints:!0,class:{content:"h-full"}},{direction:["right","left"],class:{content:"w-auto max-w-[calc(100%-2rem)]",handle:"!h-12 !w-1.5 mt-auto mb-auto"}},{direction:["right","left"],snapPoints:!0,class:{content:"w-full"}},{direction:"top",inset:!0,class:{content:"inset-x-4 top-4"}},{direction:"top",inset:!1,class:{content:"inset-x-0 top-0 rounded-b-lg"}},{direction:"bottom",inset:!0,class:{content:"inset-x-4 bottom-4"}},{direction:"bottom",inset:!1,class:{content:"inset-x-0 bottom-0 rounded-t-lg"}},{direction:"left",inset:!0,class:{content:"inset-y-4 left-4"}},{direction:"left",inset:!1,class:{content:"inset-y-0 left-0 rounded-r-lg"}},{direction:"right",inset:!0,class:{content:"inset-y-4 right-4"}},{direction:"right",inset:!1,class:{content:"inset-y-0 right-0 rounded-l-lg"}}]},FV={__name:"UDrawer",props:{as:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},inset:{type:Boolean,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},handle:{type:Boolean,required:!1,default:!0},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},nested:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},activeSnapPoint:{type:[Number,String,null],required:!1},closeThreshold:{type:Number,required:!1},shouldScaleBackground:{type:Boolean,required:!1},setBackgroundColorOnScale:{type:Boolean,required:!1},scrollLockTimeout:{type:Number,required:!1},fixed:{type:Boolean,required:!1},dismissible:{type:Boolean,required:!1,default:!0},modal:{type:Boolean,required:!1,default:!0},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},direction:{type:String,required:!1,default:"bottom"},noBodyStyles:{type:Boolean,required:!1},handleOnly:{type:Boolean,required:!1},preventScrollRestoration:{type:Boolean,required:!1},snapPoints:{type:Array,required:!1}},emits:["close:prevent","drag","release","close","update:open","update:activeSnapPoint","animationEnd"],setup(e,{emit:t}){const n=e,o=t,r=qt(),u=Pe(),a=Et("drawer",n),s=it(Jt(n,"activeSnapPoint","closeThreshold","shouldScaleBackground","setBackgroundColorOnScale","scrollLockTimeout","fixed","dismissible","modal","open","defaultOpen","nested","direction","noBodyStyles","handleOnly","preventScrollRestoration","snapPoints"),o),i=tu(Ye(()=>n.portal)),c=Ye(()=>n.content),l=F(()=>n.dismissible?{pointerDownOutside:Fl}:["interactOutside","escapeKeyDown"].reduce((h,m)=>(h[m]=g=>{g.preventDefault(),o("close:prevent")},h),{})),d=F(()=>Se({extend:Se(TV),...u.ui?.drawer||{}})({direction:n.direction,inset:n.inset,snapPoints:n.snapPoints&&n.snapPoints.length>0}));return(p,h)=>(D(),k(Rt(e.nested?f(EV):f(jE)),me(xe(f(s))),{default:A(()=>[r.default?(D(),k(f(aV),{key:0,"as-child":"",class:U(n.class)},{default:A(()=>[P(p.$slots,"default")]),_:3},8,["class"])):Y("",!0),q(f(oV),me(xe(f(i))),{default:A(()=>[e.overlay?(D(),k(f(CV),{key:0,"data-slot":"overlay",class:U(d.value.overlay({class:f(a)?.overlay}))},null,8,["class"])):Y("",!0),q(f(DV),j({"data-slot":"content",class:d.value.content({class:[!r.default&&n.class,f(a)?.content]})},c.value,as(l.value)),{default:A(()=>[e.handle?(D(),k(f(SV),{key:0,"data-slot":"handle",class:U(d.value.handle({class:f(a)?.handle}))},null,8,["class"])):Y("",!0),!e.title&&!r.title||!e.description&&!r.description||r.content?(D(),k(f(Yr),{key:1},{default:A(()=>[!e.title&&!r.title?(D(),k(f(Lc),{key:0})):r.content?(D(),k(f(Lc),{key:1},{default:A(()=>[P(p.$slots,"title",{},()=>[Ke(Fe(e.title),1)])]),_:3})):Y("",!0),!e.description&&!r.description?(D(),k(f(Rc),{key:2})):r.content?(D(),k(f(Rc),{key:3},{default:A(()=>[P(p.$slots,"description",{},()=>[Ke(Fe(e.description),1)])]),_:3})):Y("",!0)]),_:3})):Y("",!0),P(p.$slots,"content",{},()=>[je("div",{"data-slot":"container",class:U(d.value.container({class:f(a)?.container}))},[r.header||e.title||r.title||e.description||r.description?(D(),re("div",{key:0,"data-slot":"header",class:U(d.value.header({class:f(a)?.header}))},[P(p.$slots,"header",{},()=>[e.title||r.title?(D(),k(f(Lc),{key:0,"data-slot":"title",class:U(d.value.title({class:f(a)?.title}))},{default:A(()=>[P(p.$slots,"title",{},()=>[Ke(Fe(e.title),1)])]),_:3},8,["class"])):Y("",!0),e.description||r.description?(D(),k(f(Rc),{key:1,"data-slot":"description",class:U(d.value.description({class:f(a)?.description}))},{default:A(()=>[P(p.$slots,"description",{},()=>[Ke(Fe(e.description),1)])]),_:3},8,["class"])):Y("",!0)])],2)):Y("",!0),r.body?(D(),re("div",{key:1,"data-slot":"body",class:U(d.value.body({class:f(a)?.body}))},[P(p.$slots,"body")],2)):Y("",!0),r.footer?(D(),re("div",{key:2,"data-slot":"footer",class:U(d.value.footer({class:f(a)?.footer}))},[P(p.$slots,"footer")],2)):Y("",!0)],2)])]),_:3},16,["class"])]),_:3},16)]),_:3},16))}},PV={slots:{root:"bg-default/75 backdrop-blur border-b border-default h-(--ui-header-height) sticky top-0 z-50",container:"flex items-center justify-between gap-3 h-full",left:"lg:flex-1 flex items-center gap-1.5",center:"hidden lg:flex",right:"flex items-center justify-end lg:flex-1 gap-1.5",title:"shrink-0 font-bold text-xl text-highlighted flex items-end gap-1.5",toggle:"lg:hidden",content:"lg:hidden",overlay:"lg:hidden",header:"px-4 sm:px-6 h-(--ui-header-height) shrink-0 flex items-center justify-between gap-3",body:"p-4 sm:p-6 overflow-y-auto"},variants:{toggleSide:{left:{toggle:"-ms-1.5"},right:{toggle:"-me-1.5"}}}},MV=Object.assign({inheritAttrs:!1},{__name:"UHeader",props:vv({as:{type:null,required:!1,default:"header"},title:{type:String,required:!1,default:"Nuxt UI"},to:{type:String,required:!1,default:"/"},mode:{type:null,required:!1,default:"modal"},menu:{type:null,required:!1},toggle:{type:[Boolean,Object],required:!1,default:!0},toggleSide:{type:String,required:!1,default:"right"},autoClose:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(e){const t=e,n=qt(),o=xv(e,"open",{type:Boolean,default:!1}),r=Yn(),{t:u}=Vo(),a=Pe(),s=Et("header",t),[i,c]=To(),[l,d]=To(),[p,h]=To(),m=F(()=>(n.title&&$0(n.title())||t.title||"Nuxt UI").trim());ye(()=>r.fullPath,()=>{t.autoClose&&(o.value=!1)});const g=F(()=>Se({extend:Se(PV),...a.ui?.header||{}})()),y=F(()=>({slideover:GN,modal:ZN,drawer:FV})[t.mode]),E=Ye(()=>wt(t.menu,{content:{onOpenAutoFocus:v=>v.preventDefault()}},t.mode==="modal"?{fullscreen:!0,transition:!1}:{}));function b(){o.value=!o.value}return(v,C)=>(D(),re(Ce,null,[q(f(p),null,{default:A(()=>[P(v.$slots,"toggle",{open:o.value,toggle:b,ui:g.value},()=>[e.toggle?(D(),k(hn,j({key:0,color:"neutral",variant:"ghost","aria-label":o.value?f(u)("header.close"):f(u)("header.open"),icon:o.value?f(a).ui.icons.close:f(a).ui.icons.menu},typeof e.toggle=="object"?e.toggle:{},{"data-slot":"toggle",class:g.value.toggle({class:f(s)?.toggle,toggleSide:e.toggleSide}),onClick:b}),null,16,["aria-label","icon","class"])):Y("",!0)])]),_:3}),q(f(i),null,{default:A(()=>[je("div",{"data-slot":"left",class:U(g.value.left({class:f(s)?.left}))},[e.toggleSide==="left"?(D(),k(f(h),{key:0})):Y("",!0),P(v.$slots,"left",{},()=>[q($r,{to:e.to,"aria-label":m.value,"data-slot":"title",class:U(g.value.title({class:f(s)?.title}))},{default:A(()=>[P(v.$slots,"title",{},()=>[Ke(Fe(e.title),1)])]),_:3},8,["to","aria-label","class"])])],2)]),_:3}),q(f(l),null,{default:A(()=>[je("div",{"data-slot":"right",class:U(g.value.right({class:f(s)?.right}))},[P(v.$slots,"right"),e.toggleSide==="right"?(D(),k(f(h),{key:0})):Y("",!0)],2)]),_:3}),q(f(we),j({as:e.as},v.$attrs,{"data-slot":"root",class:g.value.root({class:[f(s)?.root,t.class]})}),{default:A(()=>[P(v.$slots,"top"),q(ep,{"data-slot":"container",class:U(g.value.container({class:f(s)?.container}))},{default:A(()=>[q(f(c)),je("div",{"data-slot":"center",class:U(g.value.center({class:f(s)?.center}))},[P(v.$slots,"default")],2),q(f(d))]),_:3},8,["class"]),P(v.$slots,"bottom")]),_:3},16,["as","class"]),q(f(y),j({open:o.value,"onUpdate:open":C[0]||(C[0]=w=>o.value=w),title:f(u)("header.title"),description:f(u)("header.description")},E.value,{ui:{overlay:g.value.overlay({class:f(s)?.overlay}),content:g.value.content({class:f(s)?.content})}}),{content:A(w=>[P(v.$slots,"content",me(xe(w)),()=>[e.mode!=="drawer"?(D(),re("div",{key:0,"data-slot":"header",class:U(g.value.header({class:f(s)?.header}))},[q(f(c)),q(f(d))],2)):Y("",!0),je("div",{"data-slot":"body",class:U(g.value.body({class:f(s)?.body}))},[P(v.$slots,"body")],2)])]),_:3},16,["open","title","description","ui"])],64))}});function cg(e){return!e||Array.isArray(e)&&e.length===0?[]:typeof e[0]=="string"?[{category:"Questions",items:e}]:e}const OV=360,IV=520;function VE(){const e=Bn(),t=Pe(),n=e.public.assistant,o=t.assistant,r=t.docus,u=F(()=>n?.enabled??!1),a=nr("assistant-open",()=>!1),s=nr("assistant-expanded",()=>!1),i=nr("assistant-messages",()=>[]),c=nr("assistant-pending",()=>{}),l=yk("(max-width: 767px)"),d=F(()=>s.value?IV:OV),p=F(()=>!l.value&&a.value),h=F(()=>{const C=o?.faqQuestions;if(!C)return[];if(!Array.isArray(C)){const w=C,B=r?.locale||"en",x=e.public.i18n?.defaultLocale||"en",_=w[B]||w[x]||Object.values(w)[0];return cg(_||[])}return cg(C)});function m(C,w=!1){w&&(i.value=[]),C&&(c.value=C),a.value=!0}function g(){c.value=void 0}function y(){a.value=!1}function E(){a.value=!a.value}function b(){i.value=[]}function v(){s.value=!s.value}return{isEnabled:u,isOpen:a,isExpanded:s,isMobile:l,panelWidth:d,shouldPushContent:p,messages:i,pendingMessage:c,faqQuestions:h,open:m,clearPending:g,close:y,toggle:E,toggleExpanded:v,clearMessages:b}}const RV=L({__name:"AppHeader",setup(e){const t=Pe(),{forced:n}=ss(),{isEnabled:o}=VE(),{isEnabled:r,locales:u}=Gu(),{subNavigationMode:a}=tp(),s=F(()=>t.github&&t.github.url?[{icon:"i-simple-icons-github",to:t.github.url,target:"_blank","aria-label":"GitHub"}]:[]);return(i,c)=>{const l=CI,d=MI,p=RI,h=$b,m=HI,g=ef,y=Vb,E=Mb,b=zb,v=hn,C=MN,w=LN,B=KN,x=MV;return D(),k(x,{ui:{center:"flex-1"},class:U({"flex flex-col":f(a)==="header"})},us({left:A(()=>[q(d)]),right:A(()=>[q(p),f(o)?(D(),k(h,{key:0})):Y("",!0),f(r)&&f(u).length>1?(D(),re(Ce,{key:1},[q(g,null,{fallback:A(()=>[...c[0]||(c[0]=[je("div",{class:"h-8 w-8 animate-pulse bg-neutral-200 dark:bg-neutral-800 rounded-md"},null,-1)])]),default:A(()=>[q(m)]),_:1}),q(y,{orientation:"vertical",class:"h-8"})],64)):Y("",!0),q(E,{class:"lg:hidden"}),f(n)?Y("",!0):(D(),k(g,{key:2},{fallback:A(()=>[...c[1]||(c[1]=[je("div",{class:"h-8 w-8 animate-pulse bg-neutral-200 dark:bg-neutral-800 rounded-md"},null,-1)])]),default:A(()=>[q(b)]),_:1})),f(s)?.length?(D(!0),re(Ce,{key:3},yt(f(s),(_,S)=>(D(),k(v,j({key:S},{ref_for:!0},{color:"neutral",variant:"ghost",..._}),null,16))),128)):Y("",!0)]),toggle:A(({open:_,toggle:S})=>[q(C,{open:_,class:"lg:hidden",onClick:S},null,8,["open","onClick"])]),body:A(()=>[q(w)]),default:A(()=>[q(l)]),_:2},[f(a)==="header"?{name:"bottom",fn:A(()=>[q(B)]),key:"0"}:void 0]),1032,["class"])}}}),zE=Object.assign(RV,{__name:"AppHeader"}),UE=(e="RouteProvider")=>L({name:e,props:{route:{type:Object,required:!0},vnode:Object,vnodeRef:Object,renderKey:String,trackRootNodes:Boolean},setup(t){const n=t.renderKey,o=t.route,r={};for(const u in t.route)Object.defineProperty(r,u,{get:()=>n===t.renderKey?t.route[u]:o[u],enumerable:!0});return Pt(Oo,Pn(r)),()=>t.vnode?qe(t.vnode,{ref:t.vnodeRef}):t.vnode}}),LV=UE(),dg=new WeakMap,qV=L({name:"NuxtPage",inheritAttrs:!1,props:{name:{type:String},transition:{type:[Boolean,Object],default:void 0},keepalive:{type:[Boolean,Object],default:void 0},route:{type:Object},pageKey:{type:[Function,String],default:null}},setup(e,{attrs:t,slots:n,expose:o}){const r=Re(),u=R(),a=Ue(Oo,null);let s;o({pageRef:u});const i=Ue(Dy,null);let c;const l=r.deferHydration();let d=!1,p=0;if(r.isHydrating){const m=r.hooks.hookOnce("app:error",l);Xt().beforeEach(m)}e.pageKey&&ye(()=>e.pageKey,(m,g)=>{m!==g&&r.callHook("page:loading:start")});let h=!1;{const m=Xt().beforeResolve(()=>{h=!1});mo(()=>{m(),l()})}return()=>qe(u3,{name:e.name,route:e.route,...t},{default:m=>{const g=$V(a,m.route,m.Component),y=a&&a.matched.length===m.route.matched.length;if(!m.Component){if(c&&!y)return c;l();return}if(c&&i&&!i.isCurrent(m.route))return c;if(g&&a&&(!i||i?.isCurrent(a)))return y||c?c:null;const E=p0(m,e.pageKey),b=NV(a,m.route,m.Component);!r.isHydrating&&s===E&&!b&&Oe(()=>{h||(h=!0,r.callHook("page:loading:end"))}),d&&s!==E&&p++,s=E;const v=!!(e.transition??m.route.meta.pageTransition??Qp),C=v&&i3([e.transition,m.route.meta.pageTransition,Qp,{onAfterLeave(){r["~transitionFinish"]?.(),delete r["~transitionFinish"],delete r["~transitionPromise"],r.callHook("page:transition:finish",m.Component)}}]),w=e.keepalive??m.route.meta.keepalive??L5;return c=s3(v&&C,pA(w,qe(Rd,{key:p,suspensible:!0,onPending:()=>{d=!0,v&&!r["~transitionPromise"]&&(r["~transitionPromise"]=new Promise(B=>{r["~transitionFinish"]=B})),r.callHook("page:start",m.Component)},onResolve:async()=>{d=!1;try{await Oe(),r._route.sync?.(),await r.callHook("page:finish",m.Component),!h&&!b&&(h=!0,await r.callHook("page:loading:end"))}finally{l()}}},{default:()=>{const B={key:E||void 0,vnode:n.default?jV(n.default,m):m.Component,route:m.route,renderKey:E||void 0,trackRootNodes:v,vnodeRef:u};if(!w)return qe(LV,B);const x=m.Component.type,_=x;let S=dg.get(_);return S||(S=UE(x.name||x.__name),dg.set(_,S)),qe(S,B)}}))).default(),c}})}});function $V(e,t,n){if(!e)return!1;const o=t.matched.findIndex(r=>r.components?.default===n?.type);return!o||o===-1?!1:t.matched.slice(0,o).some((r,u)=>r.components?.default!==e.matched[u]?.components?.default)||n&&p0({route:t,Component:n})!==p0({route:e,Component:n})}function NV(e,t,n){return e?t.matched.findIndex(r=>r.components?.default===n?.type)qe(or[e.name],e.layoutProps,t.slots)}}),zV={name:{type:[String,Boolean,Object],default:null},fallback:{type:[String,Object],default:null}},UV=L({name:"NuxtLayout",inheritAttrs:!1,props:zV,setup(e,t){const n=Re(),o=Ue(Oo),u=!o||o===Yn()?Gy():o,a=F(()=>{let l=f(e.name)??u?.meta.layout??HE(u?.path).appLayout??"default";return l&&!(l in or)&&e.fallback&&(l=f(e.fallback)),l}),s=Me();t.expose({layoutRef:s});const i=n.deferHydration();if(n.isHydrating){const l=n.hooks.hookOnce("app:error",i);Xt().beforeEach(l)}let c;return()=>{const d=!!a.value&&a.value in or&&!!(u?.meta.layoutTransition??Jp),p=d&&i3([u?.meta.layoutTransition,Jp,{onBeforeLeave(){n["~transitionPromise"]=new Promise(m=>{n["~transitionFinish"]=m})},onAfterLeave(){n["~transitionFinish"]?.(),delete n["~transitionFinish"],delete n["~transitionPromise"]}}]),h=c;return c=a.value,s3(p,{default:()=>qe(Rd,{suspensible:!0,onResolve:async()=>{await Oe(i)}},{default:()=>qe(HV,{layoutProps:j(t.attrs,u.meta.layoutProps??{},{ref:s}),key:a.value||void 0,name:a.value,shouldProvide:!e.name,isRenderingNewLayout:m=>m!==h&&m===a.value,hasTransition:d},t.slots)})}).default()}}}),HV=L({name:"NuxtLayoutProvider",inheritAttrs:!1,props:{name:{type:[String,Boolean]},layoutProps:{type:Object},hasTransition:{type:Boolean},shouldProvide:{type:Boolean},isRenderingNewLayout:{type:Function,required:!0}},setup(e,t){const n=e.name;e.shouldProvide&&Pt(Dy,{isCurrent:u=>n===!1||n===(u.meta.layout??HE(u.path).appLayout??"default")});const o=Ue(Oo);if(o&&o===Yn()){const u=Gy(),a={};for(const s in u){const i=s;Object.defineProperty(a,i,{enumerable:!0,get:()=>e.isRenderingNewLayout(e.name)?u[i]:o[i]})}Pt(Oo,Pn(a))}return()=>!n||typeof n=="string"&&!(n in or)?t.slots.default?.():qe(VV,{key:n,layoutProps:e.layoutProps,name:n},t.slots)}}),KV={},WV={class:"text-sm text-muted"};function GV(e,t){return D(),re("div",WV," Copyright © "+Fe(new Date().getFullYear()),1)}const YV=Object.assign(Wu(KV,[["render",GV]]),{__name:"AppFooterLeft"}),ZV=L({__name:"AppFooterRight",setup(e){const t=Pe(),{forced:n}=ss(),o=F(()=>{const r=Object.entries(t.socials||{}).flatMap(([a,s])=>typeof s!="string"||!s?[]:[{icon:`i-simple-icons-${a}`,to:s,target:"_blank","aria-label":`${a} social link`}]),u=t.github&&t.github.url?[{icon:"i-simple-icons-github",to:t.github.url,target:"_blank","aria-label":"GitHub repository"}]:[];return[...r,...u]});return(r,u)=>{const a=hn,s=zb;return D(),re(Ce,null,[f(o).length?(D(!0),re(Ce,{key:0},yt(f(o),(i,c)=>(D(),k(a,j({key:c,size:"sm"},{ref_for:!0},{color:"neutral",variant:"ghost",...i}),null,16))),128)):Y("",!0),f(n)?Y("",!0):(D(),k(s,{key:1}))],64)}}}),XV=Object.assign(ZV,{__name:"AppFooterRight"}),JV={slots:{root:"",top:"py-8 lg:py-12",bottom:"py-8 lg:py-12",container:"py-8 lg:py-4 lg:flex lg:items-center lg:justify-between lg:gap-x-3",left:"flex items-center justify-center lg:justify-start lg:flex-1 gap-x-1.5 mt-3 lg:mt-0 lg:order-1",center:"mt-3 lg:mt-0 lg:order-2 flex items-center justify-center",right:"lg:flex-1 flex items-center justify-center lg:justify-end gap-x-1.5 lg:order-3"}},QV={__name:"UFooter",props:{as:{type:null,required:!1,default:"footer"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=e,n=qt(),o=Pe(),r=Et("footer",t),u=F(()=>Se({extend:Se(JV),...o.ui?.footer||{}})());return(a,s)=>(D(),k(f(we),{as:e.as,"data-slot":"root",class:U(u.value.root({class:[f(r)?.root,t.class]}))},{default:A(()=>[n.top?(D(),re("div",{key:0,"data-slot":"top",class:U(u.value.top({class:f(r)?.top}))},[P(a.$slots,"top")],2)):Y("",!0),q(ep,{"data-slot":"container",class:U(u.value.container({class:f(r)?.container}))},{default:A(()=>[je("div",{"data-slot":"right",class:U(u.value.right({class:f(r)?.right}))},[P(a.$slots,"right")],2),je("div",{"data-slot":"center",class:U(u.value.center({class:f(r)?.center}))},[P(a.$slots,"default")],2),je("div",{"data-slot":"left",class:U(u.value.left({class:f(r)?.left}))},[P(a.$slots,"left")],2)]),_:3},8,["class"]),n.bottom?(D(),re("div",{key:1,"data-slot":"bottom",class:U(u.value.bottom({class:f(r)?.bottom}))},[P(a.$slots,"bottom")],2)):Y("",!0)]),_:3},8,["as","class"]))}},ez={};function tz(e,t){const n=YV,o=XV,r=QV;return D(),k(r,null,{left:A(()=>[q(n)]),right:A(()=>[q(o)]),_:1})}const KE=Object.assign(Wu(ez,[["render",tz]]),{__name:"AppFooter"}),nz={slots:{root:"gap-2",base:"relative overflow-hidden rounded-full bg-accented",indicator:"rounded-full size-full transition-transform duration-200 ease-out",status:"flex text-dimmed transition-[width] duration-200",steps:"grid items-end",step:"truncate text-end row-start-1 col-start-1 transition-opacity"},variants:{animation:{carousel:"","carousel-inverse":"",swing:"",elastic:""},color:{primary:{indicator:"bg-primary",steps:"text-primary"},secondary:{indicator:"bg-secondary",steps:"text-secondary"},success:{indicator:"bg-success",steps:"text-success"},info:{indicator:"bg-info",steps:"text-info"},warning:{indicator:"bg-warning",steps:"text-warning"},error:{indicator:"bg-error",steps:"text-error"},neutral:{indicator:"bg-inverted",steps:"text-inverted"}},size:{"2xs":{status:"text-xs",steps:"text-xs"},xs:{status:"text-xs",steps:"text-xs"},sm:{status:"text-sm",steps:"text-sm"},md:{status:"text-sm",steps:"text-sm"},lg:{status:"text-sm",steps:"text-sm"},xl:{status:"text-base",steps:"text-base"},"2xl":{status:"text-base",steps:"text-base"}},step:{active:{step:"opacity-100"},first:{step:"opacity-100 text-muted"},other:{step:"opacity-0"},last:{step:""}},orientation:{horizontal:{root:"w-full flex flex-col",base:"w-full",status:"flex-row items-center justify-end min-w-fit"},vertical:{root:"h-full flex flex-row-reverse",base:"h-full",status:"flex-col justify-end min-h-fit"}},inverted:{true:{status:"self-end"}}},compoundVariants:[{inverted:!0,orientation:"horizontal",class:{step:"text-start",status:"flex-row-reverse"}},{inverted:!0,orientation:"vertical",class:{steps:"items-start",status:"flex-col-reverse"}},{orientation:"horizontal",size:"2xs",class:"h-px"},{orientation:"horizontal",size:"xs",class:"h-0.5"},{orientation:"horizontal",size:"sm",class:"h-1"},{orientation:"horizontal",size:"md",class:"h-2"},{orientation:"horizontal",size:"lg",class:"h-3"},{orientation:"horizontal",size:"xl",class:"h-4"},{orientation:"horizontal",size:"2xl",class:"h-5"},{orientation:"vertical",size:"2xs",class:"w-px"},{orientation:"vertical",size:"xs",class:"w-0.5"},{orientation:"vertical",size:"sm",class:"w-1"},{orientation:"vertical",size:"md",class:"w-2"},{orientation:"vertical",size:"lg",class:"w-3"},{orientation:"vertical",size:"xl",class:"w-4"},{orientation:"vertical",size:"2xl",class:"w-5"},{orientation:"horizontal",animation:"carousel",class:{indicator:"data-[state=indeterminate]:animate-[carousel_2s_ease-in-out_infinite] data-[state=indeterminate]:rtl:animate-[carousel-rtl_2s_ease-in-out_infinite]"}},{orientation:"vertical",animation:"carousel",class:{indicator:"data-[state=indeterminate]:animate-[carousel-vertical_2s_ease-in-out_infinite]"}},{orientation:"horizontal",animation:"carousel-inverse",class:{indicator:"data-[state=indeterminate]:animate-[carousel-inverse_2s_ease-in-out_infinite] data-[state=indeterminate]:rtl:animate-[carousel-inverse-rtl_2s_ease-in-out_infinite]"}},{orientation:"vertical",animation:"carousel-inverse",class:{indicator:"data-[state=indeterminate]:animate-[carousel-inverse-vertical_2s_ease-in-out_infinite]"}},{orientation:"horizontal",animation:"swing",class:{indicator:"data-[state=indeterminate]:animate-[swing_2s_ease-in-out_infinite]"}},{orientation:"vertical",animation:"swing",class:{indicator:"data-[state=indeterminate]:animate-[swing-vertical_2s_ease-in-out_infinite]"}},{orientation:"horizontal",animation:"elastic",class:{indicator:"data-[state=indeterminate]:animate-[elastic_2s_ease-in-out_infinite]"}},{orientation:"vertical",animation:"elastic",class:{indicator:"data-[state=indeterminate]:animate-[elastic-vertical_2s_ease-in-out_infinite]"}}],defaultVariants:{animation:"carousel",color:"primary",size:"md"}},oz={__name:"UProgress",props:{as:{type:null,required:!1},max:{type:[Number,Array],required:!1},status:{type:Boolean,required:!1},inverted:{type:Boolean,required:!1,default:!1},size:{type:null,required:!1},color:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},animation:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},getValueLabel:{type:Function,required:!1},getValueText:{type:Function,required:!1},modelValue:{type:[Number,null],required:!1,default:null}},emits:["update:modelValue","update:max"],setup(e,{emit:t}){const n=e,o=t,r=qt(),{dir:u}=Vo(),a=Pe(),s=Et("progress",n),i=it(Jt(n,"getValueLabel","getValueText","modelValue"),o),c=F(()=>i.value.modelValue===null),l=F(()=>Array.isArray(n.max)),d=F(()=>{if(!(c.value||!n.max))return Array.isArray(n.max)?n.max.length-1:Number(n.max)}),p=F(()=>{if(!c.value)switch(!0){case i.value.modelValue<0:return 0;case i.value.modelValue>(d.value??100):return 100;default:return Math.round(i.value.modelValue/(d.value??100)*100)}}),h=F(()=>{if(p.value!==void 0)return n.orientation==="vertical"?{transform:`translateY(${n.inverted?"":"-"}${100-p.value}%)`}:u.value==="rtl"?{transform:`translateX(${n.inverted?"-":""}${100-p.value}%)`}:{transform:`translateX(${n.inverted?"":"-"}${100-p.value}%)`}}),m=F(()=>{const C=`${Math.max(p.value??0,0)}%`;return n.orientation==="vertical"?{height:C}:{width:C}});function g(C){return C===Number(n.modelValue)}function y(C){return C===0}function E(C){return C===d.value}function b(C){return C=Number(C),g(C)&&!y(C)?"active":y(C)&&g(C)?"first":E(C)&&g(C)?"last":"other"}const v=F(()=>Se({extend:Se(nz),...a.ui?.progress||{}})({animation:n.animation,size:n.size,color:n.color,orientation:n.orientation,inverted:n.inverted}));return(C,w)=>(D(),k(f(we),{as:e.as,"data-orientation":e.orientation,"data-slot":"root",class:U(v.value.root({class:[f(s)?.root,n.class]}))},{default:A(()=>[!c.value&&(e.status||r.status)?(D(),re("div",{key:0,"data-slot":"status",class:U(v.value.status({class:f(s)?.status})),style:mn(m.value)},[P(C.$slots,"status",{percent:p.value},()=>[Ke(Fe(p.value)+"% ",1)])],6)):Y("",!0),q(f(rP),j(f(i),{max:d.value,"data-slot":"base",class:v.value.base({class:f(s)?.base}),style:{transform:"translateZ(0)"}}),{default:A(()=>[q(f(aP),{"data-slot":"indicator",class:U(v.value.indicator({class:f(s)?.indicator})),style:mn(h.value)},null,8,["class","style"])]),_:1},16,["max","class"]),l.value?(D(),re("div",{key:1,"data-slot":"steps",class:U(v.value.steps({class:f(s)?.steps}))},[(D(!0),re(Ce,null,yt(e.max,(B,x)=>(D(),re("div",{key:x,"data-slot":"step",class:U(v.value.step({class:f(s)?.step,step:b(x)}))},[P(C.$slots,`step-${x}`,{step:B},()=>[Ke(Fe(B),1)])],2))),128))],2)):Y("",!0)]),_:3},8,["as","data-orientation","class"]))}},rz={slots:{root:"relative group overflow-hidden bg-default shadow-lg rounded-lg ring ring-default p-4 flex gap-2.5 focus:outline-none",wrapper:"w-0 flex-1 flex flex-col",title:"text-sm font-medium text-highlighted",description:"text-sm text-muted",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xl",actions:"flex gap-1.5 shrink-0",progress:"absolute inset-x-0 bottom-0",close:"p-0"},variants:{color:{primary:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",icon:"text-primary"},secondary:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-secondary",icon:"text-secondary"},success:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-success",icon:"text-success"},info:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-info",icon:"text-info"},warning:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-warning",icon:"text-warning"},error:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-error",icon:"text-error"},neutral:{root:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-inverted",icon:"text-highlighted"}},orientation:{horizontal:{root:"items-center",actions:"items-center"},vertical:{root:"items-start",actions:"items-start mt-2.5"}},title:{true:{description:"mt-1"}}},defaultVariants:{color:"primary"}},uz={__name:"UToast",props:{as:{type:null,required:!1},title:{type:[String,Object,Function],required:!1},description:{type:[String,Object,Function],required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},orientation:{type:null,required:!1,default:"vertical"},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},actions:{type:Array,required:!1},progress:{type:[Boolean,Object],required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},type:{type:String,required:!1},duration:{type:Number,required:!1}},emits:["escapeKeyDown","pause","resume","swipeStart","swipeMove","swipeCancel","swipeEnd","update:open"],setup(e,{expose:t,emit:n}){const o=e,r=n,u=qt(),{t:a}=Vo(),s=Pe(),i=Et("toast",o),c=it(Jt(o,"as","defaultOpen","open","duration","type"),r),l=F(()=>Se({extend:Se(rz),...s.ui?.toast||{}})({color:o.color,orientation:o.orientation,title:!!o.title||!!u.title})),d=rv("rootRef"),p=R(0);return $e(()=>{d.value?.$el?.getBoundingClientRect&&(p.value=d.value.$el.getBoundingClientRect().height)}),t({height:p}),(h,m)=>(D(),k(f(MP),j({ref_key:"rootRef",ref:d},f(c),{"data-orientation":e.orientation,"data-slot":"root",class:l.value.root({class:[f(i)?.root,o.class]}),style:{"--height":p.value}}),{default:A(({remaining:g,duration:y,open:E})=>[P(h.$slots,"leading",{ui:l.value},()=>[e.avatar?(D(),k(Ku,j({key:0,size:f(i)?.avatarSize||l.value.avatarSize()},e.avatar,{"data-slot":"avatar",class:l.value.avatar({class:f(i)?.avatar})}),null,16,["size","class"])):e.icon?(D(),k(st,{key:1,name:e.icon,"data-slot":"icon",class:U(l.value.icon({class:f(i)?.icon}))},null,8,["name","class"])):Y("",!0)]),je("div",{"data-slot":"wrapper",class:U(l.value.wrapper({class:f(i)?.wrapper}))},[e.title||u.title?(D(),k(f(IP),{key:0,"data-slot":"title",class:U(l.value.title({class:f(i)?.title}))},{default:A(()=>[P(h.$slots,"title",{},()=>[typeof e.title=="function"?(D(),k(Rt(e.title()),{key:0})):typeof e.title=="object"?(D(),k(Rt(e.title),{key:1})):(D(),re(Ce,{key:2},[Ke(Fe(e.title),1)],64))])]),_:3},8,["class"])):Y("",!0),e.description||u.description?(D(),k(f(SP),{key:1,"data-slot":"description",class:U(l.value.description({class:f(i)?.description}))},{default:A(()=>[P(h.$slots,"description",{},()=>[typeof e.description=="function"?(D(),k(Rt(e.description()),{key:0})):typeof e.description=="object"?(D(),k(Rt(e.description),{key:1})):(D(),re(Ce,{key:2},[Ke(Fe(e.description),1)],64))])]),_:3},8,["class"])):Y("",!0),e.orientation==="vertical"&&(e.actions?.length||u.actions)?(D(),re("div",{key:2,"data-slot":"actions",class:U(l.value.actions({class:f(i)?.actions}))},[P(h.$slots,"actions",{},()=>[(D(!0),re(Ce,null,yt(e.actions,(b,v)=>(D(),k(f(E4),{key:v,"alt-text":b.label||"Action","as-child":"",onClick:m[0]||(m[0]=On(()=>{},["stop"]))},{default:A(()=>[q(hn,j({size:"xs",color:e.color},{ref_for:!0},b),null,16,["color"])]),_:2},1032,["alt-text"]))),128))])],2)):Y("",!0)],2),e.orientation==="horizontal"&&(e.actions?.length||u.actions)||e.close?(D(),re("div",{key:0,"data-slot":"actions",class:U(l.value.actions({class:f(i)?.actions,orientation:"horizontal"}))},[e.orientation==="horizontal"&&(e.actions?.length||u.actions)?P(h.$slots,"actions",{key:0},()=>[(D(!0),re(Ce,null,yt(e.actions,(b,v)=>(D(),k(f(E4),{key:v,"alt-text":b.label||"Action","as-child":"",onClick:m[1]||(m[1]=On(()=>{},["stop"]))},{default:A(()=>[q(hn,j({size:"xs",color:e.color},{ref_for:!0},b),null,16,["color"])]),_:2},1032,["alt-text"]))),128))]):Y("",!0),e.close||u.close?(D(),k(f(Y1),{key:1,"as-child":""},{default:A(()=>[P(h.$slots,"close",{ui:l.value},()=>[e.close?(D(),k(hn,j({key:0,icon:e.closeIcon||f(s).ui.icons.close,color:"neutral",variant:"link","aria-label":f(a)("toast.close")},typeof e.close=="object"?e.close:{},{"data-slot":"close",class:l.value.close({class:f(i)?.close}),onClick:m[2]||(m[2]=On(()=>{},["stop"]))}),null,16,["icon","aria-label","class"])):Y("",!0)])]),_:3})):Y("",!0)],2)):Y("",!0),e.progress&&E&&g>0&&y?(D(),k(oz,j({key:1,"model-value":g/y*100,color:e.color},typeof e.progress=="object"?e.progress:{},{size:"sm","data-slot":"progress",class:l.value.progress({class:f(i)?.progress})}),null,16,["model-value","color","class"])):Y("",!0)]),_:3},16,["data-orientation","class","style"]))}},az={slots:{viewport:"fixed flex flex-col w-[calc(100%-2rem)] sm:w-96 z-[100] data-[expanded=true]:h-(--height) focus:outline-none",base:"pointer-events-auto absolute inset-x-0 z-(--index) transform-(--transform) data-[expanded=false]:data-[front=false]:h-(--front-height) data-[expanded=false]:data-[front=false]:*:opacity-0 data-[front=false]:*:transition-opacity data-[front=false]:*:duration-100 data-[state=closed]:animate-[toast-closed_200ms_ease-in-out] data-[state=closed]:data-[expanded=false]:data-[front=false]:animate-[toast-collapsed-closed_200ms_ease-in-out] data-[state=open]:data-[pulsing=odd]:animate-[toast-pulse-a_300ms_ease-out] data-[state=open]:data-[pulsing=even]:animate-[toast-pulse-b_300ms_ease-out] data-[swipe=move]:transition-none transition-[transform,translate,height] duration-200 ease-out"},variants:{position:{"top-left":{viewport:"left-4"},"top-center":{viewport:"left-1/2 transform -translate-x-1/2"},"top-right":{viewport:"right-4"},"bottom-left":{viewport:"left-4"},"bottom-center":{viewport:"left-1/2 transform -translate-x-1/2"},"bottom-right":{viewport:"right-4"}},swipeDirection:{up:"data-[swipe=end]:animate-[toast-slide-up_200ms_ease-out]",right:"data-[swipe=end]:animate-[toast-slide-right_200ms_ease-out]",down:"data-[swipe=end]:animate-[toast-slide-down_200ms_ease-out]",left:"data-[swipe=end]:animate-[toast-slide-left_200ms_ease-out]"}},compoundVariants:[{position:["top-left","top-center","top-right"],class:{viewport:"top-4",base:"top-0 data-[state=open]:animate-[toast-slide-in-from-top_200ms_ease-in-out]"}},{position:["bottom-left","bottom-center","bottom-right"],class:{viewport:"bottom-4",base:"bottom-0 data-[state=open]:animate-[toast-slide-in-from-bottom_200ms_ease-in-out]"}},{swipeDirection:["left","right"],class:"data-[swipe=move]:translate-x-(--reka-toast-swipe-move-x) data-[swipe=end]:translate-x-(--reka-toast-swipe-end-x) data-[swipe=cancel]:translate-x-0"},{swipeDirection:["up","down"],class:"data-[swipe=move]:translate-y-(--reka-toast-swipe-move-y) data-[swipe=end]:translate-y-(--reka-toast-swipe-end-y) data-[swipe=cancel]:translate-y-0"}],defaultVariants:{position:"bottom-right"}},sz={name:"Toaster"},iz=Object.assign(sz,{props:{position:{type:null,required:!1},expand:{type:Boolean,required:!1,default:!0},progress:{type:Boolean,required:!1,default:!0},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},max:{type:Number,required:!1,default:5},class:{type:null,required:!1},ui:{type:Object,required:!1},label:{type:String,required:!1},duration:{type:Number,required:!1,default:5e3},disableSwipe:{type:Boolean,required:!1},swipeThreshold:{type:Number,required:!1}},setup(e){const t=e,{toasts:n,remove:o}=Lb(),r=Pe(),u=Et("toaster",t);Pt(Rb,Ye(()=>t.max));const a=ln(Jt(t,"duration","label","swipeThreshold","disableSwipe")),s=tu(Ye(()=>t.portal)),i=F(()=>{switch(t.position){case"top-center":return"up";case"top-right":case"bottom-right":return"right";case"bottom-center":return"down";case"top-left":case"bottom-left":return"left"}return"right"}),c=F(()=>Se({extend:Se(az),...r.ui?.toaster||{}})({position:t.position,swipeDirection:i.value}));function l(E,b){E||o(b)}const d=R(!1),p=F(()=>t.expand||d.value),h=R([]),m=F(()=>h.value.reduce((E,{height:b})=>E+b+16,0)),g=F(()=>h.value[h.value.length-1]?.height||0);function y(E){return h.value.slice(E+1).reduce((b,{height:v})=>b+v+16,0)}return(E,b)=>(D(),k(f(hP),j({"swipe-direction":i.value},f(a)),{default:A(()=>[P(E.$slots,"default"),(D(!0),re(Ce,null,yt(f(n),(v,C)=>(D(),k(uz,j({key:v.id,ref_for:!0,ref_key:"refs",ref:h,progress:e.progress},{ref_for:!0},f(ms)(v,["id","close","_duplicate","_updated"]),{close:v.close,"data-expanded":p.value,"data-front":!p.value&&C===f(n).length-1,"data-pulsing":v._duplicate?v._duplicate%2===0?"even":"odd":void 0,style:{"--index":C-f(n).length+f(n).length,"--before":f(n).length-1-C,"--offset":y(C),"--scale":p.value?"1":"calc(1 - var(--before) * var(--scale-factor))","--translate":p.value?"calc(var(--offset) * var(--translate-factor))":"calc(var(--before) * var(--gap))","--transform":"translateY(var(--translate)) scale(var(--scale))"},"data-slot":"base",class:c.value.base({class:[f(u)?.base,v.onClick?"cursor-pointer":void 0]}),"onUpdate:open":w=>l(w,v.id),onClick:w=>v.onClick&&v.onClick(v)}),null,16,["progress","close","data-expanded","data-front","data-pulsing","style","class","onUpdate:open","onClick"]))),128)),q(f(FP),me(xe(f(s))),{default:A(()=>[q(f(qP),{"data-expanded":p.value,"data-slot":"viewport",class:U(c.value.viewport({class:[f(u)?.viewport,t.class]})),style:mn({"--scale-factor":"0.05","--translate-factor":e.position?.startsWith("top")?"1px":"-1px","--gap":e.position?.startsWith("top")?"16px":"-16px","--front-height":`${g.value}px`,"--height":`${m.value}px`}),onMouseenter:b[0]||(b[0]=v=>d.value=!0),onMouseleave:b[1]||(b[1]=v=>d.value=!1)},null,8,["data-expanded","class","style"])]),_:1},16)]),_:3},16,["swipe-direction"]))}}),lz=Object.assign(iz,{__name:"UToaster"});function cz(){const e=Pn([]),t=(c,l)=>{const{props:d,defaultOpen:p,destroyOnClose:h}=l||{},m=_t({id:Symbol(""),isOpen:!!p,component:_d(c),isMounted:!!p,destroyOnClose:!!h,originalProps:d||{},props:{...d}});return e.push(m),{...m,open:g=>n(m.id,g),close:g=>o(m.id,g),patch:g=>a(m.id,g)}},n=(c,l)=>{const d=s(c);l?d.props={...d.originalProps,...l}:d.props={...d.originalProps},d.isOpen=!0,d.isMounted=!0;const p=new Promise(h=>d.resolvePromise=h);return Object.assign(p,{id:c,isMounted:d.isMounted,isOpen:d.isOpen,result:p})},o=(c,l)=>{const d=s(c);d.isOpen=!1,d.resolvePromise&&(d.resolvePromise(l),d.resolvePromise=void 0)},r=()=>{e.forEach(c=>o(c.id))},u=c=>{const l=s(c);if(l.isMounted=!1,l.destroyOnClose){const d=e.findIndex(p=>p.id===c);e.splice(d,1)}},a=(c,l)=>{const d=s(c);d.props={...d.props,...l}},s=c=>{const l=e.find(d=>d.id===c);if(!l)throw new Error("Overlay not found");return l};return{overlays:e,open:n,close:o,closeAll:r,create:t,patch:a,unmount:u,isOpen:c=>s(c).isOpen}}const dz=Nu(cz),fz={__name:"UOverlayProvider",setup(e){const{overlays:t,unmount:n,close:o}=dz(),r=F(()=>t.filter(s=>s.isMounted)),u=s=>{o(s),n(s)},a=(s,i)=>{o(s,i)};return(s,i)=>(D(!0),re(Ce,null,yt(r.value,c=>(D(),k(Rt(c.component),j({key:c.id},{ref_for:!0},c.props,{open:c.isOpen,"onUpdate:open":l=>c.isOpen=l,onClose:l=>a(c.id,l),"onAfter:leave":l=>u(c.id)}),null,16,["open","onUpdate:open","onClose","onAfter:leave"]))),128))}},pz={name:"App"},hz=Object.assign(pz,{props:{tooltip:{type:Object,required:!1},toaster:{type:[Object,null],required:!1},locale:{type:Object,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:"body"},dir:{type:String,required:!1},scrollBody:{type:[Boolean,Object],required:!1},nonce:{type:String,required:!1}},setup(e){const t=e,n=ln(Jt(t,"scrollBody")),o=Ye(()=>t.tooltip),r=Ye(()=>t.toaster),u=Ye(()=>t.locale);return Pt(tb,u),Pt(Fb,Ye(()=>t.portal)),(s,i)=>(D(),k(f(V_),j({"use-id":()=>Td(),dir:t.dir||u.value?.dir,locale:u.value?.code},f(n)),{default:A(()=>[q(f(zP),me(xe(o.value)),{default:A(()=>[e.toaster!==null?(D(),k(lz,me(j({key:0},r.value)),{default:A(()=>[P(s.$slots,"default")]),_:3},16)):P(s.$slots,"default",{key:1}),q(fz)]),_:3},16)]),_:3},16,["use-id","dir","locale"]))}}),WE=Object.assign(hz,{__name:"UApp"}),mz=be({name:"العربية",code:"ar",dir:"rtl",messages:{alert:{close:"إغلاق"},authForm:{hidePassword:"إخفاء كلمة المرور",showPassword:"إظهار كلمة المرور",submit:"متابعة"},banner:{close:"إغلاق"},calendar:{nextMonth:"الشهر المقبل",nextYear:"السنة المقبلة",prevMonth:"الشهر السابق",prevYear:"السنة السابقة"},carousel:{dots:"اختر الشريحة المراد عرضها",goto:"الذهاب إلى شريحة {slide}",next:"التالي",prev:"السابق"},chatPrompt:{placeholder:"اكتب رسالتك هنا…"},chatPromptSubmit:{label:"إرسال"},chatReasoning:{thinking:"يفكّر…",thought:"فكّر",thoughtFor:"فكّر لمدة {duration}"},colorMode:{dark:"داكن",light:"فاتح",switchToDark:"التبديل إلى الوضع الداكن",switchToLight:"التبديل إلى الوضع الفاتح",system:"النظام"},commandPalette:{back:"رجوع",close:"إغلاق",noData:"لا توجد بيانات",noMatch:"لا توجد نتائج مطابقة",placeholder:"اكتب أمرًا أو ابحث…"},contentSearch:{links:"الروابط",theme:"السمة"},contentSearchButton:{label:"بحث…"},contentToc:{title:"في هذه الصفحة"},dropdownMenu:{noMatch:"لا توجد نتائج مطابقة",search:"بحث…"},dashboardSearch:{theme:"السمة"},dashboardSearchButton:{label:"بحث…"},dashboardSidebarCollapse:{collapse:"طي الشريط الجانبي",expand:"توسيع الشريط الجانبي"},dashboardSidebarToggle:{close:"إغلاق الشريط الجانبي",open:"فتح الشريط الجانبي"},error:{clear:"العودة إلى الصفحة الرئيسية"},fileUpload:{removeFile:"إزالة {filename}"},header:{close:"إغلاق القائمة",open:"فتح القائمة"},inputMenu:{create:'إنشاء "{label}"',noData:"لا توجد بيانات",noMatch:"لا توجد نتائج مطابقة"},inputNumber:{decrement:"تقليل",increment:"زيادة"},modal:{close:"إغلاق"},pricingTable:{caption:"مقارنة الخطط السعرية"},prose:{codeCollapse:{closeText:"طي",name:"كود",openText:"توسيع"},collapsible:{closeText:"إخفاء",name:"خصائص",openText:"إظهار"},pre:{copy:"نسخ الكود إلى الحافظة"}},sidebar:{close:"إغلاق",toggle:"تبديل"},selectMenu:{create:'إنشاء "{label}"',noData:"لا توجد بيانات",noMatch:"لا توجد نتائج مطابقة",search:"بحث…"},slideover:{close:"إغلاق"},table:{noData:"لا توجد بيانات"},toast:{close:"إغلاق"}}}),gz=be({name:"Azərbaycanca",code:"az",messages:{alert:{close:"Bağla"},authForm:{hidePassword:"Şifrəni gizlət",showPassword:"Şifrəni göstər",submit:"Davam et"},banner:{close:"Bağla"},calendar:{nextMonth:"Növbəti ay",nextYear:"Növbəti il",prevMonth:"Əvvəlki ay",prevYear:"Əvvəlki il"},carousel:{dots:"Göstərmək üçün slayd seçin",goto:"Slayd {slide} keç",next:"Növbəti",prev:"Əvvəlki"},chatPrompt:{placeholder:"Buraya mesajınızı yazın…"},chatPromptSubmit:{label:"Göndər"},chatReasoning:{thinking:"Düşünür…",thought:"Düşündü",thoughtFor:"{duration} düşündü"},colorMode:{dark:"Qaranlıq",light:"İşıqlı",switchToDark:"Qaranlıq rejimə keç",switchToLight:"İşıqlı rejimə keç",system:"Sistem"},commandPalette:{back:"Geri",close:"Bağla",noData:"Məlumat yoxdur",noMatch:"Uyğun məlumat tapılmadı",placeholder:"Əmr daxil edin və ya axtarın…"},contentSearch:{links:"Bağlantılar",theme:"Tema"},contentSearchButton:{label:"Axtar…"},contentToc:{title:"Bu səhifədə"},dropdownMenu:{noMatch:"Uyğun məlumat tapılmadı",search:"Axtar…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Axtar…"},dashboardSidebarCollapse:{collapse:"Yan paneli daralt",expand:"Yan paneli genişlət"},dashboardSidebarToggle:{close:"Yan paneli bağla",open:"Yan paneli aç"},error:{clear:"Ana səhifəyə qayıt"},fileUpload:{removeFile:"{filename} sil"},header:{close:"Menyunu bağla",open:"Menyunu aç"},inputMenu:{create:'"{label}" yarat',noData:"Məlumat yoxdur",noMatch:"Uyğun məlumat tapılmadı"},inputNumber:{decrement:"Azalt",increment:"Artır"},modal:{close:"Bağla"},pricingTable:{caption:"Qiymət planlarının müqayisəsi"},prose:{codeCollapse:{closeText:"Daralt",name:"kod",openText:"Genişlət"},collapsible:{closeText:"Gizlət",name:"xüsusiyyətlər",openText:"Göstər"},pre:{copy:"Kodu buferə kopyala"}},sidebar:{close:"Bağla",toggle:"Dəyişdir"},selectMenu:{create:'"{label}" yarat',noData:"Məlumat yoxdur",noMatch:"Uyğun məlumat tapılmadı",search:"Axtar…"},slideover:{close:"Bağla"},table:{noData:"Məlumat yoxdur"},toast:{close:"Bağla"}}}),vz=be({name:"Беларуская",code:"be",messages:{alert:{close:"Закрыць"},authForm:{hidePassword:"Схаваць пароль",showPassword:"Паказаць пароль",submit:"Працягнуць"},banner:{close:"Закрыць"},calendar:{nextMonth:"Наступны месяц",nextYear:"Наступны год",prevMonth:"Папярэдні месяц",prevYear:"Папярэдні год"},carousel:{dots:"Выберыце слайд для адлюстравання",goto:"Перайсці да {slide}",next:"Далей",prev:"Назад"},chatPrompt:{placeholder:"Увядзіце сваё паведамленне тут…"},chatPromptSubmit:{label:"Адправіць"},chatReasoning:{thinking:"Думае…",thought:"Падумаў",thoughtFor:"Думаў {duration}"},colorMode:{dark:"Цёмная",light:"Светлая",switchToDark:"Пераключыцца на цёмны рэжым",switchToLight:"Пераключыцца на светлы рэжым",system:"Сістэмная"},commandPalette:{back:"Назад",close:"Закрыць",noData:"Няма даных",noMatch:"Супадзенняў не знойдзена",placeholder:"Увядзіце каманду або выканайце пошук…"},contentSearch:{links:"Спасылкі",theme:"Тэма"},contentSearchButton:{label:"Пошук…"},contentToc:{title:"На гэтай старонцы"},dropdownMenu:{noMatch:"Супадзенняў не знойдзена",search:"Пошук…"},dashboardSearch:{theme:"Тэма"},dashboardSearchButton:{label:"Пошук…"},dashboardSidebarCollapse:{collapse:"Згарнуць бакавую панэль",expand:"Разгарнуць бакавую панэль"},dashboardSidebarToggle:{close:"Закрыць бакавую панэль",open:"Адкрыць бакавую панэль"},error:{clear:"Вярнуцца на галоўную"},fileUpload:{removeFile:"Выдаліць {filename}"},header:{close:"Закрыць меню",open:"Адкрыць меню"},inputMenu:{create:'Стварыць "{label}"',noData:"Няма даных",noMatch:"Супадзенняў не знойдзена"},inputNumber:{decrement:"Паменшыць",increment:"Павялічыць"},modal:{close:"Закрыць"},pricingTable:{caption:"Параўнанне платных планаў"},prose:{codeCollapse:{closeText:"Згарнуць",name:"код",openText:"Разгарнуць"},collapsible:{closeText:"Схаваць",name:"уласцівасці",openText:"Паказаць"},pre:{copy:"Скапіяваць код у буфер абмену"}},sidebar:{close:"Закрыць",toggle:"Пераключыць"},selectMenu:{create:'Стварыць "{label}"',noData:"Няма даных",noMatch:"Супадзенняў не знойдзена",search:"Пошук…"},slideover:{close:"Закрыць"},table:{noData:"Няма даных"},toast:{close:"Закрыць"}}}),yz=be({name:"Български",code:"bg",messages:{alert:{close:"Затворете"},authForm:{hidePassword:"Скрий паролата",showPassword:"Покажи паролата",submit:"Продължи"},banner:{close:"Затвори"},calendar:{nextMonth:"Следващ месец",nextYear:"Следваща година",prevMonth:"Предишен месец",prevYear:"Предишна година"},carousel:{dots:"Изберете слайд за показване",goto:"Отидете на слайд {slide}",next:"Напред",prev:"Назад"},chatPrompt:{placeholder:"Въведете съобщение…"},chatPromptSubmit:{label:"Изпрати"},chatReasoning:{thinking:"Мисли…",thought:"Помисли",thoughtFor:"Мислил {duration}"},colorMode:{dark:"Тъмно",light:"Светло",switchToDark:"Превключи към тъмен режим",switchToLight:"Превключи към светъл режим",system:"Система"},commandPalette:{back:"Назад",close:"Затворете",noData:"Няма данни",noMatch:"Няма съвпадение на данни",placeholder:"Въведете команда или потърсете…"},contentSearch:{links:"Връзки",theme:"Тема"},contentSearchButton:{label:"Търсене"},contentToc:{title:"Съдържание"},dropdownMenu:{noMatch:"Няма съвпадение на данни",search:"Потърсете…"},dashboardSearch:{theme:"Тема"},dashboardSearchButton:{label:"Търсене"},dashboardSidebarCollapse:{collapse:"Свий",expand:"Разшири"},dashboardSidebarToggle:{close:"Затвори",open:"Отвори"},error:{clear:"Изчисти"},fileUpload:{removeFile:"Премахни {filename}"},header:{close:"Затвори",open:"Отвори"},inputMenu:{create:'Създайте "{label}"',noData:"Няма данни",noMatch:"Няма съвпадение на данни"},inputNumber:{decrement:"Намаляване",increment:"Увеличаване"},modal:{close:"Затворете"},pricingTable:{caption:"Ценова таблица"},prose:{codeCollapse:{closeText:"Сгъни",name:"код",openText:"Разгъни"},collapsible:{closeText:"Скрий",name:"свойства",openText:"Покажи"},pre:{copy:"Копирай кода в клипборда"}},sidebar:{close:"Затворете",toggle:"Превключване"},selectMenu:{create:'Създайте "{label}"',noData:"Няма данни",noMatch:"Няма съвпадение на данни",search:"Потърсете…"},slideover:{close:"Затворете"},table:{noData:"Няма данни"},toast:{close:"Затворете"}}}),bz=be({name:"বাংলা",code:"bn",messages:{alert:{close:"বন্ধ করুন"},authForm:{hidePassword:"পাসওয়ার্ড লুকান",showPassword:"পাসওয়ার্ড দেখান",submit:"চালিয়ে যান"},banner:{close:"বন্ধ করুন"},calendar:{nextMonth:"পরবর্তী মাস",nextYear:"পরবর্তী বছর",prevMonth:"পূর্ববর্তী মাস",prevYear:"পূর্ববর্তী বছর"},carousel:{dots:"প্রদর্শনের জন্য স্লাইড নির্বাচন করুন",goto:"স্লাইড {slide} এ যান",next:"পরবর্তী",prev:"পূর্ববর্তী"},chatPrompt:{placeholder:"এখানে আপনার বার্তা লিখুন…"},chatPromptSubmit:{label:"প্রেরণ করুন"},chatReasoning:{thinking:"ভাবছে…",thought:"ভেবেছে",thoughtFor:"{duration} ভেবেছে"},colorMode:{dark:"গাঢ়",light:"হালকা",switchToDark:"গাঢ় মোডে পরিবর্তন করুন",switchToLight:"হালকা মোডে পরিবর্তন করুন",system:"সিস্টেম"},commandPalette:{back:"পেছনে",close:"বন্ধ করুন",noData:"কোন তথ্য নেই",noMatch:"কোন মিল পাওয়া যায়নি",placeholder:"কমান্ড টাইপ করুন বা অনুসন্ধান করুন…"},contentSearch:{links:"লিংকসমূহ",theme:"থিম"},contentSearchButton:{label:"অনুসন্ধান করুন…"},contentToc:{title:"এই পৃষ্ঠায়"},dropdownMenu:{noMatch:"কোন মিল পাওয়া যায়নি",search:"অনুসন্ধান করুন…"},dashboardSearch:{theme:"থিম"},dashboardSearchButton:{label:"অনুসন্ধান করুন…"},dashboardSidebarCollapse:{collapse:"সাইডবার সংকুচিত করুন",expand:"সাইডবার প্রসারিত করুন"},dashboardSidebarToggle:{close:"সাইডবার বন্ধ করুন",open:"সাইডবার খুলুন"},error:{clear:"হোম পেজে ফিরে যান"},fileUpload:{removeFile:"{filename} সরান"},header:{close:"মেনু বন্ধ করুন",open:"মেনু খুলুন"},inputMenu:{create:'"{label}" তৈরি করুন',noData:"কোন তথ্য নেই",noMatch:"কোন মিল পাওয়া যায়নি"},inputNumber:{decrement:"হ্রাস করুন",increment:"বৃদ্ধি করুন"},modal:{close:"বন্ধ করুন"},pricingTable:{caption:"প্রাইসিং প্ল্যানের তুলনা"},prose:{codeCollapse:{closeText:"সংকুচিত করুন",name:"কোড",openText:"প্রসারিত করুন"},collapsible:{closeText:"লুকান",name:"বৈশিষ্ট্যসমূহ",openText:"দেখান"},pre:{copy:"কোড ক্লিপবোর্ডে কপি করুন"}},sidebar:{close:"বন্ধ করুন",toggle:"টগল করুন"},selectMenu:{create:'"{label}" তৈরি করুন',noData:"কোন তথ্য নেই",noMatch:"কোন মিল পাওয়া যায়নি",search:"অনুসন্ধান করুন…"},slideover:{close:"বন্ধ করুন"},table:{noData:"কোন তথ্য নেই"},toast:{close:"বন্ধ করুন"}}}),Ez=be({name:"Català",code:"ca",messages:{alert:{close:"Tancar"},authForm:{hidePassword:"Amagar contrasenya",showPassword:"Mostrar contrasenya",submit:"Continuar"},banner:{close:"Tancar"},calendar:{nextMonth:"Mes següent",nextYear:"Any següent",prevMonth:"Mes anterior",prevYear:"Any anterior"},carousel:{dots:"Tria la diapositiva a mostrar",goto:"Anar a la diapositiva {slide}",next:"Següent",prev:"Anterior"},chatPrompt:{placeholder:"Escriu el teu missatge aquí…"},chatPromptSubmit:{label:"Enviar"},chatReasoning:{thinking:"Pensant…",thought:"Ha pensat",thoughtFor:"Ha pensat durant {duration}"},colorMode:{dark:"Fosc",light:"Clar",switchToDark:"Canviar a mode fosc",switchToLight:"Canviar a mode clar",system:"Sistema"},commandPalette:{back:"Enrere",close:"Tancar",noData:"Sense dades",noMatch:"No hi ha dades coincidents",placeholder:"Escriu una ordre o cerca…"},contentSearch:{links:"Enllaços",theme:"Tema"},contentSearchButton:{label:"Cercar…"},contentToc:{title:"En aquesta pàgina"},dropdownMenu:{noMatch:"No hi ha dades coincidents",search:"Cerca…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Cercar…"},dashboardSidebarCollapse:{collapse:"Contraure barra lateral",expand:"Expandir barra lateral"},dashboardSidebarToggle:{close:"Tancar barra lateral",open:"Obrir barra lateral"},error:{clear:"Tornar a l'inici"},fileUpload:{removeFile:"Eliminar {filename}"},header:{close:"Tancar menú",open:"Obrir menú"},inputMenu:{create:'Crear "{label}"',noData:"Sense dades",noMatch:"No hi ha dades coincidents"},inputNumber:{decrement:"Decrementar",increment:"Incrementar"},modal:{close:"Tancar"},pricingTable:{caption:"Comparació de plans de preu"},prose:{codeCollapse:{closeText:"Replega",name:"codi",openText:"Desplega"},collapsible:{closeText:"Amaga",name:"propietats",openText:"Mostra"},pre:{copy:"Copiar codi al portapapers"}},sidebar:{close:"Tancar",toggle:"Canviar"},selectMenu:{create:'Crear "{label}"',noData:"Sense dades",noMatch:"No hi ha dades coincidents",search:"Cerca…"},slideover:{close:"Tancar"},table:{noData:"Sense dades"},toast:{close:"Tancar"}}}),Cz=be({name:"کوردی",code:"ckb",dir:"rtl",messages:{alert:{close:"داخستن"},authForm:{hidePassword:"شاردنەوەی تێپەڕەوشە",showPassword:"پیشاندانی تێپەڕەوشە",submit:"بەردەوام بە"},banner:{close:"داخستن"},calendar:{nextMonth:"مانگی داهاتوو",nextYear:"ساڵی داهاتوو",prevMonth:"مانگی پێشوو",prevYear:"ساڵی پێشوو"},carousel:{dots:"سلایدێک هەڵبژێرە بۆ پیشاندان",goto:"بڕۆ بۆ سلایدی {slide}",next:"دواتر",prev:"پێشتر"},chatPrompt:{placeholder:"نامەکەت لێرە بنوسە..."},chatPromptSubmit:{label:"ناردن"},chatReasoning:{thinking:"بیرکردنەوە…",thought:"بیری کردەوە",thoughtFor:"بە ماوەی {duration} بیری کردەوە"},colorMode:{dark:"تاریک",light:"ڕووناک",switchToDark:"گۆڕین بۆ دۆخی تاریک",switchToLight:"گۆڕین بۆ دۆخی ڕووناک",system:"سیستەم"},commandPalette:{back:"گەڕانەوە",close:"داخستن",noData:"هیچ داتایەک نییە",noMatch:"هیچ ئەنجامێک نەدۆزرایەوە",placeholder:"فەرمانێک بنووسە یان بگەڕێ…"},contentSearch:{links:"بەستەرەکان",theme:"ڕووکار"},contentSearchButton:{label:"گەڕان…"},contentToc:{title:"لەم پەڕەیەدا"},dropdownMenu:{noMatch:"هیچ ئەنجامێک نەدۆزرایەوە",search:"گەڕان…"},dashboardSearch:{theme:"ڕووکار"},dashboardSearchButton:{label:"گەڕان…"},dashboardSidebarCollapse:{collapse:"داخستنی لای تەنیشت",expand:"فراوانکردنی لای تەنیشت"},dashboardSidebarToggle:{close:"داخستنی لاتەنیشت",open:"کردنەوەی لاتەنیشت"},error:{clear:"گەڕانەوە بۆ سەرەتا"},fileUpload:{removeFile:"{filename} بسڕەوە"},header:{close:"داخستنی پێڕست",open:"کردنەوەی پێڕست"},inputMenu:{create:'"{label}" زیادکردنی',noData:"هیچ داتایەک نییە",noMatch:"هیچ ئەنجامێک نەدۆزرایەوە"},inputNumber:{decrement:"کەمکردنەوە",increment:"زیادکردن"},modal:{close:"داخستن"},pricingTable:{caption:"بەراورکردنی پلانی نرخدانان"},prose:{codeCollapse:{closeText:"داخستن",name:"کۆد",openText:"فراوانکردن"},collapsible:{closeText:"شاردنەوە",name:"تایبەتمەندییەکان",openText:"پیشاندان"},pre:{copy:"لەبەرگرتنەوەی کۆد"}},sidebar:{close:"داخستن",toggle:"گۆڕین"},selectMenu:{create:'"{label}" زیادکردنی',noData:"هیچ داتایەک نییە",noMatch:"هیچ ئەنجامێک نەدۆزرایەوە",search:"گەڕان…"},slideover:{close:"داخستن"},table:{noData:"هیچ داتایەک نییە"},toast:{close:"داخستن"}}}),xz=be({name:"Čeština",code:"cs",messages:{alert:{close:"Zavřít"},authForm:{hidePassword:"Skrýt heslo",showPassword:"Zobrazit heslo",submit:"Pokračovat"},banner:{close:"Zavřít"},calendar:{nextMonth:"Další měsíc",nextYear:"Další rok",prevMonth:"Předchozí měsíc",prevYear:"Předchozí rok"},carousel:{dots:"Vyberte snímek k zobrazení",goto:"Přejít na {slide}",next:"Další",prev:"Předchozí"},chatPrompt:{placeholder:"Zde napište svůj text…"},chatPromptSubmit:{label:"Odeslat"},chatReasoning:{thinking:"Přemýšlí…",thought:"Přemýšlel",thoughtFor:"Přemýšlel {duration}"},colorMode:{dark:"Tmavý",light:"Světlý",switchToDark:"Přepnout na tmavý režim",switchToLight:"Přepnout na světlý režim",system:"Systémový"},commandPalette:{back:"Zpět",close:"Zavřít",noData:"Žádná data",noMatch:"Žádná shoda",placeholder:"Zadejte příkaz nebo hledejte…"},contentSearch:{links:"Odkazy",theme:"Barevný režim"},contentSearchButton:{label:"Hledat…"},contentToc:{title:"Na této stránce"},dropdownMenu:{noMatch:"Žádná shoda",search:"Hledat…"},dashboardSearch:{theme:"Barevný režim"},dashboardSearchButton:{label:"Hledat…"},dashboardSidebarCollapse:{collapse:"Sbalit postranní panel",expand:"Rozbalit postranní panel"},dashboardSidebarToggle:{close:"Zavřít postranní panel",open:"Otevřít postranní panel"},error:{clear:"Zpět na úvod"},fileUpload:{removeFile:"Odebrat {filename}"},header:{close:"Zavřít menu",open:"Otevřít menu"},inputMenu:{create:'Vytvořit "{label}"',noData:"Žádná data",noMatch:"Žádná shoda"},inputNumber:{decrement:"Snížit",increment:"Zvýšit"},modal:{close:"Zavřít"},pricingTable:{caption:"Porovnání cenových plánů"},prose:{codeCollapse:{closeText:"Sbalit",name:"kód",openText:"Rozbalit"},collapsible:{closeText:"Skrýt",name:"vlastnosti",openText:"Zobrazit"},pre:{copy:"Kopírovat kód do schránky"}},sidebar:{close:"Zavřít",toggle:"Přepnout"},selectMenu:{create:'Vytvořit "{label}"',noData:"Žádná data",noMatch:"Žádná shoda",search:"Hledat…"},slideover:{close:"Zavřít"},table:{noData:"Žádná data"},toast:{close:"Zavřít"}}}),wz=be({name:"Danish",code:"da",messages:{alert:{close:"Luk"},authForm:{hidePassword:"Skjul adgangskode",showPassword:"Vis adgangskode",submit:"Fortsæt"},banner:{close:"Luk"},calendar:{nextMonth:"Næste måned",nextYear:"Næste år",prevMonth:"Forrige måned",prevYear:"Forrige år"},carousel:{dots:"Vælg dias til visning",goto:"Gå til slide {slide}",next:"Næste",prev:"Forrige"},chatPrompt:{placeholder:"Skriv din besked her…"},chatPromptSubmit:{label:"Send"},chatReasoning:{thinking:"Tænker…",thought:"Tænkte",thoughtFor:"Tænkte i {duration}"},colorMode:{dark:"Mørk",light:"Lys",switchToDark:"Skift til mørk tilstand",switchToLight:"Skift til lys tilstand",system:"System"},commandPalette:{back:"Tilbage",close:"Luk",noData:"Ingen data",noMatch:"Ingen matchende data",placeholder:"Skriv en kommando eller søg…"},contentSearch:{links:"Links",theme:"Tema"},contentSearchButton:{label:"Søg…"},contentToc:{title:"På denne side"},dropdownMenu:{noMatch:"Ingen matchende data",search:"Søg…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Søg…"},dashboardSidebarCollapse:{collapse:"Sammenfold sidemenu",expand:"Udvid sidemenu"},dashboardSidebarToggle:{close:"Luk sidemenu",open:"Åbn sidemenu"},error:{clear:"Tilbage til forsiden"},fileUpload:{removeFile:"Fjern {filename}"},header:{close:"Luk menu",open:"Åbn menu"},inputMenu:{create:'Opret "{label}"',noData:"Ingen data",noMatch:"Ingen matchende data"},inputNumber:{decrement:"Reducer",increment:"Øg"},modal:{close:"Luk"},pricingTable:{caption:"Prisplaneringssammenligning"},prose:{codeCollapse:{closeText:"Sammenfold",name:"kode",openText:"Udvid"},collapsible:{closeText:"Skjul",name:"egenskaber",openText:"Vis"},pre:{copy:"Kopiér kode til udklipsholder"}},sidebar:{close:"Luk",toggle:"Skift"},selectMenu:{create:'Opret "{label}"',noData:"Ingen data",noMatch:"Ingen matchende data",search:"Søg…"},slideover:{close:"Luk"},table:{noData:"Ingen data"},toast:{close:"Luk"}}}),Dz=be({name:"Deutsch",code:"de",messages:{alert:{close:"Schließen"},authForm:{hidePassword:"Passwort verbergen",showPassword:"Passwort anzeigen",submit:"Weiter"},banner:{close:"Schließen"},calendar:{nextMonth:"Nächster Monat",nextYear:"Nächstes Jahr",prevMonth:"Vorheriger Monat",prevYear:"Vorheriges Jahr"},carousel:{dots:"Folie zur Anzeige auswählen",goto:"Gehe zu {slide}",next:"Weiter",prev:"Zurück"},chatPrompt:{placeholder:"Hier schreiben Sie Ihre Nachricht…"},chatPromptSubmit:{label:"Senden"},chatReasoning:{thinking:"Denkt nach…",thought:"Nachgedacht",thoughtFor:"{duration} nachgedacht"},colorMode:{dark:"Dunkel",light:"Hell",switchToDark:"Zum dunklen Modus wechseln",switchToLight:"Zum hellen Modus wechseln",system:"System"},commandPalette:{back:"Zurück",close:"Schließen",noData:"Keine Daten",noMatch:"Nichts gefunden",placeholder:"Geben Sie einen Befehl ein oder suchen Sie…"},contentSearch:{links:"Links",theme:"Thema"},contentSearchButton:{label:"Suchen…"},contentToc:{title:"Auf dieser Seite"},dropdownMenu:{noMatch:"Nichts gefunden",search:"Suchen…"},dashboardSearch:{theme:"Thema"},dashboardSearchButton:{label:"Suchen…"},dashboardSidebarCollapse:{collapse:"Seitenleiste einklappen",expand:"Seitenleiste erweitern"},dashboardSidebarToggle:{close:"Seitenleiste schließen",open:"Seitenleiste öffnen"},error:{clear:"Zurück zur Startseite"},fileUpload:{removeFile:"{filename} entfernen"},header:{close:"Menü schließen",open:"Menü öffnen"},inputMenu:{create:'"{label}" erstellen',noData:"Keine Daten",noMatch:"Nichts gefunden"},inputNumber:{decrement:"Verringern",increment:"Erhöhen"},modal:{close:"Schließen"},pricingTable:{caption:"Preisplanvergleich"},prose:{codeCollapse:{closeText:"Reduzieren",name:"Code",openText:"Erweitern"},collapsible:{closeText:"Ausblenden",name:"Eigenschaften",openText:"Anzeigen"},pre:{copy:"Code in die Zwischenablage kopieren"}},sidebar:{close:"Schließen",toggle:"Umschalten"},selectMenu:{create:'"{label}" erstellen',noData:"Keine Daten",noMatch:"Nichts gefunden",search:"Suchen…"},slideover:{close:"Schließen"},table:{noData:"Keine Daten"},toast:{close:"Schließen"}}}),Az=be({name:"Schweizerdeutsch",code:"de-CH",messages:{alert:{close:"Schliessen"},authForm:{hidePassword:"Passwort verbergen",showPassword:"Passwort anzeigen",submit:"Weiter"},banner:{close:"Schliessen"},calendar:{nextMonth:"Nächster Monat",nextYear:"Nächstes Jahr",prevMonth:"Vorheriger Monat",prevYear:"Vorheriges Jahr"},carousel:{dots:"Folie zur Anzeige auswählen",goto:"Gehe zu {slide}",next:"Weiter",prev:"Zurück"},chatPrompt:{placeholder:"Hier schreiben Sie Ihre Nachricht…"},chatPromptSubmit:{label:"Senden"},chatReasoning:{thinking:"Denkt nach…",thought:"Nachgedacht",thoughtFor:"{duration} nachgedacht"},colorMode:{dark:"Dunkel",light:"Hell",switchToDark:"Zum dunklen Modus wechseln",switchToLight:"Zum hellen Modus wechseln",system:"System"},commandPalette:{back:"Zurück",close:"Schliessen",noData:"Keine Daten",noMatch:"Nichts gefunden",placeholder:"Geben Sie einen Befehl ein oder suchen Sie…"},contentSearch:{links:"Links",theme:"Thema"},contentSearchButton:{label:"Suchen…"},contentToc:{title:"Auf dieser Seite"},dropdownMenu:{noMatch:"Nichts gefunden",search:"Suchen…"},dashboardSearch:{theme:"Thema"},dashboardSearchButton:{label:"Suchen…"},dashboardSidebarCollapse:{collapse:"Seitenleiste einklappen",expand:"Seitenleiste erweitern"},dashboardSidebarToggle:{close:"Seitenleiste schliessen",open:"Seitenleiste öffnen"},error:{clear:"Zurück zur Startseite"},fileUpload:{removeFile:"{filename} entfernen"},header:{close:"Menü schliessen",open:"Menü öffnen"},inputMenu:{create:'"{label}" erstellen',noData:"Keine Daten",noMatch:"Nichts gefunden"},inputNumber:{decrement:"Verringern",increment:"Erhöhen"},modal:{close:"Schliessen"},pricingTable:{caption:"Preisplanvergleich"},prose:{codeCollapse:{closeText:"Reduzieren",name:"Code",openText:"Erweitern"},collapsible:{closeText:"Ausblenden",name:"Eigenschaften",openText:"Anzeigen"},pre:{copy:"Code in die Zwischenablage kopieren"}},sidebar:{close:"Schliessen",toggle:"Umschalten"},selectMenu:{create:'"{label}" erstellen',noData:"Keine Daten",noMatch:"Nichts gefunden",search:"Suchen…"},slideover:{close:"Schliessen"},table:{noData:"Keine Daten"},toast:{close:"Schliessen"}}}),Bz=be({name:"Ελληνικά",code:"el",messages:{alert:{close:"Κλείσιμο"},authForm:{hidePassword:"Απόκρυψη κωδικού",showPassword:"Εμφάνιση κωδικού",submit:"Συνέχεια"},banner:{close:"Κλείσιμο"},calendar:{nextMonth:"Επόμενος μήνας",nextYear:"Επόμενο έτος",prevMonth:"Προηγούμενος μήνας",prevYear:"Προηγούμενο έτος"},carousel:{dots:"Επιλέξτε διαφάνεια για εμφάνιση",goto:"Μετάβαση στη διαφάνεια {slide}",next:"Επόμενο",prev:"Προηγούμενο"},chatPrompt:{placeholder:"Εδώ γράψτε το μήνυμά σας…"},chatPromptSubmit:{label:"Αποστολή"},chatReasoning:{thinking:"Σκέφτεται…",thought:"Σκέφτηκε",thoughtFor:"Σκέφτηκε για {duration}"},colorMode:{dark:"Σκοτεινό",light:"Φωτεινό",switchToDark:"Αλλαγή σε σκοτεινή λειτουργία",switchToLight:"Αλλαγή σε φωτεινή λειτουργία",system:"Σύστημα"},commandPalette:{back:"Πίσω",close:"Κλείσιμο",noData:"Δεν υπάρχουν δεδομένα",noMatch:"Δεν βρέθηκαν δεδομένα",placeholder:"Πληκτρολογήστε μια εντολή ή αναζητήστε…"},contentSearch:{links:"Σύνδεσμοι",theme:"Θέμα"},contentSearchButton:{label:"Αναζήτηση…"},contentToc:{title:"Σε αυτή τη σελίδα"},dropdownMenu:{noMatch:"Δεν βρέθηκαν δεδομένα",search:"Αναζήτηση…"},dashboardSearch:{theme:"Θέμα"},dashboardSearchButton:{label:"Αναζήτηση…"},dashboardSidebarCollapse:{collapse:"Σύμπτυξη πλευρικής μπάρας",expand:"Επέκταση πλευρικής μπάρας"},dashboardSidebarToggle:{close:"Κλείσιμο πλευρικής μπάρας",open:"Άνοιγμα πλευρικής μπάρας"},error:{clear:"Επιστροφή στην αρχική"},fileUpload:{removeFile:"Αφαίρεση {filename}"},header:{close:"Κλείσιμο μενού",open:"Άνοιγμα μενού"},inputMenu:{create:'Δημιουργία "{label}"',noData:"Δεν υπάρχουν δεδομένα",noMatch:"Δεν βρέθηκαν δεδομένα"},inputNumber:{decrement:"Μείωση",increment:"Αύξηση"},modal:{close:"Κλείσιμο"},pricingTable:{caption:"Σύγκριση προγραμμάτων τιμολόγησης"},prose:{codeCollapse:{closeText:"Σύμπτυξη",name:"κώδικας",openText:"Επέκταση"},collapsible:{closeText:"Απόκρυψη",name:"ιδιότητες",openText:"Εμφάνιση"},pre:{copy:"Αντιγραφή κώδικα στο πρόχειρο"}},sidebar:{close:"Κλείσιμο",toggle:"Εναλλαγή"},selectMenu:{create:'Δημιουργία "{label}"',noData:"Δεν υπάρχουν δεδομένα",noMatch:"Δεν βρέθηκαν δεδομένα",search:"Αναζήτηση…"},slideover:{close:"Κλείσιμο"},table:{noData:"Δεν υπάρχουν δεδομένα"},toast:{close:"Κλείσιμο"}}}),_z=be({name:"English (United Kingdom)",code:"en-GB",messages:Fu.messages}),kz=be({name:"Español",code:"es",messages:{alert:{close:"Cerrar"},authForm:{hidePassword:"Ocultar contraseña",showPassword:"Mostrar contraseña",submit:"Continuar"},banner:{close:"Cerrar"},calendar:{nextMonth:"Mes siguiente",nextYear:"Año siguiente",prevMonth:"Mes anterior",prevYear:"Año anterior"},carousel:{dots:"Elegir diapositiva a mostrar",goto:"Ir a la diapositiva {slide}",next:"Siguiente",prev:"Anterior"},chatPrompt:{placeholder:"Escribe tu mensaje aquí…"},chatPromptSubmit:{label:"Enviar"},chatReasoning:{thinking:"Pensando…",thought:"Pensó",thoughtFor:"Pensó durante {duration}"},colorMode:{dark:"Oscuro",light:"Claro",switchToDark:"Cambiar a modo oscuro",switchToLight:"Cambiar a modo claro",system:"Sistema"},commandPalette:{back:"Atrás",close:"Cerrar",noData:"Sin datos",noMatch:"No hay datos coincidentes",placeholder:"Escribe un comando o busca…"},contentSearch:{links:"Enlaces",theme:"Tema"},contentSearchButton:{label:"Buscar…"},contentToc:{title:"En esta página"},dropdownMenu:{noMatch:"No hay datos coincidentes",search:"Buscar…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Buscar…"},dashboardSidebarCollapse:{collapse:"Colapsar barra lateral",expand:"Expandir barra lateral"},dashboardSidebarToggle:{close:"Cerrar barra lateral",open:"Abrir barra lateral"},error:{clear:"Volver al inicio"},fileUpload:{removeFile:"Eliminar {filename}"},header:{close:"Cerrar menú",open:"Abrir menú"},inputMenu:{create:'Crear "{label}"',noData:"Sin datos",noMatch:"No hay datos coincidentes"},inputNumber:{decrement:"Decrementar",increment:"Incrementar"},modal:{close:"Cerrar"},pricingTable:{caption:"Comparación de planes de precios"},prose:{codeCollapse:{closeText:"Colapsar",name:"código",openText:"Expandir"},collapsible:{closeText:"Ocultar",name:"propiedades",openText:"Mostrar"},pre:{copy:"Copiar código al portapapeles"}},sidebar:{close:"Cerrar",toggle:"Alternar"},selectMenu:{create:'Crear "{label}"',noData:"Sin datos",noMatch:"No hay datos coincidentes",search:"Buscar…"},slideover:{close:"Cerrar"},table:{noData:"Sin datos"},toast:{close:"Cerrar"}}}),Sz=be({name:"Eesti",code:"et",messages:{alert:{close:"Sulge"},authForm:{hidePassword:"Peida parool",showPassword:"Näita parooli",submit:"Jätka"},banner:{close:"Sulge"},calendar:{nextMonth:"Järgmine kuu",nextYear:"Järgmine aasta",prevMonth:"Eelmine kuu",prevYear:"Eelmine aasta"},carousel:{dots:"Valige kuvatav slaid",goto:"Mine slaidile {slide}",next:"Järg",prev:"Eel"},chatPrompt:{placeholder:"Siia kirjutage oma sõnum…"},chatPromptSubmit:{label:"Saada"},chatReasoning:{thinking:"Mõtleb…",thought:"Mõtles",thoughtFor:"Mõtles {duration}"},colorMode:{dark:"Tume",light:"Hele",switchToDark:"Lülitu tumedasse režiimi",switchToLight:"Lülitu heledasse režiimi",system:"Süsteem"},commandPalette:{back:"Tagasi",close:"Sulge",noData:"Pole andmeid",noMatch:"Pole vastavaid andmeid",placeholder:"Sisesta käsk või otsi…"},contentSearch:{links:"Lingid",theme:"Teema"},contentSearchButton:{label:"Otsi…"},contentToc:{title:"Sellel lehel"},dropdownMenu:{noMatch:"Pole vastavaid andmeid",search:"Otsi…"},dashboardSearch:{theme:"Teema"},dashboardSearchButton:{label:"Otsi…"},dashboardSidebarCollapse:{collapse:"Ahenda külgriba",expand:"Laienda külgriba"},dashboardSidebarToggle:{close:"Sulge külgriba",open:"Ava külgriba"},error:{clear:"Tagasi avalehele"},fileUpload:{removeFile:"Eemalda {filename}"},header:{close:"Sulge menüü",open:"Ava menüü"},inputMenu:{create:'Loo "{label}"',noData:"Pole andmeid",noMatch:"Pole vastavaid andmeid"},inputNumber:{decrement:"Vähenda",increment:"Suurenda"},modal:{close:"Sulge"},pricingTable:{caption:"Hinna plaanide võrdlus"},prose:{codeCollapse:{closeText:"Ahenda",name:"kood",openText:"Laienda"},collapsible:{closeText:"Peida",name:"omadused",openText:"Näita"},pre:{copy:"Kopeeri kood lõikelauale"}},sidebar:{close:"Sulge",toggle:"Lülita"},selectMenu:{create:'Loo "{label}"',noData:"Pole andmeid",noMatch:"Pole vastavaid andmeid",search:"Otsi…"},slideover:{close:"Sulge"},table:{noData:"Pole andmeid"},toast:{close:"Sulge"}}}),Tz=be({name:"Euskera",code:"eu",messages:{alert:{close:"Itxi"},authForm:{hidePassword:"Pasahitza ezkutatu",showPassword:"Pasahitza erakutsi",submit:"Jarraitu"},banner:{close:"Itxi"},calendar:{nextMonth:"Hurrengo hilabetea",nextYear:"Hurrengo urtea",prevMonth:"Aurretiko hilabetea",prevYear:"Aurretiko urtea"},carousel:{dots:"Erakutsi beharreko diapositiba aukeratu",goto:"Joan diapositibara {slide}",next:"Hurrengoa",prev:"Aurretikoa"},chatPrompt:{placeholder:"Idatzi zure mezua hemen..."},chatPromptSubmit:{label:"Bidali"},chatReasoning:{thinking:"Pentsatzen…",thought:"Pentsatu du",thoughtFor:"{duration} pentsatzen"},colorMode:{dark:"Iluna",light:"Argia",switchToDark:"Aldatu ilunera",switchToLight:"Aldatu argira",system:"Sistema"},commandPalette:{back:"Atzera",close:"Itxi",noData:"Daturik gabe",noMatch:"Ez da datu bat ere aurkitu",placeholder:"Idatzi komando bat edo bilatu..."},contentSearch:{links:"Estekak",theme:"Gaia"},contentSearchButton:{label:"Bilatu…"},contentToc:{title:"Orri honetan"},dropdownMenu:{noMatch:"Ez da datu bat ere aurkitu",search:"Bilatu…"},dashboardSearch:{theme:"Gaia"},dashboardSearchButton:{label:"Bilatu…"},dashboardSidebarCollapse:{collapse:"Alboko barra itxi",expand:"Alboko barra zabaldu"},dashboardSidebarToggle:{close:"Alboko barra itxi",open:"Alboko barra zabaldu"},error:{clear:"Hasierara itzuli"},fileUpload:{removeFile:"Ezabatu {filename}"},header:{close:"Menua itxi",open:"Menua zabaldu"},inputMenu:{create:"Sortu {label}",noData:"Daturik gabe",noMatch:"Ez da datu bat ere aurkitu"},inputNumber:{decrement:"Murriztu",increment:"Handitu"},modal:{close:"Itxi"},pricingTable:{caption:"Prezio-plana alderatzea"},prose:{codeCollapse:{closeText:"Murriztu",name:"kodea",openText:"Zabaldu"},collapsible:{closeText:"Ezkutatu",name:"propietateak",openText:"Erakutsi"},pre:{copy:"Kopiatu kodea clipboard-era"}},sidebar:{close:"Itxi",toggle:"Txandakatu"},selectMenu:{create:"Sortu {label}",noData:"Daturik gabe",noMatch:"Ez da datu bat ere aurkitu",search:"Bilatu…"},slideover:{close:"Itxi"},table:{noData:"Daturik gabe"},toast:{close:"Itxi"}}}),Fz=be({name:"فارسی",code:"fa-IR",dir:"rtl",messages:{alert:{close:"بستن"},authForm:{hidePassword:"پنهان کردن رمز عبور",showPassword:"نمایش رمز عبور",submit:"ادامه"},banner:{close:"بستن"},calendar:{nextMonth:"ماه آینده",nextYear:"سال آینده",prevMonth:"ماه گذشته",prevYear:"سال گذشته"},carousel:{dots:"اسلاید مورد نظر برای نمایش را انتخاب کنید",goto:"رفتن به اسلاید {slide}",next:"بعدی",prev:"قبلی"},chatPrompt:{placeholder:"اینجا پیام خود را بنویسید…"},chatPromptSubmit:{label:"ارسال"},chatReasoning:{thinking:"در حال فکر کردن…",thought:"فکر کرد",thoughtFor:"به مدت {duration} فکر کرد"},colorMode:{dark:"تیره",light:"روشن",switchToDark:"تغییر به حالت تیره",switchToLight:"تغییر به حالت روشن",system:"سیستم"},commandPalette:{back:"بازگشت",close:"بستن",noData:"داده‌ای موجود نیست",noMatch:"داده‌ای یافت نشد",placeholder:"یک دستور وارد کنید یا جستجو کنید…"},contentSearch:{links:"پیوندها",theme:"تم"},contentSearchButton:{label:"جستجو…"},contentToc:{title:"در این صفحه"},dropdownMenu:{noMatch:"داده‌ای یافت نشد",search:"جستجو…"},dashboardSearch:{theme:"تم"},dashboardSearchButton:{label:"جستجو…"},dashboardSidebarCollapse:{collapse:"جمع کردن نوار کناری",expand:"گسترش نوار کناری"},dashboardSidebarToggle:{close:"بستن نوار کناری",open:"باز کردن نوار کناری"},error:{clear:"بازگشت به صفحه اصلی"},fileUpload:{removeFile:"حذف {filename}"},header:{close:"بستن منو",open:"باز کردن منو"},inputMenu:{create:'ایجاد "{label}"',noData:"داده‌ای موجود نیست",noMatch:"داده‌ای یافت نشد"},inputNumber:{decrement:"کاهش",increment:"افزایش"},modal:{close:"بستن"},pricingTable:{caption:"مقایسه طرح قیمت"},prose:{codeCollapse:{closeText:"جمع کردن",name:"کد",openText:"گسترش"},collapsible:{closeText:"پنهان",name:"ویژگی‌ها",openText:"نمایش"},pre:{copy:"کپی کد در کلیپ‌بورد"}},sidebar:{close:"بستن",toggle:"تغییر وضعیت"},selectMenu:{create:'ایجاد "{label}"',noData:"داده‌ای موجود نیست",noMatch:"داده‌ای یافت نشد",search:"جستجو…"},slideover:{close:"بستن"},table:{noData:"داده‌ای موجود نیست"},toast:{close:"بستن"}}}),Pz=be({name:"Suomeksi",code:"fi",messages:{alert:{close:"Sulje"},authForm:{hidePassword:"Piilota salasana",showPassword:"Näytä salasana",submit:"Jatka"},banner:{close:"Sulje"},calendar:{nextMonth:"Seuraava kuukausi",nextYear:"Seuraava vuosi",prevMonth:"Edellinen kuukausi",prevYear:"Edellinen vuosi"},carousel:{dots:"Valitse näytettävä dia",goto:"Siirry sivulle {slide}",next:"Seuraava",prev:"Edellinen"},chatPrompt:{placeholder:"Kirjoita viestisi tähän…"},chatPromptSubmit:{label:"Lähetä"},chatReasoning:{thinking:"Ajattelee…",thought:"Ajatteli",thoughtFor:"Ajatteli {duration}"},colorMode:{dark:"Tumma",light:"Vaalea",switchToDark:"Vaihda tummaan tilaan",switchToLight:"Vaihda vaaleaan tilaan",system:"Järjestelmä"},commandPalette:{back:"Takaisin",close:"Sulje",noData:"Ei tietoja",noMatch:"Ei vastaavia tietoja",placeholder:"Kirjoita komento tai hae…"},contentSearch:{links:"Linkit",theme:"Teema"},contentSearchButton:{label:"Hae…"},contentToc:{title:"Tällä sivulla"},dropdownMenu:{noMatch:"Ei vastaavia tietoja",search:"Hae…"},dashboardSearch:{theme:"Teema"},dashboardSearchButton:{label:"Hae…"},dashboardSidebarCollapse:{collapse:"Supista sivupalkki",expand:"Laajenna sivupalkki"},dashboardSidebarToggle:{close:"Sulje sivupalkki",open:"Avaa sivupalkki"},error:{clear:"Takaisin etusivulle"},fileUpload:{removeFile:"Poista {filename}"},header:{close:"Sulje valikko",open:"Avaa valikko"},inputMenu:{create:'Luo "{label}"',noData:"Ei tietoja",noMatch:"Ei vastaavia tietoja"},inputNumber:{decrement:"Vähennä",increment:"Kasvata"},modal:{close:"Sulje"},pricingTable:{caption:"Hinnoitellut suunnitelmat"},prose:{codeCollapse:{closeText:"Supista",name:"koodi",openText:"Laajenna"},collapsible:{closeText:"Piilota",name:"ominaisuudet",openText:"Näytä"},pre:{copy:"Kopioi koodi leikepöydälle"}},sidebar:{close:"Sulje",toggle:"Vaihda"},selectMenu:{create:'Luo "{label}"',noData:"Ei tietoja",noMatch:"Ei vastaavia tietoja",search:"Hae…"},slideover:{close:"Sulje"},table:{noData:"Ei tietoja"},toast:{close:"Sulje"}}}),Mz=be({name:"Français",code:"fr",messages:{alert:{close:"Fermer"},authForm:{hidePassword:"Masquer le mot de passe",showPassword:"Afficher le mot de passe",submit:"Continuer"},banner:{close:"Fermer"},calendar:{nextMonth:"Mois suivant",nextYear:"Année suivante",prevMonth:"Mois précédent",prevYear:"Année précédente"},carousel:{dots:"Choisir la diapositive à afficher",goto:"Aller à {slide}",next:"Suivant",prev:"Précédent"},chatPrompt:{placeholder:"Écrivez votre message ici…"},chatPromptSubmit:{label:"Envoyer"},chatReasoning:{thinking:"Réflexion en cours…",thought:"Réflexion",thoughtFor:"Réflexion pendant {duration}"},colorMode:{dark:"Sombre",light:"Clair",switchToDark:"Passer en mode sombre",switchToLight:"Passer en mode clair",system:"Système"},commandPalette:{back:"Retour",close:"Fermer",noData:"Aucune donnée",noMatch:"Aucune donnée correspondante",placeholder:"Tapez une commande ou recherchez…"},contentSearch:{links:"Liens",theme:"Thème"},contentSearchButton:{label:"Rechercher…"},contentToc:{title:"Sur cette page"},dropdownMenu:{noMatch:"Aucune donnée correspondante",search:"Rechercher…"},dashboardSearch:{theme:"Thème"},dashboardSearchButton:{label:"Rechercher…"},dashboardSidebarCollapse:{collapse:"Replier la barre latérale",expand:"Déployer la barre latérale"},dashboardSidebarToggle:{close:"Fermer la barre latérale",open:"Ouvrir la barre latérale"},error:{clear:"Retour à l'accueil"},fileUpload:{removeFile:"Supprimer {filename}"},header:{close:"Fermer le menu",open:"Ouvrir le menu"},inputMenu:{create:'Créer "{label}"',noData:"Aucune donnée",noMatch:"Aucune donnée correspondante"},inputNumber:{decrement:"Diminuer",increment:"Augmenter"},modal:{close:"Fermer"},pricingTable:{caption:"Comparaison des plans de prix"},prose:{codeCollapse:{closeText:"Réduire",name:"code",openText:"Développer"},collapsible:{closeText:"Masquer",name:"propriétés",openText:"Afficher"},pre:{copy:"Copier le code dans le presse-papiers"}},sidebar:{close:"Fermer",toggle:"Basculer"},selectMenu:{create:'Créer "{label}"',noData:"Aucune donnée",noMatch:"Aucune donnée correspondante",search:"Rechercher…"},slideover:{close:"Fermer"},table:{noData:"Aucune donnée"},toast:{close:"Fermer"}}}),Oz=be({name:"Galego",code:"gl",messages:{alert:{close:"Pechar"},authForm:{hidePassword:"Ocultar contrasinal",showPassword:"Amosar contrasinal",submit:"Continuar"},banner:{close:"Pechar"},calendar:{nextMonth:"Mes seguinte",nextYear:"Ano seguinte",prevMonth:"Mes anterior",prevYear:"Ano anterior"},carousel:{dots:"Escoller diapositiva a amostrar",goto:"Ir á diapositiva {slide}",next:"Seguinte",prev:"Anterior"},chatPrompt:{placeholder:"Escribe a túa mensaxe aquí…"},chatPromptSubmit:{label:"Enviar"},chatReasoning:{thinking:"Pensando…",thought:"Pensou",thoughtFor:"Pensou durante {duration}"},colorMode:{dark:"Oscuro",light:"Claro",switchToDark:"Cambiar a modo oscuro",switchToLight:"Cambiar a modo claro",system:"Sistema"},commandPalette:{back:"Atrás",close:"Pechar",noData:"Sen datos",noMatch:"Non hai datos coincidentes",placeholder:"Escribe un comando ou busca…"},contentSearch:{links:"Ligazóns",theme:"Tema"},contentSearchButton:{label:"Buscar…"},contentToc:{title:"Nesta páxina"},dropdownMenu:{noMatch:"Non hai datos coincidentes",search:"Buscar…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Buscar…"},dashboardSidebarCollapse:{collapse:"Contraer barra lateral",expand:"Despregar barra lateral"},dashboardSidebarToggle:{close:"Pechar barra lateral",open:"Abrir barra lateral"},error:{clear:"Volver ao inicio"},fileUpload:{removeFile:"Eliminar {filename}"},header:{close:"Pechar menú",open:"Abrir menú"},inputMenu:{create:'Crear "{label}"',noData:"Sen datos",noMatch:"Non hai datos coincidentes"},inputNumber:{decrement:"Diminuír",increment:"Aumentar"},modal:{close:"Pechar"},pricingTable:{caption:"Comparación de plans de prezos"},prose:{codeCollapse:{closeText:"Contraer",name:"código",openText:"Despregar"},collapsible:{closeText:"Ocultar",name:"propiedades",openText:"Amosar"},pre:{copy:"Copiar código ao portapapeis"}},sidebar:{close:"Pechar",toggle:"Alternar"},selectMenu:{create:'Crear "{label}"',noData:"Sen datos",noMatch:"Non hai datos coincidentes",search:"Buscar…"},slideover:{close:"Pechar"},table:{noData:"Sen datos"},toast:{close:"Pechar"}}}),Iz=be({name:"Hebrew",code:"he",dir:"rtl",messages:{alert:{close:"סגור"},authForm:{hidePassword:"הסתר סיסמה",showPassword:"הצג סיסמה",submit:"המשך"},banner:{close:"סגור"},calendar:{nextMonth:"חודש הבא",nextYear:"שנה הבאה",prevMonth:"חודש קודם",prevYear:"שנה קודמת"},carousel:{dots:"בחר שקופית להצגה",goto:"מעבר ל {slide}",next:"הבא",prev:"הקודם"},chatPrompt:{placeholder:"כתוב את ההודעה שלך כאן…"},chatPromptSubmit:{label:"שלח"},chatReasoning:{thinking:"חושב…",thought:"חשב",thoughtFor:"חשב במשך {duration}"},colorMode:{dark:"כהה",light:"בהיר",switchToDark:"עבור למצב כהה",switchToLight:"עבור למצב בהיר",system:"מערכת"},commandPalette:{back:"חזור",close:"סגור",noData:"אין נתונים זמינים",noMatch:"לא נמצאה התאמה",placeholder:"הקלד פקודה…"},contentSearch:{links:"קישורים",theme:"ערכת נושא"},contentSearchButton:{label:"חיפוש…"},contentToc:{title:"בדף זה"},dropdownMenu:{noMatch:"לא נמצאה התאמה",search:"חפש…"},dashboardSearch:{theme:"ערכת נושא"},dashboardSearchButton:{label:"חיפוש…"},dashboardSidebarCollapse:{collapse:"כווץ סרגל צד",expand:"הרחב סרגל צד"},dashboardSidebarToggle:{close:"סגור סרגל צד",open:"פתח סרגל צד"},error:{clear:"חזרה לדף הבית"},fileUpload:{removeFile:"הסר {filename}"},header:{close:"סגור תפריט",open:"פתח תפריט"},inputMenu:{create:'צור "{label}"',noData:"אין נתונים",noMatch:"אין התאמה"},inputNumber:{decrement:"הפחת",increment:"הוסף"},modal:{close:"סגור"},pricingTable:{caption:"שיפור מחירון"},prose:{codeCollapse:{closeText:"כווץ",name:"קוד",openText:"הרחב"},collapsible:{closeText:"הסתר",name:"מאפיינים",openText:"הצג"},pre:{copy:"העתק קוד ללוח"}},sidebar:{close:"סגור",toggle:"החלף"},selectMenu:{create:'צור "{label}"',noData:"אין נתונים",noMatch:"לא נמצאה התאמה",search:"חפש…"},slideover:{close:"סגור"},table:{noData:"אין נתונים להצגה"},toast:{close:"סגור"}}}),Rz=be({name:"Hindi",code:"hi",messages:{alert:{close:"बंद करें"},authForm:{hidePassword:"पासवर्ड छिपाएं",showPassword:"पासवर्ड दिखाएं",submit:"जारी रखें"},banner:{close:"बंद करें"},calendar:{nextMonth:"अगला महीना",nextYear:"अगला वर्ष",prevMonth:"पिछला महीना",prevYear:"पिछला वर्ष"},carousel:{dots:"प्रदर्शित करने के लिए स्लाइड चुनें",goto:"स्लाइड {slide} पर जाएं",next:"अगला",prev:"पिछला"},chatPrompt:{placeholder:"यहाँ आपका संदेश लिखें…"},chatPromptSubmit:{label:"भेजें"},chatReasoning:{thinking:"सोच रहा है…",thought:"सोचा",thoughtFor:"{duration} सोचा"},colorMode:{dark:"गहरा",light:"हल्का",switchToDark:"गहरे मोड में बदलें",switchToLight:"हल्के मोड में बदलें",system:"सिस्टम"},commandPalette:{back:"वापस",close:"बंद करें",noData:"कोई डेटा नहीं",noMatch:"कोई मेल खाता डेटा नहीं",placeholder:"एक आदेश या खोज टाइप करें…"},contentSearch:{links:"लिंक्स",theme:"थीम"},contentSearchButton:{label:"खोजें…"},contentToc:{title:"इस पृष्ठ पर"},dropdownMenu:{noMatch:"कोई मेल खाता डेटा नहीं",search:"खोजें…"},dashboardSearch:{theme:"थीम"},dashboardSearchButton:{label:"खोजें…"},dashboardSidebarCollapse:{collapse:"साइडबार संकुचित करें",expand:"साइडबार विस्तारित करें"},dashboardSidebarToggle:{close:"साइडबार बंद करें",open:"साइडबार खोलें"},error:{clear:"होम पेज पर वापस जाएं"},fileUpload:{removeFile:"{filename} हटाएं"},header:{close:"मेनू बंद करें",open:"मेनू खोलें"},inputMenu:{create:'"{label}" बनाएँ',noData:"कोई डेटा नहीं",noMatch:"कोई मेल खाता डेटा नहीं"},inputNumber:{decrement:"घटाना",increment:"बढ़ाना"},modal:{close:"बंद करें"},pricingTable:{caption:"कीमत योजनाओं की तुलना"},prose:{codeCollapse:{closeText:"संकुचित करें",name:"कोड",openText:"विस्तार करें"},collapsible:{closeText:"छिपाएँ",name:"गुण",openText:"दिखाएँ"},pre:{copy:"कोड को क्लिपबोर्ड पर कॉपी करें"}},sidebar:{close:"बंद करें",toggle:"टॉगल करें"},selectMenu:{create:'"{label}" बनाएँ',noData:"कोई डेटा नहीं",noMatch:"कोई मेल खाता डेटा नहीं",search:"खोजें…"},slideover:{close:"बंद करें"},table:{noData:"कोई डेटा नहीं"},toast:{close:"बंद करें"}}}),Lz=be({name:"Hrvatski",code:"hr",messages:{alert:{close:"Zatvori"},authForm:{hidePassword:"Sakrij lozinku",showPassword:"Prikaži lozinku",submit:"Nastavi"},banner:{close:"Zatvori"},calendar:{nextMonth:"Sljedeći mjesec",nextYear:"Sljedeća godina",prevMonth:"Prethodni mjesec",prevYear:"Prethodna godina"},carousel:{dots:"Odaberite slajd za prikaz",goto:"Idi na slajd {slide}",next:"Sljedeći",prev:"Prethodni"},chatPrompt:{placeholder:"Upišite svoju poruku ovdje…"},chatPromptSubmit:{label:"Pošalji upit"},chatReasoning:{thinking:"Razmišlja…",thought:"Razmislio",thoughtFor:"Razmišljao {duration}"},colorMode:{dark:"Tamno",light:"Svijetlo",switchToDark:"Prebaci na tamni način rada",switchToLight:"Prebaci na svijetli način rada",system:"Sustav"},commandPalette:{back:"Natrag",close:"Zatvori",noData:"Nema podataka",noMatch:"Nema odgovarajućih podataka",placeholder:"Upišite naredbu ili pretraživanje…"},contentSearch:{links:"Poveznice",theme:"Tema"},contentSearchButton:{label:"Pretraživanje…"},contentToc:{title:"Na ovoj stranici"},dropdownMenu:{noMatch:"Nema odgovarajućih podataka",search:"Pretraživanje…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Pretraživanje…"},dashboardSidebarCollapse:{collapse:"Smanji bočnu traku",expand:"Proširi bočnu traku"},dashboardSidebarToggle:{close:"Zatvori bočnu traku",open:"Otvori bočnu traku"},error:{clear:"Natrag na početnu"},fileUpload:{removeFile:"Ukloni {filename}"},header:{close:"Zatvori izbornik",open:"Otvori izbornik"},inputMenu:{create:'Stvori "{label}"',noData:"Nema podataka",noMatch:"Nema odgovarajućih podataka"},inputNumber:{decrement:"Smanji",increment:"Povećaj"},modal:{close:"Zatvori"},pricingTable:{caption:"Usporedba cjenovnih planova"},prose:{codeCollapse:{closeText:"Smanji",name:"kod",openText:"Proširi"},collapsible:{closeText:"Sakrij",name:"svojstva",openText:"Prikaži"},pre:{copy:"Kopiraj kod u međuspremnik"}},sidebar:{close:"Zatvori",toggle:"Prebaci"},selectMenu:{create:'Stvori "{label}"',noData:"Nema podataka",noMatch:"Nema odgovarajućih podataka",search:"Pretraživanje…"},slideover:{close:"Zatvori"},table:{noData:"Nema podataka"},toast:{close:"Zatvori"}}}),qz=be({name:"Magyar",code:"hu",messages:{alert:{close:"Bezárás"},authForm:{hidePassword:"Jelszó elrejtése",showPassword:"Jelszó megjelenítése",submit:"Folytatás"},banner:{close:"Bezárás"},calendar:{nextMonth:"Következő hónap",nextYear:"Következő év",prevMonth:"Előző hónap",prevYear:"Előző év"},carousel:{dots:"Válassza ki a megjelenítendő diát",goto:"Ugrás ide {slide}",next:"Következő",prev:"Előző"},chatPrompt:{placeholder:"Írd be a kérdésedet itt…"},chatPromptSubmit:{label:"Küldés"},chatReasoning:{thinking:"Gondolkodik…",thought:"Gondolkodott",thoughtFor:"{duration} gondolkodott"},colorMode:{dark:"Sötét",light:"Világos",switchToDark:"Váltás sötét módra",switchToLight:"Váltás világos módra",system:"Rendszer"},commandPalette:{back:"Vissza",close:"Bezárás",noData:"Nincs adat",noMatch:"Nincs találat",placeholder:"Írjon be egy parancsot vagy keressen…"},contentSearch:{links:"Linkek",theme:"Téma"},contentSearchButton:{label:"Keresés…"},contentToc:{title:"Ezen az oldalon"},dropdownMenu:{noMatch:"Nincs találat",search:"Keresés…"},dashboardSearch:{theme:"Téma"},dashboardSearchButton:{label:"Keresés…"},dashboardSidebarCollapse:{collapse:"Oldalsáv összecsukása",expand:"Oldalsáv kinyitása"},dashboardSidebarToggle:{close:"Oldalsáv bezárása",open:"Oldalsáv megnyitása"},error:{clear:"Vissza a főoldalra"},fileUpload:{removeFile:"{filename} eltávolítása"},header:{close:"Menü bezárása",open:"Menü megnyitása"},inputMenu:{create:'"{label}" létrehozása',noData:"Nincs adat",noMatch:"Nincs találat"},inputNumber:{decrement:"Csökkent",increment:"Növel"},modal:{close:"Bezárás"},pricingTable:{caption:"Árlista összehasonlítása"},prose:{codeCollapse:{closeText:"Összecsuk",name:"kód",openText:"Kinyit"},collapsible:{closeText:"Elrejt",name:"tulajdonságok",openText:"Mutat"},pre:{copy:"Kód másolása a vágólapra"}},sidebar:{close:"Bezárás",toggle:"Váltás"},selectMenu:{create:'"{label}" létrehozása',noData:"Nincs adat",noMatch:"Nincs találat",search:"Keresés…"},slideover:{close:"Bezárás"},table:{noData:"Nincs adat"},toast:{close:"Bezárás"}}}),$z=be({name:"Հայերեն",code:"hy",messages:{alert:{close:"Փակել"},authForm:{hidePassword:"Թաքցնել գաղտնաբառը",showPassword:"Ցույց տալ գաղտնաբառը",submit:"Շարունակել"},banner:{close:"Փակել"},calendar:{nextMonth:"Հաջորդ ամիս",nextYear:"Հաջորդ տարի",prevMonth:"Նախորդ ամիս",prevYear:"Նախորդ տարի"},carousel:{dots:"Ընտրեք ցուցադրելու սլայդը",goto:"Անցնել {slide}-ին",next:"Առաջ",prev:"Հետ"},chatPrompt:{placeholder:"Շարունակել"},chatPromptSubmit:{label:"Շարունակել"},chatReasoning:{thinking:"Մտածում է…",thought:"Մտածեց",thoughtFor:"Մտածեց {duration}"},colorMode:{dark:"Մուգ",light:"Լուսավոր",switchToDark:"Անցնել մուգ ռեժիմի",switchToLight:"Անցնել լուսավոր ռեժիմի",system:"Համակարգային"},commandPalette:{back:"Հետ",close:"Փակել",noData:"Տվյալներ չկան",noMatch:"Համընկնումներ չեն գտնվել",placeholder:"Մուտքագրեք հրաման կամ որոնեք…"},contentSearch:{links:"Հղումներ",theme:"Թեմա"},contentSearchButton:{label:"Որոնել…"},contentToc:{title:"Այս էջում"},dropdownMenu:{noMatch:"Համընկնումներ չեն գտնվել",search:"Որոնում…"},dashboardSearch:{theme:"Թեմա"},dashboardSearchButton:{label:"Որոնել…"},dashboardSidebarCollapse:{collapse:"Կոլապսել կողային վահանակը",expand:"Ընդլայնել կողային վահանակը"},dashboardSidebarToggle:{close:"Փակել կողային վահանակը",open:"Բացել կողային վահանակը"},error:{clear:"Վերադառնալ գլխավոր էջ"},fileUpload:{removeFile:"Ջնջել {filename}"},header:{close:"Փակել ընտրացանկը",open:"Բացել ընտրացանկը"},inputMenu:{create:'Ստեղծել "{label}"',noData:"Տվյալներ չկան",noMatch:"Համընկնումներ չեն գտնվել"},inputNumber:{decrement:"Պակասեցնել",increment:"Ավելացնել"},modal:{close:"Փակել"},pricingTable:{caption:"Գնումների համեմատություն"},prose:{codeCollapse:{closeText:"Կոլապսել",name:"կոդ",openText:"Ընդլայնել"},collapsible:{closeText:"Թաքցնել",name:"հատկություններ",openText:"Ցույց տալ"},pre:{copy:"Պատճենել կոդը սեղմատախտակին"}},sidebar:{close:"Փակել",toggle:"Փոխարկել"},selectMenu:{create:'Ստեղծել "{label}"',noData:"Տվյալներ չկան",noMatch:"Համընկնումներ չեն գտնվել",search:"Որոնում…"},slideover:{close:"Փակել"},table:{noData:"Տվյալներ չկան"},toast:{close:"Փակել"}}}),Nz=be({name:"Bahasa Indonesia",code:"id",messages:{alert:{close:"Tutup"},authForm:{hidePassword:"Sembunyikan kata sandi",showPassword:"Tampilkan kata sandi",submit:"Lanjutkan"},banner:{close:"Tutup"},calendar:{nextMonth:"Bulan berikutnya",nextYear:"Tahun berikutnya",prevMonth:"Bulan sebelumnya",prevYear:"Tahun sebelumnya"},carousel:{dots:"Pilih slide untuk ditampilkan",goto:"Pergi ke slide {slide}",next:"Berikutnya",prev:"Sebelumnya"},chatPrompt:{placeholder:"Tulis pesan Anda di sini…"},chatPromptSubmit:{label:"Kirim"},chatReasoning:{thinking:"Berpikir…",thought:"Telah berpikir",thoughtFor:"Berpikir selama {duration}"},colorMode:{dark:"Gelap",light:"Terang",switchToDark:"Beralih ke mode gelap",switchToLight:"Beralih ke mode terang",system:"Sistem"},commandPalette:{back:"Kembali",close:"Tutup",noData:"Tidak ada data",noMatch:"Tidak ada data yang cocok",placeholder:"Ketik perintah atau cari…"},contentSearch:{links:"Tautan",theme:"Tema"},contentSearchButton:{label:"Cari…"},contentToc:{title:"Pada halaman ini"},dropdownMenu:{noMatch:"Tidak ada data yang cocok",search:"Cari…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Cari…"},dashboardSidebarCollapse:{collapse:"Ciutkan sidebar",expand:"Perluas sidebar"},dashboardSidebarToggle:{close:"Tutup sidebar",open:"Buka sidebar"},error:{clear:"Kembali ke beranda"},fileUpload:{removeFile:"Hapus {filename}"},header:{close:"Tutup menu",open:"Buka menu"},inputMenu:{create:'Buat "{label}"',noData:"Tidak ada data",noMatch:"Tidak ada data yang cocok"},inputNumber:{decrement:"Kurangi",increment:"Tambah"},modal:{close:"Tutup"},pricingTable:{caption:"Perbandingan Harga"},prose:{codeCollapse:{closeText:"Ciutkan",name:"kode",openText:"Perluas"},collapsible:{closeText:"Sembunyikan",name:"properti",openText:"Tampilkan"},pre:{copy:"Salin kode ke clipboard"}},sidebar:{close:"Tutup",toggle:"Alihkan"},selectMenu:{create:'Buat "{label}"',noData:"Tidak ada data",noMatch:"Tidak ada data yang cocok",search:"Cari…"},slideover:{close:"Tutup"},table:{noData:"Tidak ada data"},toast:{close:"Tutup"}}}),jz=be({name:"Icelandic",code:"is",messages:{alert:{close:"Loka"},authForm:{hidePassword:"Fela lykilorð",showPassword:"Sýna lykilorð",submit:"Áfram"},banner:{close:"Loka"},calendar:{nextMonth:"Næsti mánuður",nextYear:"Næsta ár",prevMonth:"Fyrri mánuður",prevYear:"Fyrra ár"},carousel:{dots:"Veldu mynd til að sýna",goto:"Fara á mynd {slide}",next:"Næsta",prev:"Fyrri"},chatPrompt:{placeholder:"Skrifaðu skilaboðin þín hér…"},chatPromptSubmit:{label:"Senda fyrirspurn"},chatReasoning:{thinking:"Hugsar…",thought:"Hugsaði",thoughtFor:"Hugsaði í {duration}"},colorMode:{dark:"Dökkt",light:"Ljóst",switchToDark:"Skipta yfir í dökkan ham",switchToLight:"Skipta yfir í ljósan ham",system:"Kerfi"},commandPalette:{back:"Til baka",close:"Loka",noData:"Engin gögn",noMatch:"Engin gögn fundust",placeholder:"Sláðu inn skipun eða leitaðu…"},contentSearch:{links:"Tenglar",theme:"Þema"},contentSearchButton:{label:"Leita…"},contentToc:{title:"Á þessari síðu"},dropdownMenu:{noMatch:"Engin gögn fundust",search:"Leita…"},dashboardSearch:{theme:"Þema"},dashboardSearchButton:{label:"Leita…"},dashboardSidebarCollapse:{collapse:"Fella hliðarstiku saman",expand:"Stækka hliðarstiku"},dashboardSidebarToggle:{close:"Loka hliðarstiku",open:"Opna hliðarstiku"},error:{clear:"Til baka heim"},fileUpload:{removeFile:"Fjarlægja {filename}"},header:{close:"Loka valmynd",open:"Opna valmynd"},inputMenu:{create:'Búa til "{label}"',noData:"Engin gögn",noMatch:"Engin gögn fundust"},inputNumber:{decrement:"Minnka",increment:"Auka"},modal:{close:"Loka"},pricingTable:{caption:"Samanburður verðflokka"},prose:{codeCollapse:{closeText:"Fella saman",name:"kóði",openText:"Stækka"},collapsible:{closeText:"Fela",name:"eiginleikar",openText:"Sýna"},pre:{copy:"Afrita kóða á klippiborð"}},sidebar:{close:"Loka",toggle:"Skipta"},selectMenu:{create:'Búa til "{label}"',noData:"Engin gögn",noMatch:"Engin gögn fundust",search:"Leita…"},slideover:{close:"Loka"},table:{noData:"Engin gögn"},toast:{close:"Loka"}}}),Vz=be({name:"Italiano",code:"it",messages:{alert:{close:"Chiudi"},authForm:{hidePassword:"Nascondi password",showPassword:"Mostra password",submit:"Continua"},banner:{close:"Chiudi"},calendar:{nextMonth:"Mese successivo",nextYear:"Anno successivo",prevMonth:"Mese precedente",prevYear:"Anno precedente"},carousel:{dots:"Scegli diapositiva da visualizzare",goto:"Vai alla slide {slide}",next:"Successiva",prev:"Precedente"},chatPrompt:{placeholder:"Scrivi il tuo messaggio qui…"},chatPromptSubmit:{label:"Invia"},chatReasoning:{thinking:"Pensando…",thought:"Ha pensato",thoughtFor:"Ha pensato per {duration}"},colorMode:{dark:"Scuro",light:"Chiaro",switchToDark:"Passa alla modalità scura",switchToLight:"Passa alla modalità chiara",system:"Sistema"},commandPalette:{back:"Indietro",close:"Chiudi",noData:"Nessun dato",noMatch:"Nessun dato corrispondente",placeholder:"Digita un comando o cerca…"},contentSearch:{links:"Collegamenti",theme:"Tema"},contentSearchButton:{label:"Cerca…"},contentToc:{title:"In questa pagina"},dropdownMenu:{noMatch:"Nessun dato corrispondente",search:"Cerca…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Cerca…"},dashboardSidebarCollapse:{collapse:"Comprimi barra laterale",expand:"Espandi barra laterale"},dashboardSidebarToggle:{close:"Chiudi barra laterale",open:"Apri barra laterale"},error:{clear:"Torna alla home"},fileUpload:{removeFile:"Rimuovi {filename}"},header:{close:"Chiudi menu",open:"Apri menu"},inputMenu:{create:'Crea "{label}"',noData:"Nessun dato",noMatch:"Nessun dato corrispondente"},inputNumber:{decrement:"Diminuisci",increment:"Aumenta"},modal:{close:"Chiudi"},pricingTable:{caption:"Confronto dei piani di prezzo"},prose:{codeCollapse:{closeText:"Comprimi",name:"codice",openText:"Espandi"},collapsible:{closeText:"Nascondi",name:"proprietà",openText:"Mostra"},pre:{copy:"Copia codice negli appunti"}},sidebar:{close:"Chiudi",toggle:"Alterna"},selectMenu:{create:'Crea "{label}"',noData:"Nessun dato",noMatch:"Nessun dato corrispondente",search:"Cerca…"},slideover:{close:"Chiudi"},table:{noData:"Nessun dato"},toast:{close:"Chiudi"}}}),zz=be({name:"日本語",code:"ja",messages:{alert:{close:"閉じる"},authForm:{hidePassword:"パスワードを隠す",showPassword:"パスワードを表示",submit:"続ける"},banner:{close:"閉じる"},calendar:{nextMonth:"翌月",nextYear:"翌年",prevMonth:"前月",prevYear:"前年"},carousel:{dots:"表示するスライドを選択",goto:"スライド {slide} に移動",next:"次へ",prev:"前へ"},chatPrompt:{placeholder:"ここにメッセージを入力してください…"},chatPromptSubmit:{label:"送信"},chatReasoning:{thinking:"考えています…",thought:"考えました",thoughtFor:"{duration}考えました"},colorMode:{dark:"ダーク",light:"ライト",switchToDark:"ダークモードに切り替え",switchToLight:"ライトモードに切り替え",system:"システム"},commandPalette:{back:"戻る",close:"閉じる",noData:"データがありません",noMatch:"一致するデータがありません",placeholder:"コマンドを入力するか検索…"},contentSearch:{links:"リンク",theme:"テーマ"},contentSearchButton:{label:"検索…"},contentToc:{title:"このページ内"},dropdownMenu:{noMatch:"一致するデータがありません",search:"検索…"},dashboardSearch:{theme:"テーマ"},dashboardSearchButton:{label:"検索…"},dashboardSidebarCollapse:{collapse:"サイドバーを折りたたむ",expand:"サイドバーを展開"},dashboardSidebarToggle:{close:"サイドバーを閉じる",open:"サイドバーを開く"},error:{clear:"ホームに戻る"},fileUpload:{removeFile:"{filename}を削除"},header:{close:"メニューを閉じる",open:"メニューを開く"},inputMenu:{create:'"{label}"を作成',noData:"データがありません",noMatch:"一致するデータがありません"},inputNumber:{decrement:"減らす",increment:"増やす"},modal:{close:"閉じる"},pricingTable:{caption:"価格プランの比較"},prose:{codeCollapse:{closeText:"折りたたむ",name:"コード",openText:"展開"},collapsible:{closeText:"非表示",name:"プロパティ",openText:"表示"},pre:{copy:"コードをクリップボードにコピー"}},sidebar:{close:"閉じる",toggle:"切り替え"},selectMenu:{create:'"{label}"を作成',noData:"データがありません",noMatch:"一致するデータがありません",search:"検索…"},slideover:{close:"閉じる"},table:{noData:"データがありません"},toast:{close:"閉じる"}}}),Uz=be({name:"ქართული",code:"ka",messages:{alert:{close:"დახურვა"},authForm:{hidePassword:"პაროლის დამალვა",showPassword:"პაროლის ჩვენება",submit:"გაგრძელება"},banner:{close:"დახურვა"},calendar:{nextMonth:"შემდეგი თვე",nextYear:"შემდეგი წელი",prevMonth:"წინა თვე",prevYear:"წინა წელი"},carousel:{dots:"აირჩიეთ სლაიდი საჩვენებლად",goto:"გადასვლა სლაიდ {slide}-ზე",next:"შემდეგი",prev:"წინა"},chatPrompt:{placeholder:"დაწერეთ თქვენი მესიჯი აქ…"},chatPromptSubmit:{label:"შეტყობინების გაგზავნა"},chatReasoning:{thinking:"ფიქრობს…",thought:"იფიქრა",thoughtFor:"{duration} ფიქრობდა"},colorMode:{dark:"ბნელი",light:"ნათელი",switchToDark:"ბნელ რეჯიმზე გადასვლა",switchToLight:"ნათელ რეჯიმზე გადასვლა",system:"სისტემური"},commandPalette:{back:"უკან",close:"დახურვა",noData:"მონაცემები არ არის",noMatch:"შესატყვისი მონაცემები არ არის",placeholder:"ჩაწერეთ ბრძანება ან ძიება…"},contentSearch:{links:"ბმულები",theme:"თემა"},contentSearchButton:{label:"ძიება…"},contentToc:{title:"ამ გვერდზე"},dropdownMenu:{noMatch:"შესატყვისი მონაცემები არ არის",search:"ძიება…"},dashboardSearch:{theme:"თემა"},dashboardSearchButton:{label:"ძიება…"},dashboardSidebarCollapse:{collapse:"გვერდითი ზოლის ჩაკეცვა",expand:"გვერდითი ზოლის გაშლა"},dashboardSidebarToggle:{close:"გვერდითი ზოლის დახურვა",open:"გვერდითი ზოლის გახსნა"},error:{clear:"მთავარზე დაბრუნება"},fileUpload:{removeFile:"მოაშორე {filename}"},header:{close:"მენიუს დახურვა",open:"მენიუს გახსნა"},inputMenu:{create:'შექმენი "{label}"',noData:"მონაცემები არ არის",noMatch:"შესატყვისი მონაცემები არ არის"},inputNumber:{decrement:"დაკლება",increment:"დამატება"},modal:{close:"დახურვა"},pricingTable:{caption:"ფასის გეგმების შედარება"},prose:{codeCollapse:{closeText:"ჩაკეცვა",name:"კოდი",openText:"გაშლა"},collapsible:{closeText:"დახურვა",name:"თვისებები",openText:"ჩვენება"},pre:{copy:"კოდის კოპირება ბუფერში"}},sidebar:{close:"დახურვა",toggle:"გადართვა"},selectMenu:{create:'დაამატე "{label}"',noData:"მონაცემები არ არის",noMatch:"შესატყვისი მონაცემები არ არის",search:"ძიება…"},slideover:{close:"დახურვა"},table:{noData:"მონაცემები არ არის"},toast:{close:"დახურვა"}}}),Hz=be({name:"Қазақша",code:"kk",messages:{alert:{close:"Жабу"},authForm:{hidePassword:"Құпия сөзді жасыру",showPassword:"Құпия сөзді көрсету",submit:"Жалғастыру"},banner:{close:"Жабу"},calendar:{nextMonth:"Келесі ай",nextYear:"Келесі жыл",prevMonth:"Алдыңғы ай",prevYear:"Алдыңғы жыл"},carousel:{dots:"Көрсету үшін слайдты таңдаңыз",goto:"{slide} слайдқа өту",next:"Келесі",prev:"Алдыңғы"},chatPrompt:{placeholder:"Хабар енгізіңіз…"},chatPromptSubmit:{label:"Жіберу"},chatReasoning:{thinking:"Ойлануда…",thought:"Ойланды",thoughtFor:"{duration} ойланды"},colorMode:{dark:"Қараңғы",light:"Ашық",switchToDark:"Қараңғы режимге ауысу",switchToLight:"Ашық режимге ауысу",system:"Жүйе"},commandPalette:{back:"Артқа",close:"Жабу",noData:"Деректер жоқ",noMatch:"Сәйкес келетін деректер жоқ",placeholder:"Команда енгізіңіз немесе іздеңіз…"},contentSearch:{links:"Сілтемелер",theme:"Тақырып"},contentSearchButton:{label:"Іздеу"},contentToc:{title:"Мазмұны"},dropdownMenu:{noMatch:"Сәйкес келетін деректер жоқ",search:"Іздеу…"},dashboardSearch:{theme:"Тақырып"},dashboardSearchButton:{label:"Іздеу"},dashboardSidebarCollapse:{collapse:"Жию",expand:"Кеңейту"},dashboardSidebarToggle:{close:"Жабу",open:"Ашу"},error:{clear:"Тазалау"},fileUpload:{removeFile:"{filename} жою"},header:{close:"Жабу",open:"Ашу"},inputMenu:{create:'"{label}" жасау',noData:"Деректер жоқ",noMatch:"Сәйкес келетін деректер жоқ"},inputNumber:{decrement:"Азайту",increment:"Арттыру"},modal:{close:"Жабу"},pricingTable:{caption:"Баға кестесі"},prose:{codeCollapse:{closeText:"Жиыру",name:"код",openText:"Кеңейту"},collapsible:{closeText:"Жасыру",name:"қасиеттер",openText:"Көрсету"},pre:{copy:"Кодты алмасу буферіне көшіру"}},sidebar:{close:"Жабу",toggle:"Ауыстыру"},selectMenu:{create:'"{label}" жасау',noData:"Деректер жоқ",noMatch:"Сәйкес келетін деректер жоқ",search:"Іздеу…"},slideover:{close:"Жабу"},table:{noData:"Деректер жоқ"},toast:{close:"Жабу"}}}),Kz=be({name:"ភាសាខ្មែរ",code:"km",messages:{alert:{close:"បិទ"},authForm:{hidePassword:"លាក់ពាក្យសម្ងាត់",showPassword:"បង្ហាញពាក្យសម្ងាត់",submit:"បន្ត"},banner:{close:"បិទ"},calendar:{nextMonth:"ខែបន្ទាប់",nextYear:"ឆ្នាំបន្ទាប់",prevMonth:"ខែមុន",prevYear:"ឆ្នាំមុន"},carousel:{dots:"ជ្រើសរើស​ស្លាយ​ដើម្បី​បង្ហាញ",goto:"ឡើងទៅស្លាយ {slide}",next:"បន្ទាប់",prev:"មុន"},chatPrompt:{placeholder:"សួរស្រឡាញ់មួយបីនេះមានប្រភេទបានទាមទារទេ…"},chatPromptSubmit:{label:"សាក់"},chatReasoning:{thinking:"កំពុងគិត…",thought:"គិតរួចហើយ",thoughtFor:"គិតរយៈពេល {duration}"},colorMode:{dark:"ងងឹត",light:"ភ្លឺ",switchToDark:"ប្តូរទៅរបៀបងងឹត",switchToLight:"ប្តូរទៅរបៀបភ្លឺ",system:"ប្រព័ន្ធ"},commandPalette:{back:"ត្រឡប់",close:"បិទ",noData:"មិនមានទិន្នន័យ",noMatch:"មិនមានទិន្នន័យដែលត្រូវគ្នាទេ",placeholder:"វាយពាក្យបញ្ជា ឬស្វែងរក…"},contentSearch:{links:"តំណភ្ជាប់",theme:"រូបរាង"},contentSearchButton:{label:"ស្វែងរក…"},contentToc:{title:"នៅលើទំព័រនេះ"},dropdownMenu:{noMatch:"មិនមានទិន្នន័យដែលត្រូវគ្នាទេ",search:"ស្វែងរក…"},dashboardSearch:{theme:"រូបរាង"},dashboardSearchButton:{label:"ស្វែងរក…"},dashboardSidebarCollapse:{collapse:"បង្រួមបារចំហៀង",expand:"ពង្រីកបារចំហៀង"},dashboardSidebarToggle:{close:"បិទបារចំហៀង",open:"បើកបារចំហៀង"},error:{clear:"ត្រឡប់ទៅទំព័រដើម"},fileUpload:{removeFile:"លុប {filename}"},header:{close:"បិទម៉ឺនុយ",open:"បើកម៉ឺនុយ"},inputMenu:{create:'បង្កើត "{label}"',noData:"មិនមានទិន្នន័យ",noMatch:"មិនមានទិន្នន័យដែលត្រូវគ្នាទេ"},inputNumber:{decrement:"បន្ថយ",increment:"បង្កើន"},modal:{close:"បិទ"},pricingTable:{caption:"បញ្ជីតម្លៃបន្ទប់បន្ទប់"},prose:{codeCollapse:{closeText:"បង្រួម",name:"កូដ",openText:"ពង្រីក"},collapsible:{closeText:"លាក់",name:"លក្ខណៈសម្បត្តិ",openText:"បង្ហាញ"},pre:{copy:"ចម្លងកូដទៅក្ដារតម្បៀតខ្ទាស់"}},sidebar:{close:"បិទ",toggle:"បិទ/បើក"},selectMenu:{create:'បង្កើត "{label}"',noData:"មិនមានទិន្នន័យ",noMatch:"មិនមានទិន្នន័យដែលត្រូវគ្នាទេ",search:"ស្វែងរក…"},slideover:{close:"បិទ"},table:{noData:"មិនមានទិន្នន័យ"},toast:{close:"បិទ"}}}),Wz=be({name:"한국어",code:"ko",messages:{alert:{close:"닫기"},authForm:{hidePassword:"비밀번호 숨기기",showPassword:"비밀번호 표시",submit:"계속"},banner:{close:"닫기"},calendar:{nextMonth:"다음 달",nextYear:"다음 해",prevMonth:"이전 달",prevYear:"이전 해"},carousel:{dots:"표시할 슬라이드 선택",goto:"{slide} 페이지로 이동",next:"다음",prev:"이전"},chatPrompt:{placeholder:"여기에 메시지를 입력하세요…"},chatPromptSubmit:{label:"전송"},chatReasoning:{thinking:"생각하는 중…",thought:"생각했습니다",thoughtFor:"{duration} 동안 생각했습니다"},colorMode:{dark:"다크",light:"라이트",switchToDark:"다크 모드로 전환",switchToLight:"라이트 모드로 전환",system:"시스템"},commandPalette:{back:"뒤로",close:"닫기",noData:"데이터가 없습니다.",noMatch:"일치하는 데이터가 없습니다.",placeholder:"명령을 입력하거나 검색…"},contentSearch:{links:"링크",theme:"테마"},contentSearchButton:{label:"검색…"},contentToc:{title:"이 페이지에서"},dropdownMenu:{noMatch:"일치하는 데이터가 없습니다.",search:"검색…"},dashboardSearch:{theme:"테마"},dashboardSearchButton:{label:"검색…"},dashboardSidebarCollapse:{collapse:"사이드바 축소",expand:"사이드바 확장"},dashboardSidebarToggle:{close:"사이드바 닫기",open:"사이드바 열기"},error:{clear:"홈으로 돌아가기"},fileUpload:{removeFile:"{filename} 제거"},header:{close:"메뉴 닫기",open:"메뉴 열기"},inputMenu:{create:'"{label}" 생성',noData:"데이터가 없습니다.",noMatch:"일치하는 데이터가 없습니다."},inputNumber:{decrement:"감소",increment:"증가"},modal:{close:"닫기"},pricingTable:{caption:"가격 플랜 비교"},prose:{codeCollapse:{closeText:"접기",name:"코드",openText:"펼치기"},collapsible:{closeText:"숨기기",name:"속성",openText:"보기"},pre:{copy:"코드를 클립보드에 복사"}},sidebar:{close:"닫기",toggle:"토글"},selectMenu:{create:'"{label}" 생성',noData:"데이터가 없습니다.",noMatch:"일치하는 데이터가 없습니다.",search:"검색…"},slideover:{close:"닫기"},table:{noData:"데이터가 없습니다."},toast:{close:"닫기"}}}),Gz=be({name:"Кыргызча",code:"ky",messages:{alert:{close:"Жабуу"},authForm:{hidePassword:"Сырсөздү жашыруу",showPassword:"Сырсөздү көрсөтүү",submit:"Улантуу"},banner:{close:"Жабуу"},calendar:{nextMonth:"Кийинки ай",nextYear:"Кийинки жыл",prevMonth:"Алдыңкы ай",prevYear:"Алдыңкы жыл"},carousel:{dots:"Көрсөтүү үчүн слайдды тандаңыз",goto:"{slide} слайдга өтүү",next:"Кийинки",prev:"Алдыңкы"},chatPrompt:{placeholder:"Бул жерге билдирүүңүздү жазыңыз…"},chatPromptSubmit:{label:"Билдирүү жөнөтүү"},chatReasoning:{thinking:"Ойлонуда…",thought:"Ойлонду",thoughtFor:"{duration} ойлонду"},colorMode:{dark:"Караңгы",light:"Жарык",switchToDark:"Караңгы режимге өтүү",switchToLight:"Жарык режимге өтүү",system:"Система"},commandPalette:{back:"Артка",close:"Жабуу",noData:"Маалымат жок",noMatch:"Эч нерсе табылган жок",placeholder:"Буйрук киргизиңиз же издөө…"},contentSearch:{links:"Шилтемелер",theme:"Тема"},contentSearchButton:{label:"Издөө…"},contentToc:{title:"Бул бетте"},dropdownMenu:{noMatch:"Сүйлөшкөн маалыматтар жок",search:"Издөө…"},dashboardSearch:{theme:"Тема"},dashboardSearchButton:{label:"Издөө…"},dashboardSidebarCollapse:{collapse:"Каптал тилкесин жыйноо",expand:"Каптал тилкесин кеңейтүү"},dashboardSidebarToggle:{close:"Каптал тилкесин жабуу",open:"Каптал тилкесин ачуу"},error:{clear:"Башкы бетке кайтуу"},fileUpload:{removeFile:"{filename} өчүрүү"},header:{close:"Менюну жабуу",open:"Менюну ачуу"},inputMenu:{create:'"{label}" жасоо',noData:"Маалымат жок",noMatch:"Эч нерсе табылган жок"},inputNumber:{decrement:"Азайтуу",increment:"Кошуу"},modal:{close:"Жабуу"},pricingTable:{caption:"Баалардын салыштыруу таблицасы"},prose:{codeCollapse:{closeText:"Жыйноо",name:"код",openText:"Кеңейтүү"},collapsible:{closeText:"Жашыруу",name:"касиеттер",openText:"Көрсөтүү"},pre:{copy:"Кодду алмашуу буферине көчүрүү"}},sidebar:{close:"Жабуу",toggle:"Которуу"},selectMenu:{create:'"{label}" жасоо',noData:"Маалымат жок",noMatch:"Сүйлөшкөн маалыматтар жок",search:"Издөө…"},slideover:{close:"Жабуу"},table:{noData:"Маалымат жок"},toast:{close:"Жабуу"}}}),Yz=be({name:"Lëtzebuergesch",code:"lb",messages:{alert:{close:"Zoumaachen"},authForm:{hidePassword:"Passwuert verstoppen",showPassword:"Passwuert uweisen",submit:"Fortschécken"},banner:{close:"Zoumaachen"},calendar:{nextMonth:"Nächste Mount",nextYear:"Nächst Joer",prevMonth:"Virege Mount",prevYear:"Viregt Joer"},carousel:{dots:"Wielt Dia fir ze weisen",goto:"Gitt op d'Slide {Slide}",next:"Näch.",prev:"Präz."},chatPrompt:{placeholder:"Tippt hei Äre Message…"},chatPromptSubmit:{label:"Prompt schécken"},chatReasoning:{thinking:"Denkt no…",thought:"Nogeduecht",thoughtFor:"{duration} nogeduecht"},colorMode:{dark:"Donkel",light:"Liicht",switchToDark:"Op de Donkelmodus wiesselen",switchToLight:"Op de Liichtmodus wiesselen",system:"System"},commandPalette:{back:"Zréck",close:"Zoumaachen",noData:"Keng Donnéeën",noMatch:"Keng entspriechend Donnéeën",placeholder:"Tippt e Befeel oder sicht…"},contentSearch:{links:"Linken",theme:"Thema"},contentSearchButton:{label:"Sichen…"},contentToc:{title:"Op dëser Säit"},dropdownMenu:{noMatch:"Keng entspriechend Donnéeën",search:"Sichen.."},dashboardSearch:{theme:"Thema"},dashboardSearchButton:{label:"Sichen…"},dashboardSidebarCollapse:{collapse:"Sidebar zouklappen",expand:"Sidebar opklappen"},dashboardSidebarToggle:{close:"Sidebar zoumaachen",open:"Sidebar opmaachen"},error:{clear:"Zréck op d'Startsäit"},fileUpload:{removeFile:"{filename} ewechhuelen"},header:{close:"Menü zoumaachen",open:"Menü opmaachen"},inputMenu:{create:'"{label}" erstellen',noData:"Keng Donnéeën",noMatch:"Keng entspriechend Donnéeën"},inputNumber:{decrement:"Dekrementéieren",increment:"Inkrementéieren"},modal:{close:"Zoumaachen"},pricingTable:{caption:"Vergläich vun de Präispläng"},prose:{codeCollapse:{closeText:"Zouklappen",name:"code",openText:"Opklappen"},collapsible:{closeText:"Verstoppen",name:"eegenschaften",openText:"Uweisen"},pre:{copy:"Code an d'Zwëschspäicher kopéieren"}},sidebar:{close:"Zoumaachen",toggle:"Ëmschalten"},selectMenu:{create:'"{label}" erstellen',noData:"Keng Donnéeën",noMatch:"Keng entspriechend Donnéeën",search:"Sichen.."},slideover:{close:"Zoumaachen"},table:{noData:"Keng Donnéeën"},toast:{close:"Zoumaachen"}}}),Zz=be({name:"ລາວ",code:"lo",messages:{alert:{close:"ປິດ"},authForm:{hidePassword:"ເຊື່ອງລະຫັດຜ່ານ",showPassword:"ສະແດງລະຫັດຜ່ານ",submit:"ດຳເນີນການຕໍ່"},banner:{close:"ປິດ"},calendar:{nextMonth:"ເດືອນໜ້າ",nextYear:"ປີໜ້າ",prevMonth:"ເດືອນກ່ອນ",prevYear:"ປີກ່ອນ"},carousel:{dots:"ເລືອກສະໄລ້ທີ່ຈະສະແດງ",goto:"ໄປທີ່ສະໄລ້ {slide}",next:"ຕໍ່ໄປ",prev:"ກ່ອນໜ້າ"},chatPrompt:{placeholder:"ພິມຂໍ້ຄວາມຂອງທ່ານທີ່ນີ້..."},chatPromptSubmit:{label:"ສົ່ງຄຳສັ່ງ"},chatReasoning:{thinking:"ກຳລັງຄິດ…",thought:"ຄິດແລ້ວ",thoughtFor:"ຄິດເປັນເວລາ {duration}"},colorMode:{dark:"ມືດ",light:"ແຈ້ງ",switchToDark:"ປ່ຽນເປັນໂຫມດມືດ",switchToLight:"ປ່ຽນເປັນໂຫມດແຈ້ງ",system:"ລະບົບ"},commandPalette:{back:"ກັບຄືນ",close:"ປິດ",noData:"ບໍ່ມີຂໍ້ມູນ",noMatch:"ບໍ່ພົບຂໍ້ມູນທີ່ກົງກັນ",placeholder:"ພິມຄຳສັ່ງ ຫຼື ຄົ້ນຫາ..."},contentSearch:{links:"ລິ້ງ",theme:"ທີມ"},contentSearchButton:{label:"ຄົ້ນຫາ..."},contentToc:{title:"ໃນໜ້ານີ້"},dropdownMenu:{noMatch:"ບໍ່ພົບຂໍ້ມູນທີ່ກົງກັນ",search:"ຄົ້ນຫາ..."},dashboardSearch:{theme:"ທີມ"},dashboardSearchButton:{label:"ຄົ້ນຫາ..."},dashboardSidebarCollapse:{collapse:"ຫຍໍ້ແຖບດ້ານຂ້າງ",expand:"ຂະຫຍາຍແຖບດ້ານຂ້າງ"},dashboardSidebarToggle:{close:"ປິດແຖບດ້ານຂ້າງ",open:"ເປີດແຖບດ້ານຂ້າງ"},error:{clear:"ກັບໄປໜ້າຫຼັກ"},fileUpload:{removeFile:"ລົບ {filename}"},header:{close:"ປິດເມນູ",open:"ເປີດເມນູ"},inputMenu:{create:'ສ້າງ "{label}"',noData:"ບໍ່ມີຂໍ້ມູນ",noMatch:"ບໍ່ພົບຂໍ້ມູນທີ່ກົງກັນ"},inputNumber:{decrement:"ຫຼຸດລົງ",increment:"ເພີ່ມຂຶ້ນ"},modal:{close:"ປິດ"},pricingTable:{caption:"ປຽບທຽບແພັກເກັດລາຄາ"},prose:{codeCollapse:{closeText:"ຫຍໍ້",name:"ໂຄ້ດ",openText:"ຂະຫຍາຍ"},collapsible:{closeText:"ເຊື່ອງ",name:"ຄຸນສົມບັດ",openText:"ສະແດງ"},pre:{copy:"ຄັດລອກໂຄ້ດ"}},sidebar:{close:"ປິດ",toggle:"ສະລັບ"},selectMenu:{create:'ສ້າງ "{label}"',noData:"ບໍ່ມີຂໍ້ມູນ",noMatch:"ບໍ່ພົບຂໍ້ມູນທີ່ກົງກັນ",search:"ຄົ້ນຫາ..."},slideover:{close:"ປິດ"},table:{noData:"ບໍ່ມີຂໍ້ມູນ"},toast:{close:"ປິດ"}}}),Xz=be({name:"Lietuvių",code:"lt",messages:{alert:{close:"Uždaryti"},authForm:{hidePassword:"Slėpti slaptažodį",showPassword:"Rodyti slaptažodį",submit:"Tęsti"},banner:{close:"Uždaryti"},calendar:{nextMonth:"Kitas mėnuo",nextYear:"Kiti metai",prevMonth:"Ankstesnis mėnuo",prevYear:"Ankstesni metai"},carousel:{dots:"Pasirinkite skaidrę rodymui",goto:"Eiti į skaidrę {slide}",next:"Pirmyn",prev:"Atgal"},chatPrompt:{placeholder:"Įveskite savo žinutę čia…"},chatPromptSubmit:{label:"Siųsti žinutę"},chatReasoning:{thinking:"Mąsto…",thought:"Pamąstė",thoughtFor:"Mąstė {duration}"},colorMode:{dark:"Tamsus",light:"Šviesus",switchToDark:"Perjungti į tamsų režimą",switchToLight:"Perjungti į šviesų režimą",system:"Sistema"},commandPalette:{back:"Atgal",close:"Uždaryti",noData:"Nėra duomenų",noMatch:"Nėra atitinkančių duomenų",placeholder:"Įveskite komandą arba ieškokite…"},contentSearch:{links:"Nuorodos",theme:"Tema"},contentSearchButton:{label:"Ieškoti…"},contentToc:{title:"Šiame puslapyje"},dropdownMenu:{noMatch:"Nėra atitinkančių duomenų",search:"Ieškoti…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Ieškoti…"},dashboardSidebarCollapse:{collapse:"Suskleisti šoninę juostą",expand:"Išplėsti šoninę juostą"},dashboardSidebarToggle:{close:"Uždaryti šoninę juostą",open:"Atidaryti šoninę juostą"},error:{clear:"Grįžti į pradžią"},fileUpload:{removeFile:"Pašalinti {filename}"},header:{close:"Uždaryti meniu",open:"Atidaryti meniu"},inputMenu:{create:'Sukurti „{label}"',noData:"Nėra duomenų",noMatch:"Nėra atitinkančių duomenų"},inputNumber:{decrement:"Sumažinti",increment:"Padidinti"},modal:{close:"Uždaryti"},pricingTable:{caption:"Kainų planų palyginimas"},prose:{codeCollapse:{closeText:"Suskleisti",name:"kodas",openText:"Išplėsti"},collapsible:{closeText:"Slėpti",name:"savybės",openText:"Rodyti"},pre:{copy:"Kopijuoti kodą į iškarpinę"}},sidebar:{close:"Uždaryti",toggle:"Perjungti"},selectMenu:{create:'Sukurti „{label}"',noData:"Nėra duomenų",noMatch:"Nėra atitinkančių duomenų",search:"Ieškoti…"},slideover:{close:"Uždaryti"},table:{noData:"Nėra duomenų"},toast:{close:"Uždaryti"}}}),Jz=be({name:"Монгол",code:"mn",messages:{alert:{close:"Хаах"},authForm:{hidePassword:"Нууц үгийг нуух",showPassword:"Нууц үгийг харуулах",submit:"Үргэлжлүүлэх"},banner:{close:"Хаах"},calendar:{nextMonth:"Дараа сар",nextYear:"Дараа жил",prevMonth:"Өмнөх сар",prevYear:"Өмнөх жил"},carousel:{dots:"Харуулах слайдыг сонгоно уу",goto:"{slide}-р хуудсанд шилжих",next:"Дараах",prev:"Өмнөх"},chatPrompt:{placeholder:"Энд мессежээ бичнэ үү…"},chatPromptSubmit:{label:"Мессеж илгээх"},chatReasoning:{thinking:"Бодож байна…",thought:"Бодсон",thoughtFor:"{duration} бодсон"},colorMode:{dark:"Хар",light:"Цагаан",switchToDark:"Хар горимд шилжих",switchToLight:"Цагаан горимд шилжих",system:"Систем"},commandPalette:{back:"Буцах",close:"Хаах",noData:"Мэдээлэл байхгүй",noMatch:"Тохирох мэдээлэл олдсонгүй",placeholder:"Комманд бичих эсвэл хайлт хийх…"},contentSearch:{links:"Холбоосууд",theme:"Загвар"},contentSearchButton:{label:"Хайх…"},contentToc:{title:"Энэ хуудсанд"},dropdownMenu:{noMatch:"Тохирох мэдээлэл олдсонгүй",search:"Хайх…"},dashboardSearch:{theme:"Загвар"},dashboardSearchButton:{label:"Хайх…"},dashboardSidebarCollapse:{collapse:"Хажуугийн самбарыг хураах",expand:"Хажуугийн самбарыг дэлгэх"},dashboardSidebarToggle:{close:"Хажуугийн самбарыг хаах",open:"Хажуугийн самбарыг нээх"},error:{clear:"Нүүр хуудас руу буцах"},fileUpload:{removeFile:"{filename} устгах"},header:{close:"Цэсийг хаах",open:"Цэсийг нээх"},inputMenu:{create:'"{label}" үүсгэх',noData:"Мэдээлэл байхгүй",noMatch:"Тохирох мэдээлэл олдсонгүй"},inputNumber:{decrement:"Хасах",increment:"Нэмэх"},modal:{close:"Хаах"},pricingTable:{caption:"Үнийн төлөвлөгөөний харьцуулалт"},prose:{codeCollapse:{closeText:"Хураах",name:"код",openText:"Дэлгэх"},collapsible:{closeText:"Нуух",name:"шинж чанарууд",openText:"Харуулах"},pre:{copy:"Кодыг санах ойд хуулах"}},sidebar:{close:"Хаах",toggle:"Сэлгэх"},selectMenu:{create:'"{label}" үүсгэх',noData:"Мэдээлэл байхгүй",noMatch:"Тохирох мэдээлэл олдсонгүй",search:"Хайх…"},slideover:{close:"Хаах"},table:{noData:"Мэдээлэл байхгүй"},toast:{close:"Хаах"}}}),Qz=be({name:"Melayu",code:"ms",messages:{alert:{close:"Tutup"},authForm:{hidePassword:"Sembunyikan kata laluan",showPassword:"Tunjukkan kata laluan",submit:"Teruskan"},banner:{close:"Tutup"},calendar:{nextMonth:"Bulan seterusnya",nextYear:"Tahun seterusnya",prevMonth:"Bulan sebelum",prevYear:"Tahun sebelum"},carousel:{dots:"Pilih slaid untuk dipaparkan",goto:"Pergi ke slaid {slide}",next:"Seterusnya",prev:"Sebelum"},chatPrompt:{placeholder:"Taip mesej anda di sini…"},chatPromptSubmit:{label:"Hantar mesej"},chatReasoning:{thinking:"Berfikir…",thought:"Telah berfikir",thoughtFor:"Berfikir selama {duration}"},colorMode:{dark:"Gelap",light:"Cerah",switchToDark:"Tukar ke mod gelap",switchToLight:"Tukar ke mod cerah",system:"Sistem"},commandPalette:{back:"Kembali",close:"Tutup",noData:"Tiada data",noMatch:"Tiada data yang sepadan",placeholder:"Taip arahan atau carian…"},contentSearch:{links:"Pautan",theme:"Tema"},contentSearchButton:{label:"Cari…"},contentToc:{title:"Di halaman ini"},dropdownMenu:{noMatch:"Tiada data yang sepadan",search:"Cari…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Cari…"},dashboardSidebarCollapse:{collapse:"Runtuhkan bar sisi",expand:"Kembangkan bar sisi"},dashboardSidebarToggle:{close:"Tutup bar sisi",open:"Buka bar sisi"},error:{clear:"Kembali ke laman utama"},fileUpload:{removeFile:"Buang {filename}"},header:{close:"Tutup menu",open:"Buka menu"},inputMenu:{create:'Cipta "{label}"',noData:"Tiada data",noMatch:"Tiada data yang sepadan"},inputNumber:{decrement:"Kurangkan",increment:"Naikkan"},modal:{close:"Tutup"},pricingTable:{caption:"Perbandingan pelan harga"},prose:{codeCollapse:{closeText:"Runtuhkan",name:"kod",openText:"Kembangkan"},collapsible:{closeText:"Sembunyikan",name:"ciri",openText:"Tunjukkan"},pre:{copy:"Salin kod ke papan klip"}},sidebar:{close:"Tutup",toggle:"Togol"},selectMenu:{create:'Cipta "{label}"',noData:"Tiada data",noMatch:"Tiada data yang sepadan",search:"Cari…"},slideover:{close:"Tutup"},table:{noData:"Tiada data"},toast:{close:"Tutup"}}}),eU=be({name:"Norsk Bokmål",code:"nb-NO",messages:{alert:{close:"Lukk"},authForm:{hidePassword:"Skjul passord",showPassword:"Vis passord",submit:"Fortsett"},banner:{close:"Lukk"},calendar:{nextMonth:"Neste måned",nextYear:"Neste år",prevMonth:"Forrige måned",prevYear:"Forrige år"},carousel:{dots:"Velg lysbilde som skal vises",goto:"Gå til lysbilde {slide}",next:"Neste",prev:"Forrige"},chatPrompt:{placeholder:"Skriv din melding her…"},chatPromptSubmit:{label:"Send"},chatReasoning:{thinking:"Tenker…",thought:"Tenkte",thoughtFor:"Tenkte i {duration}"},colorMode:{dark:"Mørk",light:"Lys",switchToDark:"Bytt til mørk modus",switchToLight:"Bytt til lys modus",system:"System"},commandPalette:{back:"Tilbake",close:"Lukk",noData:"Ingen data",noMatch:"Ingen samsvarende data",placeholder:"Skriv inn en kommando eller søk…"},contentSearch:{links:"Lenker",theme:"Tema"},contentSearchButton:{label:"Søk…"},contentToc:{title:"På denne siden"},dropdownMenu:{noMatch:"Ingen samsvarende data",search:"Søk…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Søk…"},dashboardSidebarCollapse:{collapse:"Skjul sidepanel",expand:"Utvid sidepanel"},dashboardSidebarToggle:{close:"Lukk sidepanel",open:"Åpne sidepanel"},error:{clear:"Tilbake til forsiden"},fileUpload:{removeFile:"Fjern {filename}"},header:{close:"Lukk meny",open:"Åpne meny"},inputMenu:{create:'Opprett "{label}"',noData:"Ingen data",noMatch:"Ingen samsvarende data"},inputNumber:{decrement:"Reduser",increment:"Øk"},modal:{close:"Lukk"},pricingTable:{caption:"Prisplaneringssammenligning"},prose:{codeCollapse:{closeText:"Skjul",name:"kode",openText:"Utvid"},collapsible:{closeText:"Skjul",name:"egenskaper",openText:"Vis"},pre:{copy:"Kopier kode til utklippstavle"}},sidebar:{close:"Lukk",toggle:"Veksle"},selectMenu:{create:'Opprett "{label}"',noData:"Ingen data",noMatch:"Ingen samsvarende data",search:"Søk…"},slideover:{close:"Lukk"},table:{noData:"Ingen data"},toast:{close:"Lukk"}}}),tU=be({name:"Nederlands",code:"nl",messages:{alert:{close:"Sluiten"},authForm:{hidePassword:"Wachtwoord verbergen",showPassword:"Wachtwoord tonen",submit:"Doorgaan"},banner:{close:"Sluiten"},calendar:{nextMonth:"Volgende maand",nextYear:"Volgend jaar",prevMonth:"Vorige maand",prevYear:"Vorig jaar"},carousel:{dots:"Kies dia om weer te geven",goto:"Ga naar dia {slide}",next:"Volgende",prev:"Vorige"},chatPrompt:{placeholder:"Schrijf hier je bericht…"},chatPromptSubmit:{label:"Versturen"},chatReasoning:{thinking:"Aan het denken…",thought:"Nagedacht",thoughtFor:"{duration} nagedacht"},colorMode:{dark:"Donker",light:"Licht",switchToDark:"Overschakelen naar donkere modus",switchToLight:"Overschakelen naar lichte modus",system:"Systeem"},commandPalette:{back:"Terug",close:"Sluiten",noData:"Geen gegevens",noMatch:"Geen overeenkomende gegevens",placeholder:"Typ een commando of zoek…"},contentSearch:{links:"Links",theme:"Thema"},contentSearchButton:{label:"Zoeken…"},contentToc:{title:"Op deze pagina"},dropdownMenu:{noMatch:"Geen overeenkomende gegevens",search:"Zoeken…"},dashboardSearch:{theme:"Thema"},dashboardSearchButton:{label:"Zoeken…"},dashboardSidebarCollapse:{collapse:"Zijbalk invouwen",expand:"Zijbalk uitvouwen"},dashboardSidebarToggle:{close:"Zijbalk sluiten",open:"Zijbalk openen"},error:{clear:"Terug naar home"},fileUpload:{removeFile:"{filename} verwijderen"},header:{close:"Menu sluiten",open:"Menu openen"},inputMenu:{create:'"{label}" creëren',noData:"Geen gegevens",noMatch:"Geen overeenkomende gegevens"},inputNumber:{decrement:"Verlagen",increment:"Verhogen"},modal:{close:"Sluiten"},pricingTable:{caption:"Prijsplanvergelijking"},prose:{codeCollapse:{closeText:"Invouwen",name:"code",openText:"Uitvouwen"},collapsible:{closeText:"Verbergen",name:"eigenschappen",openText:"Tonen"},pre:{copy:"Code naar klembord kopiëren"}},sidebar:{close:"Sluiten",toggle:"Schakelen"},selectMenu:{create:'"{label}" creëren',noData:"Geen gegevens",noMatch:"Geen overeenkomende gegevens",search:"Zoeken…"},slideover:{close:"Sluiten"},table:{noData:"Geen gegevens"},toast:{close:"Sluiten"}}}),nU=be({name:"Polski",code:"pl",messages:{alert:{close:"Zamknij"},authForm:{hidePassword:"Ukryj hasło",showPassword:"Pokaż hasło",submit:"Kontynuuj"},banner:{close:"Zamknij"},calendar:{nextMonth:"Przyszły miesiąc",nextYear:"Przyszły rok",prevMonth:"Poprzedni miesiąc",prevYear:"Poprzedni rok"},carousel:{dots:"Wybierz slajd do wyświetlenia",goto:"Idź do {slide}",next:"Następny",prev:"Poprzedni"},chatPrompt:{placeholder:"Tutaj wpisz swoją wiadomość…"},chatPromptSubmit:{label:"Wyślij"},chatReasoning:{thinking:"Myśli…",thought:"Myślenie zakończone",thoughtFor:"Myślenie zajęło {duration}"},colorMode:{dark:"Ciemny",light:"Jasny",switchToDark:"Przełącz na tryb ciemny",switchToLight:"Przełącz na tryb jasny",system:"System"},commandPalette:{back:"Wstecz",close:"Zamknij",noData:"Brak danych",noMatch:"Brak pasujących danych",placeholder:"Wpisz polecenie lub wyszukaj…"},contentSearch:{links:"Linki",theme:"Motyw"},contentSearchButton:{label:"Szukaj…"},contentToc:{title:"Na tej stronie"},dropdownMenu:{noMatch:"Brak pasujących danych",search:"Szukaj…"},dashboardSearch:{theme:"Motyw"},dashboardSearchButton:{label:"Szukaj…"},dashboardSidebarCollapse:{collapse:"Zwiń pasek boczny",expand:"Rozwiń pasek boczny"},dashboardSidebarToggle:{close:"Zamknij pasek boczny",open:"Otwórz pasek boczny"},error:{clear:"Powrót do strony głównej"},fileUpload:{removeFile:"Usuń {filename}"},header:{close:"Zamknij menu",open:"Otwórz menu"},inputMenu:{create:'Utwórz "{label}"',noData:"Brak danych",noMatch:"Brak pasujących danych"},inputNumber:{decrement:"Zmniejsz",increment:"Zwiększ"},modal:{close:"Zamknij"},pricingTable:{caption:"Porównanie planów cenowych"},prose:{codeCollapse:{closeText:"Zwiń",name:"kod",openText:"Rozwiń"},collapsible:{closeText:"Ukryj",name:"właściwości",openText:"Pokaż"},pre:{copy:"Kopiuj kod do schowka"}},sidebar:{close:"Zamknij",toggle:"Przełącz"},selectMenu:{create:'Utwórz "{label}"',noData:"Brak danych",noMatch:"Brak pasujących danych",search:"Szukaj…"},slideover:{close:"Zamknij"},table:{noData:"Brak danych"},toast:{close:"Zamknij"}}}),oU=be({name:"Português",code:"pt",messages:{alert:{close:"Fechar"},authForm:{hidePassword:"Ocultar senha",showPassword:"Mostrar senha",submit:"Continuar"},banner:{close:"Fechar"},calendar:{nextMonth:"Próximo mês",nextYear:"Próximo ano",prevMonth:"Mês anterior",prevYear:"Ano anterior"},carousel:{dots:"Escolher slide para exibir",goto:"Ir ao diapositivo {slide}",next:"Próximo",prev:"Anterior"},chatPrompt:{placeholder:"Escreva a sua mensagem aqui…"},chatPromptSubmit:{label:"Enviar"},chatReasoning:{thinking:"A pensar…",thought:"Pensou",thoughtFor:"Pensou durante {duration}"},colorMode:{dark:"Escuro",light:"Claro",switchToDark:"Mudar para modo escuro",switchToLight:"Mudar para modo claro",system:"Sistema"},commandPalette:{back:"Voltar",close:"Fechar",noData:"Sem dados",noMatch:"Nenhum dado correspondente",placeholder:"Digite um comando ou pesquise…"},contentSearch:{links:"Links",theme:"Tema"},contentSearchButton:{label:"Pesquisar…"},contentToc:{title:"Nesta página"},dropdownMenu:{noMatch:"Nenhum dado correspondente",search:"Pesquisar…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Pesquisar…"},dashboardSidebarCollapse:{collapse:"Recolher barra lateral",expand:"Expandir barra lateral"},dashboardSidebarToggle:{close:"Fechar barra lateral",open:"Abrir barra lateral"},error:{clear:"Voltar para a página inicial"},fileUpload:{removeFile:"Remover {filename}"},header:{close:"Fechar menu",open:"Abrir menu"},inputMenu:{create:'Criar "{label}"',noData:"Sem dados",noMatch:"Nenhum dado correspondente"},inputNumber:{decrement:"Decrementar",increment:"Incrementar"},modal:{close:"Fechar"},pricingTable:{caption:"Comparação de planos de preços"},prose:{codeCollapse:{closeText:"Recolher",name:"código",openText:"Expandir"},collapsible:{closeText:"Ocultar",name:"propriedades",openText:"Mostrar"},pre:{copy:"Copiar código para a área de transferência"}},sidebar:{close:"Fechar",toggle:"Alternar"},selectMenu:{create:'Criar "{label}"',noData:"Sem dados",noMatch:"Nenhum dado correspondente",search:"Pesquisar…"},slideover:{close:"Fechar"},table:{noData:"Sem dados"},toast:{close:"Fechar"}}}),rU=be({name:"Português (Brasil)",code:"pt-BR",messages:{alert:{close:"Fechar"},authForm:{hidePassword:"Ocultar senha",showPassword:"Mostrar senha",submit:"Continuar"},banner:{close:"Fechar"},calendar:{nextMonth:"Próximo mês",nextYear:"Próximo ano",prevMonth:"Mês anterior",prevYear:"Ano anterior"},carousel:{dots:"Escolher slide para exibir",goto:"Ir para a slide {slide}",next:"Próximo",prev:"Anterior"},chatPrompt:{placeholder:"Escreva sua mensagem aqui…"},chatPromptSubmit:{label:"Enviar"},chatReasoning:{thinking:"Pensando…",thought:"Pensou",thoughtFor:"Pensou por {duration}"},colorMode:{dark:"Escuro",light:"Claro",switchToDark:"Mudar para modo escuro",switchToLight:"Mudar para modo claro",system:"Sistema"},commandPalette:{back:"Voltar",close:"Fechar",noData:"Nenhum dado",noMatch:"Nenhum dado correspondente",placeholder:"Digite um comando ou pesquise…"},contentSearch:{links:"Links",theme:"Tema"},contentSearchButton:{label:"Pesquisar…"},contentToc:{title:"Nesta página"},dropdownMenu:{noMatch:"Nenhum dado correspondente",search:"Pesquisar…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Pesquisar…"},dashboardSidebarCollapse:{collapse:"Recolher barra lateral",expand:"Expandir barra lateral"},dashboardSidebarToggle:{close:"Fechar barra lateral",open:"Abrir barra lateral"},error:{clear:"Voltar para a página inicial"},fileUpload:{removeFile:"Remover {filename}"},header:{close:"Fechar menu",open:"Abrir menu"},inputMenu:{create:'Criar "{label}"',noData:"Nenhum dado",noMatch:"Nenhum dado correspondente"},inputNumber:{decrement:"Decrementar",increment:"Incrementar"},modal:{close:"Fechar"},pricingTable:{caption:"Comparação de planos de preços"},prose:{codeCollapse:{closeText:"Recolher",name:"código",openText:"Expandir"},collapsible:{closeText:"Ocultar",name:"propriedades",openText:"Mostrar"},pre:{copy:"Copiar código para a área de transferência"}},sidebar:{close:"Fechar",toggle:"Alternar"},selectMenu:{create:'Criar "{label}"',noData:"Nenhum dado",noMatch:"Nenhum dado correspondente",search:"Pesquisar…"},slideover:{close:"Fechar"},table:{noData:"Nenhum dado"},toast:{close:"Fechar"}}}),uU=be({name:"Română",code:"ro",messages:{alert:{close:"Închide"},authForm:{hidePassword:"Ascunde parola",showPassword:"Arată parola",submit:"Continuă"},banner:{close:"Închide"},calendar:{nextMonth:"Luna următoare",nextYear:"Anul următor",prevMonth:"Luna precedentă",prevYear:"Anul precedent"},carousel:{dots:"Alegeți diapozitivul de afișat",goto:"Mergi la diapozitivul {slide}",next:"Următor",prev:"Anterior"},chatPrompt:{placeholder:"Scrieți mesajul dvs. aici…"},chatPromptSubmit:{label:"Trimite"},chatReasoning:{thinking:"Se gândește…",thought:"A gândit",thoughtFor:"A gândit {duration}"},colorMode:{dark:"Întunecat",light:"Luminos",switchToDark:"Comută la modul întunecat",switchToLight:"Comută la modul luminos",system:"Sistem"},commandPalette:{back:"Înapoi",close:"Închide",noData:"Nu există date",noMatch:"Nu există date corespunzătoare",placeholder:"Tastează o comandă sau caută…"},contentSearch:{links:"Linkuri",theme:"Temă"},contentSearchButton:{label:"Caută…"},contentToc:{title:"Pe această pagină"},dropdownMenu:{noMatch:"Nu există date corespunzătoare",search:"Caută…"},dashboardSearch:{theme:"Temă"},dashboardSearchButton:{label:"Caută…"},dashboardSidebarCollapse:{collapse:"Restrânge bara laterală",expand:"Extinde bara laterală"},dashboardSidebarToggle:{close:"Închide bara laterală",open:"Deschide bara laterală"},error:{clear:"Înapoi la pagina principală"},fileUpload:{removeFile:"Elimină {filename}"},header:{close:"Închide meniul",open:"Deschide meniul"},inputMenu:{create:'Creează "{label}"',noData:"Nu există date",noMatch:"Nu există date corespunzătoare"},inputNumber:{decrement:"Scade",increment:"Crește"},modal:{close:"Închide"},pricingTable:{caption:"Comparare prețuri"},prose:{codeCollapse:{closeText:"Restrânge",name:"cod",openText:"Extinde"},collapsible:{closeText:"Ascunde",name:"proprietăți",openText:"Afișează"},pre:{copy:"Copiază codul în clipboard"}},sidebar:{close:"Închide",toggle:"Comutare"},selectMenu:{create:'Creează "{label}"',noData:"Nu există date",noMatch:"Nu există date corespunzătoare",search:"Caută…"},slideover:{close:"Închide"},table:{noData:"Nu există date"},toast:{close:"Închide"}}}),aU=be({name:"Русский",code:"ru",messages:{alert:{close:"Закрыть"},authForm:{hidePassword:"Скрыть пароль",showPassword:"Показать пароль",submit:"Продолжить"},banner:{close:"Закрыть"},calendar:{nextMonth:"Следующий месяц",nextYear:"Следующий год",prevMonth:"Предыдущий месяц",prevYear:"Предыдущий год"},carousel:{dots:"Выберите слайд для отображения",goto:"Перейти к {slide}",next:"Далее",prev:"Назад"},chatPrompt:{placeholder:"Введите ваше сообщение здесь…"},chatPromptSubmit:{label:"Отправить"},chatReasoning:{thinking:"Размышляет…",thought:"Размышление завершено",thoughtFor:"Размышление заняло {duration}"},colorMode:{dark:"Тёмная",light:"Светлая",switchToDark:"Переключиться на тёмный режим",switchToLight:"Переключиться на светлый режим",system:"Системная"},commandPalette:{back:"Назад",close:"Закрыть",noData:"Нет данных",noMatch:"Совпадений не найдено",placeholder:"Введите команду или выполните поиск…"},contentSearch:{links:"Ссылки",theme:"Тема"},contentSearchButton:{label:"Поиск…"},contentToc:{title:"На этой странице"},dropdownMenu:{noMatch:"Совпадений не найдено",search:"Поиск…"},dashboardSearch:{theme:"Тема"},dashboardSearchButton:{label:"Поиск…"},dashboardSidebarCollapse:{collapse:"Свернуть боковую панель",expand:"Развернуть боковую панель"},dashboardSidebarToggle:{close:"Закрыть боковую панель",open:"Открыть боковую панель"},error:{clear:"Вернуться на главную"},fileUpload:{removeFile:"Удалить {filename}"},header:{close:"Закрыть меню",open:"Открыть меню"},inputMenu:{create:'Создать "{label}"',noData:"Нет данных",noMatch:"Совпадений не найдено"},inputNumber:{decrement:"Уменьшить",increment:"Увеличить"},modal:{close:"Закрыть"},pricingTable:{caption:"Сравнение ценных планов"},prose:{codeCollapse:{closeText:"Свернуть",name:"код",openText:"Развернуть"},collapsible:{closeText:"Скрыть",name:"свойства",openText:"Показать"},pre:{copy:"Скопировать код в буфер обмена"}},sidebar:{close:"Закрыть",toggle:"Переключить"},selectMenu:{create:'Создать "{label}"',noData:"Нет данных",noMatch:"Совпадений не найдено",search:"Поиск…"},slideover:{close:"Закрыть"},table:{noData:"Нет данных"},toast:{close:"Закрыть"}}}),sU=be({name:"Slovenčina",code:"sk",messages:{alert:{close:"Zatvoriť"},authForm:{hidePassword:"Skryť heslo",showPassword:"Zobraziť heslo",submit:"Pokračovať"},banner:{close:"Zatvoriť"},calendar:{nextMonth:"Nasledujúci mesiac",nextYear:"Nasledujúci rok",prevMonth:"Predchádzajúci mesiac",prevYear:"Predchádzajúci rok"},carousel:{dots:"Vyberte snímku na zobrazenie",goto:"Prejsť na {slide}",next:"Nasledujúci",prev:"Predchádzajúci"},chatPrompt:{placeholder:"Tu napíšte svoje správu…"},chatPromptSubmit:{label:"Odoslať"},chatReasoning:{thinking:"Premýšľa…",thought:"Premýšľal",thoughtFor:"Premýšľal {duration}"},colorMode:{dark:"Tmavý",light:"Svetlý",switchToDark:"Prepnúť na tmavý režim",switchToLight:"Prepnúť na svetlý režim",system:"Systém"},commandPalette:{back:"Späť",close:"Zavrieť",noData:"Žiadne dáta",noMatch:"Žiadna zhoda",placeholder:"Zadajte príkaz alebo vyhľadajte…"},contentSearch:{links:"Odkazy",theme:"Farebný režim"},contentSearchButton:{label:"Hľadať…"},contentToc:{title:"Na tejto stránke"},dropdownMenu:{noMatch:"Žiadna zhoda",search:"Hľadať…"},dashboardSearch:{theme:"Farebný režim"},dashboardSearchButton:{label:"Hľadať…"},dashboardSidebarCollapse:{collapse:"Zbaliť bočný panel",expand:"Rozbaliť bočný panel"},dashboardSidebarToggle:{close:"Zatvoriť bočný panel",open:"Otvoriť bočný panel"},error:{clear:"Späť na domovskú stránku"},fileUpload:{removeFile:"Odobrať {filename}"},header:{close:"Zatvoriť menu",open:"Otvoriť menu"},inputMenu:{create:'Vytvoriť "{label}"',noData:"Žiadne dáta",noMatch:"Žiadna zhoda"},inputNumber:{decrement:"Znížiť",increment:"Zvýšiť"},modal:{close:"Zatvoriť"},pricingTable:{caption:"Porovnanie cien"},prose:{codeCollapse:{closeText:"Zbaliť",name:"kód",openText:"Rozbaliť"},collapsible:{closeText:"Skryť",name:"vlastnosti",openText:"Zobraziť"},pre:{copy:"Kopírovať kód do schránky"}},sidebar:{close:"Zatvoriť",toggle:"Prepnúť"},selectMenu:{create:'Vytvoriť "{label}"',noData:"Žiadne dáta",noMatch:"Žiadna zhoda",search:"Hľadať…"},slideover:{close:"Zatvoriť"},table:{noData:"Žiadne dáta"},toast:{close:"Zatvoriť"}}}),iU=be({name:"Slovenščina",code:"sl",messages:{alert:{close:"Zapri"},authForm:{hidePassword:"Skrij geslo",showPassword:"Prikaži geslo",submit:"Nadaljuj"},banner:{close:"Zapri"},calendar:{nextMonth:"Naslednji mesec",nextYear:"Naslednje leto",prevMonth:"Prejšnji mesec",prevYear:"Prejšnje leto"},carousel:{dots:"Izberite diapozitiv za prikaz",goto:"Pojdi na {slide}",next:"Naprej",prev:"Nazaj"},chatPrompt:{placeholder:"Tukaj napišite svoje sporočilo…"},chatPromptSubmit:{label:"Pošlji sporočilo"},chatReasoning:{thinking:"Razmišlja…",thought:"Razmislil",thoughtFor:"Razmišljal {duration}"},colorMode:{dark:"Temno",light:"Svetlo",switchToDark:"Preklopi na temni način",switchToLight:"Preklopi na svetli način",system:"Sistem"},commandPalette:{back:"Nazaj",close:"Zapri",noData:"Ni podatkov",noMatch:"Ni ujemanj",placeholder:"Vpiši ukaz ali išči…"},contentSearch:{links:"Povezave",theme:"Tema"},contentSearchButton:{label:"Išči…"},contentToc:{title:"Na tej strani"},dropdownMenu:{noMatch:"Ni ujemanj",search:"Išči…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Išči…"},dashboardSidebarCollapse:{collapse:"Strni stransko vrstico",expand:"Razširi stransko vrstico"},dashboardSidebarToggle:{close:"Zapri stransko vrstico",open:"Odpri stransko vrstico"},error:{clear:"Nazaj na domačo stran"},fileUpload:{removeFile:"Odstrani {filename}"},header:{close:"Zapri meni",open:"Odpri meni"},inputMenu:{create:'Ustvari "{label}"',noData:"Ni podatkov",noMatch:"Ni ujemanj"},inputNumber:{decrement:"Zmanjšaj",increment:"Povišaj"},modal:{close:"Zapri"},pricingTable:{caption:"Primerjava cenovnih načrtov"},prose:{codeCollapse:{closeText:"Strni",name:"koda",openText:"Razširi"},collapsible:{closeText:"Skrij",name:"lastnosti",openText:"Prikaži"},pre:{copy:"Kopiraj kodo v odložišče"}},sidebar:{close:"Zapri",toggle:"Preklopi"},selectMenu:{create:'Ustvari "{label}"',noData:"Ni podatkov",noMatch:"Ni ujemanj",search:"Išči…"},slideover:{close:"Zapri"},table:{noData:"Ni podatkov"},toast:{close:"Zapri"}}}),lU=be({name:"Shqip",code:"sq",messages:{alert:{close:"Mbyll"},authForm:{hidePassword:"Fshih fjalëkalimin",showPassword:"Shfaq fjalëkalimin",submit:"Vazhdo"},banner:{close:"Mbyll"},calendar:{nextMonth:"Muaji tjetër",nextYear:"Viti tjetër",prevMonth:"Muaji i kaluar",prevYear:"Viti i kaluar"},carousel:{dots:"Zgjidh slajdin për të shfaqur",goto:"Shko te slajdi {slide}",next:"Tjetri",prev:"Para"},chatPrompt:{placeholder:"Shkruaj mesazhin tënd këtu…"},chatPromptSubmit:{label:"Dërgo mesazhin"},chatReasoning:{thinking:"Po mendon…",thought:"Mendoi",thoughtFor:"Mendoi për {duration}"},colorMode:{dark:"Errët",light:"Ndritshëm",switchToDark:"Kalo në modalitetin e errët",switchToLight:"Kalo në modalitetin e ndritshëm",system:"Sistem"},commandPalette:{back:"Pas",close:"Mbyll",noData:"Nuk ka të dhëna",noMatch:"Nuk ka të dhëna që përputhen",placeholder:"Shkruaj një komandë ose kërko…"},contentSearch:{links:"Lidhje",theme:"Tema"},contentSearchButton:{label:"Kërko…"},contentToc:{title:"Në këtë faqe"},dropdownMenu:{noMatch:"Nuk ka të dhëna që përputhen",search:"Kërko…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Kërko…"},dashboardSidebarCollapse:{collapse:"Palos panelin anësor",expand:"Zgjero panelin anësor"},dashboardSidebarToggle:{close:"Mbyll panelin anësor",open:"Hap panelin anësor"},error:{clear:"Kthehu në kryefaqe"},fileUpload:{removeFile:"Hiq {filename}"},header:{close:"Mbyll menunë",open:"Hap menunë"},inputMenu:{create:'Krijo "{label}"',noData:"Nuk ka të dhëna",noMatch:"Nuk ka të dhëna që përputhen"},inputNumber:{decrement:"Zvogëlo",increment:"Rrit"},modal:{close:"Mbyll"},pricingTable:{caption:"Krahasimi i planeve të çmimeve"},prose:{codeCollapse:{closeText:"Palos",name:"kodi",openText:"Zgjero"},collapsible:{closeText:"Fshih",name:"vetitë",openText:"Shfaq"},pre:{copy:"Kopjo kodin në kujtesë"}},sidebar:{close:"Mbyll",toggle:"Ndërro"},selectMenu:{create:'Krijo "{label}"',noData:"Nuk ka të dhëna",noMatch:"Nuk ka të dhëna që përputhen",search:"Kërko…"},slideover:{close:"Mbyll"},table:{noData:"Nuk ka të dhëna"},toast:{close:"Mbyll"}}}),cU=be({name:"Svenska",code:"sv",messages:{alert:{close:"Stäng"},authForm:{hidePassword:"Dölj lösenord",showPassword:"Visa lösenord",submit:"Fortsätt"},banner:{close:"Stäng"},calendar:{nextMonth:"Nästa månad",nextYear:"Nästa år",prevMonth:"Föregående månad",prevYear:"Föregående år"},carousel:{dots:"Välj bild att visa",goto:"Gå till {slide}",next:"Nästa",prev:"Föregående"},chatPrompt:{placeholder:"Skriv ditt meddelande här…"},chatPromptSubmit:{label:"Skicka"},chatReasoning:{thinking:"Tänker…",thought:"Tänkte",thoughtFor:"Tänkte i {duration}"},colorMode:{dark:"Mörkt",light:"Ljust",switchToDark:"Byt till mörkt läge",switchToLight:"Byt till ljust läge",system:"System"},commandPalette:{back:"Tillbaka",close:"Stäng",noData:"Inga data",noMatch:"Inga matchande data",placeholder:"Skriv ett kommando eller sök…"},contentSearch:{links:"Länkar",theme:"Tema"},contentSearchButton:{label:"Sök…"},contentToc:{title:"På denna sida"},dropdownMenu:{noMatch:"Inga matchande data",search:"Sök…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Sök…"},dashboardSidebarCollapse:{collapse:"Minimera sidofältet",expand:"Expandera sidofältet"},dashboardSidebarToggle:{close:"Stäng sidofältet",open:"Öppna sidofältet"},error:{clear:"Tillbaka till startsidan"},fileUpload:{removeFile:"Ta bort {filename}"},header:{close:"Stäng menyn",open:"Öppna menyn"},inputMenu:{create:'Skapa "{label}"',noData:"Inga data",noMatch:"Inga matchande data"},inputNumber:{decrement:"Minska",increment:"Öka"},modal:{close:"Stäng"},pricingTable:{caption:"Prisplanering"},prose:{codeCollapse:{closeText:"Minimera",name:"kod",openText:"Expandera"},collapsible:{closeText:"Dölj",name:"egenskaper",openText:"Visa"},pre:{copy:"Kopiera kod till urklipp"}},sidebar:{close:"Stäng",toggle:"Växla"},selectMenu:{create:'Skapa "{label}"',noData:"Inga data",noMatch:"Inga matchande data",search:"Sök…"},slideover:{close:"Stäng"},table:{noData:"Inga data"},toast:{close:"Stäng"}}}),dU=be({name:"ไทย",code:"th",messages:{alert:{close:"ปิด"},authForm:{hidePassword:"ซ่อนรหัสผ่าน",showPassword:"แสดงรหัสผ่าน",submit:"ดำเนินการต่อ"},banner:{close:"ปิด"},calendar:{nextMonth:"เดือนถัดไป",nextYear:"ปีถัดไป",prevMonth:"เดือนก่อนหน้า",prevYear:"ปีก่อนหน้า"},carousel:{dots:"เลือกสไลด์ที่จะแสดง",goto:"ไปที่ {slide}",next:"ถัดไป",prev:"ย้อนกลับ"},chatPrompt:{placeholder:"กรุณาป้อนข้อความของคุณที่นี่…"},chatPromptSubmit:{label:"ส่ง"},chatReasoning:{thinking:"กำลังคิด…",thought:"คิดแล้ว",thoughtFor:"คิดเป็นเวลา {duration}"},colorMode:{dark:"มืด",light:"สว่าง",switchToDark:"เปลี่ยนเป็นโหมดมืด",switchToLight:"เปลี่ยนเป็นโหมดสว่าง",system:"ระบบ"},commandPalette:{back:"ย้อนกลับ",close:"ปิด",noData:"ไม่มีข้อมูล",noMatch:"ไม่พบข้อมูลที่ตรงกัน",placeholder:"พิมพ์คำสั่งหรือค้นหา…"},contentSearch:{links:"ลิงก์",theme:"ธีม"},contentSearchButton:{label:"ค้นหา…"},contentToc:{title:"ในหน้านี้"},dropdownMenu:{noMatch:"ไม่พบข้อมูลที่ตรงกัน",search:"ค้นหา…"},dashboardSearch:{theme:"ธีม"},dashboardSearchButton:{label:"ค้นหา…"},dashboardSidebarCollapse:{collapse:"ย่อแถบด้านข้าง",expand:"ขยายแถบด้านข้าง"},dashboardSidebarToggle:{close:"ปิดแถบด้านข้าง",open:"เปิดแถบด้านข้าง"},error:{clear:"กลับไปยังหน้าหลัก"},fileUpload:{removeFile:"ลบ {filename}"},header:{close:"ปิดเมนู",open:"เปิดเมนู"},inputMenu:{create:'สร้าง "{label}"',noData:"ไม่มีข้อมูล",noMatch:"ไม่พบข้อมูลที่ตรงกัน"},inputNumber:{decrement:"ลด",increment:"เพิ่ม"},modal:{close:"ปิด"},pricingTable:{caption:"การเปรียบเทียบราคาสินค้า"},prose:{codeCollapse:{closeText:"ย่อ",name:"โค้ด",openText:"ขยาย"},collapsible:{closeText:"ซ่อน",name:"คุณสมบัติ",openText:"แสดง"},pre:{copy:"คัดลอกโค้ดไปยังคลิปบอร์ด"}},sidebar:{close:"ปิด",toggle:"สลับ"},selectMenu:{create:'สร้าง "{label}"',noData:"ไม่มีข้อมูล",noMatch:"ไม่พบข้อมูลที่ตรงกัน",search:"ค้นหา…"},slideover:{close:"ปิด"},table:{noData:"ไม่มีข้อมูล"},toast:{close:"ปิด"}}}),fU=be({name:"Тоҷикӣ",code:"tj",messages:{alert:{close:"Бастан"},authForm:{hidePassword:"Пинҳон кардани парол",showPassword:"Намоиши парол",submit:"Идома додан"},banner:{close:"Пӯшидан"},calendar:{nextMonth:"Моҳи оянда",nextYear:"Соли оянда",prevMonth:"Моҳи гузашта",prevYear:"Соли гузашта"},carousel:{dots:"Слайдро барои намоиш интихоб кунед",goto:"Ба слайди {slide} гузаред",next:"Баъдӣ",prev:"Қаблӣ"},chatPrompt:{placeholder:"Пайём ворид кунед…"},chatPromptSubmit:{label:"Фиристодан"},chatReasoning:{thinking:"Фикр мекунад…",thought:"Фикр кард",thoughtFor:"{duration} фикр кард"},colorMode:{dark:"Торик",light:"Рӯшно",switchToDark:"Гузариш ба ҳолати торик",switchToLight:"Гузариш ба ҳолати рӯшно",system:"Система"},commandPalette:{back:"Бозгашт",close:"Бастан",noData:"Маълумот нест",noMatch:"Маълумоти мувофиқ ёфт нашуд",placeholder:"Фармонро нависед ё ҷустуҷӯ кунед…"},contentSearch:{links:"Пайвандҳо",theme:"Мавзӯъ"},contentSearchButton:{label:"Ҷустуҷӯ"},contentToc:{title:"Мундариҷа"},dropdownMenu:{noMatch:"Маълумоти мувофиқ ёфт нашуд",search:"Ҷустуҷӯ…"},dashboardSearch:{theme:"Мавзӯъ"},dashboardSearchButton:{label:"Ҷустуҷӯ"},dashboardSidebarCollapse:{collapse:"Кам кардан",expand:"Васеъ кардан"},dashboardSidebarToggle:{close:"Пӯшидан",open:"Кушодан"},error:{clear:"Тоза кардан"},fileUpload:{removeFile:"{filename}-ро хориҷ кунед"},header:{close:"Пӯшидан",open:"Кушодан"},inputMenu:{create:'"{label}" созед',noData:"Маълумот нест",noMatch:"Маълумоти мувофиқ ёфт нашуд"},inputNumber:{decrement:"Кам кардан",increment:"Зиёд кардан"},modal:{close:"Бастан"},pricingTable:{caption:"Ҷадвали нархҳо"},prose:{codeCollapse:{closeText:"Кам кардан",name:"код",openText:"Васеъ кардан"},collapsible:{closeText:"Пинҳон кардан",name:"хусусиятҳо",openText:"Намоиш додан"},pre:{copy:"Нусха бардоштан"}},sidebar:{close:"Бастан",toggle:"Иваз кардан"},selectMenu:{create:'"{label}" созед',noData:"Маълумот нест",noMatch:"Маълумоти мувофиқ ёфт нашуд",search:"Ҷустуҷӯ…"},slideover:{close:"Бастан"},table:{noData:"Маълумот нест"},toast:{close:"Бастан"}}}),pU=be({name:"Türkçe",code:"tr",messages:{alert:{close:"Kapat"},authForm:{hidePassword:"Şifreyi gizle",showPassword:"Şifreyi göster",submit:"Devam et"},banner:{close:"Kapat"},calendar:{nextMonth:"Sonraki ay",nextYear:"Sonraki yıl",prevMonth:"Önceki ay",prevYear:"Önceki yıl"},carousel:{dots:"Görüntülenecek slaydı seçin",goto:"{slide}. slayda git",next:"Sonraki",prev:"Önceki"},chatPrompt:{placeholder:"Buraya mesajınızı yazın…"},chatPromptSubmit:{label:"Gönder"},chatReasoning:{thinking:"Düşünüyor…",thought:"Düşündü",thoughtFor:"{duration} düşündü"},colorMode:{dark:"Koyu",light:"Açık",switchToDark:"Koyu moda geç",switchToLight:"Açık moda geç",system:"Sistem"},commandPalette:{back:"Geri",close:"Kapat",noData:"Veri yok",noMatch:"Eşleşen veri yok",placeholder:"Bir komut yazın veya arama yapın…"},contentSearch:{links:"Bağlantılar",theme:"Tema"},contentSearchButton:{label:"Ara…"},contentToc:{title:"Bu sayfada"},dropdownMenu:{noMatch:"Eşleşen veri yok",search:"Ara…"},dashboardSearch:{theme:"Tema"},dashboardSearchButton:{label:"Ara…"},dashboardSidebarCollapse:{collapse:"Kenar çubuğunu daralt",expand:"Kenar çubuğunu genişlet"},dashboardSidebarToggle:{close:"Kenar çubuğunu kapat",open:"Kenar çubuğunu aç"},error:{clear:"Ana sayfaya dön"},fileUpload:{removeFile:"{filename} kaldır"},header:{close:"Menüyü kapat",open:"Menüyü aç"},inputMenu:{create:'"{label}" oluştur',noData:"Veri yok",noMatch:"Eşleşen veri yok"},inputNumber:{decrement:"Azalt",increment:"Arttır"},modal:{close:"Kapat"},pricingTable:{caption:"Fiyat planlarını karşılaştır"},prose:{codeCollapse:{closeText:"Daralt",name:"kod",openText:"Genişlet"},collapsible:{closeText:"Gizle",name:"özellikler",openText:"Göster"},pre:{copy:"Kodu panoya kopyala"}},sidebar:{close:"Kapat",toggle:"Değiştir"},selectMenu:{create:'"{label}" oluştur',noData:"Veri yok",noMatch:"Eşleşen veri yok",search:"Ara…"},slideover:{close:"Kapat"},table:{noData:"Veri yok"},toast:{close:"Kapat"}}}),hU=be({name:"ئۇيغۇرچە",code:"ug-CN",dir:"rtl",messages:{alert:{close:"تاقاش"},authForm:{hidePassword:"پارولنى يوشۇرۇش",showPassword:"پارولنى كۆرسىتىش",submit:"دەۋام قىلىش"},banner:{close:"تاقاش"},calendar:{nextMonth:"كېلەر ئاي",nextYear:"كېلەر يىل",prevMonth:"ئالدىنقى ئاي",prevYear:"ئالدىنقى يىل"},carousel:{dots:"كۆرسىتىدىغان سلايدنى تاللاڭ",goto:"{slide}-بەتكە ئاتلاش",next:"كېيىنكى بەت",prev:"ئالدىنقى بەت"},chatPrompt:{placeholder:"خەت كىرگۈزۈڭ…"},chatPromptSubmit:{label:"يوللاش"},chatReasoning:{thinking:"ئويلاۋاتىدۇ…",thought:"ئويلاندى",thoughtFor:"{duration} ئويلاندى"},colorMode:{dark:"قاراڭغۇ",light:"يورۇق",switchToDark:"قاراڭغۇ ھالەتكە ئالماشتۇرۇش",switchToLight:"يورۇق ھالەتكە ئالماشتۇرۇش",system:"سىستېما"},commandPalette:{back:"قايتىش",close:"تاقاش",noData:"سانلىق مەلۇمات يوق",noMatch:"ماس كېلىدىغان سانلىق مەلۇمات يوق",placeholder:"بۇيرۇق كىرگۈزۈڭ ياكى ئىزدەڭ…"},contentSearch:{links:"ئۇلانمىلار",theme:"تېما"},contentSearchButton:{label:"ئىزدەش"},contentToc:{title:"مەزمۇن"},dropdownMenu:{noMatch:"ماس كېلىدىغان سانلىق مەلۇمات يوق",search:"ئىزدەش…"},dashboardSearch:{theme:"تېما"},dashboardSearchButton:{label:"ئىزدەش"},dashboardSidebarCollapse:{collapse:"تارايتىش",expand:"كېڭەيتىش"},dashboardSidebarToggle:{close:"تاقاش",open:"ئېچىش"},error:{clear:"تازىلاش"},fileUpload:{removeFile:"{filename} ئۆچۈرۈش"},header:{close:"تاقاش",open:"ئېچىش"},inputMenu:{create:'"{label}" نى قۇرۇش',noData:"سانلىق مەلۇمات يوق",noMatch:"ماس كېلىدىغان سانلىق مەلۇمات يوق"},inputNumber:{decrement:"ئازايتىش",increment:"كۆپەيتىش"},modal:{close:"تاقاش"},pricingTable:{caption:"باھا جەدۋىلى"},prose:{codeCollapse:{closeText:"تارايتىش",name:"كود",openText:"كېڭەيتىش"},collapsible:{closeText:"يوشۇرۇش",name:"خاسلىقلار",openText:"كۆرسىتىش"},pre:{copy:"كۆچۈرۈش"}},sidebar:{close:"تاقاش",toggle:"ئالماشتۇرۇش"},selectMenu:{create:'"{label}" نى قۇرۇش',noData:"سانلىق مەلۇمات يوق",noMatch:"ماس كېلىدىغان سانلىق مەلۇمات يوق",search:"ئىزدەش…"},slideover:{close:"تاقاش"},table:{noData:"سانلىق مەلۇمات يوق"},toast:{close:"تاقاش"}}}),mU=be({name:"Українська",code:"uk",messages:{alert:{close:"Закрити"},authForm:{hidePassword:"Приховати пароль",showPassword:"Показати пароль",submit:"Продовжити"},banner:{close:"Закрити"},calendar:{nextMonth:"Наступний місяць",nextYear:"Наступний рік",prevMonth:"Попередній місяць",prevYear:"Попередній рік"},carousel:{dots:"Виберіть слайд для відображення",goto:"Перейти до {slide}",next:"Далі",prev:"Назад"},chatPrompt:{placeholder:"Введіть ваше повідомлення тут…"},chatPromptSubmit:{label:"Відправити"},chatReasoning:{thinking:"Думає…",thought:"Подумав",thoughtFor:"Думав {duration}"},colorMode:{dark:"Темна",light:"Світла",switchToDark:"Перейти до темного режиму",switchToLight:"Перейти до світлого режиму",system:"Системна"},commandPalette:{back:"Назад",close:"Закрити",noData:"Немає даних",noMatch:"Збігів не знайдено",placeholder:"Введіть команду або шукайте…"},contentSearch:{links:"Посилання",theme:"Тема"},contentSearchButton:{label:"Пошук…"},contentToc:{title:"На цій сторінці"},dropdownMenu:{noMatch:"Збігів не знайдено",search:"Пошук…"},dashboardSearch:{theme:"Тема"},dashboardSearchButton:{label:"Пошук…"},dashboardSidebarCollapse:{collapse:"Згорнути бічну панель",expand:"Розгорнути бічну панель"},dashboardSidebarToggle:{close:"Закрити бічну панель",open:"Відкрити бічну панель"},error:{clear:"Повернутися на головну"},fileUpload:{removeFile:"Видалити {filename}"},header:{close:"Закрити меню",open:"Відкрити меню"},inputMenu:{create:'Створити "{label}"',noData:"Немає даних",noMatch:"Збігів не знайдено"},inputNumber:{decrement:"Зменшити",increment:"Збільшити"},modal:{close:"Закрити"},pricingTable:{caption:"Порівняння планів цін"},prose:{codeCollapse:{closeText:"Згорнути",name:"код",openText:"Розгорнути"},collapsible:{closeText:"Сховати",name:"властивості",openText:"Показати"},pre:{copy:"Копіювати код у буфер обміну"}},sidebar:{close:"Закрити",toggle:"Перемикнути"},selectMenu:{create:'Створити "{label}"',noData:"Немає даних",noMatch:"Збігів не знайдено",search:"Пошук…"},slideover:{close:"Закрити"},table:{noData:"Немає даних"},toast:{close:"Закрити"}}}),gU=be({name:"Urdu",code:"ur",dir:"rtl",messages:{alert:{close:"بند کریں"},authForm:{hidePassword:"پاس ورڈ چھپائیں",showPassword:"پاس ورڈ دکھائیں",submit:"جاری رکھیں"},banner:{close:"بند کریں"},calendar:{nextMonth:"اگلا مہینہ",nextYear:"اگلا سال",prevMonth:"پچھلا مہینہ",prevYear:"پچھلا سال"},carousel:{dots:"دکھانے کے لیے سلائیڈ منتخب کریں",goto:"سلائیڈ {slide} پر جائیں",next:"اگلا",prev:"پچھلا"},chatPrompt:{placeholder:"یہاں اپنا پیغام لکھیں"},chatPromptSubmit:{label:"پیغام بھیجیں"},chatReasoning:{thinking:"سوچ رہا ہے…",thought:"سوچا",thoughtFor:"{duration} سوچا"},colorMode:{dark:"تاریک",light:"روشن",switchToDark:"تاریک موڈ میں تبدیل کریں",switchToLight:"روشن موڈ میں تبدیل کریں",system:"سسٹم"},commandPalette:{back:"واپس",close:"بند کریں",noData:"کوئی ڈیٹا نہیں",noMatch:"کوئی ملتا جلتا ڈیٹا نہیں ملا",placeholder:"کمانڈ ٹائپ کریں یا تلاش کریں…"},contentSearch:{links:"لنکس",theme:"تھیم"},contentSearchButton:{label:"تلاش کریں…"},contentToc:{title:"اس صفحے پر"},dropdownMenu:{noMatch:"کوئی ملتا جلتا ڈیٹا نہیں ملا",search:"تلاش کریں…"},dashboardSearch:{theme:"تھیم"},dashboardSearchButton:{label:"تلاش کریں…"},dashboardSidebarCollapse:{collapse:"سائیڈ بار کو سکیڑیں",expand:"سائیڈ بار کو پھیلائیں"},dashboardSidebarToggle:{close:"سائیڈ بار بند کریں",open:"سائیڈ بار کھولیں"},error:{clear:"ہوم پیج پر واپس جائیں"},fileUpload:{removeFile:"{filename} ہٹائیں"},header:{close:"مینو بند کریں",open:"مینو کھولیں"},inputMenu:{create:'"{label}" بنائیں',noData:"کوئی ڈیٹا نہیں",noMatch:"کوئی ملتا جلتا ڈیٹا نہیں ملا"},inputNumber:{decrement:"کمی",increment:"اضافہ"},modal:{close:"بند کریں"},pricingTable:{caption:"قیمت پلنز کی مقایسہ"},prose:{codeCollapse:{closeText:"سکیڑیں",name:"کوڈ",openText:"پھیلائیں"},collapsible:{closeText:"چھپائیں",name:"خصوصیات",openText:"دکھائیں"},pre:{copy:"کوڈ کاپی کریں"}},sidebar:{close:"بند کریں",toggle:"ٹوگل کریں"},selectMenu:{create:'"{label}" بنائیں',noData:"کوئی ڈیٹا نہیں",noMatch:"کوئی ملتا جلتا ڈیٹا نہیں ملا",search:"تلاش کریں…"},slideover:{close:"بند کریں"},table:{noData:"کوئی ڈیٹا نہیں"},toast:{close:"بند کریں"}}}),vU=be({name:"Oʻzbek",code:"uz",messages:{alert:{close:"Yopish"},authForm:{hidePassword:"Parolni yashirish",showPassword:"Parolni ko'rsatish",submit:"Davom etish"},banner:{close:"Yopish"},calendar:{nextMonth:"Keyingi oy",nextYear:"Keyingi yil",prevMonth:"Oldingi oy",prevYear:"Oldingi yil"},carousel:{dots:"Koʻrsatish uchun slaydni tanlang",goto:"{slide}-slaydga o'tish",next:"Oldinga",prev:"Ortga"},chatPrompt:{placeholder:"Bu yerda savolingizni yozing…"},chatPromptSubmit:{label:"Jo'natish"},chatReasoning:{thinking:"O'ylayapti…",thought:"O'yladi",thoughtFor:"{duration} o'yladi"},colorMode:{dark:"Qorong'i",light:"Yorug'",switchToDark:"Qorong'i rejimga o'tish",switchToLight:"Yorug' rejimga o'tish",system:"Tizim"},commandPalette:{back:"Orqaga",close:"Yopish",noData:"Maʼlumot yoʻq",noMatch:"Mos keluvchi natija topilmadi",placeholder:"Buyruq kiriting yoki qidiring…"},contentSearch:{links:"Havolalar",theme:"Mavzu"},contentSearchButton:{label:"Qidirish…"},contentToc:{title:"Ushbu sahifada"},dropdownMenu:{noMatch:"Mos keluvchi natija topilmadi",search:"Qidirish…"},dashboardSearch:{theme:"Mavzu"},dashboardSearchButton:{label:"Qidirish…"},dashboardSidebarCollapse:{collapse:"Yon panelni yig'ish",expand:"Yon panelni kengaytirish"},dashboardSidebarToggle:{close:"Yon panelni yopish",open:"Yon panelni ochish"},error:{clear:"Bosh sahifaga qaytish"},fileUpload:{removeFile:"{filename}ni oʻchirish"},header:{close:"Menyuni yopish",open:"Menyuni ochish"},inputMenu:{create:'"{label}" yaratish',noData:"Maʼlumot yoʻq",noMatch:"Mos keluvchi natija topilmadi"},inputNumber:{decrement:"Ayirish",increment:"Qoʻshish"},modal:{close:"Yopish"},pricingTable:{caption:"Narx planlarini taqqoslash"},prose:{codeCollapse:{closeText:"Yig'ish",name:"kod",openText:"Kengaytirish"},collapsible:{closeText:"Yashirish",name:"xususiyatlar",openText:"Ko'rsatish"},pre:{copy:"Koddan buferga nusxa olish"}},sidebar:{close:"Yopish",toggle:"Almashtirish"},selectMenu:{create:'"{label}" yaratish',noData:"Maʼlumot yoʻq",noMatch:"Mos keluvchi natija topilmadi",search:"Qidirish…"},slideover:{close:"Yopish"},table:{noData:"Maʼlumot yoʻq"},toast:{close:"Yopish"}}}),yU=be({name:"Tiếng Việt",code:"vi",messages:{alert:{close:"Đóng"},authForm:{hidePassword:"Ẩn mật khẩu",showPassword:"Hiển thị mật khẩu",submit:"Tiếp tục"},banner:{close:"Đóng"},calendar:{nextMonth:"Tháng sau",nextYear:"Năm sau",prevMonth:"Tháng trước",prevYear:"Năm trước"},carousel:{dots:"Chọn slide để hiển thị",goto:"Đi tới ô {slide}",next:"Sau",prev:"Trước"},chatPrompt:{placeholder:"Nhập tin nhắn của bạn ở đây…"},chatPromptSubmit:{label:"Gửi"},chatReasoning:{thinking:"Đang suy nghĩ…",thought:"Đã suy nghĩ",thoughtFor:"Đã suy nghĩ {duration}"},colorMode:{dark:"Tối",light:"Sáng",switchToDark:"Chuyển sang chế độ tối",switchToLight:"Chuyển sang chế độ sáng",system:"Hệ thống"},commandPalette:{back:"Quay lại",close:"Đóng",noData:"Không có dữ liệu",noMatch:"Không có kết quả phù hợp",placeholder:"Nhập lệnh hoặc tìm kiếm…"},contentSearch:{links:"Liên kết",theme:"Chủ đề"},contentSearchButton:{label:"Tìm kiếm…"},contentToc:{title:"Trong trang này"},dropdownMenu:{noMatch:"Không có kết quả phù hợp",search:"Tìm kiếm…"},dashboardSearch:{theme:"Chủ đề"},dashboardSearchButton:{label:"Tìm kiếm…"},dashboardSidebarCollapse:{collapse:"Thu gọn thanh bên",expand:"Mở rộng thanh bên"},dashboardSidebarToggle:{close:"Đóng thanh bên",open:"Mở thanh bên"},error:{clear:"Quay lại trang chủ"},fileUpload:{removeFile:"Xóa {filename}"},header:{close:"Đóng menu",open:"Mở menu"},inputMenu:{create:'Tạo "{label}"',noData:"Không có dữ liệu",noMatch:"Không có kết quả phù hợp"},inputNumber:{decrement:"Giảm",increment:"Tăng"},modal:{close:"Đóng"},pricingTable:{caption:"So sánh các kế hoạch giá"},prose:{codeCollapse:{closeText:"Thu gọn",name:"mã",openText:"Mở rộng"},collapsible:{closeText:"Ẩn",name:"thuộc tính",openText:"Hiển thị"},pre:{copy:"Sao chép mã vào bộ nhớ tạm"}},sidebar:{close:"Đóng",toggle:"Chuyển đổi"},selectMenu:{create:'Tạo "{label}"',noData:"Không có dữ liệu",noMatch:"Không có kết quả phù hợp",search:"Tìm kiếm…"},slideover:{close:"Đóng"},table:{noData:"Không có dữ liệu"},toast:{close:"Đóng"}}}),bU=be({name:"简体中文",code:"zh-CN",messages:{alert:{close:"关闭"},authForm:{hidePassword:"隐藏密码",showPassword:"显示密码",submit:"继续"},banner:{close:"关闭"},calendar:{nextMonth:"下个月",nextYear:"明年",prevMonth:"上个月",prevYear:"去年"},carousel:{dots:"选择要显示的幻灯片",goto:"跳转到第 {slide} 页",next:"下一页",prev:"上一页"},chatPrompt:{placeholder:"在这里输入你的消息…"},chatPromptSubmit:{label:"发送"},chatReasoning:{thinking:"思考中…",thought:"已思考",thoughtFor:"思考了 {duration}"},colorMode:{dark:"深色",light:"浅色",switchToDark:"切换到深色模式",switchToLight:"切换到浅色模式",system:"系统"},commandPalette:{back:"返回",close:"关闭",noData:"没有数据",noMatch:"没有匹配的数据",placeholder:"输入命令或搜索…"},contentSearch:{links:"链接",theme:"主题"},contentSearchButton:{label:"搜索…"},contentToc:{title:"本页内容"},dropdownMenu:{noMatch:"没有匹配的数据",search:"搜索…"},dashboardSearch:{theme:"主题"},dashboardSearchButton:{label:"搜索…"},dashboardSidebarCollapse:{collapse:"收起侧边栏",expand:"展开侧边栏"},dashboardSidebarToggle:{close:"关闭侧边栏",open:"打开侧边栏"},error:{clear:"返回首页"},fileUpload:{removeFile:"删除 {filename}"},header:{close:"关闭菜单",open:"打开菜单"},inputMenu:{create:'创建 "{label}"',noData:"没有数据",noMatch:"没有匹配的数据"},inputNumber:{decrement:"减少",increment:"增加"},modal:{close:"关闭"},pricingTable:{caption:"价格计划比较"},prose:{codeCollapse:{closeText:"收起",name:"代码",openText:"展开"},collapsible:{closeText:"隐藏",name:"属性",openText:"显示"},pre:{copy:"复制代码到剪贴板"}},sidebar:{close:"关闭",toggle:"切换"},selectMenu:{create:'创建 "{label}"',noData:"没有数据",noMatch:"没有匹配的数据",search:"搜索…"},slideover:{close:"关闭"},table:{noData:"没有数据"},toast:{close:"关闭"}}}),EU=be({name:"繁體中文",code:"zh-TW",messages:{alert:{close:"關閉"},authForm:{hidePassword:"隱藏密碼",showPassword:"顯示密碼",submit:"繼續"},banner:{close:"關閉"},calendar:{nextMonth:"下個月",nextYear:"明年",prevMonth:"上個月",prevYear:"去年"},carousel:{dots:"選擇要顯示的投影片",goto:"跳轉到第 {slide} 頁",next:"下一頁",prev:"上一頁"},chatPrompt:{placeholder:"在這裡輸入你的消息…"},chatPromptSubmit:{label:"發送"},chatReasoning:{thinking:"思考中…",thought:"已思考",thoughtFor:"思考了 {duration}"},colorMode:{dark:"深色",light:"淺色",switchToDark:"切換到深色模式",switchToLight:"切換到淺色模式",system:"系統"},commandPalette:{back:"返回",close:"關閉",noData:"沒有資料",noMatch:"沒有相符的資料",placeholder:"輸入命令或搜尋…"},contentSearch:{links:"連結",theme:"主題"},contentSearchButton:{label:"搜尋…"},contentToc:{title:"本頁內容"},dropdownMenu:{noMatch:"沒有相符的資料",search:"搜尋…"},dashboardSearch:{theme:"主題"},dashboardSearchButton:{label:"搜尋…"},dashboardSidebarCollapse:{collapse:"收起側邊欄",expand:"展開側邊欄"},dashboardSidebarToggle:{close:"關閉側邊欄",open:"開啟側邊欄"},error:{clear:"返回首頁"},fileUpload:{removeFile:"移除 {filename}"},header:{close:"關閉選單",open:"開啟選單"},inputMenu:{create:"建立「{label}」",noData:"沒有資料",noMatch:"沒有相符的資料"},inputNumber:{decrement:"減少",increment:"增加"},modal:{close:"關閉"},pricingTable:{caption:"價格計畫比較"},prose:{codeCollapse:{closeText:"收起",name:"程式碼",openText:"展開"},collapsible:{closeText:"隱藏",name:"屬性",openText:"顯示"},pre:{copy:"複製程式碼到剪貼簿"}},sidebar:{close:"關閉",toggle:"切換"},selectMenu:{create:"建立「{label}」",noData:"沒有資料",noMatch:"沒有相符的資料",search:"搜尋…"},slideover:{close:"關閉"},table:{noData:"沒有資料"},toast:{close:"關閉"}}}),GE=Object.freeze(Object.defineProperty({__proto__:null,ar:mz,az:gz,be:vz,bg:yz,bn:bz,ca:Ez,ckb:Cz,cs:xz,da:wz,de:Dz,de_ch:Az,el:Bz,en:Fu,en_gb:_z,es:kz,et:Sz,eu:Tz,fa_ir:Fz,fi:Pz,fr:Mz,gl:Oz,he:Iz,hi:Rz,hr:Lz,hu:qz,hy:$z,id:Nz,is:jz,it:Vz,ja:zz,ka:Uz,kk:Hz,km:Kz,ko:Wz,ky:Gz,lb:Yz,lo:Zz,lt:Xz,mn:Jz,ms:Qz,nb_no:eU,nl:tU,pl:nU,pt:oU,pt_br:rU,ro:uU,ru:aU,sk:sU,sl:iU,sq:lU,sv:cU,th:dU,tj:fU,tr:pU,ug_cn:hU,uk:mU,ur:gU,uz:vU,vi:yU,zh_cn:bU,zh_tw:EU},Symbol.toStringTag,{value:"Module"}));function YE(e,t,n){if(t&&n){const o=e.find(r=>r.path===`/${n}`)?.children||e;return o.find(r=>r.path===`/${n}/docs`)?.children||o}else return e.find(o=>o.path==="/docs")?.children||e}function CU(e,t,n=[]){if(e)for(const o of e){const r=[...n,{title:o.title,path:o.path}];if(o.path===t)return r;if(o.children){const u=CU(o.children,t,r);if(u)return u}}}const xU={docs:"v3.5.0--WRKcSWvvJ7xpisMbNohe5JlUaLkZ8gRI82vN6mYT1BA",landing:"v3.5.0--ZSrL8oMLgLk6PNmH6Z54wyDLHfAlLlD5NQyXKig3u7I"},wU={docs:"_content_docs",landing:"_content_landing",info:"_content_info"},fH={docs:{type:"page",fields:{id:"string",title:"string",body:"json",description:"string",extension:"string",links:"json",meta:"json",navigation:"json",path:"string",seo:"json",stem:"string"}},landing:{type:"page",fields:{id:"string",title:"string",body:"json",description:"string",extension:"string",meta:"json",navigation:"json",path:"string",seo:"json",stem:"string"}},info:{type:"data",fields:{}}},Gi=(e,t)=>{const n=e._conditions;return n.length>0?`(${n.join(` ${t} `)})`:""},Yi=e=>{const t=[],n={_conditions:t,where(o,r,u){let a;switch(r.toUpperCase()){case"IN":case"NOT IN":if(Array.isArray(u)){const s=u.map(i=>da(i)).join(", ");a=`"${String(o)}" ${r.toUpperCase()} (${s})`}else throw new TypeError(`Value for ${r} must be an array`);break;case"BETWEEN":case"NOT BETWEEN":if(Array.isArray(u)&&u.length===2)a=`"${String(o)}" ${r.toUpperCase()} ${da(u[0])} AND ${da(u[1])}`;else throw new Error(`Value for ${r} must be an array with two elements`);break;case"IS NULL":case"IS NOT NULL":a=`"${String(o)}" ${r.toUpperCase()}`;break;case"LIKE":case"NOT LIKE":a=`"${String(o)}" ${r.toUpperCase()} ${da(u)}`;break;default:a=`"${String(o)}" ${r} ${da(typeof u=="boolean"?Number(u):u)}`}return t.push(`${a}`),n},andWhere(o){const r=o(Yi());return t.push(Gi(r,"AND")),n},orWhere(o){const r=o(Yi());return t.push(Gi(r,"OR")),n}};return n},DU=(e,t)=>{const n={conditions:[],selectedFields:[],offset:0,limit:0,orderBy:[],count:{field:"",distinct:!1}},o={__params:n,andWhere(u){const a=u(Yi());return n.conditions.push(Gi(a,"AND")),o},orWhere(u){const a=u(Yi());return n.conditions.push(Gi(a,"OR")),o},path(u){return o.where("path","=",Bu(u))},skip(u){return n.offset=u,o},where(u,a,s){return o.andWhere(i=>i.where(String(u),a,s)),o},limit(u){return n.limit=u,o},select(...u){return u.length&&n.selectedFields.push(...u),o},order(u,a){return n.orderBy.push(`"${String(u)}" ${a}`),o},async all(){return t(e,r()).then(u=>u||[])},async first(){return t(e,r({limit:1})).then(u=>u[0]||null)},async count(u="*",a=!1){return t(e,r({count:{field:String(u),distinct:a}})).then(s=>s[0].count)}};function r(u={}){let a="SELECT ";if(u?.count)a+=`COUNT(${u.count.distinct?"DISTINCT ":""}${u.count.field}) as count`;else{const i=Array.from(new Set(n.selectedFields));a+=i.length>0?i.map(c=>`"${String(c)}"`).join(", "):"*"}a+=` FROM ${wU[String(e)]}`,n.conditions.length>0&&(a+=` WHERE ${n.conditions.join(" AND ")}`),n.orderBy.length>0?a+=` ORDER BY ${n.orderBy.join(", ")}`:a+=" ORDER BY stem ASC";const s=u?.limit||n.limit;return s>0&&(n.offset>0?a+=` LIMIT ${s} OFFSET ${n.offset}`:a+=` LIMIT ${s}`),a}return o};function da(e){return`'${String(e).replace(/'/g,"''")}'`}const AU=/\d/,BU=["-","_","/","."];function _U(e=""){if(!AU.test(e))return e!==e.toLowerCase()}function ZE(e,t){const n=BU,o=[];if(!e||typeof e!="string")return o;let r="",u,a;for(const s of e){const i=n.includes(s);if(i===!0){o.push(r),r="",u=void 0;continue}const c=_U(s);if(a===!1){if(u===!1&&c===!0){o.push(r),r=s,u=c;continue}if(u===!0&&c===!1&&r.length>1){const l=r.at(-1);o.push(r.slice(0,Math.max(0,r.length-1))),r=l+s,u=c;continue}}r+=s,u=c,a=i}return o.push(r),o}function kU(e){return e?e[0].toUpperCase()+e.slice(1):""}function SU(e,t){return e?(Array.isArray(e)?e:ZE(e)).map(n=>kU(t?.normalize?n.toLowerCase():n)).join(""):""}function pH(e,t){return e?(Array.isArray(e)?e:ZE(e)).map(n=>n.toLowerCase()).join("-"):""}function gd(e){return t=>(t=t||{},(e||[]).filter(n=>typeof t[n]<"u").reduce((n,o)=>Object.assign(n,{[o]:t[o]}),{}))}async function XE(e,t=[]){e.__params?.orderBy?.length||(e=e.order("stem","ASC"));const o=await e.orWhere(c=>c.where("navigation","<>","false").where("navigation","IS NULL")).select("navigation","stem","path","title","meta",...t||[]).all(),{contents:r,configs:u}=o.reduce((c,l)=>{if(String(l.stem).split("/").pop()===".navigation"){l.title=l.title?.toLowerCase()==="navigation"?"":l.title;const d=l.path.split("/").slice(0,-1).join("/")||"/";c.configs[d]={...l,...l.body}}else c.contents.push(l);return c},{configs:{},contents:[]}),a=c=>({...gd(["title",...t])(c),...c.meta,...fg(c?.navigation)?c.navigation:{}}),s=c=>({...gd(["title",...t])(c),...fg(c?.navigation)?c.navigation:{}}),i=r.reduce((c,l)=>{const d=l.path.substring(1).split("/"),p=l.stem.split("/"),h=!!p[p.length-1]?.match(/([1-9]\d*\.)?index/g),m=b=>({title:b.title,path:b.path,stem:b.stem,children:[],...s(b)}),g=m(l);if(h){const b=u[g.path];if(typeof b?.navigation<"u"&&b?.navigation===!1)return c;if(l.path!=="/"){const v=m(l);g.children.push(v)}b&&Object.assign(g,a(b))}if(d.length===1){const b=c.find(v=>v.path===g.path&&v.page===!1);return h&&b?Object.assign(b,{page:void 0,children:[...g.children||[],...b.children||[]]}):c.push(g),c}const y=d.slice(0,-1).reduce((b,v,C)=>{const w="/"+d.slice(0,C+1).join("/"),B=u[w];if(typeof B?.navigation<"u"&&B.navigation===!1)return[];let x=b.find(_=>_.path===w);if(!x){const _=B?a(B):{};x={..._,title:_.title||TU(v),path:w,stem:p.slice(0,C+1).join("/"),children:[],page:!1},b.push(x)}return x.children},c),E=y.find(b=>b.path===g.path&&b.page===!1);return E?Object.assign(E,{...g,page:void 0,children:[...g.children||[],...E.children||[]]}):y.push(g),c},[]);return JE(i)}function JE(e){const t=e;for(const n of t)n.children?.length?JE(n.children):delete n.children;return e}function fg(e){return e!==null&&Object.prototype.toString.call(e)==="[object Object]"}const TU=e=>e.split(/[\s-]/g).map(SU).join(" ");async function FU(e,t,n){const{before:o=1,after:r=1,fields:u=[]}=n||{},a=await XE(e,u),s=QE(a),i=s.findIndex(d=>d.path===t),c=i===-1?[]:s.slice(i-o,i),l=i===-1?[]:s.slice(i+1,i+r+1);return[...Array.from({length:o}).fill(null).concat(c).slice(c.length),...l.concat(Array.from({length:r}).fill(null)).slice(0,r)]}function QE(e){return e.flatMap(n=>{const o=n.children?QE(n.children):[];return n.page===!1||o.length&&o.find(r=>r.path===n.path)?o:[{...n,children:void 0},...o]})}function PU(e){return{type:"root",children:e.value.map(e2)}}function e2(e){if(typeof e=="string")return{type:"text",value:e};const[t,n,...o]=e;return{type:"element",tag:t,props:n,children:o.map(e2)}}const MU=/^h([1-6])$/,vd=e=>Number(e.match(MU)?.[1]??0);async function OU(e,t){const{ignoredTags:n=[],extraFields:o=[],minHeading:r="h1",maxHeading:u="h6"}={},a=vd(r),s=vd(u);return(await e.where("extension","=","md").select("path","body","description","title",...o||[]).all()).flatMap(c=>IU(c,{ignoredTags:n,extraFields:o,minLevel:a,maxLevel:s}))}function IU(e,{ignoredTags:t,extraFields:n,minLevel:o,maxLevel:r}){const u=!e.body||e.body?.type==="root"?e.body:PU(e.body),a=e.path??"",s=gd(n)(e),i=[{...s,id:a,title:e.title||"",titles:[],content:(e.description||"").trim(),level:1}];if(!u?.children)return i;let c=1,l=0;const d=[e.title??""];for(const p of u.children){const h=p.tag||"",m=vd(h);if(m>=o&&m<=r){const g=yd(p).trim();m===1?d.splice(0,d.length):myd(o,t)).filter(Boolean).join("")),n)}async function t2(e,t,n,o){const r=e?J5(e):{};r["accept-encoding"]=void 0;const u=`/__nuxt_content/${t}/${n}`,a={...o,headers:{...r,...o.headers},query:{v:xU[String(t)],t:void 0}};return e?await e.$fetch(u,a):await $fetch(u,a)}async function hH(e,t){return t2(e,t,"sql_dump.txt",{responseType:"text",headers:{"content-type":"text/plain"}})}async function RU(e,t,n){return t2(e,t,"query",{headers:{"content-type":"application/json"},method:"POST",body:{sql:n}})}const LU=e=>{const t=Cy()?.ssrContext?.event;return DU(e,(n,o)=>qU(t,n,o))};function n2(e,t){return up(e,n=>XE(n,t))}function mH(e,t,n){return up(e,o=>FU(o,t,n))}function o2(e,t){return up(e,n=>OU(n))}async function qU(e,t,n){return window.WebAssembly?$U(t,n):RU(e,String(t),n)}async function $U(e,t){return await ne(()=>import("./Df-aV_dL.js"),[],import.meta.url).then(o=>o.loadDatabaseAdapter(e)).then(o=>o.all(t))}function up(e,t){const n=LU(e),o={where(r,u,a){return n.where(String(r),u,a),o},andWhere(r){return n.andWhere(r),o},orWhere(r){return n.orWhere(r),o},order(r,u){return n.order(String(r),u),o},then(r,u){return t(n).then(r,u)},catch(r){return this.then(void 0,r)},finally(r){return this.then(void 0,void 0).finally(r)},get[Symbol.toStringTag](){return"Promise"}};return o}const NU=Ae(()=>ne(()=>import("./CxBf5103.js"),__vite__mapDeps([26,15,1]),import.meta.url).then(e=>e.default||e)),jU=Ae(()=>ne(()=>Promise.resolve().then(()=>Nb),void 0,import.meta.url).then(e=>e.default||e)),VU=Ae(()=>ne(()=>Promise.resolve().then(()=>Nb),void 0,import.meta.url).then(e=>e.default||e)),zU=L({__name:"app",async setup(e){let t,n;const o=Pe(),{seo:r}=o,{forced:u}=ss(),a=qb(),{locale:s,locales:i,isEnabled:c,switchLocalePath:l}=Gu(),{isEnabled:d,panelWidth:p,shouldPushContent:h}=VE(),m=F(()=>GE[s.value]||Fu),g=F(()=>m.value.code),y=F(()=>m.value.dir),E=F(()=>c.value?`docs_${s.value}`:"docs");if(Wd({meta:[{name:"viewport",content:"width=device-width, initial-scale=1"}],link:[{rel:"icon",href:"/favicon.ico"}],htmlAttrs:{lang:g,dir:y}}),$y({titleTemplate:r.titleTemplate,title:r.title,description:r.description,ogSiteName:a.name,twitterCard:"summary_large_image"}),c.value){const w=Yn(),B=Bn().public.i18n.defaultLocale;$e(()=>{const x=w.path.split("/")[1];if(!i.some(_=>_.code===x))return dl(l(B))})}const{data:b}=([t,n]=yv(()=>tf(()=>`navigation_${E.value}`,()=>n2(E.value),{transform:w=>YE(w,c.value,s.value),watch:[s]})),t=await t,n(),t),{data:v}=m3(`search_${E.value}`,()=>o2(E.value),{server:!1,watch:[s]});Pt("navigation",b);const{subNavigationMode:C}=tp(b);return(w,B)=>{const x=L_,_=zE,S=qV,O=UV,H=KE,N=NU,J=jU,G=VU,$=ef,I=WE;return D(),k(I,{locale:f(m)},{default:A(()=>[q(x,{color:"var(--ui-primary)"}),je("div",{class:U(["transition-[margin-right] duration-200 ease-linear will-change-[margin-right]",{"docus-sub-header":f(C)==="header"}]),style:mn({marginRight:f(h)?`${f(p)}px`:"0"})},[(w._.provides[Oo]||w.$route).meta.header!==!1?(D(),k(_,{key:0})):Y("",!0),q(O,null,{default:A(()=>[q(S)]),_:1}),(w._.provides[Oo]||w.$route).meta.footer!==!1?(D(),k(H,{key:1})):Y("",!0)],6),q($,null,{default:A(()=>[q(N,{files:f(v),navigation:f(b),"color-mode":!f(u)},null,8,["files","navigation","color-mode"]),f(d)?(D(),re(Ce,{key:0},[q(J),q(G)],64)):Y("",!0)]),_:1})]),_:1},8,["locale"])}}}),UU={slots:{root:"min-h-[calc(100vh-var(--ui-header-height))] flex flex-col items-center justify-center text-center",statusCode:"text-base font-semibold text-primary",statusMessage:"mt-2 text-4xl sm:text-5xl font-bold text-highlighted text-balance",message:"mt-4 text-lg text-muted text-balance",links:"mt-8 flex items-center justify-center gap-6"}},HU={__name:"UError",props:{as:{type:null,required:!1,default:"main"},error:{type:Object,required:!1},redirect:{type:String,required:!1,default:"/"},clear:{type:[Boolean,Object],required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=e,n=qt(),{t:o}=Vo(),r=Pe(),u=Et("error",t),a=F(()=>Se({extend:Se(UU),...r.ui?.error||{}})());function s(){_y({redirect:t.redirect})}return(i,c)=>(D(),k(f(we),{as:e.as,"data-slot":"root",class:U(a.value.root({class:[f(u)?.root,t.class]}))},{default:A(()=>[t.error?.statusCode||t.error?.status||n.statusCode?(D(),re("p",{key:0,"data-slot":"statusCode",class:U(a.value.statusCode({class:f(u)?.statusCode}))},[P(i.$slots,"statusCode",{},()=>[Ke(Fe(t.error?.statusCode||t.error?.status),1)])],2)):Y("",!0),t.error?.statusMessage||t.error?.statusText||n.statusMessage?(D(),re("h1",{key:1,"data-slot":"statusMessage",class:U(a.value.statusMessage({class:f(u)?.statusMessage}))},[P(i.$slots,"statusMessage",{},()=>[Ke(Fe(t.error?.statusMessage||t.error?.statusText),1)])],2)):Y("",!0),t.error?.message&&t.error.message!==(t.error.statusMessage||t.error.statusText)||n.message?(D(),re("p",{key:2,"data-slot":"message",class:U(a.value.message({class:f(u)?.message}))},[P(i.$slots,"message",{},()=>[Ke(Fe(t.error?.message),1)])],2)):Y("",!0),e.clear||n.links?(D(),re("div",{key:3,"data-slot":"links",class:U(a.value.links({class:f(u)?.links}))},[P(i.$slots,"links",{},()=>[e.clear?(D(),k(hn,j({key:0,size:"lg",color:"primary",variant:"solid",label:f(o)("error.clear")},typeof e.clear=="object"?e.clear:{},{onClick:s}),null,16,["label"])):Y("",!0)])],2)):Y("",!0)]),_:3},8,["as","class"]))}},KU=Ae(()=>ne(()=>import("./CxBf5103.js"),__vite__mapDeps([26,15,1]),import.meta.url).then(e=>e.default||e)),WU=L({__name:"error",props:{error:{}},async setup(e){let t,n;const o=e,{forced:r}=ss(),{locale:u,locales:a,isEnabled:s,t:i,switchLocalePath:c}=Gu(),l=F(()=>GE[u.value]||Fu),d=F(()=>l.value.code),p=F(()=>l.value.dir);Wd({htmlAttrs:{lang:d,dir:p}});const h=F(()=>({...o.error,statusMessage:i("common.error.title"),message:i("common.error.description")}));if($y({title:()=>i("common.error.title"),description:()=>i("common.error.description")}),s.value){const E=Yn(),b=Bn().public.i18n.defaultLocale;$e(()=>{const v=E.path.split("/")[1];if(!a.some(C=>C.code===v))return dl(c(b))})}const m=F(()=>s.value?`docs_${u.value}`:"docs"),{data:g}=([t,n]=yv(()=>tf(`navigation_${m.value}`,()=>n2(m.value),{transform:E=>YE(E,s.value,u.value),watch:[u]})),t=await t,n(),t),{data:y}=m3(`search_${m.value}`,()=>o2(m.value),{server:!1});return Pt("navigation",g),(E,b)=>{const v=zE,C=HU,w=KE,B=KU,x=ef,_=WE;return D(),k(_,{locale:f(l)},{default:A(()=>[q(v),q(C,{error:f(h)},null,8,["error"]),q(w),q(x,null,{default:A(()=>[q(B,{files:f(y),navigation:f(g),"color-mode":!f(r)},null,8,["files","navigation","color-mode"])]),_:1})]),_:1},8,["locale"])}}}),GU={key:0},pg={__name:"nuxt-root",setup(e){const t=()=>null,n=Re(),o=n.deferHydration();if(n.isHydrating){const c=n.hooks.hookOnce("app:error",o);Xt().beforeEach(c)}const r=!1;Pt(Oo,Yn()),n.hooks.callHookWith(c=>c.map(l=>l()),"vue:setup");const u=fl(),a=!1,s=/bot\b|chrome-lighthouse|facebookexternalhit|google\b/i;lv((c,l,d)=>{if(n.hooks.callHook("vue:error",c,l,d)?.catch(p=>console.error("[nuxt] Error in `vue:error` hook",p)),s.test(navigator.userAgent))return n.hooks.callHook("app:error",c),console.error(`[nuxt] Not rendering error page for bot with user agent \`${navigator.userAgent}\`:`,c),!1;if(ky(c)&&(c.fatal||c.unhandled))return n.runWithContext(()=>kr(c)),!1});const i=!1;return(c,l)=>(D(),k(Rd,{onResolve:f(o)},{default:A(()=>[f(a)?(D(),re("div",GU)):f(u)?(D(),k(f(WU),{key:1,error:f(u)},null,8,["error"])):f(i)?(D(),k(f(t),{key:2,context:f(i)},null,8,["context"])):f(r)?(D(),k(Rt(f(r)),{key:3})):(D(),k(f(zU),{key:4}))]),_:1},8,["onResolve"]))}};let hg;{let e;hg=async function(){if(e)return e;const n=!!(window.__NUXT__?.serverRendered??document.getElementById("__NUXT_DATA__")?.dataset.ssr==="true"),o=n?Mx(pg):Px(pg),r=U5({vueApp:o});async function u(a){await r.callHook("app:error",a),r.payload.error||=ar(a)}o.config.errorHandler=u,r.hook("app:suspense:resolve",()=>{o.config.errorHandler===u&&(o.config.errorHandler=void 0)}),!n&&eh.id&&r.hook("app:suspense:resolve",()=>{document.getElementById(eh.id)?.remove()});try{await W5(r,M_)}catch(a){u(a)}try{await r.hooks.callHook("app:created",o),await r.hooks.callHook("app:beforeMount",o),o.mount(j5),await r.hooks.callHook("app:mounted",o),await Oe()}catch(a){u(a)}return o},e=hg().catch(t=>{throw console.error("Error while mounting app:",t),t})}export{Vo as $,bl as A,q as B,$d as C,On as D,Yg as E,Ce as F,$e as G,Ht as H,sn as I,ae as J,YU as K,I3 as L,jg as M,ir as N,Me as O,we as P,qt as Q,tH as R,H7 as S,dt as T,qk as U,Yr as V,Rt as W,mn as X,An as Y,jt as Z,xv as _,k as a,zk as a$,Pe as a0,Et as a1,it as a2,Jt as a3,To as a4,XU as a5,rv as a6,$r as a7,xu as a8,ms as a9,ZN as aA,aH as aB,Eb as aC,bb as aD,uH as aE,tu as aF,No as aG,iH as aH,eb as aI,gF as aJ,L8 as aK,V8 as aL,Pt as aM,fO as aN,Yn as aO,Lb as aP,Bn as aQ,QU as aR,Gu as aS,VE as aT,Vb as aU,Pd as aV,mo as aW,Xt as aX,Re as aY,Wk as aZ,Hk as a_,_o as aa,st as ab,U as ac,Ku as ad,Tb as ae,je as af,Fe as ag,Ke as ah,Mf as ai,us as aj,hn as ak,vv as al,Se as am,Ye as an,wt as ao,V3 as ap,mI as aq,At as ar,JU as as,aM as at,Ib as au,ln as av,me as aw,xe as ax,oM as ay,rt as az,w0 as b,wU as b$,tp as b0,SE as b1,FV as b2,kE as b3,Ue as b4,yv as b5,tf as b6,pH as b7,LU as b8,mH as b9,D0 as bA,_E as bB,nr as bC,_n as bD,Gg as bE,Ua as bF,aT as bG,rH as bH,oH as bI,W7 as bJ,O$ as bK,Je as bL,cH as bM,zm as bN,I$ as bO,tx as bP,ZU as bQ,o1 as bR,H0 as bS,c1 as bT,dH as bU,l1 as bV,D4 as bW,Td as bX,Wu as bY,ep as bZ,fH as b_,ar as ba,CU as bb,qe as bc,_t as bd,We as be,He as bf,Ep as bg,SU as bh,Ae as bi,Lr as bj,bt as bk,$x as bl,ne as bm,PU as bn,qb as bo,$y as bp,Wd as bq,cr as br,Bu as bs,iv as bt,Ha as bu,df as bv,e1 as bw,t1 as bx,B0 as by,n1 as bz,F as c,xU as c0,hH as c1,ek as c2,eH as c3,$0 as c4,sH as c5,L as d,re as e,Y as f,mt as g,vo as h,Ur as i,Rk as j,ju as k,Lt as l,j as m,Oe as n,D as o,A as p,P as q,yt as r,f as s,ke as t,an as u,R as v,ye as w,H_ as x,nH as y,lt as z}; diff --git a/docus/dist/_nuxt/B4xqMpdT.js b/docus/dist/_nuxt/B4xqMpdT.js new file mode 100644 index 0000000..d45ab0a --- /dev/null +++ b/docus/dist/_nuxt/B4xqMpdT.js @@ -0,0 +1 @@ +import{a0 as r,a1 as c,e as p,q as u,ac as i,s as m,c as f,am as e,o as d}from"./B3fabVUf.js";const _={base:"my-1.5 ps-1.5 leading-7 [&>ul]:my-0"},b={__name:"ProseLi",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const s=a,o=r(),t=c("prose.li",s),l=f(()=>e({extend:e(_),...o.ui?.prose?.li||{}}));return(n,y)=>(d(),p("li",{class:i(l.value({class:[m(t)?.base,s.class]}))},[u(n.$slots,"default")],2))}};export{b as default}; diff --git a/docus/dist/_nuxt/B6bUjJBd.js b/docus/dist/_nuxt/B6bUjJBd.js new file mode 100644 index 0000000..2b539c9 --- /dev/null +++ b/docus/dist/_nuxt/B6bUjJBd.js @@ -0,0 +1 @@ +import{d as m,bH as I,I as y,h as g,G as F,H as h,o as K,a as S,p as l,B as C,s as n,P as q,q as w,c as u,y as B,bI as T,n as R,bJ as x}from"./B3fabVUf.js";var _=m({__name:"RovingFocusItem",props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(d){const r=d,a=I(),f=y(),i=u(()=>r.tabStopId||f),c=u(()=>a.currentTabStopId.value===i.value),{getItems:p,CollectionItem:v}=g();F(()=>{r.focusable&&a.onFocusableItemAdd()}),h(()=>{r.focusable&&a.onFocusableItemRemove()});function b(e){if(e.key==="Tab"&&e.shiftKey){a.onItemShiftTab();return}if(e.target!==e.currentTarget)return;const t=B(e,a.orientation.value,a.dir.value);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||!r.allowShiftKey&&e.shiftKey)return;e.preventDefault();let o=[...p().map(s=>s.ref).filter(s=>s.dataset.disabled!=="")];if(t==="last")o.reverse();else if(t==="prev"||t==="next"){t==="prev"&&o.reverse();const s=o.indexOf(e.currentTarget);o=a.loop.value?T(o,s+1):o.slice(s+1)}R(()=>x(o))}}return(e,t)=>(K(),S(n(v),null,{default:l(()=>[C(n(q),{tabindex:c.value?0:-1,"data-orientation":n(a).orientation.value,"data-active":e.active?"":void 0,"data-disabled":e.focusable?void 0:"",as:e.as,"as-child":e.asChild,onMousedown:t[0]||(t[0]=o=>{e.focusable?n(a).onItemFocus(i.value):o.preventDefault()}),onFocus:t[1]||(t[1]=o=>n(a).onItemFocus(i.value)),onKeydown:b},{default:l(()=>[w(e.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),A=_;export{A as R}; diff --git a/docus/dist/_nuxt/B7V4_Oof.js b/docus/dist/_nuxt/B7V4_Oof.js new file mode 100644 index 0000000..8b70c0a --- /dev/null +++ b/docus/dist/_nuxt/B7V4_Oof.js @@ -0,0 +1 @@ +const a={or:"veya",error:{title:"Sayfa bulunamadı",description:"Üzgünüz, bu sayfa bulunamadı."}},o={copy:{page:"Sayfayı kopyala",link:"Markdown bağlantısını kopyala",view:"Markdown olarak görüntüle",gpt:"ChatGPT'de aç",claude:"Claude'da aç"},links:"Topluluk",toc:"Bu sayfada",menu:"Menü",report:"Sorun bildir",edit:"Bu sayfayı düzenle"},n={copyLogo:"Logoyu kopyala",copyWordmark:"Wordmark'ı kopyala",downloadLogo:"Logoyu indir",downloadWordmark:"Wordmark'ı indir",brandAssets:"Marka materyalleri",logoCopied:"Logo kopyalandı",wordmarkCopied:"Wordmark kopyalandı",logoDownloaded:"Logo indirildi",wordmarkDownloaded:"Wordmark indirildi",copyLogoFailed:"Logo kopyalanamadı",copyWordmarkFailed:"Wordmark kopyalanamadı"},e={title:"Yapay zekaya sor",placeholder:"Bir soru sorun...",tooltip:"Yapay zekaya bir soru sorun",tryAsking:"Bir soru sormayı deneyin",askAnything:"Her şeyi sor...",clearChat:"Sohbeti temizle",close:"Kapat",expand:"Genişlet",collapse:"Daralt",thinking:"Düşünüyorum...",askMeAnything:"Her şeyi sor",askMeAnythingDescription:"Belgelerde gezinme, kavramları anlama ve yanıt bulma konusunda yardım alın.",faq:"SSS",chatCleared:"Sohbet yenilendiğinde temizlenir",lineBreak:"Satır sonu",explainWithAi:"Yapay zeka ile açıklayın",toolListPages:"Listelenen dokümantasyon sayfaları",toolReadPage:"Oku",loading:{searching:"Dokümantasyonda arama",reading:"Dokümanlar okunuyor",analyzing:"İçerik analiz ediliyor",finding:"En iyi yanıt bulunuyor",finished:"Kullanılan kaynaklar"}},r={common:a,docs:o,logo:n,assistant:e};export{e as assistant,a as common,r as default,o as docs,n as logo}; diff --git a/docus/dist/_nuxt/B91fwRQf.js b/docus/dist/_nuxt/B91fwRQf.js new file mode 100644 index 0000000..02f1eaf --- /dev/null +++ b/docus/dist/_nuxt/B91fwRQf.js @@ -0,0 +1 @@ +import{$ as h,aR as b,a0 as v,a1 as x,e as c,ac as r,s as e,B as u,af as d,ag as q,f as k,ak as C,q as S,m as $,c as B,am as p,o as m}from"./B3fabVUf.js";import w from"./C-sCiTCq.js";const P={slots:{root:"relative my-5 group",header:"flex items-center gap-1.5 border border-muted bg-default border-b-0 relative rounded-t-md px-4 py-3",filename:"text-default text-sm/6",icon:"size-4 shrink-0",copy:"absolute top-[11px] right-[11px] lg:opacity-0 lg:group-hover:opacity-100 transition",base:"group font-mono text-sm/6 border border-muted bg-muted rounded-md px-4 py-3 whitespace-pre-wrap break-words overflow-x-auto focus:outline-none **:[.line]:block **:[.line.highlight]:-mx-4 **:[.line.highlight]:px-4 **:[.line.highlight]:bg-accented/50!"},variants:{filename:{true:{root:"[&>pre]:rounded-t-none [&>pre]:my-0 my-5"}}}},A={__name:"ProsePre",props:{icon:{type:null,required:!1},code:{type:String,required:!1},language:{type:String,required:!1},filename:{type:String,required:!1},highlights:{type:Array,required:!1},hideHeader:{type:Boolean,required:!1},meta:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const t=a,{t:f}=h(),{copy:g,copied:y}=b(),l=v(),s=x("prose.pre",t),o=B(()=>p({extend:p(P),...l.ui?.prose?.pre||{}})());return(i,n)=>(m(),c("div",{class:r(o.value.root({class:[e(s)?.root],filename:!!a.filename}))},[a.filename&&!a.hideHeader?(m(),c("div",{key:0,class:r(o.value.header({class:e(s)?.header}))},[u(w,{icon:a.icon,filename:a.filename,class:r(o.value.icon({class:e(s)?.icon}))},null,8,["icon","filename","class"]),d("span",{class:r(o.value.filename({class:e(s)?.filename}))},q(a.filename),3)],2)):k("",!0),u(C,{icon:e(y)?e(l).ui.icons.copyCheck:e(l).ui.icons.copy,color:"neutral",variant:"outline",size:"sm","aria-label":e(f)("prose.pre.copy"),class:r(o.value.copy({class:e(s)?.copy})),tabindex:"-1",onClick:n[0]||(n[0]=z=>e(g)(t.code||""))},null,8,["icon","aria-label","class"]),d("pre",$({class:o.value.base({class:[e(s)?.base,t.class]})},i.$attrs),[S(i.$slots,"default")],16)],2))}};export{A as default}; diff --git a/docus/dist/_nuxt/BKwruWNQ.js b/docus/dist/_nuxt/BKwruWNQ.js new file mode 100644 index 0000000..7adfcf8 --- /dev/null +++ b/docus/dist/_nuxt/BKwruWNQ.js @@ -0,0 +1 @@ +import{a0 as p,a1 as u,e as d,af as i,q as f,ac as o,s as t,c as m,am as r,o as b}from"./B3fabVUf.js";const v={slots:{root:"relative my-5 overflow-x-auto",base:"w-full border-separate border-spacing-0 rounded-md"}},g={__name:"ProseTable",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(l){const e=l,c=p(),s=u("prose.table",e),a=m(()=>r({extend:r(v),...c.ui?.prose?.table||{}})());return(n,_)=>(b(),d("div",{class:o(a.value.root({class:[t(s)?.root,e.class]}))},[i("table",{class:o(a.value.base({class:t(s)?.base}))},[f(n.$slots,"default")],2)],2))}};export{g as default}; diff --git a/docus/dist/_nuxt/BLnzyn6S.js b/docus/dist/_nuxt/BLnzyn6S.js new file mode 100644 index 0000000..e21ebad --- /dev/null +++ b/docus/dist/_nuxt/BLnzyn6S.js @@ -0,0 +1 @@ +import{r as a}from"./Cf5i2Hk_.js";import t from"./Jc8Ntx_l.js";import{a0 as s,a as e,p as n,s as p,o as c}from"./B3fabVUf.js";import"./BN_7HF1G.js";const d={__name:"ProseCaution",setup(i){const o=s();return(r,f)=>(c(),e(t,{color:"error",icon:p(o).ui.icons.caution},{default:n(()=>[a(r.$slots,"default",{mdcUnwrap:"p"})]),_:3},8,["icon"]))}};export{d as default}; diff --git a/docus/dist/_nuxt/BN_7HF1G.js b/docus/dist/_nuxt/BN_7HF1G.js new file mode 100644 index 0000000..8e3b47c --- /dev/null +++ b/docus/dist/_nuxt/BN_7HF1G.js @@ -0,0 +1 @@ +const y=["p","h1","h2","h3","h4","h5","h6","li"];function f(r,i){return r.type===i||typeof r.type=="object"&&r.type.tag===i||r.tag===i}function u(r){return f(r,"text")||f(r,Symbol.for("v-txt"))}function l(r){return Array.isArray(r.children)||typeof r.children=="string"?r.children:typeof r.children?.default=="function"?r.children.default():[]}function n(r){if(!r)return"";if(Array.isArray(r))return r.map(n).join("");if(u(r))return r.value||r.children||"";const i=l(r);return Array.isArray(i)?i.map(n).filter(Boolean).join(""):""}function h(r,i=[]){if(Array.isArray(r))return r.flatMap(e=>h(e,i));let t=r;return i.some(e=>e==="*"||f(r,e))&&(t=l(r)||r,!Array.isArray(t)&&y.some(e=>f(r,e))&&(t=[t])),t}function p(r,i=[]){return r=Array.isArray(r)?r:[r],i.length?r.flatMap(t=>p(h(t,[i[0]]),i.slice(1))).filter(t=>!(u(t)&&n(t).trim()==="")):r}function a(r,i=[]){return typeof i=="string"&&(i=i.split(/[,\s]/).map(t=>t.trim()).filter(Boolean)),i.length?p(r,i).reduce((t,e)=>(u(e)?typeof t[t.length-1]=="string"?t[t.length-1]+=e.children:t.push(e.children):t.push(e),t),[]):r}export{a as f,n}; diff --git a/docus/dist/_nuxt/BOynLmEf.js b/docus/dist/_nuxt/BOynLmEf.js new file mode 100644 index 0000000..6de35a1 --- /dev/null +++ b/docus/dist/_nuxt/BOynLmEf.js @@ -0,0 +1 @@ +const a={or:"ou",error:{title:"Página não encontrada",description:"Desculpe, mas esta página não pôde ser encontrada."}},o={copy:{page:"Copiar página",link:"Copiar página em Markdown",view:"Visualizar como Markdown",gpt:"Abrir no ChatGPT",claude:"Abrir no Claude"},links:"Comunidade",toc:"Nesta página",menu:"Menu",report:"Reportar um erro",edit:"Editar esta página"},e={copyLogo:"Copiar logo",copyWordmark:"Copiar wordmark",downloadLogo:"Baixar logo",downloadWordmark:"Baixar wordmark",brandAssets:"Recursos da marca",logoCopied:"Logo copiado",wordmarkCopied:"Wordmark copiado",logoDownloaded:"Logo baixado",wordmarkDownloaded:"Wordmark baixado",copyLogoFailed:"Falha ao copiar o logo",copyWordmarkFailed:"Falha ao copiar o wordmark"},r={title:"Pergunte à IA",placeholder:"Faça uma pergunta...",tooltip:"Faça uma pergunta à IA",tryAsking:"Tente fazer uma pergunta",askAnything:"Pergunte qualquer coisa...",clearChat:"Limpar chat",close:"Fechar",expand:"Expandir",collapse:"Recolher",thinking:"Pensando...",askMeAnything:"Perguntar qualquer coisa",askMeAnythingDescription:"Obtenha ajuda para navegar pela documentação, entender conceitos e encontrar respostas.",faq:"Perguntas frequentes",chatCleared:"O chat é apagado ao atualizar",lineBreak:"Quebra de linha",explainWithAi:"Explicar com IA",toolListPages:"Páginas de documentação listadas",toolReadPage:"Ler",loading:{searching:"Pesquisar a documentação",reading:"Ler os documentos",analyzing:"Analisar o conteúdo",finding:"Encontrar a melhor resposta",finished:"Fontes utilizadas"}},n={common:a,docs:o,logo:e,assistant:r};export{r as assistant,a as common,n as default,o as docs,e as logo}; diff --git a/docus/dist/_nuxt/BRj7a3jo.js b/docus/dist/_nuxt/BRj7a3jo.js new file mode 100644 index 0000000..56d3e54 --- /dev/null +++ b/docus/dist/_nuxt/BRj7a3jo.js @@ -0,0 +1 @@ +const e={or:"oder",error:{title:"Säit net fonnt",description:"Et deet ons leed, awer d'Säit déi Dir sicht gëtt et net."}},n={copy:{page:"Säit kopéieren",link:"Markdown Säit kopéieren",view:"Als Markdown kucken",gpt:"An ChatGPT opmaachen",claude:"An Claude opmaachen"},links:"Gemeinschaft",toc:"Op dëser Säit",menu:"Menü",report:"Problem mellen",edit:"Dës Säit änneren"},o={copyLogo:"Logo kopéieren",copyWordmark:"Wortmark kopéieren",downloadLogo:"Logo eroflueden",downloadWordmark:"Wortmark eroflueden",brandAssets:"Marken-Materialien",logoCopied:"Logo kopéiert",wordmarkCopied:"Wortmark kopéiert",logoDownloaded:"Logo erofgelueden",wordmarkDownloaded:"Wortmark erofgelueden",copyLogoFailed:"Logo konnt net kopéiert ginn",copyWordmarkFailed:"Wortmark konnt net kopéiert ginn"},t={title:"Frot d'AI",placeholder:"Stell eng Fro...",tooltip:"Stell der AI eng Fro",tryAsking:"Probéieren eng Fro ze stellen",askAnything:"Frot iergendeppes...",clearChat:"Chat läschen",close:"Zoumaachen",expand:"Erweideren",collapse:"Zesummeklappen",thinking:"Denken...",askMeAnything:"Frot alles",askMeAnythingDescription:"Kritt Hëllef fir an der Dokumentatioun ze navigéieren, Konzepter ze verstoen an Äntwerten ze fannen.",faq:"FAQ",chatCleared:"Chat gëtt op Erfrëschung gereinegt",lineBreak:"Zeilepaus",explainWithAi:"Erklär mat AI",toolListPages:"Opgelëschte Dokumentatiounssäiten",toolReadPage:"Liesen",loading:{searching:"D'Dokumentatioun gëtt duerchsicht",reading:"D'Dokumenter ginn duerchgelies",analyzing:"Den Inhalt gëtt analyséiert",finding:"Déi bescht Äntwert gëtt fonnt",finished:"Benotzte Quellen"}},r={common:e,docs:n,logo:o,assistant:t};export{t as assistant,e as common,r as default,n as docs,o as logo}; diff --git a/docus/dist/_nuxt/BXokzvm8.js b/docus/dist/_nuxt/BXokzvm8.js new file mode 100644 index 0000000..392f05f --- /dev/null +++ b/docus/dist/_nuxt/BXokzvm8.js @@ -0,0 +1 @@ +import{a0 as c,a1 as i,e as l,q as p,ac as u,s as m,c as d,am as a,o as f,ah as b,ag as g}from"./B3fabVUf.js";const y={base:"*:first:mt-0 *:last:mb-0 *:my-1.5"},I={__name:"ProseTabsItem",props:{label:{type:String,required:!0},description:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const s=e,t=c(),r=i("prose.tabsItem",s),o=d(()=>a({extend:a(y),...t.ui?.prose?.tabsItem||{}}));return(n,q)=>(f(),l("div",{class:u(o.value({class:[m(r)?.base,s.class]}))},[p(n.$slots,"default",{},()=>[b(g(e.description),1)])],2))}};export{I as default}; diff --git a/docus/dist/_nuxt/BeOsfPZ5.js b/docus/dist/_nuxt/BeOsfPZ5.js new file mode 100644 index 0000000..bdbf64f --- /dev/null +++ b/docus/dist/_nuxt/BeOsfPZ5.js @@ -0,0 +1 @@ +const a={or:"o",error:{title:"Pagina non trovata",description:"Ci scusiamo, ma sembra che questa pagina non sia disponibile."}},o={copy:{page:"Copia pagina",link:"Copia pagina Markdown",view:"Visualizza come Markdown",gpt:"Apri in ChatGPT",claude:"Apri in Claude"},links:"Comunità",toc:"In questa pagina",menu:"Menu",report:"Segnala un problema",edit:"Modifica questa pagina"},i={copyLogo:"Copia logo",copyWordmark:"Copia wordmark",downloadLogo:"Scarica logo",downloadWordmark:"Scarica wordmark",brandAssets:"Risorse del brand",logoCopied:"Logo copiato",wordmarkCopied:"Wordmark copiato",logoDownloaded:"Logo scaricato",wordmarkDownloaded:"Wordmark scaricato",copyLogoFailed:"Impossibile copiare il logo",copyWordmarkFailed:"Impossibile copiare il wordmark"},e={title:"Chiedi all'AI",placeholder:"Fai una domanda...",tooltip:"Fai una domanda all'IA",tryAsking:"Prova a fare una domanda",askAnything:"Chiedi qualsiasi cosa...",clearChat:"Cancella chat",close:"Chiudi",expand:"Espandi",collapse:"Comprimi",thinking:"Sto pensando...",askMeAnything:"Chiedi qualsiasi cosa",askMeAnythingDescription:"Ricevi assistenza per esplorare la documentazione, comprendere i concetti e trovare risposte.",faq:"Domande frequenti",chatCleared:"La chat viene cancellata all'aggiornamento",lineBreak:"Interruzione di riga",explainWithAi:"Spiega con l'IA",toolListPages:"Pagine di documentazione elencate",toolReadPage:"Leggi",loading:{searching:"Ricerca della documentazione",reading:"Leggere i documenti",analyzing:"Analizzare il contenuto",finding:"Trovare la risposta migliore",finished:"Fonti utilizzate"}},n={common:a,docs:o,logo:i,assistant:e};export{e as assistant,a as common,n as default,o as docs,i as logo}; diff --git a/docus/dist/_nuxt/BePYYsBE.js b/docus/dist/_nuxt/BePYYsBE.js new file mode 100644 index 0000000..2fc3531 --- /dev/null +++ b/docus/dist/_nuxt/BePYYsBE.js @@ -0,0 +1 @@ +const o={or:"හෝ",error:{title:"පිටුව හමු නොවීය",description:"අපට කණගාටුයි, නමුත් මෙම පිටුව සොයාගත නොහැකි විය."}},a={copy:{page:"පිටුව පිටපත් කරන්න",link:"Markdown පිටුව පිටපත් කරන්න",view:"Markdown ලෙස බලන්න",gpt:"ChatGPT හි විවෘත කරන්න",claude:"Claude හි විවෘත කරන්න"},links:"Community",toc:"මෙම පිටුවේ",menu:"මෙනුව",report:"ගැටලුවක් වාර්තා කරන්න",edit:"මෙම පිටුව සංස්කරණය කරන්න"},e={copyLogo:"ලාංඡනය පිටපත් කරන්න",copyWordmark:"වචන ලකුණ පිටපත් කරන්න",downloadLogo:"ලාංඡනය බාගන්න",downloadWordmark:"වචන ලකුණ බාගන්න",brandAssets:"වෙළඳ නාම සම්පත්",logoCopied:"ලාංඡනය පිටපත් කරන ලදී",wordmarkCopied:"වචන ලකුණ පිටපත් කරන ලදී",logoDownloaded:"ලාංඡනය බාගත කරන ලදී",wordmarkDownloaded:"වචන ලකුණ බාගත කරන ලදී",copyLogoFailed:"ලාංඡනය පිටපත් කිරීමට අසමත් විය",copyWordmarkFailed:"වචන ලකුණ පිටපත් කිරීමට අසමත් විය"},n={title:"AI අහන්න",placeholder:"ප්‍රශ්නයක් අහන්න...",tooltip:"AI ගෙන් ප්‍රශ්නයක් අසන්න",tryAsking:"ප්රශ්නයක් ඇසීමට උත්සාහ කරන්න",askAnything:"ඕන දෙයක් අහන්න...",clearChat:"කතාබස් පැහැදිලි කරන්න",close:"වසන්න",expand:"පුළුල් කරන්න",collapse:"හකුළන්න",thinking:"සිතමින්...",askMeAnything:"ඕන දෙයක් අහන්න",askMeAnythingDescription:"ලේඛන සැරිසැරීමට, සංකල්ප තේරුම් ගැනීමට සහ පිළිතුරු සෙවීමට උදවු ලබා ගන්න.",faq:"නිතර අසන පැන",chatCleared:"නැවුම් කිරීමේදී කතාබස් හිස් වේ",lineBreak:"රේඛා බිඳීම",explainWithAi:"AI සමඟ පැහැදිලි කරන්න",toolListPages:"ලැයිස්තුගත ලේඛන පිටු",toolReadPage:"කියවන්න",loading:{searching:"ලේඛන සෙවීම",reading:"ලේඛන හරහා කියවීම",analyzing:"අන්තර්ගතය විශ්ලේෂණය කිරීම",finding:"හොඳම පිළිතුර සොයා ගැනීම",finished:"භාවිතා කරන ලද මූලාශ්ර"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/BecbEIqG.js b/docus/dist/_nuxt/BecbEIqG.js new file mode 100644 index 0000000..579a69b --- /dev/null +++ b/docus/dist/_nuxt/BecbEIqG.js @@ -0,0 +1 @@ +import{Q as C,a0 as q,a1 as S,o as r,a as d,p,e as g,ac as o,s as i,q as u,ab as $,f as c,af as m,a7 as w,m as F,ah as y,ag as v,P as I,c as k,am as b,c4 as P}from"./B3fabVUf.js";const j={slots:{root:"relative rounded-sm",wrapper:"",leading:"inline-flex items-center justify-center",leadingIcon:"size-5 shrink-0 text-primary",title:"text-base text-pretty font-semibold text-highlighted",description:"text-[15px] text-pretty text-muted"},variants:{orientation:{horizontal:{root:"flex items-start gap-2.5",leading:"p-0.5"},vertical:{leading:"mb-2.5"}},to:{true:{root:["has-focus-visible:ring-2 has-focus-visible:ring-primary","transition"]}},title:{true:{description:"mt-1"}}}},B=Object.assign({inheritAttrs:!1},{__name:"UPageFeature",props:{as:{type:null,required:!1},icon:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},orientation:{type:null,required:!1,default:"horizontal"},to:{type:null,required:!1},target:{type:[String,Object,null],required:!1},onClick:{type:Function,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=e,s=C(),h=q(),l=S("pageFeature",t),a=k(()=>b({extend:b(j),...h.ui?.pageFeature||{}})({orientation:t.orientation,title:!!t.title||!!s.title,to:!!t.to||!!t.onClick})),x=k(()=>(s.title&&P(s.title())||t.title||"Feature link").trim());return(n,f)=>(r(),d(i(I),{as:e.as,"data-orientation":e.orientation,"data-slot":"root",class:o(a.value.root({class:[i(l)?.root,t.class]})),onClick:e.onClick},{default:p(()=>[e.icon||s.leading?(r(),g("div",{key:0,"data-slot":"leading",class:o(a.value.leading({class:i(l)?.leading}))},[u(n.$slots,"leading",{ui:a.value},()=>[e.icon?(r(),d($,{key:0,name:e.icon,"data-slot":"leadingIcon",class:o(a.value.leadingIcon({class:i(l)?.leadingIcon}))},null,8,["name","class"])):c("",!0)])],2)):c("",!0),m("div",{"data-slot":"wrapper",class:o(a.value.wrapper({class:i(l)?.wrapper}))},[e.to?(r(),d(w,F({key:0,"aria-label":x.value},{to:e.to,target:e.target,...n.$attrs},{class:"focus:outline-none peer",raw:""}),{default:p(()=>[...f[0]||(f[0]=[m("span",{class:"absolute inset-0","aria-hidden":"true"},null,-1)])]),_:1},16,["aria-label"])):c("",!0),u(n.$slots,"default",{},()=>[e.title||s.title?(r(),g("div",{key:0,"data-slot":"title",class:o(a.value.title({class:i(l)?.title}))},[u(n.$slots,"title",{},()=>[y(v(e.title),1)])],2)):c("",!0),e.description||s.description?(r(),g("div",{key:1,"data-slot":"description",class:o(a.value.description({class:i(l)?.description}))},[u(n.$slots,"description",{},()=>[y(v(e.description),1)])],2)):c("",!0)])],2)]),_:3},8,["as","data-orientation","class","onClick"]))}});export{B as default}; diff --git a/docus/dist/_nuxt/BfXwXGCj.js b/docus/dist/_nuxt/BfXwXGCj.js new file mode 100644 index 0000000..8042f67 --- /dev/null +++ b/docus/dist/_nuxt/BfXwXGCj.js @@ -0,0 +1 @@ +import{aQ as c,e as t,s as d,q as n,c as p,o as r}from"./B3fabVUf.js";const u=["id"],f=["href"],k={__name:"ProseH5",props:{id:{type:String,required:!1}},setup(a){const e=a,{headings:o}=c().public.mdc,i=p(()=>e.id&&(typeof o?.anchorLinks=="boolean"&&o?.anchorLinks===!0||typeof o?.anchorLinks=="object"&&o?.anchorLinks?.h5));return(s,h)=>(r(),t("h5",{id:e.id},[e.id&&d(i)?(r(),t("a",{key:0,href:`#${e.id}`},[n(s.$slots,"default")],8,f)):n(s.$slots,"default",{key:1})],8,u))}};export{k as default}; diff --git a/docus/dist/_nuxt/Bkurqz2d.js b/docus/dist/_nuxt/Bkurqz2d.js new file mode 100644 index 0000000..cc249a1 --- /dev/null +++ b/docus/dist/_nuxt/Bkurqz2d.js @@ -0,0 +1 @@ +const o={or:"ή",error:{title:"Η σελίδα δεν βρέθηκε",description:"Λυπούμαστε, αλλά η σελίδα που αναζητάτε δεν υπάρχει."}},a={copy:{page:"Αντιγραφή σελίδας",link:"Αντιγραφή σελίδας Markdown",view:"Προβολή ως Markdown",gpt:"Άνοιγμα στο ChatGPT",claude:"Άνοιγμα στο Claude"},links:"Κοινότητα",toc:"Σε αυτή τη σελίδα",menu:"Μενού",report:"Αναφορά προβλήματος",edit:"Επεξεργασία αυτής της σελίδας"},e={copyLogo:"Αντιγραφή λογοτύπου",copyWordmark:"Αντιγραφή wordmark",downloadLogo:"Λήψη λογοτύπου",downloadWordmark:"Λήψη wordmark",brandAssets:"Υλικά επωνυμίας",logoCopied:"Το λογότυπο αντιγράφηκε",wordmarkCopied:"Το wordmark αντιγράφηκε",logoDownloaded:"Το λογότυπο κατέβηκε",wordmarkDownloaded:"Το wordmark κατέβηκε",copyLogoFailed:"Αποτυχία αντιγραφής λογοτύπου",copyWordmarkFailed:"Αποτυχία αντιγραφής wordmark"},d={title:"Ερώτηση στην τεχνητή νοημοσύνη",placeholder:"Κάντε μια ερώτηση...",tooltip:"Κάντε μια ερώτηση στην τεχνητή νοημοσύνη",tryAsking:"Δοκιμάστε να κάνετε μια ερώτηση",askAnything:"Ρωτήστε οτιδήποτε...",clearChat:"Εκκαθάριση συνομιλίας",close:"Κλείσιμο",expand:"Ανάπτυξη",collapse:"Σύμπτυξη",thinking:"Σκέψη...",askMeAnything:"Ρωτήστε οτιδήποτε",askMeAnythingDescription:"Λάβετε βοήθεια για την πλοήγηση στην τεκμηρίωση, την κατανόηση των εννοιών και την εύρεση απαντήσεων.",faq:"Συχνές Ερωτήσεις",chatCleared:"Η συνομιλία εκκαθαρίζεται κατά την ανανέωση",lineBreak:"Διακοπή γραμμής",explainWithAi:"Εξηγήστε με τεχνητή νοημοσύνη",toolListPages:"Καταχωρημένες σελίδες τεκμηρίωσης",toolReadPage:"Ανάγνωση",loading:{searching:"Αναζήτηση στην τεκμηρίωση",reading:"Ανάγνωση των εγγράφων",analyzing:"Ανάλυση του περιεχομένου",finding:"Βρίσκοντας την καλύτερη απάντηση",finished:"Πηγές που χρησιμοποιήθηκαν"}},n={common:o,docs:a,logo:e,assistant:d};export{d as assistant,o as common,n as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/BlIgAVvl.js b/docus/dist/_nuxt/BlIgAVvl.js new file mode 100644 index 0000000..e9bf046 --- /dev/null +++ b/docus/dist/_nuxt/BlIgAVvl.js @@ -0,0 +1 @@ +import{a0 as c,a1 as p,e as l,q as u,ac as m,s as i,c as f,am as s,o as d}from"./B3fabVUf.js";const _={base:""},g={__name:"ProseEm",props:{class:{type:String,required:!1},ui:{type:Object,required:!1}},setup(a){const e=a,o=c(),t=p("prose.em",e),r=f(()=>s({extend:s(_),...o.ui?.prose?.em||{}}));return(n,C)=>(d(),l("em",{class:m(r.value({class:[i(t)?.base,e.class]}))},[u(n.$slots,"default")],2))}};export{g as default}; diff --git a/docus/dist/_nuxt/BlxJeUnt.js b/docus/dist/_nuxt/BlxJeUnt.js new file mode 100644 index 0000000..b779ca6 --- /dev/null +++ b/docus/dist/_nuxt/BlxJeUnt.js @@ -0,0 +1 @@ +const o={or:"або",error:{title:"Сторінку не знайдено",description:"Вибачте, але сторінку, яку ви шукаєте, не знайдено."}},a={copy:{page:"Скопіювати сторінку",link:"Скопіювати Markdown сторінку",view:"Переглянути як Markdown",gpt:"Відкрити в ChatGPT",claude:"Відкрити в Claude"},links:"Спільнота",toc:"На цій сторінці",menu:"Меню",report:"Повідомити про проблему",edit:"Редагувати цю сторінку"},e={copyLogo:"Копіювати логотип",copyWordmark:"Копіювати словесний знак",downloadLogo:"Завантажити логотип",downloadWordmark:"Завантажити словесний знак",brandAssets:"Матеріали бренду",logoCopied:"Логотип скопійовано",wordmarkCopied:"Словесний знак скопійовано",logoDownloaded:"Логотип завантажено",wordmarkDownloaded:"Словесний знак завантажено",copyLogoFailed:"Не вдалося скопіювати логотип",copyWordmarkFailed:"Не вдалося скопіювати словесний знак"},n={title:"Запитайте ШІ",placeholder:"Задайте питання...",tooltip:"Задайте питання ШІ",tryAsking:"Спробуйте задати питання",askAnything:"Запитайте будь-що...",clearChat:"Очистити чат",close:"Закрити",expand:"Розгорнути",collapse:"Згорнути",thinking:"Думаючи...",askMeAnything:"Запитайте будь-що",askMeAnythingDescription:"Отримайте допомогу в навігації документацією, розумінні понять і пошуку відповідей.",faq:"Поширені запитання",chatCleared:"Чат очищається під час оновлення",lineBreak:"Розрив рядка",explainWithAi:"Поясніть за допомогою ШІ",toolListPages:"Перелічені сторінки документації",toolReadPage:"Читати",loading:{searching:"Пошук документації",reading:"Читання документів",analyzing:"Аналіз змісту",finding:"Пошук найкращої відповіді",finished:"Використані джерела"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/BnHu5O7o.js b/docus/dist/_nuxt/BnHu5O7o.js new file mode 100644 index 0000000..b56a3c6 --- /dev/null +++ b/docus/dist/_nuxt/BnHu5O7o.js @@ -0,0 +1 @@ +import{_ as o}from"./DXQrCARz.js";import{bY as a,a as n,p as s,o as r,q as c}from"./B3fabVUf.js";const _={};function f(t,l){const e=o;return r(),n(e,null,{default:s(()=>[c(t.$slots,"default")]),_:3})}const m=a(_,[["render",f]]);export{m as default}; diff --git a/docus/dist/_nuxt/BnW3dU0n.js b/docus/dist/_nuxt/BnW3dU0n.js new file mode 100644 index 0000000..c1f3734 --- /dev/null +++ b/docus/dist/_nuxt/BnW3dU0n.js @@ -0,0 +1 @@ +import{Q as _,a0 as K,a1 as P,a2 as O,a3 as j,o,a as d,p as b,B as A,s as a,ac as g,q as f,e as w,F as I,r as $,Z as m,ab as F,ad as R,m as V,f as y,ah as T,ag as C,bB as D,v as U,c as B,am as x,_ as E,G as H,bC as L,w as M,bt as W,ay as G,al as Q,W as Z}from"./B3fabVUf.js";import{a as J,b as X,c as Y,d as ee,T as ae}from"./DewHeYIb.js";import"./B6bUjJBd.js";const te={slots:{root:"flex items-center gap-2",list:"relative flex p-1 group",indicator:"absolute transition-[translate,width] duration-200",trigger:["group relative inline-flex items-center min-w-0 data-[state=inactive]:text-muted hover:data-[state=inactive]:not-disabled:text-default font-medium rounded-md disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leadingIcon:"shrink-0",leadingAvatar:"shrink-0",leadingAvatarSize:"",label:"truncate",trailingBadge:"shrink-0",trailingBadgeSize:"sm",content:"focus:outline-none w-full"},variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{pill:{list:"bg-elevated rounded-lg",trigger:"grow",indicator:"rounded-md shadow-xs"},link:{list:"border-default",indicator:"rounded-full",trigger:"focus:outline-none"}},orientation:{horizontal:{root:"flex-col",list:"w-full",indicator:"left-0 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position)",trigger:"justify-center"},vertical:{list:"flex-col",indicator:"top-0 h-(--reka-tabs-indicator-size) translate-y-(--reka-tabs-indicator-position)"}},size:{xs:{trigger:"px-2 py-1 text-xs gap-1",leadingIcon:"size-4",leadingAvatarSize:"3xs"},sm:{trigger:"px-2.5 py-1.5 text-xs gap-1.5",leadingIcon:"size-4",leadingAvatarSize:"3xs"},md:{trigger:"px-3 py-1.5 text-sm gap-1.5",leadingIcon:"size-5",leadingAvatarSize:"2xs"},lg:{trigger:"px-3 py-2 text-sm gap-2",leadingIcon:"size-5",leadingAvatarSize:"2xs"},xl:{trigger:"px-3 py-2 text-base gap-2",leadingIcon:"size-6",leadingAvatarSize:"xs"}}},compoundVariants:[{orientation:"horizontal",variant:"pill",class:{indicator:"inset-y-1"}},{orientation:"horizontal",variant:"link",class:{list:"border-b -mb-px",indicator:"-bottom-px h-px"}},{orientation:"vertical",variant:"pill",class:{indicator:"inset-x-1",list:"items-center"}},{orientation:"vertical",variant:"link",class:{list:"border-s -ms-px",indicator:"-start-px w-px"}},{color:"primary",variant:"pill",class:{indicator:"bg-primary",trigger:"data-[state=active]:text-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"}},{color:"secondary",variant:"pill",class:{indicator:"bg-secondary",trigger:"data-[state=active]:text-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary"}},{color:"success",variant:"pill",class:{indicator:"bg-success",trigger:"data-[state=active]:text-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success"}},{color:"info",variant:"pill",class:{indicator:"bg-info",trigger:"data-[state=active]:text-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info"}},{color:"warning",variant:"pill",class:{indicator:"bg-warning",trigger:"data-[state=active]:text-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning"}},{color:"error",variant:"pill",class:{indicator:"bg-error",trigger:"data-[state=active]:text-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-error"}},{color:"neutral",variant:"pill",class:{indicator:"bg-inverted",trigger:"data-[state=active]:text-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-inverted"}},{color:"primary",variant:"link",class:{indicator:"bg-primary",trigger:"data-[state=active]:text-primary focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary"}},{color:"secondary",variant:"link",class:{indicator:"bg-secondary",trigger:"data-[state=active]:text-secondary focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-secondary"}},{color:"success",variant:"link",class:{indicator:"bg-success",trigger:"data-[state=active]:text-success focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-success"}},{color:"info",variant:"link",class:{indicator:"bg-info",trigger:"data-[state=active]:text-info focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-info"}},{color:"warning",variant:"link",class:{indicator:"bg-warning",trigger:"data-[state=active]:text-warning focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-warning"}},{color:"error",variant:"link",class:{indicator:"bg-error",trigger:"data-[state=active]:text-error focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-error"}},{color:"neutral",variant:"link",class:{indicator:"bg-inverted",trigger:"data-[state=active]:text-highlighted focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-inverted"}}],defaultVariants:{color:"primary",variant:"pill",size:"md"}},ie={__name:"UTabs",props:{as:{type:null,required:!1},items:{type:Array,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},content:{type:Boolean,required:!1,default:!0},valueKey:{type:null,required:!1,default:"value"},labelKey:{type:null,required:!1,default:"label"},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultValue:{type:[String,Number],required:!1,default:"0"},modelValue:{type:[String,Number],required:!1},activationMode:{type:String,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:modelValue"],setup(n,{expose:c,emit:h}){const t=n,z=h,S=_(),k=K(),r=P("tabs",t),q=O(j(t,"as","unmountOnHide"),z),s=B(()=>x({extend:x(te),...k.ui?.tabs||{}})({color:t.color,variant:t.variant,size:t.size,orientation:t.orientation})),p=U([]);function l(i,v){p.value[i]=v}return c({triggersRef:p}),(i,v)=>(o(),d(a(ae),V(a(q),{"model-value":n.modelValue,"default-value":n.defaultValue,orientation:n.orientation,"activation-mode":n.activationMode,"data-slot":"root",class:s.value.root({class:[a(r)?.root,t.class]})}),{default:b(()=>[A(a(J),{"data-slot":"list",class:g(s.value.list({class:a(r)?.list}))},{default:b(()=>[A(a(X),{"data-slot":"indicator",class:g(s.value.indicator({class:a(r)?.indicator}))},null,8,["class"]),f(i.$slots,"list-leading"),(o(!0),w(I,null,$(n.items,(e,u)=>(o(),d(a(Y),{key:u,ref_for:!0,ref:N=>l(u,N),value:a(m)(e,t.valueKey)??String(u),disabled:e.disabled,"data-slot":"trigger",class:g(s.value.trigger({class:[a(r)?.trigger,e.ui?.trigger]}))},{default:b(()=>[f(i.$slots,"leading",{item:e,index:u,ui:s.value},()=>[e.icon?(o(),d(F,{key:0,name:e.icon,"data-slot":"leadingIcon",class:g(s.value.leadingIcon({class:[a(r)?.leadingIcon,e.ui?.leadingIcon]}))},null,8,["name","class"])):e.avatar?(o(),d(R,V({key:1,size:e.ui?.leadingAvatarSize||a(r)?.leadingAvatarSize||s.value.leadingAvatarSize()},{ref_for:!0},e.avatar,{"data-slot":"leadingAvatar",class:s.value.leadingAvatar({class:[a(r)?.leadingAvatar,e.ui?.leadingAvatar]})}),null,16,["size","class"])):y("",!0)]),a(m)(e,t.labelKey)||S.default?(o(),w("span",{key:0,"data-slot":"label",class:g(s.value.label({class:[a(r)?.label,e.ui?.label]}))},[f(i.$slots,"default",{item:e,index:u},()=>[T(C(a(m)(e,t.labelKey)),1)])],2)):y("",!0),f(i.$slots,"trailing",{item:e,index:u,ui:s.value},()=>[e.badge||e.badge===0?(o(),d(D,V({key:0,color:"neutral",variant:"outline",size:e.ui?.trailingBadgeSize||a(r)?.trailingBadgeSize||s.value.trailingBadgeSize()},{ref_for:!0},typeof e.badge=="string"||typeof e.badge=="number"?{label:e.badge}:e.badge,{"data-slot":"trailingBadge",class:s.value.trailingBadge({class:[a(r)?.trailingBadge,e.ui?.trailingBadge]})}),null,16,["size","class"])):y("",!0)])]),_:2},1032,["value","disabled","class"]))),128)),f(i.$slots,"list-trailing")]),_:3},8,["class"]),n.content?(o(!0),w(I,{key:0},$(n.items,(e,u)=>(o(),d(a(ee),{key:u,value:a(m)(e,t.valueKey)??String(u),"data-slot":"content",class:g(s.value.content({class:[a(r)?.content,e.ui?.content,e.class]}))},{default:b(()=>[f(i.$slots,e.slot||"content",{item:e,index:u,ui:s.value},()=>[T(C(e.content),1)])]),_:2},1032,["value","class"]))),128)):y("",!0)]),_:3},16,["model-value","default-value","orientation","activation-mode","class"]))}},se={slots:{root:"my-5 gap-4"}},oe={__name:"ProseTabs",props:Q({defaultValue:{type:String,required:!1,default:"0"},sync:{type:String,required:!1},hash:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},{modelValue:{type:String},modelModifiers:{}}),emits:["update:modelValue"],setup(n){const c=n,h=_(),t=E(n,"modelValue"),z=K(),S=P("prose.tabs",c),k=B(()=>x({extend:x(se),...z.ui?.prose?.tabs||{}})),r=U(1),q=B(()=>(r.value,h.default?.()?.flatMap(s).filter(Boolean)||[]));function s(l,i){return typeof l.type=="symbol"?l.children?.map(s):{index:i,label:l.props?.label||`${i}`,description:l.props?.description,icon:l.props?.icon,component:l}}H(()=>{if(c.sync){const l=`tabs-${c.sync}`,i=L(l,()=>localStorage.getItem(l));M(i,()=>{i.value&&(t.value=i.value)},{immediate:!0}),M(t,()=>{t.value&&(i.value=t.value,localStorage.setItem(l,t.value))})}});async function p(){if(c.hash){const l=c.hash.startsWith("#")?c.hash:`#${c.hash}`;setTimeout(()=>{document.querySelector(l)?.scrollIntoView()},200)}}return W(()=>r.value++),(l,i)=>(o(),d(ie,{modelValue:t.value,"onUpdate:modelValue":[i[0]||(i[0]=v=>t.value=v),p],color:"primary",variant:"link",items:q.value,class:g(c.class),"unmount-on-hide":!1,ui:a(G)(k.value(),a(S))},{content:b(({item:v})=>[(o(),d(Z(v.component)))]),_:1},8,["modelValue","items","class","ui"]))}};export{oe as default}; diff --git a/docus/dist/_nuxt/Bnc4fItI.js b/docus/dist/_nuxt/Bnc4fItI.js new file mode 100644 index 0000000..12091d3 --- /dev/null +++ b/docus/dist/_nuxt/Bnc4fItI.js @@ -0,0 +1 @@ +import{r as f}from"./Cf5i2Hk_.js";import{Q as y,a0 as x,a1 as q,a as v,p as g,ac as r,s as t,P as k,c as C,am as u,o as l,af as S,e as i,ag as o,f as n,ah as w}from"./B3fabVUf.js";import"./BN_7HF1G.js";const B={slots:{root:"my-5",container:"flex items-center gap-3 font-mono text-sm",name:"font-semibold text-primary",wrapper:"flex-1 flex items-center gap-1.5 text-xs",required:"rounded-sm bg-error/10 text-error px-1.5 py-0.5",type:"rounded-sm bg-elevated text-toned px-1.5 py-0.5",description:"mt-3 text-muted text-sm [&_code]:text-xs/4"}},V={__name:"ProseField",props:{as:{type:null,required:!1},name:{type:String,required:!1},type:{type:String,required:!1},description:{type:String,required:!1},required:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const c=e,d=y(),p=x(),s=q("prose.field",c),a=C(()=>u({extend:u(B),...p.ui?.prose?.field||{}})());return(m,b)=>(l(),v(t(k),{as:e.as,class:r(a.value.root({class:[t(s)?.root,c.class]}))},{default:g(()=>[S("div",{class:r(a.value.container({class:t(s)?.container}))},[e.name?(l(),i("span",{key:0,class:r(a.value.name({class:t(s)?.name}))},o(e.name),3)):n("",!0),e.type||e.required?(l(),i("div",{key:1,class:r(a.value.wrapper({class:t(s)?.wrapper}))},[e.type?(l(),i("span",{key:0,class:r(a.value.type({class:t(s)?.type}))},o(e.type),3)):n("",!0),e.required?(l(),i("span",{key:1,class:r(a.value.required({class:t(s)?.required}))}," required ",2)):n("",!0)],2)):n("",!0)],2),d.default||e.description?(l(),i("div",{key:0,class:r(a.value.description({class:t(s)?.description}))},[f(m.$slots,"default",{mdcUnwrap:"p"},()=>[w(o(e.description),1)])],2)):n("",!0)]),_:3},8,["as","class"]))}};export{V as default}; diff --git a/docus/dist/_nuxt/BosS-MS4.js b/docus/dist/_nuxt/BosS-MS4.js new file mode 100644 index 0000000..ee7bcfa --- /dev/null +++ b/docus/dist/_nuxt/BosS-MS4.js @@ -0,0 +1 @@ +const e={or:"oder",error:{title:"Seite nicht gefunden",description:"Es tut uns leid, aber diese Seite konnte nicht gefunden werden."}},n={copy:{page:"Seite kopieren",link:"Markdown-Seite kopieren",view:"Als Markdown anzeigen",gpt:"In ChatGPT öffnen",claude:"In Claude öffnen"},links:"Community",toc:"Auf dieser Seite",menu:"Menü",report:"Problem melden",edit:"Diese Seite bearbeiten"},o={copyLogo:"Logo kopieren",copyWordmark:"Wortmarke kopieren",downloadLogo:"Logo herunterladen",downloadWordmark:"Wortmarke herunterladen",brandAssets:"Markenmaterialien",logoCopied:"Logo kopiert",wordmarkCopied:"Wortmarke kopiert",logoDownloaded:"Logo heruntergeladen",wordmarkDownloaded:"Wortmarke heruntergeladen",copyLogoFailed:"Logo konnte nicht kopiert werden",copyWordmarkFailed:"Wortmarke konnte nicht kopiert werden"},i={title:"AI fragen",placeholder:"Stellen Sie eine Frage...",tooltip:"KI eine Frage stellen",tryAsking:"Versuchen Sie, eine Frage zu stellen",askAnything:"Fragen Sie alles...",clearChat:"Chat löschen",close:"Schließen",expand:"Erweitern",collapse:"Einklappen",thinking:"Denken...",askMeAnything:"Fragen Sie alles",askMeAnythingDescription:"Erhalten Sie Hilfe beim Navigieren durch die Dokumentation, beim Verstehen von Konzepten und beim Finden von Antworten.",faq:"FAQ",chatCleared:"Chat wird beim Aktualisieren gelöscht",lineBreak:"Zeilenumbruch",explainWithAi:"Mit KI erklären",toolListPages:"Aufgelistete Dokumentationsseiten",toolReadPage:"Lesen",loading:{searching:"Durchsuchen der Dokumentation",reading:"Lesen der Dokumente",analyzing:"Analysieren des Inhalts",finding:"Die beste Antwort finden",finished:"Verwendete Quellen"}},t={common:e,docs:n,logo:o,assistant:i};export{i as assistant,e as common,t as default,n as docs,o as logo}; diff --git a/docus/dist/_nuxt/Bqoc_FpL.js b/docus/dist/_nuxt/Bqoc_FpL.js new file mode 100644 index 0000000..030c521 --- /dev/null +++ b/docus/dist/_nuxt/Bqoc_FpL.js @@ -0,0 +1 @@ +const o={or:"או",error:{title:"העמוד לא נמצא",description:"אנו מתנצלים, אך העמוד שאתה מחפש לא קיים."}},a={copy:{page:"העתק עמוד",link:"העתק עמוד Markdown",view:"הצג כ-Markdown",gpt:"פתח ב-ChatGPT",claude:"פתח ב-Claude"},links:"קהילה",toc:"בעמוד זה",menu:"תפריט",report:"דווח על בעיה",edit:"ערוך עמוד זה"},e={copyLogo:"העתק לוגו",copyWordmark:"העתק סימן מילולי",downloadLogo:"הורד לוגו",downloadWordmark:"הורד סימן מילולי",brandAssets:"נכסי מותג",logoCopied:"הלוגו הועתק",wordmarkCopied:"הסימן המילולי הועתק",logoDownloaded:"הלוגו הורד",wordmarkDownloaded:"הסימן המילולי הורד",copyLogoFailed:"העתקת הלוגו נכשלה",copyWordmarkFailed:"העתקת הסימן המילולי נכשלה"},n={title:"שאל את הבינה המלאכותית",placeholder:"שאל שאלה...",tooltip:"שאל את הבינה המלאכותית שאלה",tryAsking:"נסה לשאול שאלה",askAnything:"שאל כל דבר...",clearChat:"נקה צ'אט",close:"סגירה",expand:"הרחבה",collapse:"כיווץ התצוגה",thinking:"חושב...",askMeAnything:"שאלו כל דבר",askMeAnythingDescription:"קבלת עזרה בניווט בתיעוד, הבנת מושגים ומציאת תשובות.",faq:"שאלות נפוצות",chatCleared:"הצ'אט נוקה בעת הרענון",lineBreak:"מעבר שורה",explainWithAi:"הסבר באמצעות בינה מלאכותית",toolListPages:"דפי תיעוד רשומים",toolReadPage:"קריאה",loading:{searching:"חיפוש בתיעוד",reading:"קריאה דרך המסמכים",analyzing:"ניתוח התוכן",finding:"מציאת התשובה הטובה ביותר",finished:"מקורות בשימוש"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/BscxgZ9w.js b/docus/dist/_nuxt/BscxgZ9w.js new file mode 100644 index 0000000..1907cbf --- /dev/null +++ b/docus/dist/_nuxt/BscxgZ9w.js @@ -0,0 +1 @@ +const o={or:"lub",error:{title:"Nie znaleziono strony",description:"Przepraszamy, ale nie znaleziono tej strony."}},a={copy:{page:"Skopiuj stronę",link:"Skopiuj stronę Markdown",view:"Wyświetl jako Markdown",gpt:"Otwórz w ChatGPT",claude:"Otwórz w Claude"},links:"Społeczność",toc:"Na tej stronie",menu:"Menu",report:"Zgłoś problem",edit:"Edytuj tę stronę"},i={copyLogo:"Kopiuj logo",copyWordmark:"Kopiuj wordmark",downloadLogo:"Pobierz logo",downloadWordmark:"Pobierz wordmark",brandAssets:"Materiały marki",logoCopied:"Logo skopiowane",wordmarkCopied:"Wordmark skopiowany",logoDownloaded:"Logo pobrane",wordmarkDownloaded:"Wordmark pobrany",copyLogoFailed:"Nie udało się skopiować logo",copyWordmarkFailed:"Nie udało się skopiować wordmarku"},e={title:"Zapytaj SI",placeholder:"Zadaj pytanie...",tooltip:"Zadaj AI pytanie",tryAsking:"Spróbuj zadać pytanie",askAnything:"Zapytaj o cokolwiek...",clearChat:"Wyczyść czat",close:"Zamknij",expand:"Rozwiń",collapse:"Zwiń",thinking:"Zastanawiam się...",askMeAnything:"Zapytaj o cokolwiek",askMeAnythingDescription:"Uzyskaj pomoc w poruszaniu się po dokumentacji, zrozumieniu pojęć i znalezieniu odpowiedzi.",faq:"Często zadawane pytania",chatCleared:"Czat został wyczyszczony po odświeżeniu",lineBreak:"Podział wiersza",explainWithAi:"Wyjaśnij za pomocą sztucznej inteligencji",toolListPages:"Wymienione strony dokumentacji",toolReadPage:"Czytaj",loading:{searching:"Przeszukiwanie dokumentacji",reading:"Czytanie dokumentów",analyzing:"Analizowanie treści",finding:"Znajdowanie najlepszej odpowiedzi",finished:"Wykorzystane źródła"}},n={common:o,docs:a,logo:i,assistant:e};export{e as assistant,o as common,n as default,a as docs,i as logo}; diff --git a/docus/dist/_nuxt/BvtDsFck.js b/docus/dist/_nuxt/BvtDsFck.js new file mode 100644 index 0000000..16d9377 --- /dev/null +++ b/docus/dist/_nuxt/BvtDsFck.js @@ -0,0 +1 @@ +import{s,e as o,ah as e,af as t,f as n,o as a}from"./B3fabVUf.js";const i={key:0},u={__name:"ProseScript",props:{src:{type:String,required:!0}},setup(c){return(l,r)=>s(!1)?(a(),o("div",i,[...r[0]||(r[0]=[e(" Rendering the ",-1),t("code",null,"script",-1),e(" element is dangerous and is disabled by default. Consider implementing your own ",-1),t("code",null,"ProseScript",-1),e(" element to have control over script rendering. ",-1)])])):n("",!0)}};export{u as default}; diff --git a/docus/dist/_nuxt/Bzhn7Nlk.js b/docus/dist/_nuxt/Bzhn7Nlk.js new file mode 100644 index 0000000..b872075 --- /dev/null +++ b/docus/dist/_nuxt/Bzhn7Nlk.js @@ -0,0 +1 @@ +import{a0 as p,a1 as n,e as l,q as u,ac as i,s as d,c as m,am as e,o as f}from"./B3fabVUf.js";const g={base:"grid grid-cols-1 sm:grid-cols-2 gap-5 my-5 *:my-0"},y={__name:"ProseCardGroup",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const s=a,o=p(),r=n("prose.cardGroup",s),t=m(()=>e({extend:e(g),...o.ui?.prose?.cardGroup||{}}));return(c,C)=>(f(),l("div",{class:i(t.value({class:[d(r)?.base,s.class]}))},[u(c.$slots,"default")],2))}};export{y as default}; diff --git a/docus/dist/_nuxt/C-sCiTCq.js b/docus/dist/_nuxt/C-sCiTCq.js new file mode 100644 index 0000000..404d3d3 --- /dev/null +++ b/docus/dist/_nuxt/C-sCiTCq.js @@ -0,0 +1 @@ +import{a0 as f,a as d,ab as y,f as v,c as t,ao as a,o as r}from"./B3fabVUf.js";const u={"package.json":"i-vscode-icons-file-type-node","tsconfig.json":"i-vscode-icons-file-type-tsconfig",".npmrc":"i-vscode-icons-file-type-npm",".editorconfig":"i-vscode-icons-file-type-editorconfig",".eslintrc":"i-vscode-icons-file-type-eslint",".eslintrc.cjs":"i-vscode-icons-file-type-eslint",".eslintignore":"i-vscode-icons-file-type-eslint","eslint.config.js":"i-vscode-icons-file-type-eslint","eslint.config.mjs":"i-vscode-icons-file-type-eslint","eslint.config.cjs":"i-vscode-icons-file-type-eslint",".gitignore":"i-vscode-icons-file-type-git","yarn.lock":"i-vscode-icons-file-type-yarn",".env":"i-vscode-icons-file-type-dotenv",".env.example":"i-vscode-icons-file-type-dotenv",".vscode/settings.json":"i-vscode-icons-file-type-vscode",nuxt:"i-vscode-icons-file-type-nuxt",".nuxtrc":"i-vscode-icons-file-type-nuxt",".nuxtignore":"i-vscode-icons-file-type-nuxt","nuxt.config.js":"i-vscode-icons-file-type-nuxt","nuxt.config.ts":"i-vscode-icons-file-type-nuxt","nuxt.schema.ts":"i-vscode-icons-file-type-nuxt","tailwind.config.js":"i-vscode-icons-file-type-tailwind","tailwind.config.ts":"i-vscode-icons-file-type-tailwind",vue:"i-vscode-icons-file-type-vue",ts:"i-vscode-icons-file-type-typescript",tsx:"i-vscode-icons-file-type-typescript",mjs:"i-vscode-icons-file-type-js",cjs:"i-vscode-icons-file-type-js",js:"i-vscode-icons-file-type-js",jsx:"i-vscode-icons-file-type-js",md:"i-vscode-icons-file-type-markdown",py:"i-vscode-icons-file-type-python",cs:"i-vscode-icons-file-type-csharp",asm:"i-vscode-icons-file-type-assembly",f:"i-vscode-icons-file-type-fortran",hs:"i-vscode-icons-file-type-haskell",fs:"i-vscode-icons-file-type-fsharp",kt:"i-vscode-icons-file-type-kotlin",rs:"i-vscode-icons-file-type-rust",rb:"i-vscode-icons-file-type-ruby",lsp:"i-vscode-icons-file-type-lisp",ps1:"i-vscode-icons-file-type-powershell",psd1:"i-vscode-icons-file-type-powershell",psm1:"i-vscode-icons-file-type-powershell",go:"i-vscode-icons-file-type-go",gleam:"i-vscode-icons-file-type-gleam",bicep:"i-vscode-icons-file-type-bicep",bicepparam:"i-vscode-icons-file-type-bicep",exs:"i-vscode-icons-file-type-elixir",erl:"i-vscode-icons-file-type-erlang",sbt:"i-vscode-icons-file-type-scala",h:"i-vscode-icons-file-type-cppheader",ino:"i-vscode-icons-file-type-arduino",pl:"i-vscode-icons-file-type-perl",jl:"i-vscode-icons-file-type-julia",dart:"i-vscode-icons-file-type-dartlang",ico:"i-vscode-icons-file-type-favicon",npm:"i-vscode-icons-file-type-npm",pnpm:"i-vscode-icons-file-type-pnpm",npx:"i-vscode-icons-file-type-npm",yarn:"i-vscode-icons-file-type-yarn",bun:"i-vscode-icons-file-type-bun",deno:"i-vscode-icons-file-type-deno",yml:"i-vscode-icons-file-type-yaml",terminal:"i-lucide-terminal"},g={__name:"ProseCodeIcon",props:{icon:{type:null,required:!1},filename:{type:String,required:!1}},setup(l){const e=l,p=f(),o=t(()=>a(p.ui?.prose?.codeIcon||{},u)),c=t(()=>{if(e.icon)return e.icon;if(!e.filename)return;const i=e.filename.replace(/\s*\(.*\)\s*$/,""),s=i.includes(".")&&i.split(".").pop(),n=i.split("/").pop();return(n&&o.value[n.toLowerCase()])??(s&&(o.value[s]??`i-vscode-icons-file-type-${s}`))});return(i,s)=>c.value?(r(),d(y,{key:0,name:c.value},null,8,["name"])):v("",!0)}};export{g as default}; diff --git a/docus/dist/_nuxt/C0AA5UMg.js b/docus/dist/_nuxt/C0AA5UMg.js new file mode 100644 index 0000000..ddac23b --- /dev/null +++ b/docus/dist/_nuxt/C0AA5UMg.js @@ -0,0 +1 @@ +import{Q as L,a0 as $,a1 as A,o as n,a as f,p as d,af as v,ac as l,s as e,e as g,F as q,r as D,B as p,a7 as E,m as y,a8 as F,aa as S,q as _,ab as x,f as h,ah as V,ag as j,P as B,c as C,am as k,d as I,b0 as U,aU as z,b1 as H,b3 as O,bY as T,bZ as w}from"./B3fabVUf.js";import{_ as M}from"./Dq00p3Sb.js";import{_ as Q}from"./DXQrCARz.js";const Y={slots:{root:"",list:"",item:"relative",link:"group text-sm flex items-center gap-1.5 py-1 focus-visible:outline-primary",linkLeading:"rounded-md p-1 inline-flex ring-inset ring",linkLeadingIcon:"size-4 shrink-0",linkLabel:"truncate",linkLabelExternalIcon:"size-3 absolute top-0 text-dimmed"},variants:{active:{true:{link:"text-primary font-semibold",linkLeading:"bg-primary ring-primary text-inverted"},false:{link:["text-muted hover:text-default font-medium","transition-colors"],linkLeading:["bg-elevated/50 ring-accented text-dimmed group-hover:bg-primary group-hover:ring-primary group-hover:text-inverted","transition"]}}}},Z={__name:"UPageAnchors",props:{as:{type:null,required:!1,default:"nav"},links:{type:Array,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(r){const c=r,o=L(),m=$(),t=A("pageAnchors",c),a=C(()=>k({extend:k(Y),...m.ui?.pageAnchors||{}})());return(i,b)=>(n(),f(e(B),{as:r.as,"data-slot":"root",class:l(a.value.root({class:[e(t)?.root,c.class]}))},{default:d(()=>[v("ul",{"data-slot":"list",class:l(a.value.list({class:e(t)?.list}))},[(n(!0),g(q,null,D(r.links,(s,P)=>(n(),g("li",{key:P,"data-slot":"item",class:l(a.value.item({class:[e(t)?.item,s.ui?.item]}))},[p(E,y({ref_for:!0},e(F)(s),{custom:""}),{default:d(({active:u,...N})=>[p(S,y({ref_for:!0},N,{"data-slot":"link",class:a.value.link({class:[e(t)?.link,s.ui?.link,s.class],active:u})}),{default:d(()=>[_(i.$slots,"link",{link:s,active:u,ui:a.value},()=>[s.icon||o["link-leading"]?(n(),g("div",{key:0,"data-slot":"linkLeading",class:l(a.value.linkLeading({class:[e(t)?.linkLeading,s.ui?.linkLeading],active:u}))},[_(i.$slots,"link-leading",{link:s,active:u,ui:a.value},()=>[s.icon?(n(),f(x,{key:0,name:s.icon,"data-slot":"linkLeadingIcon",class:l(a.value.linkLeadingIcon({class:[e(t)?.linkLeadingIcon,s.ui?.linkLeadingIcon],active:u}))},null,8,["name","class"])):h("",!0)])],2)):h("",!0),s.label||o["link-label"]?(n(),g("span",{key:1,"data-slot":"linkLabel",class:l(a.value.linkLabel({class:[e(t)?.linkLabel,s.ui?.linkLabel],active:u}))},[_(i.$slots,"link-label",{link:s,active:u},()=>[V(j(s.label),1)]),s.target==="_blank"?(n(),f(x,{key:0,name:e(m).ui.icons.external,"data-slot":"linkLabelExternalIcon",class:l(a.value.linkLabelExternalIcon({class:[e(t)?.linkLabelExternalIcon,s.ui?.linkLabelExternalIcon],active:u}))},null,8,["name","class"])):h("",!0)],2)):h("",!0),_(i.$slots,"link-trailing",{link:s,active:u})])]),_:2},1040,["class"])]),_:2},1040)],2))),128))],2)]),_:3},8,["as","class"]))}},G={key:0,class:"mb-2"},J={key:1},K=I({__name:"DocsAsideLeftTop",setup(r){const{subNavigationMode:c,sections:o}=U();return(m,t)=>{const a=Z,i=z;return e(c)==="aside"?(n(),g("div",G,[p(a,{links:e(o)},null,8,["links"]),p(i,{type:"dashed",class:"my-4"})])):(n(),g("div",J))}}}),R=Object.assign(K,{__name:"DocsAsideLeftTop"}),W=I({__name:"DocsAsideLeftBody",setup(r){const{sidebarNavigation:c}=U(),o=H("contentNavigation");return(m,t)=>{const a=O;return n(),f(a,{highlight:e(o).highlight??!0,"highlight-color":e(o).highlightColor,variant:e(o).variant??"link",color:e(o).color,navigation:e(c)},null,8,["highlight","highlight-color","variant","color","navigation"])}}}),X=Object.assign(W,{__name:"DocsAsideLeftBody"}),ee={slots:{root:"hidden overflow-y-auto lg:block lg:max-h-[calc(100vh-var(--ui-header-height))] lg:sticky lg:top-(--ui-header-height) py-8 lg:ps-4 lg:-ms-4 lg:pe-6.5",container:"relative",top:"sticky -top-8 -mt-8 pointer-events-none z-[1]",topHeader:"h-8 bg-default -mx-4 px-4",topBody:"bg-default relative pointer-events-auto flex flex-col -mx-4 px-4",topFooter:"h-8 bg-gradient-to-b from-default -mx-4 px-4"}},ae={__name:"UPageAside",props:{as:{type:null,required:!1,default:"aside"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(r){const c=r,o=L(),m=$(),t=A("pageAside",c),a=C(()=>k({extend:k(ee),...m.ui?.pageAside||{}})());return(i,b)=>(n(),f(e(B),{as:r.as,"data-slot":"root",class:l(a.value.root({class:[e(t)?.root,c.class]}))},{default:d(()=>[v("div",{"data-slot":"container",class:l(a.value.container({class:e(t)?.container}))},[o.top?(n(),g("div",{key:0,"data-slot":"top",class:l(a.value.top({class:e(t)?.top}))},[v("div",{"data-slot":"topHeader",class:l(a.value.topHeader({class:e(t)?.topHeader}))},null,2),v("div",{"data-slot":"topBody",class:l(a.value.topBody({class:e(t)?.topBody}))},[_(i.$slots,"top")],2),v("div",{"data-slot":"topFooter",class:l(a.value.topFooter({class:e(t)?.topFooter}))},null,2)],2)):h("",!0),_(i.$slots,"default"),_(i.$slots,"bottom")],2)]),_:3},8,["as","class"]))}},te={};function se(r,c){const o=R,m=X,t=ae,a=M,i=w,b=Q;return n(),f(b,null,{default:d(()=>[p(i,null,{default:d(()=>[p(a,null,{left:d(()=>[p(t,null,{default:d(()=>[p(o),p(m)]),_:1})]),default:d(()=>[_(r.$slots,"default")]),_:3})]),_:3})]),_:3})}const ie=T(te,[["render",se]]);export{ie as default}; diff --git a/docus/dist/_nuxt/C1fSKR9D.js b/docus/dist/_nuxt/C1fSKR9D.js new file mode 100644 index 0000000..7c39e6a --- /dev/null +++ b/docus/dist/_nuxt/C1fSKR9D.js @@ -0,0 +1 @@ +const e={or:"või",error:{title:"Lehekülge ei leitud",description:"Vabandame, kuid otsitavat lehekülge ei leitud."}},a={copy:{page:"Kopeeri lehekülg",link:"Kopeeri Markdown lehekülg",view:"Vaata Markdownina",gpt:"Ava ChatGPT-s",claude:"Ava Claude'is"},links:"Kogukond",toc:"Sellel lehel",menu:"Menüü",report:"Teata probleemist",edit:"Muuda seda lehekülge"},i={copyLogo:"Kopeeri logo",copyWordmark:"Kopeeri sõnamärk",downloadLogo:"Laadi logo alla",downloadWordmark:"Laadi sõnamärk alla",brandAssets:"Brändimaterjalid",logoCopied:"Logo kopeeritud",wordmarkCopied:"Sõnamärk kopeeritud",logoDownloaded:"Logo allalaaditud",wordmarkDownloaded:"Sõnamärk allalaaditud",copyLogoFailed:"Logo kopeerimine ebaõnnestus",copyWordmarkFailed:"Sõnamärgi kopeerimine ebaõnnestus"},o={title:"Küsi tehisintellekti",placeholder:"Esita küsimus...",tooltip:"Esita tehisintellektile küsimus",tryAsking:"Proovi esitada küsimus",askAnything:"Küsi ükskõik mida...",clearChat:"Tühjenda vestlus",close:"Sulge",expand:"Laienda",collapse:"Ahenda",thinking:"Mõtlen...",askMeAnything:"Küsi ükskõik mida",askMeAnythingDescription:"Saa abi dokumentatsioonis navigeerimisel, kontseptsioonide mõistmisel ja vastuste leidmisel.",faq:"KKK",chatCleared:"Vestlus kustutatakse värskendamisel",lineBreak:"Reavahetus",explainWithAi:"Selgita tehisintellektiga",toolListPages:"Loetletud dokumentatsiooni lehed",toolReadPage:"Loe",loading:{searching:"Dokumentatsiooni otsimine",reading:"Dokumentide lugemine",analyzing:"Sisu analüüsimine",finding:"Parima vastuse leidmine",finished:"Kasutatud allikad"}},t={common:e,docs:a,logo:i,assistant:o};export{o as assistant,e as common,t as default,a as docs,i as logo}; diff --git a/docus/dist/_nuxt/C2GbCjp9.js b/docus/dist/_nuxt/C2GbCjp9.js new file mode 100644 index 0000000..0ec5751 --- /dev/null +++ b/docus/dist/_nuxt/C2GbCjp9.js @@ -0,0 +1 @@ +const o={or:"یان",error:{title:"لاپەڕە نەدۆزرایەوە",description:"ببورن بەڵام ئەم پەیجە نەدۆزرایەوە."}},a={copy:{page:"کۆپیکردنی پەڕە",link:"کۆپیکردنی پەڕەی Markdown",view:"بینین وەک Markdown",gpt:"کردنەوە لە ChatGPT",claude:"کردنەوە لە Claude"},links:"کۆمەڵگا",toc:"لەم پەڕەدا",menu:"مینیو",report:"ڕاپۆرتکردنی کێشە",edit:"دەستکاریکردنی ئەم پەڕەیە"},e={copyLogo:"کۆپیکردنی لۆگۆ",copyWordmark:"کۆپیکردنی وشەنیشان",downloadLogo:"داگرتنی لۆگۆ",downloadWordmark:"داگرتنی وشەنیشان",brandAssets:"سامانەکانی براند",logoCopied:"لۆگۆ کۆپی کرا",wordmarkCopied:"وشەنیشان کۆپی کرا",logoDownloaded:"لۆگۆ دابەزێنرا",wordmarkDownloaded:"وشەنیشان دابەزێنرا",copyLogoFailed:"کۆپیکردنی لۆگۆ سەرکەوتوو نەبوو",copyWordmarkFailed:"کۆپیکردنی وشەنیشان سەرکەوتوو نەبوو"},n={title:"پرسیار لە AI بکە",placeholder:"پرسیارێک بکە...",tooltip:"پرسیارێک لە AI بکە",tryAsking:"هەوڵبدە پرسیارێک بکەیت",askAnything:"هەر شتێک بپرسە...",clearChat:"چاتی پاک بکەرەوە",close:"دابخە",expand:"فراوانتر بکە",collapse:"داڕمان",thinking:"بیرکردنەوە...",askMeAnything:"هەر شتێک بپرسە",askMeAnythingDescription:"یارمەتی وەربگرە لە گەشتکردن بە بەڵگەنامەکان، تێگەیشتن لە چەمکەکان و دۆزینەوەی وەڵامەکان.",faq:"پرسیارە بەردەوامەکان",chatCleared:"چات لە کاتی نوێکردنەوەدا پاک دەکرێتەوە",lineBreak:"هێڵ شکاندن",explainWithAi:"بە AI ڕوونی بکەرەوە",toolListPages:"لاپەڕەکانی بەڵگەنامەی ڕیزبەندی",toolReadPage:"خوێندنەوە",loading:{searching:"گەڕان بەدوای بەڵگەنامەکاندا",reading:"خوێندنەوە لە ڕێگەی دۆکیۆمێنتەکانەوە",analyzing:"شیکردنەوەی ناوەڕۆک",finding:"دۆزینەوەی باشترین وەڵام",finished:"سەرچاوە بەکارهێنراوەکان"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/C3Ly8WAT.js b/docus/dist/_nuxt/C3Ly8WAT.js new file mode 100644 index 0000000..44a173f --- /dev/null +++ b/docus/dist/_nuxt/C3Ly8WAT.js @@ -0,0 +1 @@ +import{r}from"./Cf5i2Hk_.js";import a from"./Jc8Ntx_l.js";import{a0 as t,a as e,p,s as c,o as n}from"./B3fabVUf.js";import"./BN_7HF1G.js";const d={__name:"ProseTip",setup(i){const o=t();return(s,f)=>(n(),e(a,{color:"success",icon:c(o).ui.icons.tip},{default:p(()=>[r(s.$slots,"default",{mdcUnwrap:"p"})]),_:3},8,["icon"]))}};export{d as default}; diff --git a/docus/dist/_nuxt/C5B99YjC.js b/docus/dist/_nuxt/C5B99YjC.js new file mode 100644 index 0000000..a77d066 --- /dev/null +++ b/docus/dist/_nuxt/C5B99YjC.js @@ -0,0 +1 @@ +import{i}from"./B3fabVUf.js";function r(e,s,o){const t=e.findIndex(n=>i(n,s)),d=e.findIndex(n=>i(n,o));if(t===-1||d===-1)return[];const[x,f]=[t,d].sort((n,I)=>n-I);return e.slice(x,f+1)}export{r as f}; diff --git a/docus/dist/_nuxt/C6Z5zZ8h.js b/docus/dist/_nuxt/C6Z5zZ8h.js new file mode 100644 index 0000000..a84d1aa --- /dev/null +++ b/docus/dist/_nuxt/C6Z5zZ8h.js @@ -0,0 +1 @@ +import{a0 as c,a1 as p,e as l,q as u,ac as d,s as i,c as m,am as e,o as f}from"./B3fabVUf.js";const b={base:""},C={__name:"ProseTbody",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const s=a,o=c(),t=p("prose.tbody",s),r=m(()=>e({extend:e(b),...o.ui?.prose?.tbody||{}}));return(n,y)=>(f(),l("tbody",{class:d(r.value({class:[i(t)?.base,s.class]}))},[u(n.$slots,"default")],2))}};export{C as default}; diff --git a/docus/dist/_nuxt/C8-8Pk2V.js b/docus/dist/_nuxt/C8-8Pk2V.js new file mode 100644 index 0000000..a50e3a7 --- /dev/null +++ b/docus/dist/_nuxt/C8-8Pk2V.js @@ -0,0 +1 @@ +const a={or:"ali",error:{title:"Stran ni bila najdena",description:"Opravičujemo se, vendar stran, ki jo iščete, ni bila najdena."}},o={copy:{page:"Kopiraj stran",link:"Kopiraj Markdown stran",view:"Prikaži kot Markdown",gpt:"Odpri v ChatGPT",claude:"Odpri v Claude"},links:"Skupnost",toc:"Na tej strani",menu:"Meni",report:"Prijavi težavo",edit:"Uredi to stran"},e={copyLogo:"Kopiraj logotip",copyWordmark:"Kopiraj besedno znamko",downloadLogo:"Prenesi logotip",downloadWordmark:"Prenesi besedno znamko",brandAssets:"Materiali blagovne znamke",logoCopied:"Logotip kopiran",wordmarkCopied:"Besedna znamka kopirana",logoDownloaded:"Logotip prenesen",wordmarkDownloaded:"Besedna znamka prenesena",copyLogoFailed:"Kopiranje logotipa ni uspelo",copyWordmarkFailed:"Kopiranje besedne znamke ni uspelo"},i={title:"Vprašajte AI",placeholder:"Postavite vprašanje...",tooltip:"Zastavite vprašanje AI",tryAsking:"Poskusite postaviti vprašanje",askAnything:"Vprašajte karkoli...",clearChat:"Počisti klepet",close:"Zapri",expand:"Razširi",collapse:"Strni",thinking:"Razmišljanje...",askMeAnything:"Vprašaj karkoli",askMeAnythingDescription:"Poiščite pomoč pri krmarjenju po dokumentaciji, razumevanju konceptov in iskanju odgovorov.",faq:"Pogosta vprašanja",chatCleared:"Klepet se ob osvežitvi izbriše",lineBreak:"Prelom vrstice",explainWithAi:"Razloži z AI",toolListPages:"Navedene strani dokumentacije",toolReadPage:"Preberi",loading:{searching:"Iskanje po dokumentaciji",reading:"Prebiranje dokumentov",analyzing:"Analiza vsebine",finding:"Iskanje najboljšega odgovora",finished:"Uporabljeni viri"}},n={common:a,docs:o,logo:e,assistant:i};export{i as assistant,a as common,n as default,o as docs,e as logo}; diff --git a/docus/dist/_nuxt/C8-Mg-oX.js b/docus/dist/_nuxt/C8-Mg-oX.js new file mode 100644 index 0000000..a693d1f --- /dev/null +++ b/docus/dist/_nuxt/C8-Mg-oX.js @@ -0,0 +1 @@ +import{Q as x,a0 as b,a1 as $,o as a,a as y,p as g,q as n,B as q,bZ as w,ac as o,s,e as d,ah as f,ag as h,f as c,F as C,r as S,ak as B,m as P,P as z,c as j,am as m}from"./B3fabVUf.js";const H={slots:{root:"relative isolate",container:"flex flex-col lg:grid py-24 sm:py-32 lg:py-40 gap-16 sm:gap-y-24",wrapper:"",header:"",headline:"mb-4",title:"text-5xl sm:text-7xl text-pretty tracking-tight font-bold text-highlighted",description:"text-lg sm:text-xl/8 text-muted",body:"mt-10",footer:"mt-10",links:"flex flex-wrap gap-x-6 gap-y-3"},variants:{orientation:{horizontal:{container:"lg:grid-cols-2 lg:items-center",description:"text-pretty"},vertical:{container:"",headline:"justify-center",wrapper:"text-center",description:"text-balance",links:"justify-center"}},reverse:{true:{wrapper:"order-last"}},headline:{true:{headline:"font-semibold text-primary flex items-center gap-1.5"}},title:{true:{description:"mt-6"}}}},N={key:2,class:"hidden lg:block"},F={__name:"UPageHero",props:{as:{type:null,required:!1},headline:{type:String,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},links:{type:Array,required:!1},orientation:{type:null,required:!1,default:"vertical"},reverse:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const u=t,e=x(),p=b(),l=$("pageHero",u),i=j(()=>m({extend:m(H),...p.ui?.pageHero||{}})({orientation:u.orientation,reverse:u.reverse,title:!!u.title||!!e.title}));return(r,V)=>(a(),y(s(z),{as:t.as,"data-orientation":t.orientation,"data-slot":"root",class:o(i.value.root({class:[s(l)?.root,u.class]}))},{default:g(()=>[n(r.$slots,"top"),q(w,{"data-slot":"container",class:o(i.value.container({class:s(l)?.container}))},{default:g(()=>[e.header||t.headline||e.headline||t.title||e.title||t.description||e.description||e.body||e.footer||t.links?.length||e.links?(a(),d("div",{key:0,"data-slot":"wrapper",class:o(i.value.wrapper({class:s(l)?.wrapper}))},[e.header||t.headline||e.headline||t.title||e.title||t.description||e.description?(a(),d("div",{key:0,"data-slot":"header",class:o(i.value.header({class:s(l)?.header}))},[n(r.$slots,"header",{},()=>[t.headline||e.headline?(a(),d("div",{key:0,"data-slot":"headline",class:o(i.value.headline({class:s(l)?.headline,headline:!e.headline}))},[n(r.$slots,"headline",{},()=>[f(h(t.headline),1)])],2)):c("",!0),t.title||e.title?(a(),d("h1",{key:1,"data-slot":"title",class:o(i.value.title({class:s(l)?.title}))},[n(r.$slots,"title",{},()=>[f(h(t.title),1)])],2)):c("",!0),t.description||e.description?(a(),d("div",{key:2,"data-slot":"description",class:o(i.value.description({class:s(l)?.description}))},[n(r.$slots,"description",{},()=>[f(h(t.description),1)])],2)):c("",!0)])],2)):c("",!0),e.body?(a(),d("div",{key:1,"data-slot":"body",class:o(i.value.body({class:s(l)?.body}))},[n(r.$slots,"body")],2)):c("",!0),e.footer||t.links?.length||e.links?(a(),d("div",{key:2,"data-slot":"footer",class:o(i.value.footer({class:s(l)?.footer}))},[n(r.$slots,"footer",{},()=>[t.links?.length||e.links?(a(),d("div",{key:0,"data-slot":"links",class:o(i.value.links({class:s(l)?.links}))},[n(r.$slots,"links",{},()=>[(a(!0),d(C,null,S(t.links,(k,v)=>(a(),y(B,P({key:v,size:"xl"},{ref_for:!0},k),null,16))),128))])],2)):c("",!0)])],2)):c("",!0)],2)):c("",!0),e.default?n(r.$slots,"default",{key:1}):t.orientation==="horizontal"?(a(),d("div",N)):c("",!0)]),_:3},8,["class"]),n(r.$slots,"bottom")]),_:3},8,["as","data-orientation","class"]))}};export{F as default}; diff --git a/docus/dist/_nuxt/C8791Vr7.js b/docus/dist/_nuxt/C8791Vr7.js new file mode 100644 index 0000000..572b1b8 --- /dev/null +++ b/docus/dist/_nuxt/C8791Vr7.js @@ -0,0 +1 @@ +import{a0 as c,a1 as n,e as p,ac as l,s as u,c as i,am as s,o as m}from"./B3fabVUf.js";const f={base:"border-t border-default my-12"},h={__name:"ProseHr",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const e=a,r=c(),o=n("prose.hr",e),t=i(()=>s({extend:s(f),...r.ui?.prose?.hr||{}}));return(d,_)=>(m(),p("hr",{class:l(t.value({class:[u(o)?.base,e.class]}))},null,2))}};export{h as default}; diff --git a/docus/dist/_nuxt/C919_JS_.js b/docus/dist/_nuxt/C919_JS_.js new file mode 100644 index 0000000..8dfb816 --- /dev/null +++ b/docus/dist/_nuxt/C919_JS_.js @@ -0,0 +1 @@ +const e={or:"sau",error:{title:"Pagina nu a fost găsită",description:"Ne pare rău, dar această pagină nu a putut fi găsită."}},a={copy:{page:"Copiază pagina",link:"Copiază pagina în Markdown",view:"Vezi ca Markdown",gpt:"Deschide în ChatGPT",claude:"Deschide în Claude"},links:"Comunitate",toc:"Pe această pagină",menu:"Meniu",report:"Raportează o problemă",edit:"Editează această pagină"},o={copyLogo:"Copiază logo",copyWordmark:"Copiază wordmark",downloadLogo:"Descarcă logo",downloadWordmark:"Descarcă wordmark",brandAssets:"Resurse de brand",logoCopied:"Logo copiat",wordmarkCopied:"Wordmark copiat",logoDownloaded:"Logo descărcat",wordmarkDownloaded:"Wordmark descărcat",copyLogoFailed:"Nu s-a putut copia logo-ul",copyWordmarkFailed:"Nu s-a putut copia wordmark-ul"},i={title:"Întrebați AI",placeholder:"Pune o întrebare...",tooltip:"Pune o întrebare AI",tryAsking:"Încercați să puneți o întrebare",askAnything:"Întreabă orice...",clearChat:"Ștergeți chatul",close:"Închide",expand:"Extindeți",collapse:"Colaps",thinking:"Gândind...",askMeAnything:"Întreabă orice",askMeAnythingDescription:"Obțineți ajutor pentru navigarea în documentație, înțelegerea conceptelor și găsirea răspunsurilor.",faq:"Întrebări frecvente",chatCleared:"Chatul este șters la reîmprospătare",lineBreak:"Rupere de linie",explainWithAi:"Explicați cu AI",toolListPages:"Pagini de documentație listate",toolReadPage:"Citiți",loading:{searching:"Căutarea documentației",reading:"Citind documentele",analyzing:"Analizând conținutul",finding:"Găsirea celui mai bun răspuns",finished:"Surse folosite"}},n={common:e,docs:a,logo:o,assistant:i};export{i as assistant,e as common,n as default,a as docs,o as logo}; diff --git a/docus/dist/_nuxt/CArNbJ6I.js b/docus/dist/_nuxt/CArNbJ6I.js new file mode 100644 index 0000000..59e5a25 --- /dev/null +++ b/docus/dist/_nuxt/CArNbJ6I.js @@ -0,0 +1 @@ +const a={or:"atau",error:{title:"Halaman tidak ditemukan",description:"Kami minta maaf, halaman ini tidak dapat ditemukan."},copied:"Berhasil disalin ke papan klip"},n={copy:{page:"Salin halaman",link:"Salin halaman Markdown",view:"Lihat sebagai Markdown",gpt:"Buka di ChatGPT",claude:"Buka di Claude",mcp_url:"Salin URL Server MCP",mcp_add:"Tambah Server MCP"},links:"Komunitas",toc:"Pada halaman ini",menu:"Menu",report:"Laporkan masalah",edit:"Ubah halaman ini"},i={copyLogo:"Salin logo",copyWordmark:"Salin wordmark",downloadLogo:"Unduh logo",downloadWordmark:"Unduh wordmark",brandAssets:"Aset merek",logoCopied:"Logo disalin",wordmarkCopied:"Wordmark disalin",logoDownloaded:"Logo diunduh",wordmarkDownloaded:"Wordmark diunduh",copyLogoFailed:"Gagal menyalin logo",copyWordmarkFailed:"Gagal menyalin wordmark"},o={title:"Tanya AI",placeholder:"Ajukan pertanyaan...",tooltip:"Ajukan pertanyaan kepada AI",tryAsking:"Coba ajukan pertanyaan",askAnything:"Tanyakan apa saja...",clearChat:"Hapus obrolan",close:"Tutup",expand:"Perluas",collapse:"Ciutkan",thinking:"Berpikir...",askMeAnything:"Tanyakan apa saja",askMeAnythingDescription:"Dapatkan bantuan untuk menavigasi dokumentasi, memahami konsep, dan menemukan jawaban.",faq:"Pertanyaan Umum",chatCleared:"Obrolan dihapus saat penyegaran",lineBreak:"Jeda baris",explainWithAi:"Jelaskan dengan AI",toolListPages:"Halaman dokumentasi yang terdaftar",toolReadPage:"Baca",loading:{searching:"Mencari dokumentasi",reading:"Membaca dokumen",analyzing:"Menganalisis konten",finding:"Menemukan jawaban terbaik",finished:"Sumber yang digunakan"}},e={common:a,docs:n,logo:i,assistant:o};export{o as assistant,a as common,e as default,n as docs,i as logo}; diff --git a/docus/dist/_nuxt/CB6Z2s81.js b/docus/dist/_nuxt/CB6Z2s81.js new file mode 100644 index 0000000..2ff11dc --- /dev/null +++ b/docus/dist/_nuxt/CB6Z2s81.js @@ -0,0 +1 @@ +import{a0 as n,a1 as i,e as l,q as p,ac as u,s as d,c as m,am as t,o as f,ah as b,ag as g}from"./B3fabVUf.js";const y={base:"pb-4 text-muted *:first:mt-0 *:last:mb-0 *:my-1.5"},C={__name:"ProseAccordionItem",props:{label:{type:String,required:!0},description:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const s=e,a=n(),o=i("prose.accordionItem",s),r=m(()=>t({extend:t(y),...a.ui?.prose?.accordionItem||{}}));return(c,q)=>(f(),l("div",{class:u(r.value({class:[d(o)?.base,s.class]}))},[p(c.$slots,"default",{},()=>[b(g(e.description),1)])],2))}};export{C as default}; diff --git a/docus/dist/_nuxt/CCiWmQwn.js b/docus/dist/_nuxt/CCiWmQwn.js new file mode 100644 index 0000000..722ece5 --- /dev/null +++ b/docus/dist/_nuxt/CCiWmQwn.js @@ -0,0 +1 @@ +import{r as k}from"./Cf5i2Hk_.js";import{Q as I,a0 as w,a1 as q,e as c,a as u,p as C,m as S,a7 as $,f as l,ac as n,s as t,ab as g,q as V,c as d,am as f,o,af as B,ah as h,ag as x}from"./B3fabVUf.js";import"./BN_7HF1G.js";const j={slots:{base:["group relative block my-5 p-4 sm:p-6 border border-default rounded-md bg-default","transition-colors"],icon:"size-6 mb-2 block",title:"text-highlighted font-semibold",description:"text-[15px] text-muted *:first:mt-0 *:last:mb-0 *:my-1",externalIcon:["size-4 align-top absolute right-2 top-2 text-dimmed pointer-events-none","transition-colors"]},variants:{color:{primary:{icon:"text-primary"},secondary:{icon:"text-secondary"},success:{icon:"text-success"},info:{icon:"text-info"},warning:{icon:"text-warning"},error:{icon:"text-error"},neutral:{icon:"text-highlighted"}},to:{true:""},title:{true:{description:"mt-1"}}},compoundVariants:[{color:"primary",to:!0,class:{base:"hover:bg-primary/10 hover:border-primary has-focus-visible:border-primary",externalIcon:"group-hover:text-primary"}},{color:"secondary",to:!0,class:{base:"hover:bg-secondary/10 hover:border-secondary has-focus-visible:border-secondary",externalIcon:"group-hover:text-secondary"}},{color:"success",to:!0,class:{base:"hover:bg-success/10 hover:border-success has-focus-visible:border-success",externalIcon:"group-hover:text-success"}},{color:"info",to:!0,class:{base:"hover:bg-info/10 hover:border-info has-focus-visible:border-info",externalIcon:"group-hover:text-info"}},{color:"warning",to:!0,class:{base:"hover:bg-warning/10 hover:border-warning has-focus-visible:border-warning",externalIcon:"group-hover:text-warning"}},{color:"error",to:!0,class:{base:"hover:bg-error/10 hover:border-error has-focus-visible:border-error",externalIcon:"group-hover:text-error"}},{color:"neutral",to:!0,class:{base:"hover:bg-elevated/50 hover:border-inverted has-focus-visible:border-inverted",externalIcon:"group-hover:text-highlighted"}}],defaultVariants:{color:"primary"}},P=Object.assign({inheritAttrs:!1},{__name:"ProseCard",props:{to:{type:null,required:!1},target:{type:[String,Object,null],required:!1},icon:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},color:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(r){const e=r,b=I(),p=w(),s=q("prose.card",e),a=d(()=>f({extend:f(j),...p.ui?.prose?.card||{}})({color:e.color,to:!!e.to,title:!!e.title})),m=d(()=>e.target||(e.to&&typeof e.to=="string"&&e.to.startsWith("http")?"_blank":void 0)),y=d(()=>(e.title||"Card link").trim());return(i,v)=>(o(),c("div",{class:n(a.value.base({class:[t(s)?.base,e.class]}))},[r.to?(o(),u($,S({key:0,"aria-label":y.value},{to:r.to,target:m.value,...i.$attrs},{class:"focus:outline-none",raw:""}),{default:C(()=>[...v[0]||(v[0]=[B("span",{class:"absolute inset-0","aria-hidden":"true"},null,-1)])]),_:1},16,["aria-label"])):l("",!0),r.icon?(o(),u(g,{key:1,name:r.icon,class:n(a.value.icon({class:t(s)?.icon}))},null,8,["name","class"])):l("",!0),r.to&&m.value==="_blank"?(o(),u(g,{key:2,name:t(p).ui.icons.external,class:n(a.value.externalIcon({class:t(s)?.externalIcon}))},null,8,["name","class"])):l("",!0),r.title||b.title?(o(),c("p",{key:3,class:n(a.value.title({class:t(s)?.title}))},[k(i.$slots,"title",{mdcUnwrap:"p"},()=>[h(x(r.title),1)])],2)):l("",!0),b.default?(o(),c("div",{key:4,class:n(a.value.description({class:t(s)?.description}))},[V(i.$slots,"default",{},()=>[h(x(r.description),1)])],2)):l("",!0)],2))}});export{P as default}; diff --git a/docus/dist/_nuxt/CDym3zc6.js b/docus/dist/_nuxt/CDym3zc6.js new file mode 100644 index 0000000..6801dda --- /dev/null +++ b/docus/dist/_nuxt/CDym3zc6.js @@ -0,0 +1 @@ +import{a0 as c,a1 as n,o as l,a as u,p as d,q as p,ac as f,s as m,a7 as b,c as h,am as s}from"./B3fabVUf.js";const y={base:["text-primary border-b border-transparent hover:border-primary font-medium focus-visible:outline-primary focus-visible:has-[>code]:outline-0 [&>code]:border-dashed hover:[&>code]:border-primary hover:[&>code]:text-primary focus-visible:[&>code]:border-primary focus-visible:[&>code]:text-primary","transition-colors [&>code]:transition-colors"]},x={__name:"ProseA",props:{href:{type:String,required:!1},target:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const r=e,a=c(),o=n("prose.a",r),t=h(()=>s({extend:s(y),...a.ui?.prose?.a||{}}));return(i,v)=>(l(),u(b,{href:e.href,target:e.target,class:f(t.value({class:[m(o)?.base,r.class]})),raw:""},{default:d(()=>[p(i.$slots,"default")]),_:3},8,["href","target","class"]))}};export{x as default}; diff --git a/docus/dist/_nuxt/CFKlwMFM.js b/docus/dist/_nuxt/CFKlwMFM.js new file mode 100644 index 0000000..032b6cf --- /dev/null +++ b/docus/dist/_nuxt/CFKlwMFM.js @@ -0,0 +1 @@ +import{Q as B,a0 as q,a1 as v,a2 as $,a3 as P,o as d,a as f,p as n,s as e,aZ as T,q as m,f as O,B as x,a_ as S,ac as l,m as k,a$ as w,c as C,am as p,$ as I,ay as L,af as _,ab as N,ag as y}from"./B3fabVUf.js";const U={slots:{root:"",content:"data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] overflow-hidden"}},V={__name:"UCollapsible",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(r,{emit:s}){const a=r,i=s,t=B(),o=q(),c=v("collapsible",a),g=$(P(a,"as","defaultOpen","open","disabled","unmountOnHide"),i),u=C(()=>p({extend:p(U),...o.ui?.collapsible||{}})());return(b,z)=>(d(),f(e(w),k(e(g),{"data-slot":"root",class:u.value.root({class:[e(c)?.root,a.class]})}),{default:n(({open:h})=>[t.default?(d(),f(e(T),{key:0,"as-child":""},{default:n(()=>[m(b.$slots,"default",{open:h})]),_:2},1024)):O("",!0),x(e(S),{"data-slot":"content",class:l(u.value.content({class:e(c)?.content}))},{default:n(()=>[m(b.$slots,"content")]),_:3},8,["class"])]),_:3},16,["class"]))}},j={slots:{root:"my-5",trigger:["group relative rounded-xs inline-flex items-center gap-1.5 text-muted hover:text-default text-sm focus-visible:ring-2 focus-visible:ring-primary focus:outline-none","transition-colors"],triggerIcon:"size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",triggerLabel:"truncate",content:"*:first:mt-2.5 *:last:mb-0 *:my-1.5"}},H={__name:"ProseCollapsible",props:{icon:{type:null,required:!1},name:{type:String,required:!1},openText:{type:String,required:!1},closeText:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(r){const s=r,{t:a}=I(),i=q(),t=v("prose.collapsible",s),o=C(()=>p({extend:p(j),...i.ui?.prose?.collapsible||{}})());return(c,g)=>(d(),f(V,{"unmount-on-hide":!1,class:l(s.class),ui:e(L)(o.value,e(t))},{default:n(({open:u})=>[_("button",{class:l(o.value.trigger({class:e(t)?.trigger}))},[x(N,{name:r.icon||e(i).ui.icons.chevronDown,class:l(o.value.triggerIcon({class:e(t)?.triggerIcon}))},null,8,["name","class"]),_("span",{class:l(o.value.triggerLabel({class:e(t)?.triggerLabel}))},y(u?s.closeText||e(a)("prose.collapsible.closeText"):s.openText||e(a)("prose.collapsible.openText"))+" "+y(s.name||e(a)("prose.collapsible.name")),3)],2)]),content:n(()=>[m(c.$slots,"default")]),_:3},8,["class","ui"]))}};export{H as default}; diff --git a/docus/dist/_nuxt/CFOqH6J8.js b/docus/dist/_nuxt/CFOqH6J8.js new file mode 100644 index 0000000..7ec7ba4 --- /dev/null +++ b/docus/dist/_nuxt/CFOqH6J8.js @@ -0,0 +1 @@ +import{a0 as l,a1 as n,e as u,q as p,ac as i,s as m,c as d,am as s,o as f}from"./B3fabVUf.js";const _={base:"list-disc ps-6 my-5 marker:text-(--ui-border-accented)"},k={__name:"ProseUl",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const e=a,t=l(),o=n("prose.ul",e),r=d(()=>s({extend:s(_),...t.ui?.prose?.ul||{}}));return(c,b)=>(f(),u("ul",{class:i(r.value({class:[m(o)?.base,e.class]}))},[p(c.$slots,"default")],2))}};export{k as default}; diff --git a/docus/dist/_nuxt/CG1YvYVw.js b/docus/dist/_nuxt/CG1YvYVw.js new file mode 100644 index 0000000..555dfd1 --- /dev/null +++ b/docus/dist/_nuxt/CG1YvYVw.js @@ -0,0 +1 @@ +import{r as a}from"./Cf5i2Hk_.js";import n from"./Jc8Ntx_l.js";import{a0 as s,a as t,p as e,s as i,o as p}from"./B3fabVUf.js";import"./BN_7HF1G.js";const d={__name:"ProseWarning",setup(c){const o=s();return(r,f)=>(p(),t(n,{color:"warning",icon:i(o).ui.icons.warning},{default:e(()=>[a(r.$slots,"default",{mdcUnwrap:"p"})]),_:3},8,["icon"]))}};export{d as default}; diff --git a/docus/dist/_nuxt/CGXzuCYy.js b/docus/dist/_nuxt/CGXzuCYy.js new file mode 100644 index 0000000..5b1176b --- /dev/null +++ b/docus/dist/_nuxt/CGXzuCYy.js @@ -0,0 +1 @@ +import{a0 as c,a1 as n,e as p,q as u,ac as m,s as i,c as d,am as s,o as f}from"./B3fabVUf.js";const _={base:"list-decimal ps-6 my-5 marker:text-muted"},k={__name:"ProseOl",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const e=a,o=c(),t=n("prose.ol",e),l=d(()=>s({extend:s(_),...o.ui?.prose?.ol||{}}));return(r,C)=>(f(),p("ol",{class:m(l.value({class:[i(t)?.base,e.class]}))},[u(r.$slots,"default")],2))}};export{k as default}; diff --git a/docus/dist/_nuxt/CI43exTt.js b/docus/dist/_nuxt/CI43exTt.js new file mode 100644 index 0000000..b00b025 --- /dev/null +++ b/docus/dist/_nuxt/CI43exTt.js @@ -0,0 +1 @@ +const o={or:"або",error:{title:"Старонка не знойдзена",description:"Прабачце, але старонка, якую вы шукаеце, не знойдзена."}},a={copy:{page:"Скапіраваць старонку",link:"Скапіраваць Markdown-старонку",view:"Праглядзець як Markdown",gpt:"Адкрыць у ChatGPT",claude:"Адкрыць у Claude"},links:"Супольнасць",toc:"На гэтай старонцы",menu:"Меню",report:"Паведаміць пра праблему",edit:"Рэдагаваць гэтую старонку"},e={copyLogo:"Капіяваць лагатып",copyWordmark:"Капіяваць словесны знак",downloadLogo:"Спампаваць лагатып",downloadWordmark:"Спампаваць словесны знак",brandAssets:"Матэрыялы брэнда",logoCopied:"Лагатып скапіяваны",wordmarkCopied:"Словесны знак скапіяваны",logoDownloaded:"Лагатып спампаваны",wordmarkDownloaded:"Словесны знак спампаваны",copyLogoFailed:"Не ўдалося скапіяваць лагатып",copyWordmarkFailed:"Не ўдалося скапіяваць словесны знак"},n={title:"Спытаць ІІ",placeholder:"Задаць пытанне...",tooltip:"Задаць пытанне ІІ",tryAsking:"Паспрабуйце задаць пытанне",askAnything:"Спытай што заўгодна...",clearChat:"Ачысціць чат",close:"Закрыць",expand:"Пашырыць",collapse:"Згарнуць",thinking:"Мысленне...",askMeAnything:"Спытаць што-небудзь",askMeAnythingDescription:"Атрымаць дапамогу ў навігацыі па дакументацыі, разуменні канцэпцый і пошуку адказаў.",faq:"Пытанні і адказы",chatCleared:"Чат ачышчаецца пры абнаўленні",lineBreak:"Перапынак у радку",explainWithAi:"Растлумачыць ІІ",toolListPages:"Старонкі дакументацыі",toolReadPage:"Чытаць",loading:{searching:"Пошук дакументацыі",reading:"Чытанне праз дакументы",analyzing:"Аналіз зместу",finding:"Пошук найлепшага адказу",finished:"Выкарыстаныя крыніцы"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/CSimry40.js b/docus/dist/_nuxt/CSimry40.js new file mode 100644 index 0000000..8ec4314 --- /dev/null +++ b/docus/dist/_nuxt/CSimry40.js @@ -0,0 +1 @@ +import{a0 as l,a1 as n,e as u,q as p,ac as i,s as d,c as m,am as s,o as f}from"./B3fabVUf.js";const b={base:"border-s-4 border-accented ps-4 italic"},_={__name:"ProseBlockquote",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(o){const e=o,a=l(),t=n("prose.blockquote",e),c=m(()=>s({extend:s(b),...a.ui?.prose?.blockquote||{}}));return(r,q)=>(f(),u("blockquote",{class:i(c.value({class:[d(t)?.base,e.class]}))},[p(r.$slots,"default")],2))}};export{_ as default}; diff --git a/docus/dist/_nuxt/CSnfmutH.js b/docus/dist/_nuxt/CSnfmutH.js new file mode 100644 index 0000000..9339a72 --- /dev/null +++ b/docus/dist/_nuxt/CSnfmutH.js @@ -0,0 +1 @@ +import{a0 as c,a1 as p,e as l,q as u,ac as d,s as i,c as m,am as s,o as f}from"./B3fabVUf.js";const h={base:"bg-muted"},C={__name:"ProseThead",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const e=a,t=c(),o=p("prose.thead",e),r=m(()=>s({extend:s(h),...t.ui?.prose?.thead||{}}));return(n,_)=>(f(),l("thead",{class:d(r.value({class:[i(o)?.base,e.class]}))},[u(n.$slots,"default")],2))}};export{C as default}; diff --git a/docus/dist/_nuxt/CTU5hS66.js b/docus/dist/_nuxt/CTU5hS66.js new file mode 100644 index 0000000..e437935 --- /dev/null +++ b/docus/dist/_nuxt/CTU5hS66.js @@ -0,0 +1 @@ +import{a0 as t,a1 as r,a as u,ac as i,s as l,ab as p,c as m,am as a,o as f}from"./B3fabVUf.js";const d={base:"size-4 shrink-0 align-sub"},C={__name:"ProseIcon",props:{name:{type:String,required:!0},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(s){const e=s,n=t(),o=r("prose.icon",e),c=m(()=>a({extend:a(d),...n.ui?.prose?.icon||{}}));return(_,b)=>(f(),u(p,{name:s.name,class:i(c.value({class:[l(o)?.base,e.class]}))},null,8,["name","class"]))}};export{C as default}; diff --git a/docus/dist/_nuxt/CamoC0EK.js b/docus/dist/_nuxt/CamoC0EK.js new file mode 100644 index 0000000..7292462 --- /dev/null +++ b/docus/dist/_nuxt/CamoC0EK.js @@ -0,0 +1 @@ +import{a0 as c,a1 as d,e as i,q as l,ac as u,s as p,c as b,am as r,o as m}from"./B3fabVUf.js";const f={base:"px-1.5 py-0.5 text-sm font-mono font-medium rounded-md inline-block",variants:{color:{primary:"border border-primary/25 bg-primary/10 text-primary",secondary:"border border-secondary/25 bg-secondary/10 text-secondary",success:"border border-success/25 bg-success/10 text-success",info:"border border-info/25 bg-info/10 text-info",warning:"border border-warning/25 bg-warning/10 text-warning",error:"border border-error/25 bg-error/10 text-error",neutral:"border border-muted text-highlighted bg-muted"}},defaultVariants:{color:"neutral"}},x={__name:"ProseCode",props:{lang:{type:String,required:!1},color:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(o){const e=o,s=c(),t=d("prose.code",e),a=b(()=>r({extend:r(f),...s.ui?.prose?.code||{}}));return(n,g)=>(m(),i("code",{class:u(a.value({class:[p(t)?.base,(e.class||"").split(",").join(" ")],color:e.color}))},[l(n.$slots,"default")],2))}};export{x as default}; diff --git a/docus/dist/_nuxt/CdNQ_JKz.js b/docus/dist/_nuxt/CdNQ_JKz.js new file mode 100644 index 0000000..5c6ddef --- /dev/null +++ b/docus/dist/_nuxt/CdNQ_JKz.js @@ -0,0 +1 @@ +import{a0 as i,a1 as n,o as p,a as u,p as d,q as f,ac as g,s as e,P as m,c as C,am as t}from"./B3fabVUf.js";const q={base:"relative grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8"},_={__name:"UPageGrid",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(s){const a=s,r=i(),l=n("pageGrid",a),o=C(()=>t({extend:t(q),...r.ui?.pageGrid||{}}));return(c,v)=>(p(),u(e(m),{as:s.as,class:g(o.value({class:[e(l)?.base,a.class]}))},{default:d(()=>[f(c.$slots,"default")]),_:3},8,["as","class"]))}};export{_ as default}; diff --git a/docus/dist/_nuxt/Cf5i2Hk_.js b/docus/dist/_nuxt/Cf5i2Hk_.js new file mode 100644 index 0000000..61ef53e --- /dev/null +++ b/docus/dist/_nuxt/Cf5i2Hk_.js @@ -0,0 +1 @@ +import{f as d}from"./BN_7HF1G.js";import{q as a}from"./B3fabVUf.js";const w=(f,r,t,...n)=>f[r]?a({...f,[r]:()=>d(f[r](),t?.unwrap||t?.mdcUnwrap)},r,t,...n):a(f,r,t,...n);export{w as r}; diff --git a/docus/dist/_nuxt/CfPbqwDO.js b/docus/dist/_nuxt/CfPbqwDO.js new file mode 100644 index 0000000..95f31c8 --- /dev/null +++ b/docus/dist/_nuxt/CfPbqwDO.js @@ -0,0 +1 @@ +import{d as S,bv as H,bw as K,J as j,o as d,a as f,p,q as b,s as a,P as z,Q as B,a0 as P,a1 as V,a2 as D,a3 as F,e as x,F as N,r as O,bx as U,ac as r,Z as q,B as C,by as E,ab as $,f as I,ah as k,ag as w,bz as R,af as T,m as J,bA as L,c as A,am as _,bt as M,ay as Q,v as W,W as Z}from"./B3fabVUf.js";var G=S({__name:"AccordionHeader",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"h3"}},setup(i){const u=i,o=H(),y=K();return j(),(n,g)=>(d(),f(a(z),{as:u.as,"as-child":u.asChild,"data-orientation":a(o).orientation,"data-state":a(y).dataState.value,"data-disabled":a(y).dataDisabled.value},{default:p(()=>[b(n.$slots,"default")]),_:3},8,["as","as-child","data-orientation","data-state","data-disabled"]))}}),X=G;const Y={slots:{root:"w-full",item:"border-b border-default last:border-b-0",header:"flex",trigger:"group flex-1 flex items-center gap-1.5 font-medium text-sm py-3.5 focus-visible:outline-primary min-w-0",content:"data-[state=open]:animate-[accordion-down_200ms_ease-out] data-[state=closed]:animate-[accordion-up_200ms_ease-out] overflow-hidden focus:outline-none",body:"text-sm pb-3.5",leadingIcon:"shrink-0 size-5",trailingIcon:"shrink-0 size-5 ms-auto group-data-[state=open]:rotate-180 transition-transform duration-200",label:"text-start break-words"},variants:{disabled:{true:{trigger:"cursor-not-allowed opacity-75"}}}},ee={__name:"UAccordion",props:{as:{type:null,required:!1},items:{type:Array,required:!1},trailingIcon:{type:null,required:!1},valueKey:{type:null,required:!1,default:"value"},labelKey:{type:null,required:!1,default:"label"},class:{type:null,required:!1},ui:{type:Object,required:!1},collapsible:{type:Boolean,required:!1,default:!0},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1},type:{type:String,required:!1,default:"single"},disabled:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:modelValue"],setup(i,{emit:u}){const o=i,y=u,n=B(),g=P(),l=V("accordion",o),h=D(F(o,"as","collapsible","defaultValue","disabled","modelValue","unmountOnHide"),y),t=A(()=>_({extend:_(Y),...g.ui?.accordion||{}})({disabled:o.disabled}));return(s,v)=>(d(),f(a(L),J(a(h),{type:i.type,"data-slot":"root",class:t.value.root({class:[a(l)?.root,o.class]})}),{default:p(()=>[(d(!0),x(N,null,O(o.items,(e,c)=>(d(),f(a(U),{key:c,value:a(q)(e,o.valueKey)??String(c),disabled:e.disabled,"data-slot":"item",class:r(t.value.item({class:[a(l)?.item,e.ui?.item,e.class]}))},{default:p(({open:m})=>[C(a(X),{as:"div","data-slot":"header",class:r(t.value.header({class:[a(l)?.header,e.ui?.header]}))},{default:p(()=>[C(a(E),{"data-slot":"trigger",class:r(t.value.trigger({class:[a(l)?.trigger,e.ui?.trigger],disabled:e.disabled}))},{default:p(()=>[b(s.$slots,"leading",{item:e,index:c,open:m,ui:t.value},()=>[e.icon?(d(),f($,{key:0,name:e.icon,"data-slot":"leadingIcon",class:r(t.value.leadingIcon({class:[a(l)?.leadingIcon,e?.ui?.leadingIcon]}))},null,8,["name","class"])):I("",!0)]),a(q)(e,o.labelKey)||n.default?(d(),x("span",{key:0,"data-slot":"label",class:r(t.value.label({class:[a(l)?.label,e.ui?.label]}))},[b(s.$slots,"default",{item:e,index:c,open:m},()=>[k(w(a(q)(e,o.labelKey)),1)])],2)):I("",!0),b(s.$slots,"trailing",{item:e,index:c,open:m,ui:t.value},()=>[C($,{name:e.trailingIcon||i.trailingIcon||a(g).ui.icons.chevronDown,"data-slot":"trailingIcon",class:r(t.value.trailingIcon({class:[a(l)?.trailingIcon,e.ui?.trailingIcon]}))},null,8,["name","class"])])]),_:2},1032,["class"])]),_:2},1032,["class"]),e.content||n.content||e.slot&&n[e.slot]||n.body||e.slot&&n[`${e.slot}-body`]?(d(),f(a(R),{key:0,"data-slot":"content",class:r(t.value.content({class:[a(l)?.content,e.ui?.content]}))},{default:p(()=>[b(s.$slots,e.slot||"content",{item:e,index:c,open:m,ui:t.value},()=>[T("div",{"data-slot":"body",class:r(t.value.body({class:[a(l)?.body,e.ui?.body]}))},[b(s.$slots,e.slot?`${e.slot}-body`:"body",{item:e,index:c,open:m,ui:t.value},()=>[k(w(e.content),1)])],2)])]),_:2},1032,["class"])):I("",!0)]),_:2},1032,["value","disabled","class"]))),128))]),_:3},16,["type","class"]))}},ae={slots:{root:"my-5",trigger:"text-base"}},se={__name:"ProseAccordion",props:{type:{type:String,required:!1,default:"multiple"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(i){const u=i,o=B(),y=P(),n=V("prose.accordion",u),g=A(()=>_({extend:_(ae),...y.ui?.prose?.accordion||{}})),l=W(1),h=A(()=>(l.value,o.default?.()?.flatMap(t).filter(Boolean)||[]));function t(s,v){return typeof s.type=="symbol"?s.children?.map(t):{index:v,label:s.props?.label||`${v}`,description:s.props?.description,icon:s.props?.icon,component:s}}return M(()=>l.value++),(s,v)=>(d(),f(ee,{type:i.type,items:h.value,"unmount-on-hide":!1,class:r(u.class),ui:a(Q)(g.value(),a(n))},{content:p(({item:e})=>[(d(),f(Z(e.component)))]),_:1},8,["type","items","class","ui"]))}};export{se as default}; diff --git a/docus/dist/_nuxt/CgQMWAWA.js b/docus/dist/_nuxt/CgQMWAWA.js new file mode 100644 index 0000000..c816c44 --- /dev/null +++ b/docus/dist/_nuxt/CgQMWAWA.js @@ -0,0 +1 @@ +import{T as w,a as B,b as I,c as T,d as L}from"./DewHeYIb.js";import{Q as M,_ as q,a0 as G,a1 as z,G as U,bC as $,w as y,bt as D,a as d,p as f,ac as n,s as a,al as F,v as N,c as h,am as x,o as i,B as m,e as _,F as S,r as V,af as P,ag as j,W as A}from"./B3fabVUf.js";import E from"./C-sCiTCq.js";import"./B6bUjJBd.js";const K={slots:{root:"relative group *:not-first:!my-0 *:not-first:!static my-5",list:"relative flex items-center gap-1 border border-muted bg-default border-b-0 rounded-t-md overflow-x-auto p-2",indicator:"absolute left-0 inset-y-2 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position) transition-[translate,width] duration-200 bg-elevated rounded-md shadow-xs",trigger:["relative inline-flex items-center gap-1.5 text-default data-[state=active]:text-highlighted hover:bg-elevated/50 px-2 py-1.5 text-sm rounded-md disabled:cursor-not-allowed disabled:opacity-75 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary focus:outline-none","transition-colors"],triggerIcon:"size-4 shrink-0",triggerLabel:"truncate"}},H={__name:"ProseCodeGroup",props:F({defaultValue:{type:String,required:!1,default:"0"},sync:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},{modelValue:{type:String},modelModifiers:{}}),emits:["update:modelValue"],setup(p){const c=p,C=M(),s=q(p,"modelValue"),k=G(),r=z("prose.codeGroup",c),o=h(()=>x({extend:x(K),...k.ui?.prose?.codeGroup||{}})()),g=N(1),v=h(()=>(g.value,C.default?.()?.flatMap(b).filter(Boolean)||[]));function b(e,t){return typeof e.type=="symbol"?e.children?.map(b):{label:e.props?.filename||e.props?.label||`${t}`,icon:e.props?.icon,component:e}}return U(()=>{if(c.sync){const e=`code-group-${c.sync}`,t=$(e,()=>localStorage.getItem(e));y(t,()=>{t.value&&(s.value=t.value)},{immediate:!0}),y(s,()=>{s.value&&(t.value=s.value,localStorage.setItem(e,s.value))})}}),D(()=>g.value++),(e,t)=>(i(),d(a(w),{modelValue:s.value,"onUpdate:modelValue":t[0]||(t[0]=l=>s.value=l),"default-value":p.defaultValue,"unmount-on-hide":!1,class:n(o.value.root({class:[a(r)?.root,c.class]}))},{default:f(()=>[m(a(B),{class:n(o.value.list({class:a(r)?.list}))},{default:f(()=>[m(a(I),{class:n(o.value.indicator({class:a(r)?.indicator}))},null,8,["class"]),(i(!0),_(S,null,V(v.value,(l,u)=>(i(),d(a(T),{key:u,value:String(u),class:n(o.value.trigger({class:a(r)?.trigger}))},{default:f(()=>[m(E,{icon:l.icon,filename:l.label,class:n(o.value.triggerIcon({class:a(r)?.triggerIcon}))},null,8,["icon","filename","class"]),P("span",{class:n(o.value.triggerLabel({class:a(r)?.triggerLabel}))},j(l.label),3)]),_:2},1032,["value","class"]))),128))]),_:1},8,["class"]),(i(!0),_(S,null,V(v.value,(l,u)=>(i(),d(a(L),{key:u,value:String(u),"as-child":""},{default:f(()=>[(i(),d(A(l.component),{"hide-header":"",tabindex:"-1"}))]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","default-value","class"]))}};export{H as default}; diff --git a/docus/dist/_nuxt/ClE5p2_s.js b/docus/dist/_nuxt/ClE5p2_s.js new file mode 100644 index 0000000..d952224 --- /dev/null +++ b/docus/dist/_nuxt/ClE5p2_s.js @@ -0,0 +1 @@ +const o={or:"یا",error:{title:"صفحہ نہیں ملا",description:"ہمیں افسوس ہے، لیکن آپ جو صفحہ تلاش کر رہے ہیں وہ موجود نہیں ہے۔"}},a={copy:{page:"صفحہ کاپی کریں",link:"Markdown صفحہ کاپی کریں",view:"Markdown کے طور پر دیکھیں",gpt:"ChatGPT میں کھولیں",claude:"Claude میں کھولیں"},links:"کمیونٹی",toc:"اس صفحے پر",menu:"مینو",report:"مسئلہ کی اطلاع دیں",edit:"اس صفحے کو ترمیم کریں"},e={copyLogo:"لوگو کاپی کریں",copyWordmark:"ورڈ مارک کاپی کریں",downloadLogo:"لوگو ڈاؤن لوڈ کریں",downloadWordmark:"ورڈ مارک ڈاؤن لوڈ کریں",brandAssets:"برانڈ اثاثے",logoCopied:"لوگو کاپی ہو گیا",wordmarkCopied:"ورڈ مارک کاپی ہو گیا",logoDownloaded:"لوگو ڈاؤن لوڈ ہو گیا",wordmarkDownloaded:"ورڈ مارک ڈاؤن لوڈ ہو گیا",copyLogoFailed:"لوگو کاپی نہیں ہو سکا",copyWordmarkFailed:"ورڈ مارک کاپی نہیں ہو سکا"},n={title:"AI سے پوچھیں۔",placeholder:"ایک سوال پوچھیں...",tooltip:"AI سے ایک سوال پوچھیں۔",tryAsking:"ایک سوال پوچھنے کی کوشش کریں۔",askAnything:"کچھ بھی پوچھو...",clearChat:"چیٹ صاف کریں۔",close:"بند",expand:"پھیلائیں۔",collapse:"سمٹنا",thinking:"سوچ رہا ہے...",askMeAnything:"کچھ بھی پوچھو",askMeAnythingDescription:"دستاویزات کو نیویگیٹ کرنے، تصورات کو سمجھنے اور جوابات تلاش کرنے میں مدد حاصل کریں۔",faq:"اکثر پوچھے گئے سوالات",chatCleared:"ریفریش پر چیٹ صاف ہو جاتی ہے۔",lineBreak:"لائن بریک",explainWithAi:"AI کے ساتھ وضاحت کریں۔",toolListPages:"درج دستاویزات کے صفحات",toolReadPage:"پڑھیں",loading:{searching:"دستاویزات کی تلاش",reading:"دستاویزات کے ذریعے پڑھنا",analyzing:"مواد کا تجزیہ",finding:"بہترین جواب تلاش کرنا",finished:"ذرائع استعمال کیے گئے۔"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/ClIRhDxf.js b/docus/dist/_nuxt/ClIRhDxf.js new file mode 100644 index 0000000..250ecf8 --- /dev/null +++ b/docus/dist/_nuxt/ClIRhDxf.js @@ -0,0 +1,3 @@ +import"./B3fabVUf.js";var Ft=(()=>{var qe=import.meta.url;return function(ce={}){var ge,i=ce,ye,Ee,Ne=new Promise((e,t)=>{ye=e,Ee=t}),Je=typeof window=="object",Oe=typeof importScripts=="function";typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";const Fe=globalThis.sqlite3InitModuleState||Object.assign(Object.create(null),{debugModule:()=>{}});delete globalThis.sqlite3InitModuleState,Fe.debugModule("globalThis.location =",globalThis.location);var Qe=Object.assign({},i),re="./this.program",me="";function Ae(e){return i.locateFile?i.locateFile(e,me):me+e}var Le,Me;(Je||Oe)&&(Oe?me=self.location.href:typeof document<"u"&&document.currentScript&&(me=document.currentScript.src),qe&&(me=qe),me.startsWith("blob:")?me="":me=me.substr(0,me.replace(/[?#].*/,"").lastIndexOf("/")+1),Oe&&(Me=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),Le=e=>fetch(e,{credentials:"same-origin"}).then(t=>t.ok?t.arrayBuffer():Promise.reject(new Error(t.status+" : "+t.url))));var He=i.print||console.log.bind(console),Pe=i.printErr||console.error.bind(console);Object.assign(i,Qe),Qe=null,i.arguments&&i.arguments,i.thisProgram&&(re=i.thisProgram);var Xe=i.wasmBinary,Ce,ut=!1,xe,je,Ve,ue,we,Ie;function ft(){var e=Ce.buffer;i.HEAP8=xe=new Int8Array(e),i.HEAP16=Ve=new Int16Array(e),i.HEAPU8=je=new Uint8Array(e),i.HEAPU16=new Uint16Array(e),i.HEAP32=ue=new Int32Array(e),i.HEAPU32=we=new Uint32Array(e),i.HEAPF32=new Float32Array(e),i.HEAPF64=new Float64Array(e),i.HEAP64=Ie=new BigInt64Array(e),i.HEAPU64=new BigUint64Array(e)}if(i.wasmMemory)Ce=i.wasmMemory;else{var Pt=i.INITIAL_MEMORY||16777216;Ce=new WebAssembly.Memory({initial:Pt/65536,maximum:32768})}ft();var dt=[],pt=[],mt=[];function Ot(){var e=i.preRun;e&&(typeof e=="function"&&(e=[e]),e.forEach(Dt)),it(dt)}function Lt(){!i.noFSInit&&!a.initialized&&a.init(),a.ignorePermissions=!1,it(pt)}function Ct(){var e=i.postRun;e&&(typeof e=="function"&&(e=[e]),e.forEach(Nt)),it(mt)}function Dt(e){dt.unshift(e)}function Rt(e){pt.unshift(e)}function Nt(e){mt.unshift(e)}var De=0,Ge=null;function Yn(e){return e}function nt(e){De++,i.monitorRunDependencies?.(De)}function Ye(e){if(De--,i.monitorRunDependencies?.(De),De==0&&Ge){var t=Ge;Ge=null,t()}}function rt(e){i.onAbort?.(e),e="Aborted("+e+")",Pe(e),ut=!0,e+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(e);throw Ee(t),t}var Mt="data:application/octet-stream;base64,",ht=e=>e.startsWith(Mt);function jt(){if(i.locateFile){var e="sqlite3.wasm";return ht(e)?e:Ae(e)}return new URL(""+new URL("sqlite3.DBpDb1lf.wasm",import.meta.url).href,import.meta.url).href}var st;function gt(e){if(e==st&&Xe)return new Uint8Array(Xe);if(Me)return Me(e);throw"both async and sync fetching of the wasm failed"}function Bt(e){return Xe?Promise.resolve().then(()=>gt(e)):Le(e).then(t=>new Uint8Array(t),()=>gt(e))}function qt(e,t,n){return Bt(e).then(r=>WebAssembly.instantiate(r,t)).then(n,r=>{Pe(`failed to asynchronously prepare wasm: ${r}`),rt(r)})}function Ut(e,t,n,r){return!e&&typeof WebAssembly.instantiateStreaming=="function"&&!ht(t)&&typeof fetch=="function"?fetch(t,{credentials:"same-origin"}).then(s=>{var o=WebAssembly.instantiateStreaming(s,n);return o.then(r,function(p){return Pe(`wasm streaming compile failed: ${p}`),Pe("falling back to ArrayBuffer instantiation"),qt(t,n,r)})}):qt(t,n,r)}function zt(){return{env:St,wasi_snapshot_preview1:St}}function Wt(){var e=zt();function t(r,s){return m=r.exports,Rt(m.__wasm_call_ctors),Ye(),m}nt();function n(r){t(r.instance)}if(i.instantiateWasm)try{return i.instantiateWasm(e,t)}catch(r){Pe(`Module.instantiateWasm callback failed with error: ${r}`),Ee(r)}return st??=jt(),Ut(Xe,st,e,n).catch(Ee),{}}var it=e=>{e.forEach(t=>t(i))};i.noExitRuntime;var fe={isAbs:e=>e.charAt(0)==="/",splitPath:e=>{var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return t.exec(e).slice(1)},normalizeArray:(e,t)=>{for(var n=0,r=e.length-1;r>=0;r--){var s=e[r];s==="."?e.splice(r,1):s===".."?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n;n--)e.unshift("..");return e},normalize:e=>{var t=fe.isAbs(e),n=e.substr(-1)==="/";return e=fe.normalizeArray(e.split("/").filter(r=>!!r),!t).join("/"),!e&&!t&&(e="."),e&&n&&(e+="/"),(t?"/":"")+e},dirname:e=>{var t=fe.splitPath(e),n=t[0],r=t[1];return!n&&!r?".":(r&&(r=r.substr(0,r.length-1)),n+r)},basename:e=>{if(e==="/")return"/";e=fe.normalize(e),e=e.replace(/\/$/,"");var t=e.lastIndexOf("/");return t===-1?e:e.substr(t+1)},join:(...e)=>fe.normalize(e.join("/")),join2:(e,t)=>fe.normalize(e+"/"+t)},Qt=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return e=>crypto.getRandomValues(e);rt("initRandomDevice")},bt=e=>(bt=Qt())(e),ke={resolve:(...e)=>{for(var t="",n=!1,r=e.length-1;r>=-1&&!n;r--){var s=r>=0?e[r]:a.cwd();if(typeof s!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!s)return"";t=s+"/"+t,n=fe.isAbs(s)}return t=fe.normalizeArray(t.split("/").filter(o=>!!o),!n).join("/"),(n?"/":"")+t||"."},relative:(e,t)=>{e=ke.resolve(e).substr(1),t=ke.resolve(t).substr(1);function n(R){for(var z=0;z=0&&R[Q]==="";Q--);return z>Q?[]:R.slice(z,Q-z+1)}for(var r=n(e.split("/")),s=n(t.split("/")),o=Math.min(r.length,s.length),p=o,g=0;g{for(var r=t+n,s=t;e[s]&&!(s>=r);)++s;if(s-t>16&&e.buffer&&yt)return yt.decode(e.subarray(t,s));for(var o="";t>10,56320|R&1023)}}return o},ot=[],Ze=e=>{for(var t=0,n=0;n=55296&&r<=57343?(t+=4,++n):t+=3}return t},lt=(e,t,n,r)=>{if(!(r>0))return 0;for(var s=n,o=n+r-1,p=0;p=55296&&g<=57343){var P=e.charCodeAt(++p);g=65536+((g&1023)<<10)|P&1023}if(g<=127){if(n>=o)break;t[n++]=g}else if(g<=2047){if(n+1>=o)break;t[n++]=192|g>>6,t[n++]=128|g&63}else if(g<=65535){if(n+2>=o)break;t[n++]=224|g>>12,t[n++]=128|g>>6&63,t[n++]=128|g&63}else{if(n+3>=o)break;t[n++]=240|g>>18,t[n++]=128|g>>12&63,t[n++]=128|g>>6&63,t[n++]=128|g&63}}return t[n]=0,n-s};function wt(e,t,n){var r=Ze(e)+1,s=new Array(r),o=lt(e,s,0,s.length);return s.length=o,s}var Ht=()=>{if(!ot.length){var e=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(e=window.prompt("Input: "),e!==null&&(e+=` +`)),!e)return null;ot=wt(e)}return ot.shift()},Re={ttys:[],init(){},shutdown(){},register(e,t){Re.ttys[e]={input:[],output:[],ops:t},a.registerDevice(e,Re.stream_ops)},stream_ops:{open(e){var t=Re.ttys[e.node.rdev];if(!t)throw new a.ErrnoError(43);e.tty=t,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,t,n,r,s){if(!e.tty||!e.tty.ops.get_char)throw new a.ErrnoError(60);for(var o=0,p=0;p0&&(He(Be(e.output)),e.output=[])},ioctl_tcgets(e){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(e,t,n){return 0},ioctl_tiocgwinsz(e){return[24,80]}},default_tty1_ops:{put_char(e,t){t===null||t===10?(Pe(Be(e.output)),e.output=[]):t!=0&&e.output.push(t)},fsync(e){e.output&&e.output.length>0&&(Pe(Be(e.output)),e.output=[])}}},Vt=(e,t)=>{je.fill(0,e,e+t)},Et=(e,t)=>Math.ceil(e/t)*t,vt=e=>{e=Et(e,65536);var t=At(65536,e);return t&&Vt(t,e),t},oe={ops_table:null,mount(e){return oe.createNode(null,"/",16895,0)},createNode(e,t,n,r){if(a.isBlkdev(n)||a.isFIFO(n))throw new a.ErrnoError(63);oe.ops_table||={dir:{node:{getattr:oe.node_ops.getattr,setattr:oe.node_ops.setattr,lookup:oe.node_ops.lookup,mknod:oe.node_ops.mknod,rename:oe.node_ops.rename,unlink:oe.node_ops.unlink,rmdir:oe.node_ops.rmdir,readdir:oe.node_ops.readdir,symlink:oe.node_ops.symlink},stream:{llseek:oe.stream_ops.llseek}},file:{node:{getattr:oe.node_ops.getattr,setattr:oe.node_ops.setattr},stream:{llseek:oe.stream_ops.llseek,read:oe.stream_ops.read,write:oe.stream_ops.write,allocate:oe.stream_ops.allocate,mmap:oe.stream_ops.mmap,msync:oe.stream_ops.msync}},link:{node:{getattr:oe.node_ops.getattr,setattr:oe.node_ops.setattr,readlink:oe.node_ops.readlink},stream:{}},chrdev:{node:{getattr:oe.node_ops.getattr,setattr:oe.node_ops.setattr},stream:a.chrdev_stream_ops}};var s=a.createNode(e,t,n,r);return a.isDir(s.mode)?(s.node_ops=oe.ops_table.dir.node,s.stream_ops=oe.ops_table.dir.stream,s.contents={}):a.isFile(s.mode)?(s.node_ops=oe.ops_table.file.node,s.stream_ops=oe.ops_table.file.stream,s.usedBytes=0,s.contents=null):a.isLink(s.mode)?(s.node_ops=oe.ops_table.link.node,s.stream_ops=oe.ops_table.link.stream):a.isChrdev(s.mode)&&(s.node_ops=oe.ops_table.chrdev.node,s.stream_ops=oe.ops_table.chrdev.stream),s.timestamp=Date.now(),e&&(e.contents[t]=s,e.timestamp=s.timestamp),s},getFileDataAsTypedArray(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage(e,t){var n=e.contents?e.contents.length:0;if(!(n>=t)){var r=1024*1024;t=Math.max(t,n*(n>>0),n!=0&&(t=Math.max(t,256));var s=e.contents;e.contents=new Uint8Array(t),e.usedBytes>0&&e.contents.set(s.subarray(0,e.usedBytes),0)}},resizeFileStorage(e,t){if(e.usedBytes!=t)if(t==0)e.contents=null,e.usedBytes=0;else{var n=e.contents;e.contents=new Uint8Array(t),n&&e.contents.set(n.subarray(0,Math.min(t,e.usedBytes))),e.usedBytes=t}},node_ops:{getattr(e){var t={};return t.dev=a.isChrdev(e.mode)?e.id:1,t.ino=e.id,t.mode=e.mode,t.nlink=1,t.uid=0,t.gid=0,t.rdev=e.rdev,a.isDir(e.mode)?t.size=4096:a.isFile(e.mode)?t.size=e.usedBytes:a.isLink(e.mode)?t.size=e.link.length:t.size=0,t.atime=new Date(e.timestamp),t.mtime=new Date(e.timestamp),t.ctime=new Date(e.timestamp),t.blksize=4096,t.blocks=Math.ceil(t.size/t.blksize),t},setattr(e,t){t.mode!==void 0&&(e.mode=t.mode),t.timestamp!==void 0&&(e.timestamp=t.timestamp),t.size!==void 0&&oe.resizeFileStorage(e,t.size)},lookup(e,t){throw a.genericErrors[44]},mknod(e,t,n,r){return oe.createNode(e,t,n,r)},rename(e,t,n){if(a.isDir(e.mode)){var r;try{r=a.lookupNode(t,n)}catch{}if(r)for(var s in r.contents)throw new a.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=n,t.contents[n]=e,t.timestamp=e.parent.timestamp},unlink(e,t){delete e.contents[t],e.timestamp=Date.now()},rmdir(e,t){var n=a.lookupNode(e,t);for(var r in n.contents)throw new a.ErrnoError(55);delete e.contents[t],e.timestamp=Date.now()},readdir(e){var t=[".",".."];for(var n of Object.keys(e.contents))t.push(n);return t},symlink(e,t,n){var r=oe.createNode(e,t,41471,0);return r.link=n,r},readlink(e){if(!a.isLink(e.mode))throw new a.ErrnoError(28);return e.link}},stream_ops:{read(e,t,n,r,s){var o=e.node.contents;if(s>=e.node.usedBytes)return 0;var p=Math.min(e.node.usedBytes-s,r);if(p>8&&o.subarray)t.set(o.subarray(s,s+p),n);else for(var g=0;g0||n+t{var s=`al ${e}`;Le(e).then(o=>{t(new Uint8Array(o)),s&&Ye()},o=>{if(n)n();else throw`Loading data file "${e}" failed.`}),s&&nt()},$t=(e,t,n,r,s,o)=>{a.createDataFile(e,t,n,r,s,o)},Kt=i.preloadPlugins||[],Jt=(e,t,n,r)=>{typeof Browser<"u"&&Browser.init();var s=!1;return Kt.forEach(o=>{s||o.canHandle(t)&&(o.handle(e,t,n,r),s=!0)}),s},Xt=(e,t,n,r,s,o,p,g,P,R)=>{var z=t?ke.resolve(fe.join2(e,t)):e;function Q(T){function A(D){R?.(),g||$t(e,t,D,r,s,P),o?.(),Ye()}Jt(T,z,A,()=>{p?.(),Ye()})||A(T)}nt(),typeof n=="string"?Gt(n,Q,p):Q(n)},Yt=e=>{var t={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},n=t[e];if(typeof n>"u")throw new Error(`Unknown file open mode: ${e}`);return n},at=(e,t)=>{var n=0;return e&&(n|=365),t&&(n|=146),n},a={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(e){this.name="ErrnoError",this.errno=e}},genericErrors:{},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(e){this.node=e}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(e){this.shared.flags=e}get position(){return this.shared.position}set position(e){this.shared.position=e}},FSNode:class{constructor(e,t,n,r){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=a.nextInode++,this.name=t,this.mode=n,this.node_ops={},this.stream_ops={},this.rdev=r,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(e){e?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(e){e?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return a.isDir(this.mode)}get isDevice(){return a.isChrdev(this.mode)}},lookupPath(e,t={}){if(e=ke.resolve(e),!e)return{path:"",node:null};var n={follow_mount:!0,recurse_count:0};if(t=Object.assign(n,t),t.recurse_count>8)throw new a.ErrnoError(32);for(var r=e.split("/").filter(Q=>!!Q),s=a.root,o="/",p=0;p40)throw new a.ErrnoError(32)}}return{path:o,node:s}},getPath(e){for(var t;;){if(a.isRoot(e)){var n=e.mount.mountpoint;return t?n[n.length-1]!=="/"?`${n}/${t}`:n+t:n}t=t?`${e.name}/${t}`:e.name,e=e.parent}},hashName(e,t){for(var n=0,r=0;r>>0)%a.nameTable.length},hashAddNode(e){var t=a.hashName(e.parent.id,e.name);e.name_next=a.nameTable[t],a.nameTable[t]=e},hashRemoveNode(e){var t=a.hashName(e.parent.id,e.name);if(a.nameTable[t]===e)a.nameTable[t]=e.name_next;else for(var n=a.nameTable[t];n;){if(n.name_next===e){n.name_next=e.name_next;break}n=n.name_next}},lookupNode(e,t){var n=a.mayLookup(e);if(n)throw new a.ErrnoError(n);for(var r=a.hashName(e.id,t),s=a.nameTable[r];s;s=s.name_next){var o=s.name;if(s.parent.id===e.id&&o===t)return s}return a.lookup(e,t)},createNode(e,t,n,r){var s=new a.FSNode(e,t,n,r);return a.hashAddNode(s),s},destroyNode(e){a.hashRemoveNode(e)},isRoot(e){return e===e.parent},isMountpoint(e){return!!e.mounted},isFile(e){return(e&61440)===32768},isDir(e){return(e&61440)===16384},isLink(e){return(e&61440)===40960},isChrdev(e){return(e&61440)===8192},isBlkdev(e){return(e&61440)===24576},isFIFO(e){return(e&61440)===4096},isSocket(e){return(e&49152)===49152},flagsToPermissionString(e){var t=["r","w","rw"][e&3];return e&512&&(t+="w"),t},nodePermissions(e,t){return a.ignorePermissions?0:t.includes("r")&&!(e.mode&292)||t.includes("w")&&!(e.mode&146)||t.includes("x")&&!(e.mode&73)?2:0},mayLookup(e){if(!a.isDir(e.mode))return 54;var t=a.nodePermissions(e,"x");return t||(e.node_ops.lookup?0:2)},mayCreate(e,t){try{var n=a.lookupNode(e,t);return 20}catch{}return a.nodePermissions(e,"wx")},mayDelete(e,t,n){var r;try{r=a.lookupNode(e,t)}catch(o){return o.errno}var s=a.nodePermissions(e,"wx");if(s)return s;if(n){if(!a.isDir(r.mode))return 54;if(a.isRoot(r)||a.getPath(r)===a.cwd())return 10}else if(a.isDir(r.mode))return 31;return 0},mayOpen(e,t){return e?a.isLink(e.mode)?32:a.isDir(e.mode)&&(a.flagsToPermissionString(t)!=="r"||t&512)?31:a.nodePermissions(e,a.flagsToPermissionString(t)):44},MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=a.MAX_OPEN_FDS;e++)if(!a.streams[e])return e;throw new a.ErrnoError(33)},getStreamChecked(e){var t=a.getStream(e);if(!t)throw new a.ErrnoError(8);return t},getStream:e=>a.streams[e],createStream(e,t=-1){return e=Object.assign(new a.FSStream,e),t==-1&&(t=a.nextfd()),e.fd=t,a.streams[t]=e,e},closeStream(e){a.streams[e]=null},dupStream(e,t=-1){var n=a.createStream(e,t);return n.stream_ops?.dup?.(n),n},chrdev_stream_ops:{open(e){var t=a.getDevice(e.node.rdev);e.stream_ops=t.stream_ops,e.stream_ops.open?.(e)},llseek(){throw new a.ErrnoError(70)}},major:e=>e>>8,minor:e=>e&255,makedev:(e,t)=>e<<8|t,registerDevice(e,t){a.devices[e]={stream_ops:t}},getDevice:e=>a.devices[e],getMounts(e){for(var t=[],n=[e];n.length;){var r=n.pop();t.push(r),n.push(...r.mounts)}return t},syncfs(e,t){typeof e=="function"&&(t=e,e=!1),a.syncFSRequests++,a.syncFSRequests>1&&Pe(`warning: ${a.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var n=a.getMounts(a.root.mount),r=0;function s(p){return a.syncFSRequests--,t(p)}function o(p){if(p)return o.errored?void 0:(o.errored=!0,s(p));++r>=n.length&&s(null)}n.forEach(p=>{if(!p.type.syncfs)return o(null);p.type.syncfs(p,e,o)})},mount(e,t,n){var r=n==="/",s=!n,o;if(r&&a.root)throw new a.ErrnoError(10);if(!r&&!s){var p=a.lookupPath(n,{follow_mount:!1});if(n=p.path,o=p.node,a.isMountpoint(o))throw new a.ErrnoError(10);if(!a.isDir(o.mode))throw new a.ErrnoError(54)}var g={type:e,opts:t,mountpoint:n,mounts:[]},P=e.mount(g);return P.mount=g,g.root=P,r?a.root=P:o&&(o.mounted=g,o.mount&&o.mount.mounts.push(g)),P},unmount(e){var t=a.lookupPath(e,{follow_mount:!1});if(!a.isMountpoint(t.node))throw new a.ErrnoError(28);var n=t.node,r=n.mounted,s=a.getMounts(r);Object.keys(a.nameTable).forEach(p=>{for(var g=a.nameTable[p];g;){var P=g.name_next;s.includes(g.mount)&&a.destroyNode(g),g=P}}),n.mounted=null;var o=n.mount.mounts.indexOf(r);n.mount.mounts.splice(o,1)},lookup(e,t){return e.node_ops.lookup(e,t)},mknod(e,t,n){var r=a.lookupPath(e,{parent:!0}),s=r.node,o=fe.basename(e);if(!o||o==="."||o==="..")throw new a.ErrnoError(28);var p=a.mayCreate(s,o);if(p)throw new a.ErrnoError(p);if(!s.node_ops.mknod)throw new a.ErrnoError(63);return s.node_ops.mknod(s,o,t,n)},create(e,t){return t=t!==void 0?t:438,t&=4095,t|=32768,a.mknod(e,t,0)},mkdir(e,t){return t=t!==void 0?t:511,t&=1023,t|=16384,a.mknod(e,t,0)},mkdirTree(e,t){for(var n=e.split("/"),r="",s=0;s"u"&&(n=t,t=438),t|=8192,a.mknod(e,t,n)},symlink(e,t){if(!ke.resolve(e))throw new a.ErrnoError(44);var n=a.lookupPath(t,{parent:!0}),r=n.node;if(!r)throw new a.ErrnoError(44);var s=fe.basename(t),o=a.mayCreate(r,s);if(o)throw new a.ErrnoError(o);if(!r.node_ops.symlink)throw new a.ErrnoError(63);return r.node_ops.symlink(r,s,e)},rename(e,t){var n=fe.dirname(e),r=fe.dirname(t),s=fe.basename(e),o=fe.basename(t),p,g,P;if(p=a.lookupPath(e,{parent:!0}),g=p.node,p=a.lookupPath(t,{parent:!0}),P=p.node,!g||!P)throw new a.ErrnoError(44);if(g.mount!==P.mount)throw new a.ErrnoError(75);var R=a.lookupNode(g,s),z=ke.relative(e,r);if(z.charAt(0)!==".")throw new a.ErrnoError(28);if(z=ke.relative(t,n),z.charAt(0)!==".")throw new a.ErrnoError(55);var Q;try{Q=a.lookupNode(P,o)}catch{}if(R!==Q){var T=a.isDir(R.mode),A=a.mayDelete(g,s,T);if(A)throw new a.ErrnoError(A);if(A=Q?a.mayDelete(P,o,T):a.mayCreate(P,o),A)throw new a.ErrnoError(A);if(!g.node_ops.rename)throw new a.ErrnoError(63);if(a.isMountpoint(R)||Q&&a.isMountpoint(Q))throw new a.ErrnoError(10);if(P!==g&&(A=a.nodePermissions(g,"w"),A))throw new a.ErrnoError(A);a.hashRemoveNode(R);try{g.node_ops.rename(R,P,o),R.parent=P}catch(D){throw D}finally{a.hashAddNode(R)}}},rmdir(e){var t=a.lookupPath(e,{parent:!0}),n=t.node,r=fe.basename(e),s=a.lookupNode(n,r),o=a.mayDelete(n,r,!0);if(o)throw new a.ErrnoError(o);if(!n.node_ops.rmdir)throw new a.ErrnoError(63);if(a.isMountpoint(s))throw new a.ErrnoError(10);n.node_ops.rmdir(n,r),a.destroyNode(s)},readdir(e){var t=a.lookupPath(e,{follow:!0}),n=t.node;if(!n.node_ops.readdir)throw new a.ErrnoError(54);return n.node_ops.readdir(n)},unlink(e){var t=a.lookupPath(e,{parent:!0}),n=t.node;if(!n)throw new a.ErrnoError(44);var r=fe.basename(e),s=a.lookupNode(n,r),o=a.mayDelete(n,r,!1);if(o)throw new a.ErrnoError(o);if(!n.node_ops.unlink)throw new a.ErrnoError(63);if(a.isMountpoint(s))throw new a.ErrnoError(10);n.node_ops.unlink(n,r),a.destroyNode(s)},readlink(e){var t=a.lookupPath(e),n=t.node;if(!n)throw new a.ErrnoError(44);if(!n.node_ops.readlink)throw new a.ErrnoError(28);return ke.resolve(a.getPath(n.parent),n.node_ops.readlink(n))},stat(e,t){var n=a.lookupPath(e,{follow:!t}),r=n.node;if(!r)throw new a.ErrnoError(44);if(!r.node_ops.getattr)throw new a.ErrnoError(63);return r.node_ops.getattr(r)},lstat(e){return a.stat(e,!0)},chmod(e,t,n){var r;if(typeof e=="string"){var s=a.lookupPath(e,{follow:!n});r=s.node}else r=e;if(!r.node_ops.setattr)throw new a.ErrnoError(63);r.node_ops.setattr(r,{mode:t&4095|r.mode&-4096,timestamp:Date.now()})},lchmod(e,t){a.chmod(e,t,!0)},fchmod(e,t){var n=a.getStreamChecked(e);a.chmod(n.node,t)},chown(e,t,n,r){var s;if(typeof e=="string"){var o=a.lookupPath(e,{follow:!r});s=o.node}else s=e;if(!s.node_ops.setattr)throw new a.ErrnoError(63);s.node_ops.setattr(s,{timestamp:Date.now()})},lchown(e,t,n){a.chown(e,t,n,!0)},fchown(e,t,n){var r=a.getStreamChecked(e);a.chown(r.node,t,n)},truncate(e,t){if(t<0)throw new a.ErrnoError(28);var n;if(typeof e=="string"){var r=a.lookupPath(e,{follow:!0});n=r.node}else n=e;if(!n.node_ops.setattr)throw new a.ErrnoError(63);if(a.isDir(n.mode))throw new a.ErrnoError(31);if(!a.isFile(n.mode))throw new a.ErrnoError(28);var s=a.nodePermissions(n,"w");if(s)throw new a.ErrnoError(s);n.node_ops.setattr(n,{size:t,timestamp:Date.now()})},ftruncate(e,t){var n=a.getStreamChecked(e);if((n.flags&2097155)===0)throw new a.ErrnoError(28);a.truncate(n.node,t)},utime(e,t,n){var r=a.lookupPath(e,{follow:!0}),s=r.node;s.node_ops.setattr(s,{timestamp:Math.max(t,n)})},open(e,t,n){if(e==="")throw new a.ErrnoError(44);t=typeof t=="string"?Yt(t):t,t&64?(n=typeof n>"u"?438:n,n=n&4095|32768):n=0;var r;if(typeof e=="object")r=e;else{e=fe.normalize(e);try{var s=a.lookupPath(e,{follow:!(t&131072)});r=s.node}catch{}}var o=!1;if(t&64)if(r){if(t&128)throw new a.ErrnoError(20)}else r=a.mknod(e,n,0),o=!0;if(!r)throw new a.ErrnoError(44);if(a.isChrdev(r.mode)&&(t&=-513),t&65536&&!a.isDir(r.mode))throw new a.ErrnoError(54);if(!o){var p=a.mayOpen(r,t);if(p)throw new a.ErrnoError(p)}t&512&&!o&&a.truncate(r,0),t&=-131713;var g=a.createStream({node:r,path:a.getPath(r),flags:t,seekable:!0,position:0,stream_ops:r.stream_ops,ungotten:[],error:!1});return g.stream_ops.open&&g.stream_ops.open(g),i.logReadFiles&&!(t&1)&&(e in a.readFiles||(a.readFiles[e]=1)),g},close(e){if(a.isClosed(e))throw new a.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(t){throw t}finally{a.closeStream(e.fd)}e.fd=null},isClosed(e){return e.fd===null},llseek(e,t,n){if(a.isClosed(e))throw new a.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new a.ErrnoError(70);if(n!=0&&n!=1&&n!=2)throw new a.ErrnoError(28);return e.position=e.stream_ops.llseek(e,t,n),e.ungotten=[],e.position},read(e,t,n,r,s){if(r<0||s<0)throw new a.ErrnoError(28);if(a.isClosed(e))throw new a.ErrnoError(8);if((e.flags&2097155)===1)throw new a.ErrnoError(8);if(a.isDir(e.node.mode))throw new a.ErrnoError(31);if(!e.stream_ops.read)throw new a.ErrnoError(28);var o=typeof s<"u";if(!o)s=e.position;else if(!e.seekable)throw new a.ErrnoError(70);var p=e.stream_ops.read(e,t,n,r,s);return o||(e.position+=p),p},write(e,t,n,r,s,o){if(r<0||s<0)throw new a.ErrnoError(28);if(a.isClosed(e))throw new a.ErrnoError(8);if((e.flags&2097155)===0)throw new a.ErrnoError(8);if(a.isDir(e.node.mode))throw new a.ErrnoError(31);if(!e.stream_ops.write)throw new a.ErrnoError(28);e.seekable&&e.flags&1024&&a.llseek(e,0,2);var p=typeof s<"u";if(!p)s=e.position;else if(!e.seekable)throw new a.ErrnoError(70);var g=e.stream_ops.write(e,t,n,r,s,o);return p||(e.position+=g),g},allocate(e,t,n){if(a.isClosed(e))throw new a.ErrnoError(8);if(t<0||n<=0)throw new a.ErrnoError(28);if((e.flags&2097155)===0)throw new a.ErrnoError(8);if(!a.isFile(e.node.mode)&&!a.isDir(e.node.mode))throw new a.ErrnoError(43);if(!e.stream_ops.allocate)throw new a.ErrnoError(138);e.stream_ops.allocate(e,t,n)},mmap(e,t,n,r,s){if((r&2)!==0&&(s&2)===0&&(e.flags&2097155)!==2)throw new a.ErrnoError(2);if((e.flags&2097155)===1)throw new a.ErrnoError(2);if(!e.stream_ops.mmap)throw new a.ErrnoError(43);if(!t)throw new a.ErrnoError(28);return e.stream_ops.mmap(e,t,n,r,s)},msync(e,t,n,r,s){return e.stream_ops.msync?e.stream_ops.msync(e,t,n,r,s):0},ioctl(e,t,n){if(!e.stream_ops.ioctl)throw new a.ErrnoError(59);return e.stream_ops.ioctl(e,t,n)},readFile(e,t={}){if(t.flags=t.flags||0,t.encoding=t.encoding||"binary",t.encoding!=="utf8"&&t.encoding!=="binary")throw new Error(`Invalid encoding type "${t.encoding}"`);var n,r=a.open(e,t.flags),s=a.stat(e),o=s.size,p=new Uint8Array(o);return a.read(r,p,0,o,0),t.encoding==="utf8"?n=Be(p):t.encoding==="binary"&&(n=p),a.close(r),n},writeFile(e,t,n={}){n.flags=n.flags||577;var r=a.open(e,n.flags,n.mode);if(typeof t=="string"){var s=new Uint8Array(Ze(t)+1),o=lt(t,s,0,s.length);a.write(r,s,0,o,void 0,n.canOwn)}else if(ArrayBuffer.isView(t))a.write(r,t,0,t.byteLength,void 0,n.canOwn);else throw new Error("Unsupported data type");a.close(r)},cwd:()=>a.currentPath,chdir(e){var t=a.lookupPath(e,{follow:!0});if(t.node===null)throw new a.ErrnoError(44);if(!a.isDir(t.node.mode))throw new a.ErrnoError(54);var n=a.nodePermissions(t.node,"x");if(n)throw new a.ErrnoError(n);a.currentPath=t.path},createDefaultDirectories(){a.mkdir("/tmp"),a.mkdir("/home"),a.mkdir("/home/web_user")},createDefaultDevices(){a.mkdir("/dev"),a.registerDevice(a.makedev(1,3),{read:()=>0,write:(r,s,o,p,g)=>p}),a.mkdev("/dev/null",a.makedev(1,3)),Re.register(a.makedev(5,0),Re.default_tty_ops),Re.register(a.makedev(6,0),Re.default_tty1_ops),a.mkdev("/dev/tty",a.makedev(5,0)),a.mkdev("/dev/tty1",a.makedev(6,0));var e=new Uint8Array(1024),t=0,n=()=>(t===0&&(t=bt(e).byteLength),e[--t]);a.createDevice("/dev","random",n),a.createDevice("/dev","urandom",n),a.mkdir("/dev/shm"),a.mkdir("/dev/shm/tmp")},createSpecialDirectories(){a.mkdir("/proc");var e=a.mkdir("/proc/self");a.mkdir("/proc/self/fd"),a.mount({mount(){var t=a.createNode(e,"fd",16895,73);return t.node_ops={lookup(n,r){var s=+r,o=a.getStreamChecked(s),p={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>o.path}};return p.parent=p,p}},t}},{},"/proc/self/fd")},createStandardStreams(e,t,n){e?a.createDevice("/dev","stdin",e):a.symlink("/dev/tty","/dev/stdin"),t?a.createDevice("/dev","stdout",null,t):a.symlink("/dev/tty","/dev/stdout"),n?a.createDevice("/dev","stderr",null,n):a.symlink("/dev/tty1","/dev/stderr"),a.open("/dev/stdin",0),a.open("/dev/stdout",1),a.open("/dev/stderr",1)},staticInit(){[44].forEach(e=>{a.genericErrors[e]=new a.ErrnoError(e),a.genericErrors[e].stack=""}),a.nameTable=new Array(4096),a.mount(oe,{},"/"),a.createDefaultDirectories(),a.createDefaultDevices(),a.createSpecialDirectories(),a.filesystems={MEMFS:oe}},init(e,t,n){a.initialized=!0,e??=i.stdin,t??=i.stdout,n??=i.stderr,a.createStandardStreams(e,t,n)},quit(){a.initialized=!1;for(var e=0;ethis.length-1||A<0)){var D=A%this.chunkSize,q=A/this.chunkSize|0;return this.getter(q)[D]}}setDataGetter(A){this.getter=A}cacheLength(){var A=new XMLHttpRequest;if(A.open("HEAD",n,!1),A.send(null),!(A.status>=200&&A.status<300||A.status===304))throw new Error("Couldn't load "+n+". Status: "+A.status);var D=Number(A.getResponseHeader("Content-length")),q,w=(q=A.getResponseHeader("Accept-Ranges"))&&q==="bytes",x=(q=A.getResponseHeader("Content-Encoding"))&&q==="gzip",N=1024*1024;w||(N=D);var O=(L,$)=>{if(L>$)throw new Error("invalid range ("+L+", "+$+") or no bytes requested!");if($>D-1)throw new Error("only "+D+" bytes available! programmer error!");var c=new XMLHttpRequest;if(c.open("GET",n,!1),D!==N&&c.setRequestHeader("Range","bytes="+L+"-"+$),c.responseType="arraybuffer",c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined"),c.send(null),!(c.status>=200&&c.status<300||c.status===304))throw new Error("Couldn't load "+n+". Status: "+c.status);return c.response!==void 0?new Uint8Array(c.response||[]):wt(c.responseText||"")},S=this;S.setDataGetter(L=>{var $=L*N,c=(L+1)*N-1;if(c=Math.min(c,D-1),typeof S.chunks[L]>"u"&&(S.chunks[L]=O($,c)),typeof S.chunks[L]>"u")throw new Error("doXHR failed!");return S.chunks[L]}),(x||!D)&&(N=D=1,D=this.getter(0).length,N=D,He("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=D,this._chunkSize=N,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){if(!Oe)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var p=new o,g={isDevice:!1,contents:p}}else var g={isDevice:!1,url:n};var P=a.createFile(e,t,g,r,s);g.contents?P.contents=g.contents:g.url&&(P.contents=null,P.url=g.url),Object.defineProperties(P,{usedBytes:{get:function(){return this.contents.length}}});var R={},z=Object.keys(P.stream_ops);z.forEach(T=>{var A=P.stream_ops[T];R[T]=(...D)=>(a.forceLoadFile(P),A(...D))});function Q(T,A,D,q,w){var x=T.node.contents;if(w>=x.length)return 0;var N=Math.min(x.length-w,q);if(x.slice)for(var O=0;O(a.forceLoadFile(P),Q(T,A,D,q,w)),R.mmap=(T,A,D,q,w)=>{a.forceLoadFile(P);var x=vt(A);if(!x)throw new a.ErrnoError(48);return Q(T,xe,x,A,D),{ptr:x,allocated:!0}},P.stream_ops=R,P}},Zt=(e,t)=>e?Be(je,e,t):"",ae={DEFAULT_POLLMASK:5,calculateAt(e,t,n){if(fe.isAbs(t))return t;var r;if(e===-100)r=a.cwd();else{var s=ae.getStreamFromFD(e);r=s.path}if(t.length==0){if(!n)throw new a.ErrnoError(44);return r}return fe.join2(r,t)},doStat(e,t,n){var r=e(t);ue[n>>2]=r.dev,ue[n+4>>2]=r.mode,we[n+8>>2]=r.nlink,ue[n+12>>2]=r.uid,ue[n+16>>2]=r.gid,ue[n+20>>2]=r.rdev,Ie[n+24>>3]=BigInt(r.size),ue[n+32>>2]=4096,ue[n+36>>2]=r.blocks;var s=r.atime.getTime(),o=r.mtime.getTime(),p=r.ctime.getTime();return Ie[n+40>>3]=BigInt(Math.floor(s/1e3)),we[n+48>>2]=s%1e3*1e3*1e3,Ie[n+56>>3]=BigInt(Math.floor(o/1e3)),we[n+64>>2]=o%1e3*1e3*1e3,Ie[n+72>>3]=BigInt(Math.floor(p/1e3)),we[n+80>>2]=p%1e3*1e3*1e3,Ie[n+88>>3]=BigInt(r.ino),0},doMsync(e,t,n,r,s){if(!a.isFile(t.node.mode))throw new a.ErrnoError(43);if(r&2)return 0;var o=je.slice(e,e+n);a.msync(t,o,s,n,r)},getStreamFromFD(e){var t=a.getStreamChecked(e);return t},varargs:void 0,getStr(e){var t=Zt(e);return t}};function en(e,t){try{return e=ae.getStr(e),a.chmod(e,t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function tn(e,t,n,r){try{if(t=ae.getStr(t),t=ae.calculateAt(e,t),n&-8)return-28;var s=a.lookupPath(t,{follow:!0}),o=s.node;if(!o)return-44;var p="";return n&4&&(p+="r"),n&2&&(p+="w"),n&1&&(p+="x"),p&&a.nodePermissions(o,p)?-2:0}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function nn(e,t){try{return a.fchmod(e,t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function rn(e,t,n){try{return a.fchown(e,t,n),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}function et(){var e=ue[+ae.varargs>>2];return ae.varargs+=4,e}var Ue=et;function sn(e,t,n){ae.varargs=n;try{var r=ae.getStreamFromFD(e);switch(t){case 0:{var s=et();if(s<0)return-28;for(;a.streams[s];)s++;var o;return o=a.dupStream(r,s),o.fd}case 1:case 2:return 0;case 3:return r.flags;case 4:{var s=et();return r.flags|=s,0}case 12:{var s=Ue(),p=0;return Ve[s+p>>1]=2,0}case 13:case 14:return 0}return-28}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function on(e,t){try{var n=ae.getStreamFromFD(e);return ae.doStat(a.stat,n.path,t)}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}var ln=9007199254740992,an=-9007199254740992,$e=e=>eln?NaN:Number(e);function cn(e,t){t=$e(t);try{return isNaN(t)?61:(a.ftruncate(e,t),0)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}var ze=(e,t,n)=>lt(e,je,t,n);function _n(e,t){try{if(t===0)return-28;var n=a.cwd(),r=Ze(n)+1;return t"u"||s.name!=="ErrnoError")throw s;return-s.errno}}function un(e,t,n){ae.varargs=n;try{var r=ae.getStreamFromFD(e);switch(t){case 21509:return r.tty?0:-59;case 21505:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tcgets){var s=r.tty.ops.ioctl_tcgets(r),o=Ue();ue[o>>2]=s.c_iflag||0,ue[o+4>>2]=s.c_oflag||0,ue[o+8>>2]=s.c_cflag||0,ue[o+12>>2]=s.c_lflag||0;for(var p=0;p<32;p++)xe[o+p+17]=s.c_cc[p]||0;return 0}return 0}case 21510:case 21511:case 21512:return r.tty?0:-59;case 21506:case 21507:case 21508:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tcsets){for(var o=Ue(),g=ue[o>>2],P=ue[o+4>>2],R=ue[o+8>>2],z=ue[o+12>>2],Q=[],p=0;p<32;p++)Q.push(xe[o+p+17]);return r.tty.ops.ioctl_tcsets(r.tty,t,{c_iflag:g,c_oflag:P,c_cflag:R,c_lflag:z,c_cc:Q})}return 0}case 21519:{if(!r.tty)return-59;var o=Ue();return ue[o>>2]=0,0}case 21520:return r.tty?-28:-59;case 21531:{var o=Ue();return a.ioctl(r,t,o)}case 21523:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tiocgwinsz){var T=r.tty.ops.ioctl_tiocgwinsz(r.tty),o=Ue();Ve[o>>1]=T[0],Ve[o+2>>1]=T[1]}return 0}case 21524:return r.tty?0:-59;case 21515:return r.tty?0:-59;default:return-28}}catch(A){if(typeof a>"u"||A.name!=="ErrnoError")throw A;return-A.errno}}function fn(e,t){try{return e=ae.getStr(e),ae.doStat(a.lstat,e,t)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function dn(e,t,n){try{return t=ae.getStr(t),t=ae.calculateAt(e,t),t=fe.normalize(t),t[t.length-1]==="/"&&(t=t.substr(0,t.length-1)),a.mkdir(t,n,0),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}function pn(e,t,n,r){try{t=ae.getStr(t);var s=r&256,o=r&4096;return r=r&-6401,t=ae.calculateAt(e,t,o),ae.doStat(s?a.lstat:a.stat,t,n)}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}function mn(e,t,n,r){ae.varargs=r;try{t=ae.getStr(t),t=ae.calculateAt(e,t);var s=r?et():0;return a.open(t,n,s).fd}catch(o){if(typeof a>"u"||o.name!=="ErrnoError")throw o;return-o.errno}}function hn(e,t,n,r){try{if(t=ae.getStr(t),t=ae.calculateAt(e,t),r<=0)return-28;var s=a.readlink(t),o=Math.min(r,Ze(s)),p=xe[n+o];return ze(s,n,r+1),xe[n+o]=p,o}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function gn(e){try{return e=ae.getStr(e),a.rmdir(e),0}catch(t){if(typeof a>"u"||t.name!=="ErrnoError")throw t;return-t.errno}}function qn(e,t){try{return e=ae.getStr(e),ae.doStat(a.stat,e,t)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function bn(e,t,n){try{return t=ae.getStr(t),t=ae.calculateAt(e,t),n===0?a.unlink(t):n===512?a.rmdir(t):rt("Invalid flags passed to unlinkat"),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}var xt=e=>we[e>>2]+ue[e+4>>2]*4294967296;function yn(e,t,n,r){try{t=ae.getStr(t),t=ae.calculateAt(e,t,!0);var s=Date.now(),o,p;if(!n)o=s,p=s;else{var g=xt(n),P=ue[n+8>>2];P==1073741823?o=s:P==1073741822?o=-1:o=g*1e3+P/(1e3*1e3),n+=16,g=xt(n),P=ue[n+8>>2],P==1073741823?p=s:P==1073741822?p=-1:p=g*1e3+P/(1e3*1e3)}return(p!=-1||o!=-1)&&a.utime(t,o,p),0}catch(R){if(typeof a>"u"||R.name!=="ErrnoError")throw R;return-R.errno}}var wn=1,En=()=>wn,vn=e=>e%4===0&&(e%100!==0||e%400===0),xn=[0,31,60,91,121,152,182,213,244,274,305,335],Sn=[0,31,59,90,120,151,181,212,243,273,304,334],An=e=>{var t=vn(e.getFullYear()),n=t?xn:Sn,r=n[e.getMonth()]+e.getDate()-1;return r};function In(e,t){e=$e(e);var n=new Date(e*1e3);ue[t>>2]=n.getSeconds(),ue[t+4>>2]=n.getMinutes(),ue[t+8>>2]=n.getHours(),ue[t+12>>2]=n.getDate(),ue[t+16>>2]=n.getMonth(),ue[t+20>>2]=n.getFullYear()-1900,ue[t+24>>2]=n.getDay();var r=An(n)|0;ue[t+28>>2]=r,ue[t+36>>2]=-(n.getTimezoneOffset()*60);var s=new Date(n.getFullYear(),0,1),o=new Date(n.getFullYear(),6,1).getTimezoneOffset(),p=s.getTimezoneOffset(),g=(o!=p&&n.getTimezoneOffset()==Math.min(p,o))|0;ue[t+32>>2]=g}function kn(e,t,n,r,s,o,p){s=$e(s);try{if(isNaN(s))return 61;var g=ae.getStreamFromFD(r),P=a.mmap(g,e,s,t,n),R=P.ptr;return ue[o>>2]=P.allocated,we[p>>2]=R,0}catch(z){if(typeof a>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function Tn(e,t,n,r,s,o){o=$e(o);try{var p=ae.getStreamFromFD(s);n&2&&ae.doMsync(e,p,t,r,o)}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}var Fn=(e,t,n,r)=>{var s=new Date().getFullYear(),o=new Date(s,0,1),p=new Date(s,6,1),g=o.getTimezoneOffset(),P=p.getTimezoneOffset(),R=Math.max(g,P);we[e>>2]=R*60,ue[t>>2]=+(g!=P);var z=A=>{var D=A>=0?"-":"+",q=Math.abs(A),w=String(Math.floor(q/60)).padStart(2,"0"),x=String(q%60).padStart(2,"0");return`UTC${D}${w}${x}`},Q=z(g),T=z(P);PDate.now(),On=()=>performance.now(),Ln=()=>2147483648,Cn=e=>{var t=Ce.buffer,n=(e-t.byteLength+65535)/65536|0;try{return Ce.grow(n),ft(),1}catch{}},Dn=e=>{var t=je.length;e>>>=0;var n=Ln();if(e>n)return!1;for(var r=1;r<=4;r*=2){var s=t*(1+.2/r);s=Math.min(s,e+100663296);var o=Math.min(n,Et(Math.max(e,s),65536)),p=Cn(o);if(p)return!0}return!1},ct={},Rn=()=>re||"./this.program",Ke=()=>{if(!Ke.strings){var e=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:e,_:Rn()};for(var n in ct)ct[n]===void 0?delete t[n]:t[n]=ct[n];var r=[];for(var n in t)r.push(`${n}=${t[n]}`);Ke.strings=r}return Ke.strings},Nn=(e,t)=>{for(var n=0;n{var n=0;return Ke().forEach((r,s)=>{var o=t+n;we[e+s*4>>2]=o,Nn(r,o),n+=r.length+1}),0},jn=(e,t)=>{var n=Ke();we[e>>2]=n.length;var r=0;return n.forEach(s=>r+=s.length+1),we[t>>2]=r,0};function Bn(e){try{var t=ae.getStreamFromFD(e);return a.close(t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return n.errno}}function Un(e,t){try{var n=0,r=0,s=0,o=ae.getStreamFromFD(e),p=o.tty?2:a.isDir(o.mode)?3:a.isLink(o.mode)?7:4;return xe[t]=p,Ve[t+2>>1]=s,Ie[t+8>>3]=BigInt(n),Ie[t+16>>3]=BigInt(r),0}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return g.errno}}var zn=(e,t,n,r)=>{for(var s=0,o=0;o>2],g=we[t+4>>2];t+=8;var P=a.read(e,xe,p,g,r);if(P<0)return-1;if(s+=P,P>2]=o,0}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return p.errno}}function Qn(e,t,n,r){t=$e(t);try{if(isNaN(t))return 61;var s=ae.getStreamFromFD(e);return a.llseek(s,t,n),Ie[r>>3]=BigInt(s.position),s.getdents&&t===0&&n===0&&(s.getdents=null),0}catch(o){if(typeof a>"u"||o.name!=="ErrnoError")throw o;return o.errno}}function Hn(e){try{var t=ae.getStreamFromFD(e);return t.stream_ops?.fsync?t.stream_ops.fsync(t):0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return n.errno}}var Vn=(e,t,n,r)=>{for(var s=0,o=0;o>2],g=we[t+4>>2];t+=8;var P=a.write(e,xe,p,g,r);if(P<0)return-1;if(s+=P,P>2]=o,0}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return p.errno}}a.createPreloadedFile=Xt,a.staticInit();var St={__syscall_chmod:en,__syscall_faccessat:tn,__syscall_fchmod:nn,__syscall_fchown32:rn,__syscall_fcntl64:sn,__syscall_fstat64:on,__syscall_ftruncate64:cn,__syscall_getcwd:_n,__syscall_ioctl:un,__syscall_lstat64:fn,__syscall_mkdirat:dn,__syscall_newfstatat:pn,__syscall_openat:mn,__syscall_readlinkat:hn,__syscall_rmdir:gn,__syscall_stat64:qn,__syscall_unlinkat:bn,__syscall_utimensat:yn,_emscripten_get_now_is_monotonic:En,_localtime_js:In,_mmap_js:kn,_munmap_js:Tn,_tzset_js:Fn,emscripten_date_now:Pn,emscripten_get_now:On,emscripten_resize_heap:Dn,environ_get:Mn,environ_sizes_get:jn,fd_close:Bn,fd_fdstat_get:Un,fd_read:Wn,fd_seek:Qn,fd_sync:Hn,fd_write:Gn,memory:Ce},m=Wt();i._sqlite3_status64=(e,t,n,r)=>(i._sqlite3_status64=m.sqlite3_status64)(e,t,n,r),i._sqlite3_status=(e,t,n,r)=>(i._sqlite3_status=m.sqlite3_status)(e,t,n,r),i._sqlite3_db_status=(e,t,n,r,s)=>(i._sqlite3_db_status=m.sqlite3_db_status)(e,t,n,r,s),i._sqlite3_msize=e=>(i._sqlite3_msize=m.sqlite3_msize)(e),i._sqlite3_vfs_find=e=>(i._sqlite3_vfs_find=m.sqlite3_vfs_find)(e),i._sqlite3_initialize=()=>(i._sqlite3_initialize=m.sqlite3_initialize)(),i._sqlite3_malloc=e=>(i._sqlite3_malloc=m.sqlite3_malloc)(e),i._sqlite3_free=e=>(i._sqlite3_free=m.sqlite3_free)(e),i._sqlite3_vfs_register=(e,t)=>(i._sqlite3_vfs_register=m.sqlite3_vfs_register)(e,t),i._sqlite3_vfs_unregister=e=>(i._sqlite3_vfs_unregister=m.sqlite3_vfs_unregister)(e),i._sqlite3_malloc64=e=>(i._sqlite3_malloc64=m.sqlite3_malloc64)(e),i._sqlite3_realloc=(e,t)=>(i._sqlite3_realloc=m.sqlite3_realloc)(e,t),i._sqlite3_realloc64=(e,t)=>(i._sqlite3_realloc64=m.sqlite3_realloc64)(e,t),i._sqlite3_value_text=e=>(i._sqlite3_value_text=m.sqlite3_value_text)(e),i._sqlite3_randomness=(e,t)=>(i._sqlite3_randomness=m.sqlite3_randomness)(e,t),i._sqlite3_stricmp=(e,t)=>(i._sqlite3_stricmp=m.sqlite3_stricmp)(e,t),i._sqlite3_strnicmp=(e,t,n)=>(i._sqlite3_strnicmp=m.sqlite3_strnicmp)(e,t,n),i._sqlite3_uri_parameter=(e,t)=>(i._sqlite3_uri_parameter=m.sqlite3_uri_parameter)(e,t),i._sqlite3_uri_boolean=(e,t,n)=>(i._sqlite3_uri_boolean=m.sqlite3_uri_boolean)(e,t,n),i._sqlite3_serialize=(e,t,n,r)=>(i._sqlite3_serialize=m.sqlite3_serialize)(e,t,n,r),i._sqlite3_prepare_v2=(e,t,n,r,s)=>(i._sqlite3_prepare_v2=m.sqlite3_prepare_v2)(e,t,n,r,s),i._sqlite3_step=e=>(i._sqlite3_step=m.sqlite3_step)(e),i._sqlite3_column_int64=(e,t)=>(i._sqlite3_column_int64=m.sqlite3_column_int64)(e,t),i._sqlite3_reset=e=>(i._sqlite3_reset=m.sqlite3_reset)(e),i._sqlite3_exec=(e,t,n,r,s)=>(i._sqlite3_exec=m.sqlite3_exec)(e,t,n,r,s),i._sqlite3_column_int=(e,t)=>(i._sqlite3_column_int=m.sqlite3_column_int)(e,t),i._sqlite3_finalize=e=>(i._sqlite3_finalize=m.sqlite3_finalize)(e),i._sqlite3_file_control=(e,t,n,r)=>(i._sqlite3_file_control=m.sqlite3_file_control)(e,t,n,r),i._sqlite3_column_name=(e,t)=>(i._sqlite3_column_name=m.sqlite3_column_name)(e,t),i._sqlite3_column_text=(e,t)=>(i._sqlite3_column_text=m.sqlite3_column_text)(e,t),i._sqlite3_column_type=(e,t)=>(i._sqlite3_column_type=m.sqlite3_column_type)(e,t),i._sqlite3_errmsg=e=>(i._sqlite3_errmsg=m.sqlite3_errmsg)(e),i._sqlite3_deserialize=(e,t,n,r,s,o)=>(i._sqlite3_deserialize=m.sqlite3_deserialize)(e,t,n,r,s,o),i._sqlite3_clear_bindings=e=>(i._sqlite3_clear_bindings=m.sqlite3_clear_bindings)(e),i._sqlite3_value_blob=e=>(i._sqlite3_value_blob=m.sqlite3_value_blob)(e),i._sqlite3_value_bytes=e=>(i._sqlite3_value_bytes=m.sqlite3_value_bytes)(e),i._sqlite3_value_double=e=>(i._sqlite3_value_double=m.sqlite3_value_double)(e),i._sqlite3_value_int=e=>(i._sqlite3_value_int=m.sqlite3_value_int)(e),i._sqlite3_value_int64=e=>(i._sqlite3_value_int64=m.sqlite3_value_int64)(e),i._sqlite3_value_subtype=e=>(i._sqlite3_value_subtype=m.sqlite3_value_subtype)(e),i._sqlite3_value_pointer=(e,t)=>(i._sqlite3_value_pointer=m.sqlite3_value_pointer)(e,t),i._sqlite3_value_type=e=>(i._sqlite3_value_type=m.sqlite3_value_type)(e),i._sqlite3_value_nochange=e=>(i._sqlite3_value_nochange=m.sqlite3_value_nochange)(e),i._sqlite3_value_frombind=e=>(i._sqlite3_value_frombind=m.sqlite3_value_frombind)(e),i._sqlite3_value_dup=e=>(i._sqlite3_value_dup=m.sqlite3_value_dup)(e),i._sqlite3_value_free=e=>(i._sqlite3_value_free=m.sqlite3_value_free)(e),i._sqlite3_result_blob=(e,t,n,r)=>(i._sqlite3_result_blob=m.sqlite3_result_blob)(e,t,n,r),i._sqlite3_result_error_toobig=e=>(i._sqlite3_result_error_toobig=m.sqlite3_result_error_toobig)(e),i._sqlite3_result_error_nomem=e=>(i._sqlite3_result_error_nomem=m.sqlite3_result_error_nomem)(e),i._sqlite3_result_double=(e,t)=>(i._sqlite3_result_double=m.sqlite3_result_double)(e,t),i._sqlite3_result_error=(e,t,n)=>(i._sqlite3_result_error=m.sqlite3_result_error)(e,t,n),i._sqlite3_result_int=(e,t)=>(i._sqlite3_result_int=m.sqlite3_result_int)(e,t),i._sqlite3_result_int64=(e,t)=>(i._sqlite3_result_int64=m.sqlite3_result_int64)(e,t),i._sqlite3_result_null=e=>(i._sqlite3_result_null=m.sqlite3_result_null)(e),i._sqlite3_result_pointer=(e,t,n,r)=>(i._sqlite3_result_pointer=m.sqlite3_result_pointer)(e,t,n,r),i._sqlite3_result_subtype=(e,t)=>(i._sqlite3_result_subtype=m.sqlite3_result_subtype)(e,t),i._sqlite3_result_text=(e,t,n,r)=>(i._sqlite3_result_text=m.sqlite3_result_text)(e,t,n,r),i._sqlite3_result_zeroblob=(e,t)=>(i._sqlite3_result_zeroblob=m.sqlite3_result_zeroblob)(e,t),i._sqlite3_result_zeroblob64=(e,t)=>(i._sqlite3_result_zeroblob64=m.sqlite3_result_zeroblob64)(e,t),i._sqlite3_result_error_code=(e,t)=>(i._sqlite3_result_error_code=m.sqlite3_result_error_code)(e,t),i._sqlite3_user_data=e=>(i._sqlite3_user_data=m.sqlite3_user_data)(e),i._sqlite3_context_db_handle=e=>(i._sqlite3_context_db_handle=m.sqlite3_context_db_handle)(e),i._sqlite3_vtab_nochange=e=>(i._sqlite3_vtab_nochange=m.sqlite3_vtab_nochange)(e),i._sqlite3_vtab_in_first=(e,t)=>(i._sqlite3_vtab_in_first=m.sqlite3_vtab_in_first)(e,t),i._sqlite3_vtab_in_next=(e,t)=>(i._sqlite3_vtab_in_next=m.sqlite3_vtab_in_next)(e,t),i._sqlite3_aggregate_context=(e,t)=>(i._sqlite3_aggregate_context=m.sqlite3_aggregate_context)(e,t),i._sqlite3_get_auxdata=(e,t)=>(i._sqlite3_get_auxdata=m.sqlite3_get_auxdata)(e,t),i._sqlite3_set_auxdata=(e,t,n,r)=>(i._sqlite3_set_auxdata=m.sqlite3_set_auxdata)(e,t,n,r),i._sqlite3_column_count=e=>(i._sqlite3_column_count=m.sqlite3_column_count)(e),i._sqlite3_data_count=e=>(i._sqlite3_data_count=m.sqlite3_data_count)(e),i._sqlite3_column_blob=(e,t)=>(i._sqlite3_column_blob=m.sqlite3_column_blob)(e,t),i._sqlite3_column_bytes=(e,t)=>(i._sqlite3_column_bytes=m.sqlite3_column_bytes)(e,t),i._sqlite3_column_double=(e,t)=>(i._sqlite3_column_double=m.sqlite3_column_double)(e,t),i._sqlite3_column_value=(e,t)=>(i._sqlite3_column_value=m.sqlite3_column_value)(e,t),i._sqlite3_column_decltype=(e,t)=>(i._sqlite3_column_decltype=m.sqlite3_column_decltype)(e,t),i._sqlite3_bind_blob=(e,t,n,r,s)=>(i._sqlite3_bind_blob=m.sqlite3_bind_blob)(e,t,n,r,s),i._sqlite3_bind_double=(e,t,n)=>(i._sqlite3_bind_double=m.sqlite3_bind_double)(e,t,n),i._sqlite3_bind_int=(e,t,n)=>(i._sqlite3_bind_int=m.sqlite3_bind_int)(e,t,n),i._sqlite3_bind_int64=(e,t,n)=>(i._sqlite3_bind_int64=m.sqlite3_bind_int64)(e,t,n),i._sqlite3_bind_null=(e,t)=>(i._sqlite3_bind_null=m.sqlite3_bind_null)(e,t),i._sqlite3_bind_pointer=(e,t,n,r,s)=>(i._sqlite3_bind_pointer=m.sqlite3_bind_pointer)(e,t,n,r,s),i._sqlite3_bind_text=(e,t,n,r,s)=>(i._sqlite3_bind_text=m.sqlite3_bind_text)(e,t,n,r,s),i._sqlite3_bind_parameter_count=e=>(i._sqlite3_bind_parameter_count=m.sqlite3_bind_parameter_count)(e),i._sqlite3_bind_parameter_name=(e,t)=>(i._sqlite3_bind_parameter_name=m.sqlite3_bind_parameter_name)(e,t),i._sqlite3_bind_parameter_index=(e,t)=>(i._sqlite3_bind_parameter_index=m.sqlite3_bind_parameter_index)(e,t),i._sqlite3_db_handle=e=>(i._sqlite3_db_handle=m.sqlite3_db_handle)(e),i._sqlite3_stmt_readonly=e=>(i._sqlite3_stmt_readonly=m.sqlite3_stmt_readonly)(e),i._sqlite3_stmt_isexplain=e=>(i._sqlite3_stmt_isexplain=m.sqlite3_stmt_isexplain)(e),i._sqlite3_stmt_explain=(e,t)=>(i._sqlite3_stmt_explain=m.sqlite3_stmt_explain)(e,t),i._sqlite3_stmt_busy=e=>(i._sqlite3_stmt_busy=m.sqlite3_stmt_busy)(e),i._sqlite3_stmt_status=(e,t,n)=>(i._sqlite3_stmt_status=m.sqlite3_stmt_status)(e,t,n),i._sqlite3_sql=e=>(i._sqlite3_sql=m.sqlite3_sql)(e),i._sqlite3_expanded_sql=e=>(i._sqlite3_expanded_sql=m.sqlite3_expanded_sql)(e),i._sqlite3_preupdate_old=(e,t,n)=>(i._sqlite3_preupdate_old=m.sqlite3_preupdate_old)(e,t,n),i._sqlite3_preupdate_count=e=>(i._sqlite3_preupdate_count=m.sqlite3_preupdate_count)(e),i._sqlite3_preupdate_depth=e=>(i._sqlite3_preupdate_depth=m.sqlite3_preupdate_depth)(e),i._sqlite3_preupdate_blobwrite=e=>(i._sqlite3_preupdate_blobwrite=m.sqlite3_preupdate_blobwrite)(e),i._sqlite3_preupdate_new=(e,t,n)=>(i._sqlite3_preupdate_new=m.sqlite3_preupdate_new)(e,t,n),i._sqlite3_value_numeric_type=e=>(i._sqlite3_value_numeric_type=m.sqlite3_value_numeric_type)(e),i._sqlite3_set_authorizer=(e,t,n)=>(i._sqlite3_set_authorizer=m.sqlite3_set_authorizer)(e,t,n),i._sqlite3_strglob=(e,t)=>(i._sqlite3_strglob=m.sqlite3_strglob)(e,t),i._sqlite3_strlike=(e,t,n)=>(i._sqlite3_strlike=m.sqlite3_strlike)(e,t,n),i._sqlite3_auto_extension=e=>(i._sqlite3_auto_extension=m.sqlite3_auto_extension)(e),i._sqlite3_cancel_auto_extension=e=>(i._sqlite3_cancel_auto_extension=m.sqlite3_cancel_auto_extension)(e),i._sqlite3_reset_auto_extension=()=>(i._sqlite3_reset_auto_extension=m.sqlite3_reset_auto_extension)(),i._sqlite3_prepare_v3=(e,t,n,r,s,o)=>(i._sqlite3_prepare_v3=m.sqlite3_prepare_v3)(e,t,n,r,s,o),i._sqlite3_create_module=(e,t,n,r)=>(i._sqlite3_create_module=m.sqlite3_create_module)(e,t,n,r),i._sqlite3_create_module_v2=(e,t,n,r,s)=>(i._sqlite3_create_module_v2=m.sqlite3_create_module_v2)(e,t,n,r,s),i._sqlite3_drop_modules=(e,t)=>(i._sqlite3_drop_modules=m.sqlite3_drop_modules)(e,t),i._sqlite3_declare_vtab=(e,t)=>(i._sqlite3_declare_vtab=m.sqlite3_declare_vtab)(e,t),i._sqlite3_vtab_on_conflict=e=>(i._sqlite3_vtab_on_conflict=m.sqlite3_vtab_on_conflict)(e),i._sqlite3_vtab_collation=(e,t)=>(i._sqlite3_vtab_collation=m.sqlite3_vtab_collation)(e,t),i._sqlite3_vtab_in=(e,t,n)=>(i._sqlite3_vtab_in=m.sqlite3_vtab_in)(e,t,n),i._sqlite3_vtab_rhs_value=(e,t,n)=>(i._sqlite3_vtab_rhs_value=m.sqlite3_vtab_rhs_value)(e,t,n),i._sqlite3_vtab_distinct=e=>(i._sqlite3_vtab_distinct=m.sqlite3_vtab_distinct)(e),i._sqlite3_keyword_name=(e,t,n)=>(i._sqlite3_keyword_name=m.sqlite3_keyword_name)(e,t,n),i._sqlite3_keyword_count=()=>(i._sqlite3_keyword_count=m.sqlite3_keyword_count)(),i._sqlite3_keyword_check=(e,t)=>(i._sqlite3_keyword_check=m.sqlite3_keyword_check)(e,t),i._sqlite3_complete=e=>(i._sqlite3_complete=m.sqlite3_complete)(e),i._sqlite3_libversion=()=>(i._sqlite3_libversion=m.sqlite3_libversion)(),i._sqlite3_libversion_number=()=>(i._sqlite3_libversion_number=m.sqlite3_libversion_number)(),i._sqlite3_shutdown=()=>(i._sqlite3_shutdown=m.sqlite3_shutdown)(),i._sqlite3_last_insert_rowid=e=>(i._sqlite3_last_insert_rowid=m.sqlite3_last_insert_rowid)(e),i._sqlite3_set_last_insert_rowid=(e,t)=>(i._sqlite3_set_last_insert_rowid=m.sqlite3_set_last_insert_rowid)(e,t),i._sqlite3_changes64=e=>(i._sqlite3_changes64=m.sqlite3_changes64)(e),i._sqlite3_changes=e=>(i._sqlite3_changes=m.sqlite3_changes)(e),i._sqlite3_total_changes64=e=>(i._sqlite3_total_changes64=m.sqlite3_total_changes64)(e),i._sqlite3_total_changes=e=>(i._sqlite3_total_changes=m.sqlite3_total_changes)(e),i._sqlite3_txn_state=(e,t)=>(i._sqlite3_txn_state=m.sqlite3_txn_state)(e,t),i._sqlite3_close_v2=e=>(i._sqlite3_close_v2=m.sqlite3_close_v2)(e),i._sqlite3_busy_handler=(e,t,n)=>(i._sqlite3_busy_handler=m.sqlite3_busy_handler)(e,t,n),i._sqlite3_progress_handler=(e,t,n,r)=>(i._sqlite3_progress_handler=m.sqlite3_progress_handler)(e,t,n,r),i._sqlite3_busy_timeout=(e,t)=>(i._sqlite3_busy_timeout=m.sqlite3_busy_timeout)(e,t),i._sqlite3_interrupt=e=>(i._sqlite3_interrupt=m.sqlite3_interrupt)(e),i._sqlite3_is_interrupted=e=>(i._sqlite3_is_interrupted=m.sqlite3_is_interrupted)(e),i._sqlite3_create_function=(e,t,n,r,s,o,p,g)=>(i._sqlite3_create_function=m.sqlite3_create_function)(e,t,n,r,s,o,p,g),i._sqlite3_create_function_v2=(e,t,n,r,s,o,p,g,P)=>(i._sqlite3_create_function_v2=m.sqlite3_create_function_v2)(e,t,n,r,s,o,p,g,P),i._sqlite3_create_window_function=(e,t,n,r,s,o,p,g,P,R)=>(i._sqlite3_create_window_function=m.sqlite3_create_window_function)(e,t,n,r,s,o,p,g,P,R),i._sqlite3_overload_function=(e,t,n)=>(i._sqlite3_overload_function=m.sqlite3_overload_function)(e,t,n),i._sqlite3_trace_v2=(e,t,n,r)=>(i._sqlite3_trace_v2=m.sqlite3_trace_v2)(e,t,n,r),i._sqlite3_commit_hook=(e,t,n)=>(i._sqlite3_commit_hook=m.sqlite3_commit_hook)(e,t,n),i._sqlite3_update_hook=(e,t,n)=>(i._sqlite3_update_hook=m.sqlite3_update_hook)(e,t,n),i._sqlite3_rollback_hook=(e,t,n)=>(i._sqlite3_rollback_hook=m.sqlite3_rollback_hook)(e,t,n),i._sqlite3_preupdate_hook=(e,t,n)=>(i._sqlite3_preupdate_hook=m.sqlite3_preupdate_hook)(e,t,n),i._sqlite3_error_offset=e=>(i._sqlite3_error_offset=m.sqlite3_error_offset)(e),i._sqlite3_errcode=e=>(i._sqlite3_errcode=m.sqlite3_errcode)(e),i._sqlite3_extended_errcode=e=>(i._sqlite3_extended_errcode=m.sqlite3_extended_errcode)(e),i._sqlite3_errstr=e=>(i._sqlite3_errstr=m.sqlite3_errstr)(e),i._sqlite3_limit=(e,t,n)=>(i._sqlite3_limit=m.sqlite3_limit)(e,t,n),i._sqlite3_open=(e,t)=>(i._sqlite3_open=m.sqlite3_open)(e,t),i._sqlite3_open_v2=(e,t,n,r)=>(i._sqlite3_open_v2=m.sqlite3_open_v2)(e,t,n,r),i._sqlite3_create_collation=(e,t,n,r,s)=>(i._sqlite3_create_collation=m.sqlite3_create_collation)(e,t,n,r,s),i._sqlite3_create_collation_v2=(e,t,n,r,s,o)=>(i._sqlite3_create_collation_v2=m.sqlite3_create_collation_v2)(e,t,n,r,s,o),i._sqlite3_collation_needed=(e,t,n)=>(i._sqlite3_collation_needed=m.sqlite3_collation_needed)(e,t,n),i._sqlite3_get_autocommit=e=>(i._sqlite3_get_autocommit=m.sqlite3_get_autocommit)(e),i._sqlite3_table_column_metadata=(e,t,n,r,s,o,p,g,P)=>(i._sqlite3_table_column_metadata=m.sqlite3_table_column_metadata)(e,t,n,r,s,o,p,g,P),i._sqlite3_extended_result_codes=(e,t)=>(i._sqlite3_extended_result_codes=m.sqlite3_extended_result_codes)(e,t),i._sqlite3_uri_key=(e,t)=>(i._sqlite3_uri_key=m.sqlite3_uri_key)(e,t),i._sqlite3_uri_int64=(e,t,n)=>(i._sqlite3_uri_int64=m.sqlite3_uri_int64)(e,t,n),i._sqlite3_db_name=(e,t)=>(i._sqlite3_db_name=m.sqlite3_db_name)(e,t),i._sqlite3_db_filename=(e,t)=>(i._sqlite3_db_filename=m.sqlite3_db_filename)(e,t),i._sqlite3_db_readonly=(e,t)=>(i._sqlite3_db_readonly=m.sqlite3_db_readonly)(e,t),i._sqlite3_compileoption_used=e=>(i._sqlite3_compileoption_used=m.sqlite3_compileoption_used)(e),i._sqlite3_compileoption_get=e=>(i._sqlite3_compileoption_get=m.sqlite3_compileoption_get)(e),i._sqlite3session_diff=(e,t,n,r)=>(i._sqlite3session_diff=m.sqlite3session_diff)(e,t,n,r),i._sqlite3session_attach=(e,t)=>(i._sqlite3session_attach=m.sqlite3session_attach)(e,t),i._sqlite3session_create=(e,t,n)=>(i._sqlite3session_create=m.sqlite3session_create)(e,t,n),i._sqlite3session_delete=e=>(i._sqlite3session_delete=m.sqlite3session_delete)(e),i._sqlite3session_table_filter=(e,t,n)=>(i._sqlite3session_table_filter=m.sqlite3session_table_filter)(e,t,n),i._sqlite3session_changeset=(e,t,n)=>(i._sqlite3session_changeset=m.sqlite3session_changeset)(e,t,n),i._sqlite3session_changeset_strm=(e,t,n)=>(i._sqlite3session_changeset_strm=m.sqlite3session_changeset_strm)(e,t,n),i._sqlite3session_patchset_strm=(e,t,n)=>(i._sqlite3session_patchset_strm=m.sqlite3session_patchset_strm)(e,t,n),i._sqlite3session_patchset=(e,t,n)=>(i._sqlite3session_patchset=m.sqlite3session_patchset)(e,t,n),i._sqlite3session_enable=(e,t)=>(i._sqlite3session_enable=m.sqlite3session_enable)(e,t),i._sqlite3session_indirect=(e,t)=>(i._sqlite3session_indirect=m.sqlite3session_indirect)(e,t),i._sqlite3session_isempty=e=>(i._sqlite3session_isempty=m.sqlite3session_isempty)(e),i._sqlite3session_memory_used=e=>(i._sqlite3session_memory_used=m.sqlite3session_memory_used)(e),i._sqlite3session_object_config=(e,t,n)=>(i._sqlite3session_object_config=m.sqlite3session_object_config)(e,t,n),i._sqlite3session_changeset_size=e=>(i._sqlite3session_changeset_size=m.sqlite3session_changeset_size)(e),i._sqlite3changeset_start=(e,t,n)=>(i._sqlite3changeset_start=m.sqlite3changeset_start)(e,t,n),i._sqlite3changeset_start_v2=(e,t,n,r)=>(i._sqlite3changeset_start_v2=m.sqlite3changeset_start_v2)(e,t,n,r),i._sqlite3changeset_start_strm=(e,t,n)=>(i._sqlite3changeset_start_strm=m.sqlite3changeset_start_strm)(e,t,n),i._sqlite3changeset_start_v2_strm=(e,t,n,r)=>(i._sqlite3changeset_start_v2_strm=m.sqlite3changeset_start_v2_strm)(e,t,n,r),i._sqlite3changeset_next=e=>(i._sqlite3changeset_next=m.sqlite3changeset_next)(e),i._sqlite3changeset_op=(e,t,n,r,s)=>(i._sqlite3changeset_op=m.sqlite3changeset_op)(e,t,n,r,s),i._sqlite3changeset_pk=(e,t,n)=>(i._sqlite3changeset_pk=m.sqlite3changeset_pk)(e,t,n),i._sqlite3changeset_old=(e,t,n)=>(i._sqlite3changeset_old=m.sqlite3changeset_old)(e,t,n),i._sqlite3changeset_new=(e,t,n)=>(i._sqlite3changeset_new=m.sqlite3changeset_new)(e,t,n),i._sqlite3changeset_conflict=(e,t,n)=>(i._sqlite3changeset_conflict=m.sqlite3changeset_conflict)(e,t,n),i._sqlite3changeset_fk_conflicts=(e,t)=>(i._sqlite3changeset_fk_conflicts=m.sqlite3changeset_fk_conflicts)(e,t),i._sqlite3changeset_finalize=e=>(i._sqlite3changeset_finalize=m.sqlite3changeset_finalize)(e),i._sqlite3changeset_invert=(e,t,n,r)=>(i._sqlite3changeset_invert=m.sqlite3changeset_invert)(e,t,n,r),i._sqlite3changeset_invert_strm=(e,t,n,r)=>(i._sqlite3changeset_invert_strm=m.sqlite3changeset_invert_strm)(e,t,n,r),i._sqlite3changeset_apply_v2=(e,t,n,r,s,o,p,g,P)=>(i._sqlite3changeset_apply_v2=m.sqlite3changeset_apply_v2)(e,t,n,r,s,o,p,g,P),i._sqlite3changeset_apply=(e,t,n,r,s,o)=>(i._sqlite3changeset_apply=m.sqlite3changeset_apply)(e,t,n,r,s,o),i._sqlite3changeset_apply_v2_strm=(e,t,n,r,s,o,p,g,P)=>(i._sqlite3changeset_apply_v2_strm=m.sqlite3changeset_apply_v2_strm)(e,t,n,r,s,o,p,g,P),i._sqlite3changeset_apply_strm=(e,t,n,r,s,o)=>(i._sqlite3changeset_apply_strm=m.sqlite3changeset_apply_strm)(e,t,n,r,s,o),i._sqlite3changegroup_new=e=>(i._sqlite3changegroup_new=m.sqlite3changegroup_new)(e),i._sqlite3changegroup_add=(e,t,n)=>(i._sqlite3changegroup_add=m.sqlite3changegroup_add)(e,t,n),i._sqlite3changegroup_output=(e,t,n)=>(i._sqlite3changegroup_output=m.sqlite3changegroup_output)(e,t,n),i._sqlite3changegroup_add_strm=(e,t,n)=>(i._sqlite3changegroup_add_strm=m.sqlite3changegroup_add_strm)(e,t,n),i._sqlite3changegroup_output_strm=(e,t,n)=>(i._sqlite3changegroup_output_strm=m.sqlite3changegroup_output_strm)(e,t,n),i._sqlite3changegroup_delete=e=>(i._sqlite3changegroup_delete=m.sqlite3changegroup_delete)(e),i._sqlite3changeset_concat=(e,t,n,r,s,o)=>(i._sqlite3changeset_concat=m.sqlite3changeset_concat)(e,t,n,r,s,o),i._sqlite3changeset_concat_strm=(e,t,n,r,s,o)=>(i._sqlite3changeset_concat_strm=m.sqlite3changeset_concat_strm)(e,t,n,r,s,o),i._sqlite3session_config=(e,t)=>(i._sqlite3session_config=m.sqlite3session_config)(e,t),i._sqlite3_sourceid=()=>(i._sqlite3_sourceid=m.sqlite3_sourceid)(),i._sqlite3__wasm_pstack_ptr=()=>(i._sqlite3__wasm_pstack_ptr=m.sqlite3__wasm_pstack_ptr)(),i._sqlite3__wasm_pstack_restore=e=>(i._sqlite3__wasm_pstack_restore=m.sqlite3__wasm_pstack_restore)(e),i._sqlite3__wasm_pstack_alloc=e=>(i._sqlite3__wasm_pstack_alloc=m.sqlite3__wasm_pstack_alloc)(e),i._sqlite3__wasm_pstack_remaining=()=>(i._sqlite3__wasm_pstack_remaining=m.sqlite3__wasm_pstack_remaining)(),i._sqlite3__wasm_pstack_quota=()=>(i._sqlite3__wasm_pstack_quota=m.sqlite3__wasm_pstack_quota)(),i._sqlite3__wasm_db_error=(e,t,n)=>(i._sqlite3__wasm_db_error=m.sqlite3__wasm_db_error)(e,t,n),i._sqlite3__wasm_test_struct=e=>(i._sqlite3__wasm_test_struct=m.sqlite3__wasm_test_struct)(e),i._sqlite3__wasm_enum_json=()=>(i._sqlite3__wasm_enum_json=m.sqlite3__wasm_enum_json)(),i._sqlite3__wasm_vfs_unlink=(e,t)=>(i._sqlite3__wasm_vfs_unlink=m.sqlite3__wasm_vfs_unlink)(e,t),i._sqlite3__wasm_db_vfs=(e,t)=>(i._sqlite3__wasm_db_vfs=m.sqlite3__wasm_db_vfs)(e,t),i._sqlite3__wasm_db_reset=e=>(i._sqlite3__wasm_db_reset=m.sqlite3__wasm_db_reset)(e),i._sqlite3__wasm_db_export_chunked=(e,t)=>(i._sqlite3__wasm_db_export_chunked=m.sqlite3__wasm_db_export_chunked)(e,t),i._sqlite3__wasm_db_serialize=(e,t,n,r,s)=>(i._sqlite3__wasm_db_serialize=m.sqlite3__wasm_db_serialize)(e,t,n,r,s),i._sqlite3__wasm_vfs_create_file=(e,t,n,r)=>(i._sqlite3__wasm_vfs_create_file=m.sqlite3__wasm_vfs_create_file)(e,t,n,r),i._sqlite3__wasm_posix_create_file=(e,t,n)=>(i._sqlite3__wasm_posix_create_file=m.sqlite3__wasm_posix_create_file)(e,t,n),i._sqlite3__wasm_kvvfsMakeKeyOnPstack=(e,t)=>(i._sqlite3__wasm_kvvfsMakeKeyOnPstack=m.sqlite3__wasm_kvvfsMakeKeyOnPstack)(e,t),i._sqlite3__wasm_kvvfs_methods=()=>(i._sqlite3__wasm_kvvfs_methods=m.sqlite3__wasm_kvvfs_methods)(),i._sqlite3__wasm_vtab_config=(e,t,n)=>(i._sqlite3__wasm_vtab_config=m.sqlite3__wasm_vtab_config)(e,t,n),i._sqlite3__wasm_db_config_ip=(e,t,n,r)=>(i._sqlite3__wasm_db_config_ip=m.sqlite3__wasm_db_config_ip)(e,t,n,r),i._sqlite3__wasm_db_config_pii=(e,t,n,r,s)=>(i._sqlite3__wasm_db_config_pii=m.sqlite3__wasm_db_config_pii)(e,t,n,r,s),i._sqlite3__wasm_db_config_s=(e,t,n)=>(i._sqlite3__wasm_db_config_s=m.sqlite3__wasm_db_config_s)(e,t,n),i._sqlite3__wasm_config_i=(e,t)=>(i._sqlite3__wasm_config_i=m.sqlite3__wasm_config_i)(e,t),i._sqlite3__wasm_config_ii=(e,t,n)=>(i._sqlite3__wasm_config_ii=m.sqlite3__wasm_config_ii)(e,t,n),i._sqlite3__wasm_config_j=(e,t)=>(i._sqlite3__wasm_config_j=m.sqlite3__wasm_config_j)(e,t),i._sqlite3__wasm_qfmt_token=(e,t)=>(i._sqlite3__wasm_qfmt_token=m.sqlite3__wasm_qfmt_token)(e,t),i._sqlite3__wasm_init_wasmfs=e=>(i._sqlite3__wasm_init_wasmfs=m.sqlite3__wasm_init_wasmfs)(e),i._sqlite3__wasm_test_intptr=e=>(i._sqlite3__wasm_test_intptr=m.sqlite3__wasm_test_intptr)(e),i._sqlite3__wasm_test_voidptr=e=>(i._sqlite3__wasm_test_voidptr=m.sqlite3__wasm_test_voidptr)(e),i._sqlite3__wasm_test_int64_max=()=>(i._sqlite3__wasm_test_int64_max=m.sqlite3__wasm_test_int64_max)(),i._sqlite3__wasm_test_int64_min=()=>(i._sqlite3__wasm_test_int64_min=m.sqlite3__wasm_test_int64_min)(),i._sqlite3__wasm_test_int64_times2=e=>(i._sqlite3__wasm_test_int64_times2=m.sqlite3__wasm_test_int64_times2)(e),i._sqlite3__wasm_test_int64_minmax=(e,t)=>(i._sqlite3__wasm_test_int64_minmax=m.sqlite3__wasm_test_int64_minmax)(e,t),i._sqlite3__wasm_test_int64ptr=e=>(i._sqlite3__wasm_test_int64ptr=m.sqlite3__wasm_test_int64ptr)(e),i._sqlite3__wasm_test_stack_overflow=e=>(i._sqlite3__wasm_test_stack_overflow=m.sqlite3__wasm_test_stack_overflow)(e),i._sqlite3__wasm_test_str_hello=e=>(i._sqlite3__wasm_test_str_hello=m.sqlite3__wasm_test_str_hello)(e),i._sqlite3__wasm_SQLTester_strglob=(e,t)=>(i._sqlite3__wasm_SQLTester_strglob=m.sqlite3__wasm_SQLTester_strglob)(e,t),i._malloc=e=>(i._malloc=m.malloc)(e),i._free=e=>(i._free=m.free)(e),i._realloc=(e,t)=>(i._realloc=m.realloc)(e,t);var At=(e,t)=>(At=m.emscripten_builtin_memalign)(e,t);i.wasmMemory=Ce;var tt,It;Ge=function e(){tt||kt(),tt||(Ge=e)};function kt(){if(De>0||!It&&(It=1,Ot(),De>0))return;function e(){tt||(tt=1,i.calledRun=1,!ut&&(Lt(),ye(i),i.onRuntimeInitialized?.(),Ct()))}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),e()},1)):e()}if(i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return kt(),i.runSQLite3PostLoadInit=function(e){if(globalThis.sqlite3ApiBootstrap=function t(n=globalThis.sqlite3ApiConfig||t.defaultConfig){if(t.sqlite3)return(t.sqlite3.config||console).warn("sqlite3ApiBootstrap() called multiple times.","Config and external initializers are ignored on calls after the first."),t.sqlite3;const r=Object.assign(Object.create(null),{exports:void 0,memory:void 0,bigIntEnabled:typeof i<"u"&&i.HEAPU64?!0:!!globalThis.BigInt64Array,debug:console.debug.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),log:console.log.bind(console),wasmfsOpfsDir:"/opfs",useStdAlloc:!1},n||{});Object.assign(r,{allocExportName:r.useStdAlloc?"malloc":"sqlite3_malloc",deallocExportName:r.useStdAlloc?"free":"sqlite3_free",reallocExportName:r.useStdAlloc?"realloc":"sqlite3_realloc"},r),["exports","memory","wasmfsOpfsDir"].forEach(l=>{typeof r[l]=="function"&&(r[l]=r[l]())}),delete globalThis.sqlite3ApiConfig,delete t.defaultConfig;const s=Object.create(null),o=Object.create(null),p=l=>s.sqlite3_js_rc_str&&s.sqlite3_js_rc_str(l)||"Unknown result code #"+l,g=l=>typeof l=="number"&&l===(l|0);class P extends Error{constructor(..._){let u;if(_.length)if(g(_[0]))if(u=_[0],_.length===1)super(p(_[0]));else{const I=p(u);typeof _[1]=="object"?super(I,_[1]):(_[0]=I+":",super(_.join(" ")))}else _.length===2&&typeof _[1]=="object"?super(..._):super(_.join(" "));this.resultCode=u||s.SQLITE_ERROR,this.name="SQLite3Error"}}P.toss=(...l)=>{throw new P(...l)};const R=P.toss;r.wasmfsOpfsDir&&!/^\/[^/]+$/.test(r.wasmfsOpfsDir)&&R("config.wasmfsOpfsDir must be falsy or in the form '/dir-name'.");const z=l=>typeof l!="bigint"&&l===(l|0)&&l<=2147483647&&l>=-2147483648,Q=function l(_){return l._max||(l._max=BigInt("0x7fffffffffffffff"),l._min=~l._max),_>=l._min&&_<=l._max},T=l=>l>=-0x7fffffffn-1n&&l<=0x7fffffffn,A=function l(_){return l._min||(l._min=Number.MIN_SAFE_INTEGER,l._max=Number.MAX_SAFE_INTEGER),_>=l._min&&_<=l._max},D=l=>l&&l.constructor&&z(l.constructor.BYTES_PER_ELEMENT)?l:!1,q=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,w=l=>l.buffer instanceof q,x=(l,_,u)=>w(l)?l.slice(_,u):l.subarray(_,u),N=l=>l&&(l instanceof Uint8Array||l instanceof Int8Array||l instanceof ArrayBuffer),O=l=>l&&(l instanceof Uint8Array||l instanceof Int8Array||l instanceof ArrayBuffer),S=l=>N(l)||R("Value is not of a supported TypedArray type."),L=new TextDecoder("utf-8"),$=function(l,_,u){return L.decode(x(l,_,u))},c=function(l){return O(l)?$(l instanceof ArrayBuffer?new Uint8Array(l):l):Array.isArray(l)?l.join(""):(o.isPtr(l)&&(l=o.cstrToJs(l)),l)};class d extends Error{constructor(..._){_.length===2&&typeof _[1]=="object"?super(..._):_.length?super(_.join(" ")):super("Allocation failed."),this.resultCode=s.SQLITE_NOMEM,this.name="WasmAllocError"}}d.toss=(...l)=>{throw new d(...l)},Object.assign(s,{sqlite3_bind_blob:void 0,sqlite3_bind_text:void 0,sqlite3_create_function_v2:(l,_,u,I,U,ee,ne,se,ie)=>{},sqlite3_create_function:(l,_,u,I,U,ee,ne,se)=>{},sqlite3_create_window_function:(l,_,u,I,U,ee,ne,se,ie,j)=>{},sqlite3_prepare_v3:(l,_,u,I,U,ee)=>{},sqlite3_prepare_v2:(l,_,u,I,U)=>{},sqlite3_exec:(l,_,u,I,U)=>{},sqlite3_randomness:(l,_)=>{}});const y={affirmBindableTypedArray:S,flexibleString:c,bigIntFits32:T,bigIntFits64:Q,bigIntFitsDouble:A,isBindableTypedArray:N,isInt32:z,isSQLableTypedArray:O,isTypedArray:D,typedArrayToString:$,isUIThread:()=>globalThis.window===globalThis&&!!globalThis.document,isSharedTypedArray:w,toss:function(...l){throw new Error(l.join(" "))},toss3:R,typedArrayPart:x,affirmDbHeader:function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));const _="SQLite format 3";_.length>l.byteLength&&R("Input does not contain an SQLite3 database header.");for(let u=0;u<_.length;++u)_.charCodeAt(u)!==l[u]&&R("Input does not contain an SQLite3 database header.")},affirmIsDb:function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));const _=l.byteLength;(_<512||_%512!==0)&&R("Byte array size",_,"is invalid for an SQLite3 db."),y.affirmDbHeader(l)}};Object.assign(o,{ptrSizeof:r.wasmPtrSizeof||4,ptrIR:r.wasmPtrIR||"i32",bigIntEnabled:!!r.bigIntEnabled,exports:r.exports||R("Missing API config.exports (WASM module exports)."),memory:r.memory||r.exports.memory||R("API config object requires a WebAssembly.Memory object","in either config.exports.memory (exported)","or config.memory (imported)."),alloc:void 0,realloc:void 0,dealloc:void 0}),o.allocFromTypedArray=function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l)),S(l);const _=o.alloc(l.byteLength||1);return o.heapForSize(l.constructor).set(l.byteLength?l:[0],_),_};{const l=r.allocExportName,_=r.deallocExportName,u=r.reallocExportName;for(const I of[l,_,u])o.exports[I]instanceof Function||R("Missing required exports[",I,"] function.");o.alloc=function I(U){return I.impl(U)||d.toss("Failed to allocate",U," bytes.")},o.alloc.impl=o.exports[l],o.realloc=function I(U,ee){const ne=I.impl(U,ee);return ee?ne||d.toss("Failed to reallocate",ee," bytes."):0},o.realloc.impl=o.exports[u],o.dealloc=o.exports[_]}o.compileOptionUsed=function l(_){if(arguments.length){if(Array.isArray(_)){const u={};return _.forEach(I=>{u[I]=s.sqlite3_compileoption_used(I)}),u}else if(typeof _=="object")return Object.keys(_).forEach(u=>{_[u]=s.sqlite3_compileoption_used(u)}),_}else{if(l._result)return l._result;l._opt||(l._rx=/^([^=]+)=(.+)/,l._rxInt=/^-?\d+$/,l._opt=function(ne,se){const ie=l._rx.exec(ne);se[0]=ie?ie[1]:ne,se[1]=ie?l._rxInt.test(ie[2])?+ie[2]:ie[2]:!0});const u={},I=[0,0];let U=0,ee;for(;ee=s.sqlite3_compileoption_get(U++);)l._opt(ee,I),u[I[0]]=I[1];return l._result=u}return typeof _=="string"?!!s.sqlite3_compileoption_used(_):!1},o.pstack=Object.assign(Object.create(null),{restore:o.exports.sqlite3__wasm_pstack_restore,alloc:function(l){return typeof l=="string"&&!(l=o.sizeofIR(l))&&d.toss("Invalid value for pstack.alloc(",arguments[0],")"),o.exports.sqlite3__wasm_pstack_alloc(l)||d.toss("Could not allocate",l,"bytes from the pstack.")},allocChunks:function(l,_){typeof _=="string"&&!(_=o.sizeofIR(_))&&d.toss("Invalid size value for allocChunks(",arguments[1],")");const u=o.pstack.alloc(l*_),I=[];let U=0,ee=0;for(;Ul===1?o.pstack.alloc(_?8:o.ptrSizeof):o.pstack.allocChunks(l,_?8:o.ptrSizeof),call:function(l){const _=o.pstack.pointer;try{return l(h)}finally{o.pstack.restore(_)}}}),Object.defineProperties(o.pstack,{pointer:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_ptr},quota:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_quota},remaining:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_remaining}}),s.sqlite3_randomness=(...l)=>{if(l.length===1&&y.isTypedArray(l[0])&&l[0].BYTES_PER_ELEMENT===1){const _=l[0];if(_.byteLength===0)return o.exports.sqlite3_randomness(0,0),_;const u=o.pstack.pointer;try{let I=_.byteLength,U=0;const ee=o.exports.sqlite3_randomness,ne=o.heap8u(),se=I<512?I:512,ie=o.pstack.alloc(se);do{const j=I>se?se:I;ee(j,ie),_.set(x(ne,ie,ie+j),U),I-=j,U+=j}while(I>0)}catch(I){console.error("Highly unexpected (and ignored!) exception in sqlite3_randomness():",I)}finally{o.pstack.restore(u)}return _}o.exports.sqlite3_randomness(...l)};let B;if(s.sqlite3_wasmfs_opfs_dir=function(){if(B!==void 0)return B;const l=r.wasmfsOpfsDir;if(!l||!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle)return B="";try{return l&&o.xCallWrapped("sqlite3__wasm_init_wasmfs","i32",["string"],l)===0?B=l:B=""}catch{return B=""}},s.sqlite3_wasmfs_filename_is_persistent=function(l){const _=s.sqlite3_wasmfs_opfs_dir();return _&&l?l.startsWith(_+"/"):!1},s.sqlite3_js_db_uses_vfs=function(l,_,u=0){try{const I=s.sqlite3_vfs_find(_);return I?l?I===s.sqlite3_js_db_vfs(l,u)?I:!1:I===s.sqlite3_vfs_find(0)?I:!1:!1}catch{return!1}},s.sqlite3_js_vfs_list=function(){const l=[];let _=s.sqlite3_vfs_find(0);for(;_;){const u=new s.sqlite3_vfs(_);l.push(o.cstrToJs(u.$zName)),_=u.$pNext,u.dispose()}return l},s.sqlite3_js_db_export=function(l,_=0){l=o.xWrap.testConvertArg("sqlite3*",l),l||R("Invalid sqlite3* argument."),o.bigIntEnabled||R("BigInt64 support is not enabled.");const u=o.scopedAllocPush();let I;try{const U=o.scopedAlloc(8+o.ptrSizeof),ee=U+8,ne=_?o.isPtr(_)?_:o.scopedAllocCString(""+_):0;let se=o.exports.sqlite3__wasm_db_serialize(l,ne,ee,U,0);se&&R("Database serialization failed with code",h.capi.sqlite3_js_rc_str(se)),I=o.peekPtr(ee);const ie=o.peek(U,"i64");return se=ie?o.heap8u().slice(I,I+Number(ie)):new Uint8Array,se}finally{I&&o.exports.sqlite3_free(I),o.scopedAllocPop(u)}},s.sqlite3_js_db_vfs=(l,_=0)=>y.sqlite3__wasm_db_vfs(l,_),s.sqlite3_js_aggregate_context=(l,_)=>s.sqlite3_aggregate_context(l,_)||(_?d.toss("Cannot allocate",_,"bytes for sqlite3_aggregate_context()"):0),s.sqlite3_js_posix_create_file=function(l,_,u){let I;_&&o.isPtr(_)?I=_:_ instanceof ArrayBuffer||_ instanceof Uint8Array?(I=o.allocFromTypedArray(_),(arguments.length<3||!y.isInt32(u)||u<0)&&(u=_.byteLength)):P.toss("Invalid 2nd argument for sqlite3_js_posix_create_file().");try{(!y.isInt32(u)||u<0)&&P.toss("Invalid 3rd argument for sqlite3_js_posix_create_file().");const U=y.sqlite3__wasm_posix_create_file(l,I,u);U&&P.toss("Creation of file failed with sqlite3 result code",s.sqlite3_js_rc_str(U))}finally{o.dealloc(I)}},s.sqlite3_js_vfs_create_file=function(l,_,u,I){r.warn("sqlite3_js_vfs_create_file() is deprecated and","should be avoided because it can lead to C-level crashes.","See its documentation for alternative options.");let U;u?(o.isPtr(u)?U=u:u instanceof ArrayBuffer&&(u=new Uint8Array(u)),u instanceof Uint8Array?(U=o.allocFromTypedArray(u),(arguments.length<4||!y.isInt32(I)||I<0)&&(I=u.byteLength)):P.toss("Invalid 3rd argument type for sqlite3_js_vfs_create_file().")):U=0,(!y.isInt32(I)||I<0)&&(o.dealloc(U),P.toss("Invalid 4th argument for sqlite3_js_vfs_create_file()."));try{const ee=y.sqlite3__wasm_vfs_create_file(l,_,U,I);ee&&P.toss("Creation of file failed with sqlite3 result code",s.sqlite3_js_rc_str(ee))}finally{o.dealloc(U)}},s.sqlite3_js_sql_to_string=l=>{if(typeof l=="string")return l;const _=c(v);return _===v?void 0:_},y.isUIThread()){const l=function(_){const u=Object.create(null);return u.prefix="kvvfs-"+_,u.stores=[],(_==="session"||_==="")&&u.stores.push(globalThis.sessionStorage),(_==="local"||_==="")&&u.stores.push(globalThis.localStorage),u};s.sqlite3_js_kvvfs_clear=function(_=""){let u=0;const I=l(_);return I.stores.forEach(U=>{const ee=[];let ne;for(ne=0;neU.removeItem(se)),u+=ee.length}),u},s.sqlite3_js_kvvfs_size=function(_=""){let u=0;const I=l(_);return I.stores.forEach(U=>{let ee;for(ee=0;eef(l,_,"sqlite3_preupdate_new"),s.sqlite3_preupdate_old_js=(l,_)=>f(l,_,"sqlite3_preupdate_old"),s.sqlite3changeset_new_js=(l,_)=>f(l,_,"sqlite3changeset_new"),s.sqlite3changeset_old_js=(l,_)=>f(l,_,"sqlite3changeset_old");const h={WasmAllocError:d,SQLite3Error:P,capi:s,util:y,wasm:o,config:r,version:Object.create(null),client:void 0,asyncPostInit:async function l(){if(l.isReady instanceof Promise)return l.isReady;let _=t.initializersAsync;delete t.initializersAsync;const u=async()=>(h.__isUnderTest||(delete h.util,delete h.StructBinder),h),I=ee=>{throw r.error("an async sqlite3 initializer failed:",ee),ee};if(!_||!_.length)return l.isReady=u().catch(I);_=_.map(ee=>ee instanceof Function?async ne=>ee(h):ee),_.push(u);let U=Promise.resolve(h);for(;_.length;)U=U.then(_.shift());return l.isReady=U.catch(I)},scriptInfo:void 0};try{t.initializers.forEach(l=>{l(h)})}catch(l){throw console.error("sqlite3 bootstrap initializer threw:",l),l}return delete t.initializers,t.sqlite3=h,h},globalThis.sqlite3ApiBootstrap.initializers=[],globalThis.sqlite3ApiBootstrap.initializersAsync=[],globalThis.sqlite3ApiBootstrap.defaultConfig=Object.create(null),globalThis.sqlite3ApiBootstrap.sqlite3=void 0,globalThis.WhWasmUtilInstaller=function(t){t.bigIntEnabled===void 0&&(t.bigIntEnabled=!!globalThis.BigInt64Array);const n=(...c)=>{throw new Error(c.join(" "))};t.exports||Object.defineProperty(t,"exports",{enumerable:!0,configurable:!0,get:()=>t.instance&&t.instance.exports});const r=t.pointerIR||"i32",s=t.ptrSizeof=r==="i32"?4:r==="i64"?8:n("Unhandled ptrSizeof:",r),o=Object.create(null);o.heapSize=0,o.memory=null,o.freeFuncIndexes=[],o.scopedAlloc=[],o.utf8Decoder=new TextDecoder,o.utf8Encoder=new TextEncoder("utf-8"),t.sizeofIR=c=>{switch(c){case"i8":return 1;case"i16":return 2;case"i32":case"f32":case"float":return 4;case"i64":case"f64":case"double":return 8;case"*":return s;default:return(""+c).endsWith("*")?s:void 0}};const p=function(){if(!o.memory)o.memory=t.memory instanceof WebAssembly.Memory?t.memory:t.exports.memory;else if(o.heapSize===o.memory.buffer.byteLength)return o;const c=o.memory.buffer;return o.HEAP8=new Int8Array(c),o.HEAP8U=new Uint8Array(c),o.HEAP16=new Int16Array(c),o.HEAP16U=new Uint16Array(c),o.HEAP32=new Int32Array(c),o.HEAP32U=new Uint32Array(c),t.bigIntEnabled&&(o.HEAP64=new BigInt64Array(c),o.HEAP64U=new BigUint64Array(c)),o.HEAP32F=new Float32Array(c),o.HEAP64F=new Float64Array(c),o.heapSize=c.byteLength,o};t.heap8=()=>p().HEAP8,t.heap8u=()=>p().HEAP8U,t.heap16=()=>p().HEAP16,t.heap16u=()=>p().HEAP16U,t.heap32=()=>p().HEAP32,t.heap32u=()=>p().HEAP32U,t.heapForSize=function(c,d=!0){const y=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p();switch(c){case Int8Array:return y.HEAP8;case Uint8Array:return y.HEAP8U;case Int16Array:return y.HEAP16;case Uint16Array:return y.HEAP16U;case Int32Array:return y.HEAP32;case Uint32Array:return y.HEAP32U;case 8:return d?y.HEAP8U:y.HEAP8;case 16:return d?y.HEAP16U:y.HEAP16;case 32:return d?y.HEAP32U:y.HEAP32;case 64:if(y.HEAP64)return d?y.HEAP64U:y.HEAP64;break;default:if(t.bigIntEnabled){if(c===globalThis.BigUint64Array)return y.HEAP64U;if(c===globalThis.BigInt64Array)return y.HEAP64;break}}n("Invalid heapForSize() size: expecting 8, 16, 32,","or (if BigInt is enabled) 64.")},t.functionTable=function(){return t.exports.__indirect_function_table},t.functionEntry=function(c){const d=t.functionTable();return c>7)},rxJSig:/^(\w)\((\w*)\)$/,sigParams:function(h){const l=c._.rxJSig.exec(h);return l?l[2]:h.substr(1)},letterType:h=>c._.sigTypes[h]||n("Invalid signature letter:",h),pushSigType:(h,l)=>h.push(c._.typeCodes[c._.letterType(l)])}),typeof d=="string"){const h=y;y=d,d=h}const B=c._.sigParams(y),f=[1,96];c._.uleb128Encode(f,"push",B.length);for(const h of B)c._.pushSigType(f,h);return y[0]==="v"?f.push(0):(f.push(1),c._.pushSigType(f,y[0])),c._.uleb128Encode(f,"unshift",f.length),f.unshift(0,97,115,109,1,0,0,0,1),f.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array(f)),{e:{f:d}}).exports.f};const g=function(d,y,B){if(B&&!o.scopedAlloc.length&&n("No scopedAllocPush() scope is active."),typeof d=="string"){const _=y;y=d,d=_}(typeof y!="string"||!(d instanceof Function))&&n("Invalid arguments: expecting (function,signature) or (signature,function).");const f=t.functionTable(),h=f.length;let l;for(;o.freeFuncIndexes.length&&(l=o.freeFuncIndexes.pop(),f.get(l));){l=null;continue}l||(l=h,f.grow(1));try{return f.set(l,d),B&&o.scopedAlloc[o.scopedAlloc.length-1].push(l),l}catch(_){if(!(_ instanceof TypeError))throw l===h&&o.freeFuncIndexes.push(h),_}try{const _=t.jsFuncToWasm(d,y);f.set(l,_),B&&o.scopedAlloc[o.scopedAlloc.length-1].push(l)}catch(_){throw l===h&&o.freeFuncIndexes.push(h),_}return l};t.installFunction=(c,d)=>g(c,d,!1),t.scopedInstallFunction=(c,d)=>g(c,d,!0),t.uninstallFunction=function(c){if(!c&&c!==0)return;const d=o.freeFuncIndexes,y=t.functionTable();d.push(c);const B=y.get(c);return y.set(c,null),B},t.peek=function(d,y="i8"){y.endsWith("*")&&(y=r);const B=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p(),f=Array.isArray(d)?[]:void 0;let h;do{switch(f&&(d=arguments[0].shift()),y){case"i1":case"i8":h=B.HEAP8[d>>0];break;case"i16":h=B.HEAP16[d>>1];break;case"i32":h=B.HEAP32[d>>2];break;case"float":case"f32":h=B.HEAP32F[d>>2];break;case"double":case"f64":h=Number(B.HEAP64F[d>>3]);break;case"i64":if(t.bigIntEnabled){h=BigInt(B.HEAP64[d>>3]);break}default:n("Invalid type for peek():",y)}f&&f.push(h)}while(f&&arguments[0].length);return f||h},t.poke=function(c,d,y="i8"){y.endsWith("*")&&(y=r);const B=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p();for(const f of Array.isArray(c)?c:[c])switch(y){case"i1":case"i8":B.HEAP8[f>>0]=d;continue;case"i16":B.HEAP16[f>>1]=d;continue;case"i32":B.HEAP32[f>>2]=d;continue;case"float":case"f32":B.HEAP32F[f>>2]=d;continue;case"double":case"f64":B.HEAP64F[f>>3]=d;continue;case"i64":if(B.HEAP64){B.HEAP64[f>>3]=BigInt(d);continue}default:n("Invalid type for poke(): "+y)}return this},t.peekPtr=(...c)=>t.peek(c.length===1?c[0]:c,r),t.pokePtr=(c,d=0)=>t.poke(c,d,r),t.peek8=(...c)=>t.peek(c.length===1?c[0]:c,"i8"),t.poke8=(c,d)=>t.poke(c,d,"i8"),t.peek16=(...c)=>t.peek(c.length===1?c[0]:c,"i16"),t.poke16=(c,d)=>t.poke(c,d,"i16"),t.peek32=(...c)=>t.peek(c.length===1?c[0]:c,"i32"),t.poke32=(c,d)=>t.poke(c,d,"i32"),t.peek64=(...c)=>t.peek(c.length===1?c[0]:c,"i64"),t.poke64=(c,d)=>t.poke(c,d,"i64"),t.peek32f=(...c)=>t.peek(c.length===1?c[0]:c,"f32"),t.poke32f=(c,d)=>t.poke(c,d,"f32"),t.peek64f=(...c)=>t.peek(c.length===1?c[0]:c,"f64"),t.poke64f=(c,d)=>t.poke(c,d,"f64"),t.getMemValue=t.peek,t.getPtrValue=t.peekPtr,t.setMemValue=t.poke,t.setPtrValue=t.pokePtr,t.isPtr32=c=>typeof c=="number"&&c===(c|0)&&c>=0,t.isPtr=t.isPtr32,t.cstrlen=function(c){if(!c||!t.isPtr(c))return null;const d=p().HEAP8U;let y=c;for(;d[y]!==0;++y);return y-c};const P=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,R=function(c,d,y){return o.utf8Decoder.decode(c.buffer instanceof P?c.slice(d,y):c.subarray(d,y))};t.cstrToJs=function(c){const d=t.cstrlen(c);return d?R(p().HEAP8U,c,c+d):d===null?d:""},t.jstrlen=function(c){if(typeof c!="string")return null;const d=c.length;let y=0;for(let B=0;B=55296&&f<=57343&&(f=65536+((f&1023)<<10)|c.charCodeAt(++B)&1023),f<=127?++y:f<=2047?y+=2:f<=65535?y+=3:y+=4}return y},t.jstrcpy=function(c,d,y=0,B=-1,f=!0){if((!d||!(d instanceof Int8Array)&&!(d instanceof Uint8Array))&&n("jstrcpy() target must be an Int8Array or Uint8Array."),B<0&&(B=d.length-y),!(B>0)||!(y>=0))return 0;let h=0,l=c.length;const _=y,u=y+B-(f?1:0);for(;h=55296&&I<=57343&&(I=65536+((I&1023)<<10)|c.charCodeAt(++h)&1023),I<=127){if(y>=u)break;d[y++]=I}else if(I<=2047){if(y+1>=u)break;d[y++]=192|I>>6,d[y++]=128|I&63}else if(I<=65535){if(y+2>=u)break;d[y++]=224|I>>12,d[y++]=128|I>>6&63,d[y++]=128|I&63}else{if(y+3>=u)break;d[y++]=240|I>>18,d[y++]=128|I>>12&63,d[y++]=128|I>>6&63,d[y++]=128|I&63}}return f&&(d[y++]=0),y-_},t.cstrncpy=function(c,d,y){if((!c||!d)&&n("cstrncpy() does not accept NULL strings."),y<0)y=t.cstrlen(strPtr)+1;else if(!(y>0))return 0;const B=t.heap8u();let f=0,h;for(;fo.utf8Encoder.encode(d?c+"\0":c);const z=(c,d)=>{(!(c.alloc instanceof Function)||!(c.dealloc instanceof Function))&&n("Object is missing alloc() and/or dealloc() function(s)","required by",d+"().")},Q=function(c,d,y,B){if(z(t,B),typeof c!="string")return null;{const f=o.utf8Encoder.encode(c),h=y(f.length+1),l=p().HEAP8U;return l.set(f,h),l[h+f.length]=0,d?[h,f.length]:h}};t.allocCString=(c,d=!1)=>Q(c,d,t.alloc,"allocCString()"),t.scopedAllocPush=function(){z(t,"scopedAllocPush");const c=[];return o.scopedAlloc.push(c),c},t.scopedAllocPop=function(c){z(t,"scopedAllocPop");const d=arguments.length?o.scopedAlloc.indexOf(c):o.scopedAlloc.length-1;d<0&&n("Invalid state object for scopedAllocPop()."),arguments.length===0&&(c=o.scopedAlloc[d]),o.scopedAlloc.splice(d,1);for(let y;y=c.pop();)t.functionEntry(y)?t.uninstallFunction(y):t.dealloc(y)},t.scopedAlloc=function(c){o.scopedAlloc.length||n("No scopedAllocPush() scope is active.");const d=t.alloc(c);return o.scopedAlloc[o.scopedAlloc.length-1].push(d),d},Object.defineProperty(t.scopedAlloc,"level",{configurable:!1,enumerable:!1,get:()=>o.scopedAlloc.length,set:()=>n("The 'active' property is read-only.")}),t.scopedAllocCString=(c,d=!1)=>Q(c,d,t.scopedAlloc,"scopedAllocCString()");const T=function(c,d){const y=t[c?"scopedAlloc":"alloc"]((d.length+1)*t.ptrSizeof);let B=0;return d.forEach(f=>{t.pokePtr(y+t.ptrSizeof*B++,t[c?"scopedAllocCString":"allocCString"](""+f))}),t.pokePtr(y+t.ptrSizeof*B,0),y};t.scopedAllocMainArgv=c=>T(!0,c),t.allocMainArgv=c=>T(!1,c),t.cArgvToJs=(c,d)=>{const y=[];for(let B=0;BA(c,d,"alloc"),t.scopedAllocPtr=(c=1,d=!0)=>A(c,d,"scopedAlloc"),t.xGet=function(c){return t.exports[c]||n("Cannot find exported symbol:",c)};const D=(c,d)=>n(c+"() requires",d,"argument(s).");t.xCall=function(c,...d){const y=c instanceof Function?c:t.xGet(c);return y instanceof Function||n("Exported symbol",c,"is not a function."),y.length!==d.length&&D(y===c?y.name:c,y.length),arguments.length===2&&Array.isArray(arguments[1])?y.apply(null,arguments[1]):y.apply(null,d)},o.xWrap=Object.create(null),o.xWrap.convert=Object.create(null),o.xWrap.convert.arg=new Map,o.xWrap.convert.result=new Map;const q=o.xWrap.convert.arg,w=o.xWrap.convert.result;t.bigIntEnabled&&q.set("i64",c=>BigInt(c));const x=r==="i32"?c=>c|0:c=>BigInt(c)|BigInt(0);q.set("i32",x).set("i16",c=>(c|0)&65535).set("i8",c=>(c|0)&255).set("f32",c=>Number(c).valueOf()).set("float",q.get("f32")).set("f64",q.get("f32")).set("double",q.get("f64")).set("int",q.get("i32")).set("null",c=>c).set(null,q.get("null")).set("**",x).set("*",x),w.set("*",x).set("pointer",x).set("number",c=>Number(c)).set("void",c=>{}).set("null",c=>c).set(null,w.get("null"));{const c=["i8","i16","i32","int","f32","float","f64","double"];t.bigIntEnabled&&c.push("i64");const d=q.get(r);for(const y of c)q.set(y+"*",d),w.set(y+"*",d),w.set(y,q.get(y)||n("Missing arg converter:",y))}const N=function(c){return typeof c=="string"?t.scopedAllocCString(c):c?x(c):null};q.set("string",N).set("utf8",N).set("pointer",N),w.set("string",c=>t.cstrToJs(c)).set("utf8",w.get("string")).set("string:dealloc",c=>{try{return c?t.cstrToJs(c):null}finally{t.dealloc(c)}}).set("utf8:dealloc",w.get("string:dealloc")).set("json",c=>JSON.parse(t.cstrToJs(c))).set("json:dealloc",c=>{try{return c?JSON.parse(t.cstrToJs(c)):null}finally{t.dealloc(c)}});const O=class{constructor(c){this.name=c.name||"unnamed adapter"}convertArg(c,d,y){n("AbstractArgAdapter must be subclassed.")}};q.FuncPtrAdapter=class Te extends O{constructor(d){super(d),q.FuncPtrAdapter.warnOnUse&&console.warn("xArg.FuncPtrAdapter is an internal-only API","and is not intended to be invoked from","client-level code. Invoked with:",d),this.name=d.name||"unnamed",this.signature=d.signature,d.contextKey instanceof Function&&(this.contextKey=d.contextKey,d.bindScope||(d.bindScope="context")),this.bindScope=d.bindScope||n("FuncPtrAdapter options requires a bindScope (explicit or implied)."),Te.bindScopes.indexOf(d.bindScope)<0&&n("Invalid options.bindScope ("+d.bindMod+") for FuncPtrAdapter. Expecting one of: ("+Te.bindScopes.join(", ")+")"),this.isTransient=this.bindScope==="transient",this.isContext=this.bindScope==="context",this.isPermanent=this.bindScope==="permanent",this.singleton=this.bindScope==="singleton"?[]:void 0,this.callProxy=d.callProxy instanceof Function?d.callProxy:void 0}contextKey(d,y){return this}contextMap(d){const y=this.__cmap||(this.__cmap=new Map);let B=y.get(d);return B===void 0&&y.set(d,B=[]),B}convertArg(d,y,B){let f=this.singleton;if(!f&&this.isContext&&(f=this.contextMap(this.contextKey(y,B))),f&&f[0]===d)return f[1];if(d instanceof Function){this.callProxy&&(d=this.callProxy(d));const h=g(d,this.signature,this.isTransient);if(Te.debugFuncInstall&&Te.debugOut("FuncPtrAdapter installed",this,this.contextKey(y,B),"@"+h,d),f){if(f[1]){Te.debugFuncInstall&&Te.debugOut("FuncPtrAdapter uninstalling",this,this.contextKey(y,B),"@"+f[1],d);try{o.scopedAlloc[o.scopedAlloc.length-1].push(f[1])}catch{}}f[0]=d,f[1]=h}return h}else if(t.isPtr(d)||d===null||d===void 0){if(f&&f[1]&&f[1]!==d){Te.debugFuncInstall&&Te.debugOut("FuncPtrAdapter uninstalling",this,this.contextKey(y,B),"@"+f[1],d);try{o.scopedAlloc[o.scopedAlloc.length-1].push(f[1])}catch{}f[0]=f[1]=d|0}return d||0}else throw new TypeError("Invalid FuncPtrAdapter argument type. Expecting a function pointer or a "+(this.name?this.name+" ":"")+"function matching signature "+this.signature+".")}},q.FuncPtrAdapter.warnOnUse=!1,q.FuncPtrAdapter.debugFuncInstall=!1,q.FuncPtrAdapter.debugOut=console.debug.bind(console),q.FuncPtrAdapter.bindScopes=["transient","context","singleton","permanent"];const S=c=>q.get(c)||n("Argument adapter not found:",c),L=c=>w.get(c)||n("Result adapter not found:",c);o.xWrap.convertArg=(c,...d)=>S(c)(...d),o.xWrap.convertArgNoCheck=(c,...d)=>q.get(c)(...d),o.xWrap.convertResult=(c,d)=>c===null?d:c?L(c)(d):void 0,o.xWrap.convertResultNoCheck=(c,d)=>c===null?d:c?w.get(c)(d):void 0,t.xWrap=function(c,d,...y){arguments.length===3&&Array.isArray(arguments[2])&&(y=arguments[2]),t.isPtr(c)&&(c=t.functionEntry(c)||n("Function pointer not found in WASM function table."));const B=c instanceof Function,f=B?c:t.xGet(c);if(B&&(c=f.name||"unnamed function"),y.length!==f.length&&D(c,f.length),d===null&&f.length===0)return f;d!=null&&L(d);for(const l of y)l instanceof O?q.set(l,(..._)=>l.convertArg(..._)):S(l);const h=o.xWrap;return f.length===0?(...l)=>l.length?D(c,f.length):h.convertResult(d,f.call(null)):function(...l){l.length!==f.length&&D(c,f.length);const _=t.scopedAllocPush();try{let u=0;for(;ufetch(t.uri,{credentials:"same-origin"}),r=this,s=function(p){if(t.wasmUtilTarget){const g=(...R)=>{throw new Error(R.join(" "))},P=t.wasmUtilTarget;if(P.module=p.module,P.instance=p.instance,P.instance.exports.memory||(P.memory=t.imports&&t.imports.env&&t.imports.env.memory||g("Missing 'memory' object!")),!P.alloc&&p.instance.exports.malloc){const R=p.instance.exports;P.alloc=function(z){return R.malloc(z)||g("Allocation of",z,"bytes failed.")},P.dealloc=function(z){R.free(z)}}r(P)}return t.onload&&t.onload(p,t),p};return WebAssembly.instantiateStreaming?function(){return WebAssembly.instantiateStreaming(n(),t.imports||{}).then(s)}:function(){return n().then(g=>g.arrayBuffer()).then(g=>WebAssembly.instantiate(g,t.imports||{})).then(s)}}).bind(globalThis.WhWasmUtilInstaller),globalThis.Jaccwabyt=function t(n){const r=(...F)=>{throw new Error(F.join(" "))};!(n.heap instanceof WebAssembly.Memory)&&!(n.heap instanceof Function)&&r("config.heap must be WebAssembly.Memory instance or a function."),["alloc","dealloc"].forEach(function(F){n[F]instanceof Function||r("Config option '"+F+"' must be a function.")});const s=t,o=n.heap instanceof Function?n.heap:()=>new Uint8Array(n.heap.buffer),p=n.alloc,g=n.dealloc,P=n.log||console.log.bind(console),R=n.memberPrefix||"",z=n.memberSuffix||"",Q=n.bigIntEnabled===void 0?!!globalThis.BigInt64Array:!!n.bigIntEnabled,T=globalThis.BigInt,A=globalThis.BigInt64Array,D=n.ptrSizeof||4,q=n.ptrIR||"i32";s.debugFlags||(s.__makeDebugFlags=function(F=null){F&&F.__flags&&(F=F.__flags);const V=function K(X){return arguments.length===0?K.__flags:(X<0?(delete K.__flags.getter,delete K.__flags.setter,delete K.__flags.alloc,delete K.__flags.dealloc):(K.__flags.getter=(1&X)!==0,K.__flags.setter=(2&X)!==0,K.__flags.alloc=(4&X)!==0,K.__flags.dealloc=(8&X)!==0),K._flags)};return Object.defineProperty(V,"__flags",{iterable:!1,writable:!1,value:Object.create(F)}),F||V(0),V},s.debugFlags=s.__makeDebugFlags());const w=(function(){const F=new ArrayBuffer(2);return new DataView(F).setInt16(0,256,!0),new Int16Array(F)[0]===256})(),x=F=>F[1]==="(",N=F=>F==="P",O=F=>x(F)?"p":F[0],S=function(F){switch(O(F)){case"c":case"C":return"i8";case"i":return"i32";case"p":case"P":case"s":return q;case"j":return"i64";case"f":return"float";case"d":return"double"}r("Unhandled signature IR:",F)},L=A?()=>!0:()=>r("BigInt64Array is not available."),$=function(F){switch(O(F)){case"p":case"P":case"s":{switch(D){case 4:return"getInt32";case 8:return L()&&"getBigInt64"}break}case"i":return"getInt32";case"c":return"getInt8";case"C":return"getUint8";case"j":return L()&&"getBigInt64";case"f":return"getFloat32";case"d":return"getFloat64"}r("Unhandled DataView getter for signature:",F)},c=function(F){switch(O(F)){case"p":case"P":case"s":{switch(D){case 4:return"setInt32";case 8:return L()&&"setBigInt64"}break}case"i":return"setInt32";case"c":return"setInt8";case"C":return"setUint8";case"j":return L()&&"setBigInt64";case"f":return"setFloat32";case"d":return"setFloat64"}r("Unhandled DataView setter for signature:",F)},d=function(F){switch(O(F)){case"i":case"f":case"c":case"C":case"d":return Number;case"j":return L()&&T;case"p":case"P":case"s":switch(D){case 4:return Number;case 8:return L()&&T}break}r("Unhandled DataView set wrapper for signature:",F)},y=(F,V)=>F+"::"+V,B=function(F,V){return()=>r(y(F,V),"is read-only.")},f=new WeakMap,h="(pointer-is-external)",l=function(F,V,K){if(K||(K=f.get(V)),K){if(f.delete(V),Array.isArray(V.ondispose)){let X;for(;X=V.ondispose.shift();)try{X instanceof Function?X.call(V):X instanceof te?X.dispose():typeof X=="number"&&g(X)}catch(_e){console.warn("ondispose() for",F.structName,"@",K,"threw. NOT propagating it.",_e)}}else if(V.ondispose instanceof Function)try{V.ondispose()}catch(X){console.warn("ondispose() for",F.structName,"@",K,"threw. NOT propagating it.",X)}delete V.ondispose,F.debugFlags.__flags.dealloc&&P("debug.dealloc:",V[h]?"EXTERNAL":"",F.structName,"instance:",F.structInfo.sizeof,"bytes @"+K),V[h]||g(K)}},_=F=>({configurable:!1,writable:!1,iterable:!1,value:F}),u=function(F,V,K){let X=!K;K?Object.defineProperty(V,h,_(K)):(K=p(F.structInfo.sizeof),K||r("Allocation of",F.structName,"structure failed."));try{F.debugFlags.__flags.alloc&&P("debug.alloc:",X?"":"EXTERNAL",F.structName,"instance:",F.structInfo.sizeof,"bytes @"+K),X&&o().fill(0,K,K+F.structInfo.sizeof),f.set(V,K)}catch(_e){throw l(F,V,K),_e}},I=function(){const F=this.pointer;return F?new Uint8Array(o().slice(F,F+this.structInfo.sizeof)):null},ee=_(F=>R+F+z),ne=function(F,V,K=!0){let X=F.members[V];if(!X&&(R||z)){for(const _e of Object.values(F.members))if(_e.key===V){X=_e;break}!X&&K&&r(y(F.name,V),"is not a mapped struct member.")}return X},se=function F(V,K,X=!1){F._||(F._=he=>he.replace(/[^vipPsjrdcC]/g,"").replace(/[pPscC]/g,"i"));const _e=ne(V.structInfo,K,!0);return X?F._(_e.signature):_e.signature},ie={configurable:!1,enumerable:!1,get:function(){return f.get(this)},set:()=>r("Cannot assign the 'pointer' property of a struct.")},j=_(function(){const F=[];for(const V of Object.keys(this.structInfo.members))F.push(this.memberKey(V));return F}),b=new TextDecoder("utf-8"),k=new TextEncoder,W=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,H=function(F,V,K){return b.decode(F.buffer instanceof W?F.slice(V,K):F.subarray(V,K))},Z=function(F,V,K=!1){const X=ne(F.structInfo,V,K);return X&&X.signature.length===1&&X.signature[0]==="s"?X:!1},E=function(F){F.signature!=="s"&&r("Invalid member type signature for C-string value:",JSON.stringify(F))},C=function(V,K){const X=ne(V.structInfo,K,!0);E(X);const _e=V[X.key];if(!_e)return null;let he=_e;const de=o();for(;de[he]!==0;++he);return _e===he?"":H(de,_e,he)},M=function(F,...V){F.ondispose?Array.isArray(F.ondispose)||(F.ondispose=[F.ondispose]):F.ondispose=[],F.ondispose.push(...V)},J=function(F){const V=k.encode(F),K=p(V.length+1);K||r("Allocation error while duplicating string:",F);const X=o();return X.set(V,K),X[K+V.length]=0,K},G=function(F,V,K){const X=ne(F.structInfo,V,!0);E(X);const _e=J(K);return F[X.key]=_e,M(F,_e),F},te=function(V,K){arguments[2]!==_&&r("Do not call the StructType constructor","from client-level code."),Object.defineProperties(this,{structName:_(V),structInfo:_(K)})};te.prototype=Object.create(null,{dispose:_(function(){l(this.constructor,this)}),lookupMember:_(function(F,V=!0){return ne(this.structInfo,F,V)}),memberToJsString:_(function(F){return C(this,F)}),memberIsString:_(function(F,V=!0){return Z(this,F,V)}),memberKey:ee,memberKeys:j,memberSignature:_(function(F,V=!1){return se(this,F,V)}),memoryDump:_(I),pointer:ie,setMemberCString:_(function(F,V){return G(this,F,V)})}),Object.assign(te.prototype,{addOnDispose:function(...F){return M(this,...F),this}}),Object.defineProperties(te,{allocCString:_(J),isA:_(F=>F instanceof te),hasExternalPointer:_(F=>F instanceof te&&!!F[h]),memberKey:ee});const le=F=>Number.isFinite(F)||F instanceof(T||Number),Y=function F(V,K,X){if(!F._){F._={getters:{},setters:{},sw:{}};const ve=["i","c","C","p","P","s","f","d","v()"];Q&&ve.push("j"),ve.forEach(function(Se){F._.getters[Se]=$(Se),F._.setters[Se]=c(Se),F._.sw[Se]=d(Se)});const $n=/^[ipPsjfdcC]$/,Kn=/^[vipPsjfdcC]\([ipPsjfdcC]*\)$/;F.sigCheck=function(Se,Jn,Tt,_t){Object.prototype.hasOwnProperty.call(Se,Tt)&&r(Se.structName,"already has a property named",Tt+"."),$n.test(_t)||Kn.test(_t)||r("Malformed signature for",y(Se.structName,Jn)+":",_t)}}const _e=V.memberKey(K);F.sigCheck(V.prototype,K,_e,X.signature),X.key=_e,X.name=K;const he=O(X.signature),de=y(V.prototype.structName,_e),pe=V.prototype.debugFlags.__flags,We=Object.create(null);We.configurable=!1,We.enumerable=!1,We.get=function(){pe.getter&&P("debug.getter:",F._.getters[he],"for",S(he),de,"@",this.pointer,"+",X.offset,"sz",X.sizeof);let ve=new DataView(o().buffer,this.pointer+X.offset,X.sizeof)[F._.getters[he]](0,w);return pe.getter&&P("debug.getter:",de,"result =",ve),ve},X.readOnly?We.set=B(V.prototype.structName,_e):We.set=function(ve){if(pe.setter&&P("debug.setter:",F._.setters[he],"for",S(he),de,"@",this.pointer,"+",X.offset,"sz",X.sizeof,ve),this.pointer||r("Cannot set struct property on disposed instance."),ve===null)ve=0;else for(;!le(ve);){if(N(X.signature)&&ve instanceof te){ve=ve.pointer||0,pe.setter&&P("debug.setter:",de,"resolved to",ve);break}r("Invalid value for pointer-type",de+".")}new DataView(o().buffer,this.pointer+X.offset,X.sizeof)[F._.setters[he]](0,F._.sw[he](ve),w)},Object.defineProperty(V.prototype,_e,We)},be=function F(V,K){arguments.length===1?(K=V,V=K.name):K.name||(K.name=V),V||r("Struct name is required.");let X=!1;Object.keys(K.members).forEach(de=>{const pe=K.members[de];pe.sizeof?pe.sizeof===1?pe.signature==="c"||pe.signature==="C"||r("Unexpected sizeof==1 member",y(K.name,de),"with signature",pe.signature):(pe.sizeof%4!==0&&(console.warn("Invalid struct member description =",pe,"from",K),r(V,"member",de,"sizeof is not aligned. sizeof="+pe.sizeof)),pe.offset%4!==0&&(console.warn("Invalid struct member description =",pe,"from",K),r(V,"member",de,"offset is not aligned. offset="+pe.offset))):r(V,"member",de,"is missing sizeof."),(!X||X.offsetde instanceof he),memberKey:ee,memberKeys:j,methodInfoForKey:_(function(de){}),structInfo:_(K),structName:_(V)}),he.prototype=new te(V,K,_),Object.defineProperties(he.prototype,{debugFlags:_e,constructor:_(he)}),Object.keys(K.members).forEach(de=>Y(he,de,K.members[de])),he};return be.StructType=te,be.config=n,be.allocCString=J,be.debugFlags||(be.debugFlags=s.__makeDebugFlags(s.debugFlags)),be},globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=(...q)=>{throw new Error(q.join(" "))};t.SQLite3Error.toss;const r=t.capi,s=t.wasm,o=t.util;if(globalThis.WhWasmUtilInstaller(s),delete globalThis.WhWasmUtilInstaller,s.bindingSignatures=[["sqlite3_aggregate_context","void*","sqlite3_context*","int"],["sqlite3_bind_double","int","sqlite3_stmt*","int","f64"],["sqlite3_bind_int","int","sqlite3_stmt*","int","int"],["sqlite3_bind_null",void 0,"sqlite3_stmt*","int"],["sqlite3_bind_parameter_count","int","sqlite3_stmt*"],["sqlite3_bind_parameter_index","int","sqlite3_stmt*","string"],["sqlite3_bind_parameter_name","string","sqlite3_stmt*","int"],["sqlite3_bind_pointer","int","sqlite3_stmt*","int","*","string:static","*"],["sqlite3_busy_handler","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({signature:"i(pi)",contextKey:(q,w)=>q[0]}),"*"]],["sqlite3_busy_timeout","int","sqlite3*","int"],["sqlite3_changes","int","sqlite3*"],["sqlite3_clear_bindings","int","sqlite3_stmt*"],["sqlite3_collation_needed","int","sqlite3*","*","*"],["sqlite3_column_blob","*","sqlite3_stmt*","int"],["sqlite3_column_bytes","int","sqlite3_stmt*","int"],["sqlite3_column_count","int","sqlite3_stmt*"],["sqlite3_column_decltype","string","sqlite3_stmt*","int"],["sqlite3_column_double","f64","sqlite3_stmt*","int"],["sqlite3_column_int","int","sqlite3_stmt*","int"],["sqlite3_column_name","string","sqlite3_stmt*","int"],["sqlite3_column_text","string","sqlite3_stmt*","int"],["sqlite3_column_type","int","sqlite3_stmt*","int"],["sqlite3_column_value","sqlite3_value*","sqlite3_stmt*","int"],["sqlite3_commit_hook","void*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_commit_hook",signature:"i(p)",contextKey:q=>q[0]}),"*"]],["sqlite3_compileoption_get","string","int"],["sqlite3_compileoption_used","int","string"],["sqlite3_complete","int","string:flexible"],["sqlite3_context_db_handle","sqlite3*","sqlite3_context*"],["sqlite3_data_count","int","sqlite3_stmt*"],["sqlite3_db_filename","string","sqlite3*","string"],["sqlite3_db_handle","sqlite3*","sqlite3_stmt*"],["sqlite3_db_name","string","sqlite3*","int"],["sqlite3_db_readonly","int","sqlite3*","string"],["sqlite3_db_status","int","sqlite3*","int","*","*","int"],["sqlite3_errcode","int","sqlite3*"],["sqlite3_errmsg","string","sqlite3*"],["sqlite3_error_offset","int","sqlite3*"],["sqlite3_errstr","string","int"],["sqlite3_exec","int",["sqlite3*","string:flexible",new s.xWrap.FuncPtrAdapter({signature:"i(pipp)",bindScope:"transient",callProxy:q=>{let w;return(x,N,O,S)=>{try{const L=s.cArgvToJs(N,O);return w||(w=s.cArgvToJs(N,S)),q(L,w)|0}catch(L){return L.resultCode||r.SQLITE_ERROR}}}}),"*","**"]],["sqlite3_expanded_sql","string","sqlite3_stmt*"],["sqlite3_extended_errcode","int","sqlite3*"],["sqlite3_extended_result_codes","int","sqlite3*","int"],["sqlite3_file_control","int","sqlite3*","string","int","*"],["sqlite3_finalize","int","sqlite3_stmt*"],["sqlite3_free",void 0,"*"],["sqlite3_get_autocommit","int","sqlite3*"],["sqlite3_get_auxdata","*","sqlite3_context*","int"],["sqlite3_initialize",void 0],["sqlite3_interrupt",void 0,"sqlite3*"],["sqlite3_is_interrupted","int","sqlite3*"],["sqlite3_keyword_count","int"],["sqlite3_keyword_name","int",["int","**","*"]],["sqlite3_keyword_check","int",["string","int"]],["sqlite3_libversion","string"],["sqlite3_libversion_number","int"],["sqlite3_limit","int",["sqlite3*","int","int"]],["sqlite3_malloc","*","int"],["sqlite3_open","int","string","*"],["sqlite3_open_v2","int","string","*","int","string"],["sqlite3_realloc","*","*","int"],["sqlite3_reset","int","sqlite3_stmt*"],["sqlite3_result_blob",void 0,"sqlite3_context*","*","int","*"],["sqlite3_result_double",void 0,"sqlite3_context*","f64"],["sqlite3_result_error",void 0,"sqlite3_context*","string","int"],["sqlite3_result_error_code",void 0,"sqlite3_context*","int"],["sqlite3_result_error_nomem",void 0,"sqlite3_context*"],["sqlite3_result_error_toobig",void 0,"sqlite3_context*"],["sqlite3_result_int",void 0,"sqlite3_context*","int"],["sqlite3_result_null",void 0,"sqlite3_context*"],["sqlite3_result_pointer",void 0,"sqlite3_context*","*","string:static","*"],["sqlite3_result_subtype",void 0,"sqlite3_value*","int"],["sqlite3_result_text",void 0,"sqlite3_context*","string","int","*"],["sqlite3_result_zeroblob",void 0,"sqlite3_context*","int"],["sqlite3_rollback_hook","void*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_rollback_hook",signature:"v(p)",contextKey:q=>q[0]}),"*"]],["sqlite3_set_auxdata",void 0,["sqlite3_context*","int","*","*"]],["sqlite3_shutdown",void 0],["sqlite3_sourceid","string"],["sqlite3_sql","string","sqlite3_stmt*"],["sqlite3_status","int","int","*","*","int"],["sqlite3_step","int","sqlite3_stmt*"],["sqlite3_stmt_busy","int","sqlite3_stmt*"],["sqlite3_stmt_readonly","int","sqlite3_stmt*"],["sqlite3_stmt_status","int","sqlite3_stmt*","int","int"],["sqlite3_strglob","int","string","string"],["sqlite3_stricmp","int","string","string"],["sqlite3_strlike","int","string","string","int"],["sqlite3_strnicmp","int","string","string","int"],["sqlite3_table_column_metadata","int","sqlite3*","string","string","string","**","**","*","*","*"],["sqlite3_total_changes","int","sqlite3*"],["sqlite3_trace_v2","int",["sqlite3*","int",new s.xWrap.FuncPtrAdapter({name:"sqlite3_trace_v2::callback",signature:"i(ippp)",contextKey:(q,w)=>q[0]}),"*"]],["sqlite3_txn_state","int",["sqlite3*","string"]],["sqlite3_uri_boolean","int","sqlite3_filename","string","int"],["sqlite3_uri_key","string","sqlite3_filename","int"],["sqlite3_uri_parameter","string","sqlite3_filename","string"],["sqlite3_user_data","void*","sqlite3_context*"],["sqlite3_value_blob","*","sqlite3_value*"],["sqlite3_value_bytes","int","sqlite3_value*"],["sqlite3_value_double","f64","sqlite3_value*"],["sqlite3_value_dup","sqlite3_value*","sqlite3_value*"],["sqlite3_value_free",void 0,"sqlite3_value*"],["sqlite3_value_frombind","int","sqlite3_value*"],["sqlite3_value_int","int","sqlite3_value*"],["sqlite3_value_nochange","int","sqlite3_value*"],["sqlite3_value_numeric_type","int","sqlite3_value*"],["sqlite3_value_pointer","*","sqlite3_value*","string:static"],["sqlite3_value_subtype","int","sqlite3_value*"],["sqlite3_value_text","string","sqlite3_value*"],["sqlite3_value_type","int","sqlite3_value*"],["sqlite3_vfs_find","*","string"],["sqlite3_vfs_register","int","sqlite3_vfs*","int"],["sqlite3_vfs_unregister","int","sqlite3_vfs*"]],s.exports.sqlite3_progress_handler&&s.bindingSignatures.push(["sqlite3_progress_handler",void 0,["sqlite3*","int",new s.xWrap.FuncPtrAdapter({name:"xProgressHandler",signature:"i(p)",bindScope:"context",contextKey:(q,w)=>q[0]}),"*"]]),s.exports.sqlite3_stmt_explain&&s.bindingSignatures.push(["sqlite3_stmt_explain","int","sqlite3_stmt*","int"],["sqlite3_stmt_isexplain","int","sqlite3_stmt*"]),s.exports.sqlite3_set_authorizer&&s.bindingSignatures.push(["sqlite3_set_authorizer","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_set_authorizer::xAuth",signature:"i(pissss)",contextKey:(q,w)=>q[0],callProxy:q=>(w,x,N,O,S,L)=>{try{return N=N&&s.cstrToJs(N),O=O&&s.cstrToJs(O),S=S&&s.cstrToJs(S),L=L&&s.cstrToJs(L),q(w,x,N,O,S,L)||0}catch($){return $.resultCode||r.SQLITE_ERROR}}}),"*"]]),s.bindingSignatures.int64=[["sqlite3_bind_int64","int",["sqlite3_stmt*","int","i64"]],["sqlite3_changes64","i64",["sqlite3*"]],["sqlite3_column_int64","i64",["sqlite3_stmt*","int"]],["sqlite3_deserialize","int","sqlite3*","string","*","i64","i64","int"],["sqlite3_last_insert_rowid","i64",["sqlite3*"]],["sqlite3_malloc64","*","i64"],["sqlite3_msize","i64","*"],["sqlite3_overload_function","int",["sqlite3*","string","int"]],["sqlite3_realloc64","*","*","i64"],["sqlite3_result_int64",void 0,"*","i64"],["sqlite3_result_zeroblob64","int","*","i64"],["sqlite3_serialize","*","sqlite3*","string","*","int"],["sqlite3_set_last_insert_rowid",void 0,["sqlite3*","i64"]],["sqlite3_status64","int","int","*","*","int"],["sqlite3_total_changes64","i64",["sqlite3*"]],["sqlite3_update_hook","*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_update_hook",signature:"v(iippj)",contextKey:q=>q[0],callProxy:q=>(w,x,N,O,S)=>{q(w,x,s.cstrToJs(N),s.cstrToJs(O),S)}}),"*"]],["sqlite3_uri_int64","i64",["sqlite3_filename","string","i64"]],["sqlite3_value_int64","i64","sqlite3_value*"]],s.bigIntEnabled&&s.exports.sqlite3_declare_vtab&&s.bindingSignatures.int64.push(["sqlite3_create_module","int",["sqlite3*","string","sqlite3_module*","*"]],["sqlite3_create_module_v2","int",["sqlite3*","string","sqlite3_module*","*","*"]],["sqlite3_declare_vtab","int",["sqlite3*","string:flexible"]],["sqlite3_drop_modules","int",["sqlite3*","**"]],["sqlite3_vtab_collation","string","sqlite3_index_info*","int"],["sqlite3_vtab_distinct","int","sqlite3_index_info*"],["sqlite3_vtab_in","int","sqlite3_index_info*","int","int"],["sqlite3_vtab_in_first","int","sqlite3_value*","**"],["sqlite3_vtab_in_next","int","sqlite3_value*","**"],["sqlite3_vtab_nochange","int","sqlite3_context*"],["sqlite3_vtab_on_conflict","int","sqlite3*"],["sqlite3_vtab_rhs_value","int","sqlite3_index_info*","int","**"]),s.bigIntEnabled&&s.exports.sqlite3_preupdate_hook&&s.bindingSignatures.int64.push(["sqlite3_preupdate_blobwrite","int","sqlite3*"],["sqlite3_preupdate_count","int","sqlite3*"],["sqlite3_preupdate_depth","int","sqlite3*"],["sqlite3_preupdate_hook","*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_preupdate_hook",signature:"v(ppippjj)",contextKey:q=>q[0],callProxy:q=>(w,x,N,O,S,L,$)=>{q(w,x,N,s.cstrToJs(O),s.cstrToJs(S),L,$)}}),"*"]],["sqlite3_preupdate_new","int",["sqlite3*","int","**"]],["sqlite3_preupdate_old","int",["sqlite3*","int","**"]]),s.bigIntEnabled&&s.exports.sqlite3changegroup_add&&s.exports.sqlite3session_create&&s.exports.sqlite3_preupdate_hook){const q={signature:"i(ps)",callProxy:w=>(x,N)=>{try{return w(x,s.cstrToJs(N))|0}catch(O){return O.resultCode||r.SQLITE_ERROR}}};s.bindingSignatures.int64.push(["sqlite3changegroup_add","int",["sqlite3_changegroup*","int","void*"]],["sqlite3changegroup_add_strm","int",["sqlite3_changegroup*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3changegroup_delete",void 0,["sqlite3_changegroup*"]],["sqlite3changegroup_new","int",["**"]],["sqlite3changegroup_output","int",["sqlite3_changegroup*","int*","**"]],["sqlite3changegroup_output_strm","int",["sqlite3_changegroup*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply","int",["sqlite3*","int","void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply_strm","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply_v2","int",["sqlite3*","int","void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*","**","int*","int"]],["sqlite3changeset_apply_v2_strm","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*","**","int*","int"]],["sqlite3changeset_concat","int",["int","void*","int","void*","int*","**"]],["sqlite3changeset_concat_strm","int",[new s.xWrap.FuncPtrAdapter({name:"xInputA",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xInputB",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_conflict","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_finalize","int",["sqlite3_changeset_iter*"]],["sqlite3changeset_fk_conflicts","int",["sqlite3_changeset_iter*","int*"]],["sqlite3changeset_invert","int",["int","void*","int*","**"]],["sqlite3changeset_invert_strm","int",[new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_new","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_next","int",["sqlite3_changeset_iter*"]],["sqlite3changeset_old","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_op","int",["sqlite3_changeset_iter*","**","int*","int*","int*"]],["sqlite3changeset_pk","int",["sqlite3_changeset_iter*","**","int*"]],["sqlite3changeset_start","int",["**","int","*"]],["sqlite3changeset_start_strm","int",["**",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3changeset_start_v2","int",["**","int","*","int"]],["sqlite3changeset_start_v2_strm","int",["**",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*","int"]],["sqlite3session_attach","int",["sqlite3_session*","string"]],["sqlite3session_changeset","int",["sqlite3_session*","int*","**"]],["sqlite3session_changeset_size","i64",["sqlite3_session*"]],["sqlite3session_changeset_strm","int",["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3session_config","int",["int","void*"]],["sqlite3session_create","int",["sqlite3*","string","**"]],["sqlite3session_diff","int",["sqlite3_session*","string","string","**"]],["sqlite3session_enable","int",["sqlite3_session*","int"]],["sqlite3session_indirect","int",["sqlite3_session*","int"]],["sqlite3session_isempty","int",["sqlite3_session*"]],["sqlite3session_memory_used","i64",["sqlite3_session*"]],["sqlite3session_object_config","int",["sqlite3_session*","int","void*"]],["sqlite3session_patchset","int",["sqlite3_session*","*","**"]],["sqlite3session_patchset_strm","int",["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3session_table_filter",void 0,["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xFilter",...q,contextKey:(w,x)=>w[0]}),"*"]])}s.bindingSignatures.wasmInternal=[["sqlite3__wasm_db_reset","int","sqlite3*"],["sqlite3__wasm_db_vfs","sqlite3_vfs*","sqlite3*","string"],["sqlite3__wasm_vfs_create_file","int","sqlite3_vfs*","string","*","int"],["sqlite3__wasm_posix_create_file","int","string","*","int"],["sqlite3__wasm_vfs_unlink","int","sqlite3_vfs*","string"],["sqlite3__wasm_qfmt_token","string:dealloc","string","int"]],t.StructBinder=globalThis.Jaccwabyt({heap:s.heap8u,alloc:s.alloc,dealloc:s.dealloc,bigIntEnabled:s.bigIntEnabled,memberPrefix:"$"}),delete globalThis.Jaccwabyt;{const q=s.xWrap.argAdapter("string");s.xWrap.argAdapter("string:flexible",S=>q(o.flexibleString(S))),s.xWrap.argAdapter("string:static",(function(S){return s.isPtr(S)?S:(S=""+S,this[S]||(this[S]=s.allocCString(S)))}).bind(Object.create(null)));const w=s.xWrap.argAdapter("*"),x=function(){};s.xWrap.argAdapter("sqlite3_filename",w)("sqlite3_context*",w)("sqlite3_value*",w)("void*",w)("sqlite3_changegroup*",w)("sqlite3_changeset_iter*",w)("sqlite3_session*",w)("sqlite3_stmt*",S=>w(S instanceof(t?.oo1?.Stmt||x)?S.pointer:S))("sqlite3*",S=>w(S instanceof(t?.oo1?.DB||x)?S.pointer:S))("sqlite3_vfs*",S=>typeof S=="string"?r.sqlite3_vfs_find(S)||t.SQLite3Error.toss(r.SQLITE_NOTFOUND,"Unknown sqlite3_vfs name:",S):w(S instanceof(r.sqlite3_vfs||x)?S.pointer:S)),s.exports.sqlite3_declare_vtab&&s.xWrap.argAdapter("sqlite3_index_info*",S=>w(S instanceof(r.sqlite3_index_info||x)?S.pointer:S))("sqlite3_module*",S=>w(S instanceof(r.sqlite3_module||x)?S.pointer:S));const N=s.xWrap.resultAdapter("*");s.xWrap.resultAdapter("sqlite3*",N)("sqlite3_context*",N)("sqlite3_stmt*",N)("sqlite3_value*",N)("sqlite3_vfs*",N)("void*",N),s.exports.sqlite3_step.length===0&&(s.xWrap.doArgcCheck=!1,t.config.warn("Disabling sqlite3.wasm.xWrap.doArgcCheck due to environmental quirks."));for(const S of s.bindingSignatures)r[S[0]]=s.xWrap.apply(null,S);for(const S of s.bindingSignatures.wasmInternal)o[S[0]]=s.xWrap.apply(null,S);const O=function(S){return()=>n(S+"() is unavailable due to lack","of BigInt support in this build.")};for(const S of s.bindingSignatures.int64)r[S[0]]=s.bigIntEnabled?s.xWrap.apply(null,S):O(S[0]);if(delete s.bindingSignatures,s.exports.sqlite3__wasm_db_error){const S=s.xWrap("sqlite3__wasm_db_error","int","sqlite3*","int","string");o.sqlite3__wasm_db_error=function(L,$,c){return $ instanceof t.WasmAllocError?($=r.SQLITE_NOMEM,c=0):$ instanceof Error&&(c=c||""+$,$=$.resultCode||r.SQLITE_ERROR),L?S(L,$,c):$}}else o.sqlite3__wasm_db_error=function(S,L,$){return console.warn("sqlite3__wasm_db_error() is not exported.",arguments),L}}{const q=s.xCall("sqlite3__wasm_enum_json");q||n("Maintenance required: increase sqlite3__wasm_enum_json()'s","static buffer size!"),s.ctype=JSON.parse(s.cstrToJs(q));const w=["access","authorizer","blobFinalizers","changeset","config","dataTypes","dbConfig","dbStatus","encodings","fcntl","flock","ioCap","limits","openFlags","prepareFlags","resultCodes","sqlite3Status","stmtStatus","syncFlags","trace","txnState","udfFlags","version"];s.bigIntEnabled&&w.push("serialize","session","vtab");for(const O of w)for(const S of Object.entries(s.ctype[O]))r[S[0]]=S[1];s.functionEntry(r.SQLITE_WASM_DEALLOC)||n("Internal error: cannot resolve exported function","entry SQLITE_WASM_DEALLOC (=="+r.SQLITE_WASM_DEALLOC+").");const x=Object.create(null);for(const O of["resultCodes"])for(const S of Object.entries(s.ctype[O]))x[S[1]]=S[0];r.sqlite3_js_rc_str=O=>x[O];const N=Object.assign(Object.create(null),{WasmTestStruct:!0,sqlite3_kvvfs_methods:!o.isUIThread(),sqlite3_index_info:!s.bigIntEnabled,sqlite3_index_constraint:!s.bigIntEnabled,sqlite3_index_orderby:!s.bigIntEnabled,sqlite3_index_constraint_usage:!s.bigIntEnabled});for(const O of s.ctype.structs)N[O.name]||(r[O.name]=t.StructBinder(O));if(r.sqlite3_index_info){for(const O of["sqlite3_index_constraint","sqlite3_index_orderby","sqlite3_index_constraint_usage"])r.sqlite3_index_info[O]=r[O],delete r[O];r.sqlite3_vtab_config=s.xWrap("sqlite3__wasm_vtab_config","int",["sqlite3*","int","int"])}}const p=(q,w,x)=>o.sqlite3__wasm_db_error(q,r.SQLITE_MISUSE,w+"() requires "+x+" argument"+(x===1?"":"s")+"."),g=q=>o.sqlite3__wasm_db_error(q,r.SQLITE_FORMAT,"SQLITE_UTF8 is the only supported encoding."),P=q=>s.xWrap.argAdapter("sqlite3*")(q),R=q=>s.isPtr(q)?s.cstrToJs(q):q,z=(function(q,w){q=P(q);let x=this.dbMap.get(q);if(w)!x&&w>0&&this.dbMap.set(q,x=Object.create(null));else return this.dbMap.delete(q),x;return x}).bind(Object.assign(Object.create(null),{dbMap:new Map}));z.addCollation=function(q,w){const x=z(q,1);x.collation||(x.collation=new Set),x.collation.add(R(w).toLowerCase())},z._addUDF=function(q,w,x,N){w=R(w).toLowerCase();let O=N.get(w);O||N.set(w,O=new Set),O.add(x<0?-1:x)},z.addFunction=function(q,w,x){const N=z(q,1);N.udf||(N.udf=new Map),this._addUDF(q,w,x,N.udf)},s.exports.sqlite3_create_window_function&&(z.addWindowFunc=function(q,w,x){const N=z(q,1);N.wudf||(N.wudf=new Map),this._addUDF(q,w,x,N.wudf)}),z.cleanup=function(q){q=P(q);const w=[q];for(const O of["sqlite3_busy_handler","sqlite3_commit_hook","sqlite3_preupdate_hook","sqlite3_progress_handler","sqlite3_rollback_hook","sqlite3_set_authorizer","sqlite3_trace_v2","sqlite3_update_hook"]){const S=s.exports[O];if(S){w.length=S.length;try{r[O](...w)}catch(L){t.config.warn("close-time call of",O+"(",w,") threw:",L)}}}const x=z(q,0);if(!x)return;if(x.collation){for(const O of x.collation)try{r.sqlite3_create_collation_v2(q,O,r.SQLITE_UTF8,0,0,0)}catch{}delete x.collation}let N;for(N=0;N<2;++N){const O=N?x.wudf:x.udf;if(!O)continue;const S=N?r.sqlite3_create_window_function:r.sqlite3_create_function_v2;for(const L of O){const $=L[0],c=L[1],d=[q,$,0,r.SQLITE_UTF8,0,0,0,0,0];N&&d.push(0);for(const y of c)try{d[2]=y,S.apply(null,d)}catch{}c.clear()}O.clear()}delete x.udf,delete x.wudf};{const q=s.xWrap("sqlite3_close_v2","int","sqlite3*");r.sqlite3_close_v2=function(w){if(arguments.length!==1)return p(w,"sqlite3_close_v2",1);if(w)try{z.cleanup(w)}catch{}return q(w)}}if(r.sqlite3session_create){const q=s.xWrap("sqlite3session_delete",void 0,["sqlite3_session*"]);r.sqlite3session_delete=function(w){if(arguments.length!==1)return p(pDb,"sqlite3session_delete",1);w&&r.sqlite3session_table_filter(w,0,0),q(w)}}{const q=(x,N)=>"argv["+N+"]:"+x[0]+":"+s.cstrToJs(x[1]).toLowerCase(),w=s.xWrap("sqlite3_create_collation_v2","int",["sqlite3*","string","int","*",new s.xWrap.FuncPtrAdapter({name:"xCompare",signature:"i(pipip)",contextKey:q}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",signature:"v(p)",contextKey:q})]);r.sqlite3_create_collation_v2=function(x,N,O,S,L,$){if(arguments.length!==6)return p(x,"sqlite3_create_collation_v2",6);if((O&15)===0)O|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(O&15))return g(x);try{const c=w(x,N,O,S,L,$);return c===0&&L instanceof Function&&z.addCollation(x,N),c}catch(c){return o.sqlite3__wasm_db_error(x,c)}},r.sqlite3_create_collation=(x,N,O,S,L)=>arguments.length===5?r.sqlite3_create_collation_v2(x,N,O,S,L,0):p(x,"sqlite3_create_collation",5)}{const q=function(O,S){return O[0]+":"+(O[2]<0?-1:O[2])+":"+S+":"+s.cstrToJs(O[1]).toLowerCase()},w=Object.assign(Object.create(null),{xInverseAndStep:{signature:"v(pip)",contextKey:q,callProxy:O=>(S,L,$)=>{try{O(S,...r.sqlite3_values_to_js(L,$))}catch(c){r.sqlite3_result_error_js(S,c)}}},xFinalAndValue:{signature:"v(p)",contextKey:q,callProxy:O=>S=>{try{r.sqlite3_result_js(S,O(S))}catch(L){r.sqlite3_result_error_js(S,L)}}},xFunc:{signature:"v(pip)",contextKey:q,callProxy:O=>(S,L,$)=>{try{r.sqlite3_result_js(S,O(S,...r.sqlite3_values_to_js(L,$)))}catch(c){r.sqlite3_result_error_js(S,c)}}},xDestroy:{signature:"v(p)",contextKey:q,callProxy:O=>S=>{try{O(S)}catch(L){console.error("UDF xDestroy method threw:",L)}}}}),x=s.xWrap("sqlite3_create_function_v2","int",["sqlite3*","string","int","int","*",new s.xWrap.FuncPtrAdapter({name:"xFunc",...w.xFunc}),new s.xWrap.FuncPtrAdapter({name:"xStep",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xFinal",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",...w.xDestroy})]),N=s.exports.sqlite3_create_window_function?s.xWrap("sqlite3_create_window_function","int",["sqlite3*","string","int","int","*",new s.xWrap.FuncPtrAdapter({name:"xStep",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xFinal",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xValue",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xInverse",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",...w.xDestroy})]):void 0;r.sqlite3_create_function_v2=function O(S,L,$,c,d,y,B,f,h){if(O.length!==arguments.length)return p(S,"sqlite3_create_function_v2",O.length);if((c&15)===0)c|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(c&15))return g(S);try{const l=x(S,L,$,c,d,y,B,f,h);return l===0&&(y instanceof Function||B instanceof Function||f instanceof Function||h instanceof Function)&&z.addFunction(S,L,$),l}catch(l){return console.error("sqlite3_create_function_v2() setup threw:",l),o.sqlite3__wasm_db_error(S,l,"Creation of UDF threw: "+l)}},r.sqlite3_create_function=function O(S,L,$,c,d,y,B,f){return O.length===arguments.length?r.sqlite3_create_function_v2(S,L,$,c,d,y,B,f,0):p(S,"sqlite3_create_function",O.length)},N?r.sqlite3_create_window_function=function O(S,L,$,c,d,y,B,f,h,l){if(O.length!==arguments.length)return p(S,"sqlite3_create_window_function",O.length);if((c&15)===0)c|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(c&15))return g(S);try{const _=N(S,L,$,c,d,y,B,f,h,l);return _===0&&(y instanceof Function||B instanceof Function||f instanceof Function||h instanceof Function||l instanceof Function)&&z.addWindowFunc(S,L,$),_}catch(_){return console.error("sqlite3_create_window_function() setup threw:",_),o.sqlite3__wasm_db_error(S,_,"Creation of UDF threw: "+_)}}:delete r.sqlite3_create_window_function,r.sqlite3_create_function_v2.udfSetResult=r.sqlite3_create_function.udfSetResult=r.sqlite3_result_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfSetResult=r.sqlite3_result_js),r.sqlite3_create_function_v2.udfConvertArgs=r.sqlite3_create_function.udfConvertArgs=r.sqlite3_values_to_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfConvertArgs=r.sqlite3_values_to_js),r.sqlite3_create_function_v2.udfSetError=r.sqlite3_create_function.udfSetError=r.sqlite3_result_error_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfSetError=r.sqlite3_result_error_js)}{const q=(x,N)=>(typeof x=="string"?N=-1:o.isSQLableTypedArray(x)?(N=x.byteLength,x=o.typedArrayToString(x instanceof ArrayBuffer?new Uint8Array(x):x)):Array.isArray(x)&&(x=x.join(""),N=-1),[x,N]),w={basic:s.xWrap("sqlite3_prepare_v3","int",["sqlite3*","string","int","int","**","**"]),full:s.xWrap("sqlite3_prepare_v3","int",["sqlite3*","*","int","int","**","**"])};r.sqlite3_prepare_v3=function x(N,O,S,L,$,c){if(x.length!==arguments.length)return p(N,"sqlite3_prepare_v3",x.length);const[d,y]=q(O,S);switch(typeof d){case"string":return w.basic(N,d,y,L,$,null);case"number":return w.full(N,d,y,L,$,c);default:return o.sqlite3__wasm_db_error(N,r.SQLITE_MISUSE,"Invalid SQL argument type for sqlite3_prepare_v2/v3().")}},r.sqlite3_prepare_v2=function x(N,O,S,L,$){return x.length===arguments.length?r.sqlite3_prepare_v3(N,O,S,0,L,$):p(N,"sqlite3_prepare_v2",x.length)}}{const q=s.xWrap("sqlite3_bind_text","int",["sqlite3_stmt*","int","string","int","*"]),w=s.xWrap("sqlite3_bind_blob","int",["sqlite3_stmt*","int","*","int","*"]);r.sqlite3_bind_text=function x(N,O,S,L,$){if(x.length!==arguments.length)return p(r.sqlite3_db_handle(N),"sqlite3_bind_text",x.length);if(s.isPtr(S)||S===null)return q(N,O,S,L,$);S instanceof ArrayBuffer?S=new Uint8Array(S):Array.isArray(pMem)&&(S=pMem.join(""));let c,d;try{if(o.isSQLableTypedArray(S))c=s.allocFromTypedArray(S),d=S.byteLength;else if(typeof S=="string")[c,d]=s.allocCString(S);else return o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),r.SQLITE_MISUSE,"Invalid 3rd argument type for sqlite3_bind_text().");return q(N,O,c,d,r.SQLITE_WASM_DEALLOC)}catch(y){return s.dealloc(c),o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),y)}},r.sqlite3_bind_blob=function x(N,O,S,L,$){if(x.length!==arguments.length)return p(r.sqlite3_db_handle(N),"sqlite3_bind_blob",x.length);if(s.isPtr(S)||S===null)return w(N,O,S,L,$);S instanceof ArrayBuffer?S=new Uint8Array(S):Array.isArray(S)&&(S=S.join(""));let c,d;try{if(o.isBindableTypedArray(S))c=s.allocFromTypedArray(S),d=L>=0?L:S.byteLength;else if(typeof S=="string")[c,d]=s.allocCString(S);else return o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),r.SQLITE_MISUSE,"Invalid 3rd argument type for sqlite3_bind_blob().");return w(N,O,c,d,r.SQLITE_WASM_DEALLOC)}catch(y){return s.dealloc(c),o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),y)}}}r.sqlite3_config=function(q,...w){if(arguments.length<2)return r.SQLITE_MISUSE;switch(q){case r.SQLITE_CONFIG_COVERING_INDEX_SCAN:case r.SQLITE_CONFIG_MEMSTATUS:case r.SQLITE_CONFIG_SMALL_MALLOC:case r.SQLITE_CONFIG_SORTERREF_SIZE:case r.SQLITE_CONFIG_STMTJRNL_SPILL:case r.SQLITE_CONFIG_URI:return s.exports.sqlite3__wasm_config_i(q,w[0]);case r.SQLITE_CONFIG_LOOKASIDE:return s.exports.sqlite3__wasm_config_ii(q,w[0],w[1]);case r.SQLITE_CONFIG_MEMDB_MAXSIZE:return s.exports.sqlite3__wasm_config_j(q,w[0]);case r.SQLITE_CONFIG_GETMALLOC:case r.SQLITE_CONFIG_GETMUTEX:case r.SQLITE_CONFIG_GETPCACHE2:case r.SQLITE_CONFIG_GETPCACHE:case r.SQLITE_CONFIG_HEAP:case r.SQLITE_CONFIG_LOG:case r.SQLITE_CONFIG_MALLOC:case r.SQLITE_CONFIG_MMAP_SIZE:case r.SQLITE_CONFIG_MULTITHREAD:case r.SQLITE_CONFIG_MUTEX:case r.SQLITE_CONFIG_PAGECACHE:case r.SQLITE_CONFIG_PCACHE2:case r.SQLITE_CONFIG_PCACHE:case r.SQLITE_CONFIG_PCACHE_HDRSZ:case r.SQLITE_CONFIG_PMASZ:case r.SQLITE_CONFIG_SERIALIZED:case r.SQLITE_CONFIG_SINGLETHREAD:case r.SQLITE_CONFIG_SQLLOG:case r.SQLITE_CONFIG_WIN32_HEAPSIZE:default:return r.SQLITE_NOTFOUND}};{const q=new Set;r.sqlite3_auto_extension=function(w){if(w instanceof Function)w=s.installFunction("i(ppp)",w);else if(arguments.length!==1||!s.isPtr(w))return r.SQLITE_MISUSE;const x=s.exports.sqlite3_auto_extension(w);return w!==arguments[0]&&(x===0?q.add(w):s.uninstallFunction(w)),x},r.sqlite3_cancel_auto_extension=function(w){return!w||arguments.length!==1||!s.isPtr(w)?0:s.exports.sqlite3_cancel_auto_extension(w)},r.sqlite3_reset_auto_extension=function(){s.exports.sqlite3_reset_auto_extension();for(const w of q)s.uninstallFunction(w);q.clear()}}const Q=r.sqlite3_vfs_find("kvvfs");if(Q)if(o.isUIThread()){const q=new r.sqlite3_kvvfs_methods(s.exports.sqlite3__wasm_kvvfs_methods());delete r.sqlite3_kvvfs_methods;const w=s.exports.sqlite3__wasm_kvvfsMakeKeyOnPstack,x=s.pstack,N=S=>s.peek(S)===115?sessionStorage:localStorage,O={xRead:(S,L,$,c)=>{const d=x.pointer,y=s.scopedAllocPush();try{const B=w(S,L);if(!B)return-3;const f=s.cstrToJs(B),h=N(S).getItem(f);if(!h)return-1;const l=h.length;if(c<=0)return l;if(c===1)return s.poke($,0),l;const _=s.scopedAllocCString(h);return c>l+1&&(c=l+1),s.heap8u().copyWithin($,_,_+c-1),s.poke($+c-1,0),c-1}catch(B){return console.error("kvstorageRead()",B),-2}finally{x.restore(d),s.scopedAllocPop(y)}},xWrite:(S,L,$)=>{const c=x.pointer;try{const d=w(S,L);if(!d)return 1;const y=s.cstrToJs(d);return N(S).setItem(y,s.cstrToJs($)),0}catch(d){return console.error("kvstorageWrite()",d),r.SQLITE_IOERR}finally{x.restore(c)}},xDelete:(S,L)=>{const $=x.pointer;try{const c=w(S,L);return c?(N(S).removeItem(s.cstrToJs(c)),0):1}catch(c){return console.error("kvstorageDelete()",c),r.SQLITE_IOERR}finally{x.restore($)}}};for(const S of Object.keys(O))q[q.memberKey(S)]=s.installFunction(q.memberSignature(S),O[S])}else r.sqlite3_vfs_unregister(Q);s.xWrap.FuncPtrAdapter.warnOnUse=!0;const T=t.StructBinder,A=function q(w,x,N,O=q.installMethodArgcCheck){if(w instanceof T.StructType?!(N instanceof Function)&&!s.isPtr(N)&&n("Usage error: expecting a Function or WASM pointer to one."):n("Usage error: target object is-not-a StructType."),arguments.length===1)return(c,d)=>q(w,c,d,O);q.argcProxy||(q.argcProxy=function(c,d,y,B){return function(...f){return y.length!==arguments.length&&n("Argument mismatch for",c.structInfo.name+"::"+d+": Native signature is:",B),y.apply(this,f)}},q.removeFuncList=function(){this.ondispose.__removeFuncList&&(this.ondispose.__removeFuncList.forEach((c,d)=>{if(typeof c=="number")try{s.uninstallFunction(c)}catch{}}),delete this.ondispose.__removeFuncList)});const S=w.memberSignature(x);S.length<2&&n("Member",x,"does not have a function pointer signature:",S);const L=w.memberKey(x),$=O&&!s.isPtr(N)?q.argcProxy(w,L,N,S):N;if(s.isPtr($))$&&!s.functionEntry($)&&n("Pointer",$,"is not a WASM function table entry."),w[L]=$;else{const c=s.installFunction($,w.memberSignature(x,!0));w[L]=c,(!w.ondispose||!w.ondispose.__removeFuncList)&&(w.addOnDispose("ondispose.__removeFuncList handler",q.removeFuncList),w.ondispose.__removeFuncList=[]),w.ondispose.__removeFuncList.push(L,c)}return(c,d)=>q(w,c,d,O)};A.installMethodArgcCheck=!1;const D=function(q,w,x=A.installMethodArgcCheck){const N=new Map;for(const O of Object.keys(w)){const S=w[O],L=N.get(S);if(L){const $=q.memberKey(O);q[$]=q[q.memberKey(L)]}else A(q,O,S,x),N.set(S,O)}return q};T.StructType.prototype.installMethod=function(w,x,N=A.installMethodArgcCheck){return arguments.length<3&&w&&typeof w=="object"?D(this,...arguments):A(this,...arguments)},T.StructType.prototype.installMethods=function(q,w=A.installMethodArgcCheck){return D(this,q,w)}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){t.version={libVersion:"3.50.4",libVersionNumber:3050004,sourceId:"2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3",downloadVersion:3500400}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=(...f)=>{throw new t.SQLite3Error(...f)},r=t.capi,s=t.wasm,o=t.util,p=new WeakMap,g=new WeakMap,P=(f,h,l)=>{const _=Object.getOwnPropertyDescriptor(f,h);return _?_.value:l},R=function(f,h){return h&&(f instanceof A&&(f=f.pointer),n(h,"sqlite3 result code",h+":",f?r.sqlite3_errmsg(f):r.sqlite3_errstr(h))),arguments[0]},z=s.installFunction("i(ippp)",(function(f,h,l,_){r.SQLITE_TRACE_STMT===f&&console.log("SQL TRACE #"+ ++this.counter+" via sqlite3@"+h+":",s.cstrToJs(_))}).bind({counter:0})),Q=Object.create(null),T=function f(...h){if(!f._name2vfs){f._name2vfs=Object.create(null);const j=typeof importScripts=="function"?b=>n("The VFS for",b,"is only available in the main window thread."):!1;f._name2vfs[":localStorage:"]={vfs:"kvvfs",filename:j||(()=>"local")},f._name2vfs[":sessionStorage:"]={vfs:"kvvfs",filename:j||(()=>"session")}}const l=f.normalizeArgs(...h);let _=l.filename,u=l.vfs,I=l.flags;(typeof _!="string"&&typeof _!="number"||typeof I!="string"||u&&typeof u!="string"&&typeof u!="number")&&(t.config.error("Invalid DB ctor args",l,arguments),n("Invalid arguments for DB constructor."));let U=typeof _=="number"?s.cstrToJs(_):_;const ee=f._name2vfs[U];ee&&(u=ee.vfs,_=U=ee.filename(U));let ne,se=0;I.indexOf("c")>=0&&(se|=r.SQLITE_OPEN_CREATE|r.SQLITE_OPEN_READWRITE),I.indexOf("w")>=0&&(se|=r.SQLITE_OPEN_READWRITE),se===0&&(se|=r.SQLITE_OPEN_READONLY),se|=r.SQLITE_OPEN_EXRESCODE;const ie=s.pstack.pointer;try{const j=s.pstack.allocPtr();let b=r.sqlite3_open_v2(_,j,se,u||0);ne=s.peekPtr(j),R(ne,b),r.sqlite3_extended_result_codes(ne,1),I.indexOf("t")>=0&&r.sqlite3_trace_v2(ne,r.SQLITE_TRACE_STMT,z,ne)}catch(j){throw ne&&r.sqlite3_close_v2(ne),j}finally{s.pstack.restore(ie)}this.filename=U,p.set(this,ne),g.set(this,Object.create(null));try{const j=r.sqlite3_js_db_vfs(ne)||n("Internal error: cannot get VFS for new db handle."),b=Q[j];b&&(b instanceof Function?b(this,t):R(ne,r.sqlite3_exec(ne,b,0,0,0)))}catch(j){throw this.close(),j}};T.setVfsPostOpenCallback=function(f,h){h instanceof Function||n("dbCtorHelper.setVfsPostOpenCallback() should not be used with a non-function argument.",arguments),Q[f]=h},T.normalizeArgs=function(f=":memory:",h="c",l=null){const _={};return arguments.length===1&&arguments[0]&&typeof arguments[0]=="object"?(Object.assign(_,arguments[0]),_.flags===void 0&&(_.flags="c"),_.vfs===void 0&&(_.vfs=null),_.filename===void 0&&(_.filename=":memory:")):(_.filename=f,_.flags=h,_.vfs=l),_};const A=function(...f){T.apply(this,f)};A.dbCtorHelper=T;const D={null:1,number:2,string:3,boolean:4,blob:5};D.undefined==D.null,s.bigIntEnabled&&(D.bigint=D.number);const q=function(){D!==arguments[2]&&n(r.SQLITE_MISUSE,"Do not call the Stmt constructor directly. Use DB.prepare()."),this.db=arguments[0],p.set(this,arguments[1]),this.parameterCount=r.sqlite3_bind_parameter_count(this.pointer)},w=function(f){return f.pointer||n("DB has been closed."),f},x=function(f,h){return(h!==(h|0)||h<0||h>=f.columnCount)&&n("Column index",h,"is out of range."),f},N=function(f,h){const l=Object.create(null);switch(l.opt=Object.create(null),h.length){case 1:typeof h[0]=="string"||o.isSQLableTypedArray(h[0])||Array.isArray(h[0])?l.sql=h[0]:h[0]&&typeof h[0]=="object"&&(l.opt=h[0],l.sql=l.opt.sql);break;case 2:l.sql=h[0],l.opt=h[1];break;default:n("Invalid argument count for exec().")}l.sql=o.flexibleString(l.sql),typeof l.sql!="string"&&n("Missing SQL argument or unsupported SQL value type.");const _=l.opt;switch(_.returnValue){case"resultRows":_.resultRows||(_.resultRows=[]),l.returnVal=()=>_.resultRows;break;case"saveSql":_.saveSql||(_.saveSql=[]),l.returnVal=()=>_.saveSql;break;case void 0:case"this":l.returnVal=()=>f;break;default:n("Invalid returnValue value:",_.returnValue)}if(!_.callback&&!_.returnValue&&_.rowMode!==void 0&&(_.resultRows||(_.resultRows=[]),l.returnVal=()=>_.resultRows),_.callback||_.resultRows)switch(_.rowMode===void 0?"array":_.rowMode){case"object":l.cbArg=(u,I)=>{I.columnNames||(I.columnNames=u.getColumnNames([]));const U=u.get([]),ee=Object.create(null);for(const ne in I.columnNames)ee[I.columnNames[ne]]=U[ne];return ee};break;case"array":l.cbArg=u=>u.get([]);break;case"stmt":Array.isArray(_.resultRows)&&n("exec(): invalid rowMode for a resultRows array: must","be one of 'array', 'object',","a result column number, or column name reference."),l.cbArg=u=>u;break;default:if(o.isInt32(_.rowMode)){l.cbArg=u=>u.get(_.rowMode);break}else if(typeof _.rowMode=="string"&&_.rowMode.length>1&&_.rowMode[0]==="$"){const u=_.rowMode.substr(1);l.cbArg=I=>{const U=I.get(Object.create(null))[u];return U===void 0?n(r.SQLITE_NOTFOUND,"exec(): unknown result column:",u):U};break}n("Invalid rowMode:",_.rowMode)}return l},O=(f,h,l,..._)=>{const u=f.prepare(h);try{const I=u.bind(l).step()?u.get(..._):void 0;return u.reset(),I}finally{u.finalize()}},S=(f,h,l,_)=>f.exec({sql:h,bind:l,rowMode:_,returnValue:"resultRows"});A.checkRc=(f,h)=>R(f,h),A.prototype={isOpen:function(){return!!this.pointer},affirmOpen:function(){return w(this)},close:function(){if(this.pointer){if(this.onclose&&this.onclose.before instanceof Function)try{this.onclose.before(this)}catch{}const f=this.pointer;if(Object.keys(g.get(this)).forEach((h,l)=>{if(l&&l.pointer)try{l.finalize()}catch{}}),p.delete(this),g.delete(this),r.sqlite3_close_v2(f),this.onclose&&this.onclose.after instanceof Function)try{this.onclose.after(this)}catch{}delete this.filename}},changes:function(f=!1,h=!1){const l=w(this).pointer;return f?h?r.sqlite3_total_changes64(l):r.sqlite3_total_changes(l):h?r.sqlite3_changes64(l):r.sqlite3_changes(l)},dbFilename:function(f="main"){return r.sqlite3_db_filename(w(this).pointer,f)},dbName:function(f=0){return r.sqlite3_db_name(w(this).pointer,f)},dbVfsName:function(f=0){let h;const l=r.sqlite3_js_db_vfs(w(this).pointer,f);if(l){const _=new r.sqlite3_vfs(l);try{h=s.cstrToJs(_.$zName)}finally{_.dispose()}}return h},prepare:function(f){w(this);const h=s.pstack.pointer;let l,_;try{l=s.pstack.alloc(8),A.checkRc(this,r.sqlite3_prepare_v2(this.pointer,f,-1,l,null)),_=s.peekPtr(l)}finally{s.pstack.restore(h)}_||n("Cannot prepare empty SQL.");const u=new q(this,_,D);return g.get(this)[_]=u,u},exec:function(){w(this);const f=N(this,arguments);if(!f.sql)return n("exec() requires an SQL string.");const h=f.opt,l=h.callback,_=Array.isArray(h.resultRows)?h.resultRows:void 0;let u,I=h.bind,U=!!(f.cbArg||h.columnNames||_);const ee=s.scopedAllocPush(),ne=Array.isArray(h.saveSql)?h.saveSql:void 0;try{const se=o.isSQLableTypedArray(f.sql);let ie=se?f.sql.byteLength:s.jstrlen(f.sql);const j=s.scopedAlloc(2*s.ptrSizeof+(ie+1)),b=j+s.ptrSizeof;let k=b+s.ptrSizeof;const W=k+ie;for(se?s.heap8().set(f.sql,k):s.jstrcpy(f.sql,s.heap8(),k,ie,!1),s.poke(k+ie,0);k&&s.peek(k,"i8");){s.pokePtr([j,b],0),A.checkRc(this,r.sqlite3_prepare_v3(this.pointer,k,ie,0,j,b));const H=s.peekPtr(j);if(k=s.peekPtr(b),ie=W-k,!!H){if(ne&&ne.push(r.sqlite3_sql(H).trim()),u=new q(this,H,D),I&&u.parameterCount&&(u.bind(I),I=null),U&&u.columnCount){let Z=Array.isArray(h.columnNames)?0:1;if(U=!1,f.cbArg||_){const E=Object.create(null);for(;u.step();u._lockedByExec=!1){Z++===0&&u.getColumnNames(E.columnNames=h.columnNames||[]),u._lockedByExec=!0;const C=f.cbArg(u,E);if(_&&_.push(C),l&&l.call(h,C,u)===!1)break}u._lockedByExec=!1}Z===0&&u.getColumnNames(h.columnNames)}else u.step();u.reset().finalize(),u=null}}}finally{s.scopedAllocPop(ee),u&&(delete u._lockedByExec,u.finalize())}return f.returnVal()},createFunction:function(h,l,_){const u=E=>E instanceof Function;switch(arguments.length){case 1:_=h,h=_.name,l=_.xFunc||0;break;case 2:u(l)||(_=l,l=_.xFunc||0);break}_||(_={}),typeof h!="string"&&n("Invalid arguments: missing function name.");let I=_.xStep||0,U=_.xFinal||0;const ee=_.xValue||0,ne=_.xInverse||0;let se;u(l)?(se=!1,(u(I)||u(U))&&n("Ambiguous arguments: scalar or aggregate?"),I=U=null):u(I)?(u(U)||n("Missing xFinal() callback for aggregate or window UDF."),l=null):u(U)?n("Missing xStep() callback for aggregate or window UDF."):n("Missing function-type properties."),se===!1?(u(ee)||u(ne))&&n("xValue and xInverse are not permitted for non-window UDFs."):u(ee)?(u(ne)||n("xInverse must be provided if xValue is."),se=!0):u(ne)&&n("xValue must be provided if xInverse is.");const ie=_.pApp;ie!=null&&(typeof ie!="number"||!o.isInt32(ie))&&n("Invalid value for pApp property. Must be a legal WASM pointer value.");const j=_.xDestroy||0;j&&!u(j)&&n("xDestroy property must be a function.");let b=0;P(_,"deterministic")&&(b|=r.SQLITE_DETERMINISTIC),P(_,"directOnly")&&(b|=r.SQLITE_DIRECTONLY),P(_,"innocuous")&&(b|=r.SQLITE_INNOCUOUS),h=h.toLowerCase();const k=l||I,W=P(_,"arity"),H=typeof W=="number"?W:k.length?k.length-1:0;let Z;return se?Z=r.sqlite3_create_window_function(this.pointer,h,H,r.SQLITE_UTF8|b,ie||0,I,U,ee,ne,j):Z=r.sqlite3_create_function_v2(this.pointer,h,H,r.SQLITE_UTF8|b,ie||0,l,I,U,j),A.checkRc(this,Z),this},selectValue:function(f,h,l){return O(this,f,h,0,l)},selectValues:function(f,h,l){const _=this.prepare(f),u=[];try{for(_.bind(h);_.step();)u.push(_.get(0,l));_.reset()}finally{_.finalize()}return u},selectArray:function(f,h){return O(this,f,h,[])},selectObject:function(f,h){return O(this,f,h,{})},selectArrays:function(f,h){return S(this,f,h,"array")},selectObjects:function(f,h){return S(this,f,h,"object")},openStatementCount:function(){return this.pointer?Object.keys(g.get(this)).length:0},transaction:function(f){let h="BEGIN";arguments.length>1&&(/[^a-zA-Z]/.test(arguments[0])&&n(r.SQLITE_MISUSE,"Invalid argument for BEGIN qualifier."),h+=" "+arguments[0],f=arguments[1]),w(this).exec(h);try{const l=f(this);return this.exec("COMMIT"),l}catch(l){throw this.exec("ROLLBACK"),l}},savepoint:function(f){w(this).exec("SAVEPOINT oo1");try{const h=f(this);return this.exec("RELEASE oo1"),h}catch(h){throw this.exec("ROLLBACK to SAVEPOINT oo1; RELEASE SAVEPOINT oo1"),h}},checkRc:function(f){return R(this,f)}};const L=function(f){return f.pointer||n("Stmt has been closed."),f},$=function(f){let h=D[f==null?"null":typeof f];switch(h){case D.boolean:case D.null:case D.number:case D.string:return h;case D.bigint:if(s.bigIntEnabled)return h;default:return o.isBindableTypedArray(f)?D.blob:void 0}},c=function(f){return $(f)||n("Unsupported bind() argument type:",typeof f)},d=function(f,h){const l=typeof h=="number"?h:r.sqlite3_bind_parameter_index(f.pointer,h);return l===0||!o.isInt32(l)?n("Invalid bind() parameter name: "+h):(l<1||l>f.parameterCount)&&n("Bind index",h,"is out of range."),l},y=function(f,h){return f._lockedByExec&&n("Operation is illegal when statement is locked:",h),f},B=function f(h,l,_,u){y(L(h),"bind()"),f._||(f._tooBigInt=U=>n("BigInt value is too big to store without precision loss:",U),f._={string:function(U,ee,ne,se){const[ie,j]=s.allocCString(ne,!0);return(se?r.sqlite3_bind_blob:r.sqlite3_bind_text)(U.pointer,ee,ie,j,r.SQLITE_WASM_DEALLOC)}}),c(u),l=d(h,l);let I=0;switch(u==null?D.null:_){case D.null:I=r.sqlite3_bind_null(h.pointer,l);break;case D.string:I=f._.string(h,l,u,!1);break;case D.number:{let U;o.isInt32(u)?U=r.sqlite3_bind_int:typeof u=="bigint"?o.bigIntFits64(u)?s.bigIntEnabled?U=r.sqlite3_bind_int64:o.bigIntFitsDouble(u)?(u=Number(u),U=r.sqlite3_bind_double):f._tooBigInt(u):f._tooBigInt(u):(u=Number(u),s.bigIntEnabled&&Number.isInteger(u)?U=r.sqlite3_bind_int64:U=r.sqlite3_bind_double),I=U(h.pointer,l,u);break}case D.boolean:I=r.sqlite3_bind_int(h.pointer,l,u?1:0);break;case D.blob:{if(typeof u=="string"){I=f._.string(h,l,u,!0);break}else u instanceof ArrayBuffer?u=new Uint8Array(u):o.isBindableTypedArray(u)||n("Binding a value as a blob requires","that it be a string, Uint8Array, Int8Array, or ArrayBuffer.");const U=s.alloc(u.byteLength||1);s.heap8().set(u.byteLength?u:[0],U),I=r.sqlite3_bind_blob(h.pointer,l,U,u.byteLength,r.SQLITE_WASM_DEALLOC);break}default:t.config.warn("Unsupported bind() argument type:",u),n("Unsupported bind() argument type: "+typeof u)}return I&&A.checkRc(h.db.pointer,I),h._mayGet=!1,h};q.prototype={finalize:function(){if(this.pointer){y(this,"finalize()");const f=r.sqlite3_finalize(this.pointer);return delete g.get(this.db)[this.pointer],p.delete(this),delete this._mayGet,delete this.parameterCount,delete this._lockedByExec,delete this.db,f}},clearBindings:function(){return y(L(this),"clearBindings()"),r.sqlite3_clear_bindings(this.pointer),this._mayGet=!1,this},reset:function(f){y(this,"reset()"),f&&this.clearBindings();const h=r.sqlite3_reset(L(this).pointer);return this._mayGet=!1,R(this.db,h),this},bind:function(){L(this);let f,h;switch(arguments.length){case 1:f=1,h=arguments[0];break;case 2:f=arguments[0],h=arguments[1];break;default:n("Invalid bind() arguments.")}return h===void 0?this:(this.parameterCount||n("This statement has no bindable parameters."),this._mayGet=!1,h===null?B(this,f,D.null,h):Array.isArray(h)?(arguments.length!==1&&n("When binding an array, an index argument is not permitted."),h.forEach((l,_)=>B(this,_+1,c(l),l)),this):(h instanceof ArrayBuffer&&(h=new Uint8Array(h)),typeof h=="object"&&!o.isBindableTypedArray(h)?(arguments.length!==1&&n("When binding an object, an index argument is not permitted."),Object.keys(h).forEach(l=>B(this,l,c(h[l]),h[l])),this):B(this,f,c(h),h)))},bindAsBlob:function(f,h){L(this),arguments.length===1&&(h=f,f=1);const l=c(h);return D.string!==l&&D.blob!==l&&D.null!==l&&n("Invalid value type for bindAsBlob()"),B(this,f,D.blob,h)},step:function(){y(this,"step()");const f=r.sqlite3_step(L(this).pointer);switch(f){case r.SQLITE_DONE:return this._mayGet=!1;case r.SQLITE_ROW:return this._mayGet=!0;default:this._mayGet=!1,t.config.warn("sqlite3_step() rc=",f,r.sqlite3_js_rc_str(f),"SQL =",r.sqlite3_sql(this.pointer)),A.checkRc(this.db.pointer,f)}},stepReset:function(){return this.step(),this.reset()},stepFinalize:function(){try{const f=this.step();return this.reset(),f}finally{try{this.finalize()}catch{}}},get:function(f,h){if(L(this)._mayGet||n("Stmt.step() has not (recently) returned true."),Array.isArray(f)){let l=0;const _=this.columnCount;for(;l<_;)f[l]=this.get(l++);return f}else if(f&&typeof f=="object"){let l=0;const _=this.columnCount;for(;l<_;)f[r.sqlite3_column_name(this.pointer,l)]=this.get(l++);return f}switch(x(this,f),h===void 0?r.sqlite3_column_type(this.pointer,f):h){case r.SQLITE_NULL:return null;case r.SQLITE_INTEGER:if(s.bigIntEnabled){const l=r.sqlite3_column_int64(this.pointer,f);return l>=Number.MIN_SAFE_INTEGER&&l<=Number.MAX_SAFE_INTEGER?Number(l).valueOf():l}else{const l=r.sqlite3_column_double(this.pointer,f);return(l>Number.MAX_SAFE_INTEGER||ln("The pointer property is read-only.")};Object.defineProperty(q.prototype,"pointer",f),Object.defineProperty(A.prototype,"pointer",f)}if(Object.defineProperty(q.prototype,"columnCount",{enumerable:!1,get:function(){return r.sqlite3_column_count(this.pointer)},set:()=>n("The columnCount property is read-only.")}),t.oo1={DB:A,Stmt:q},o.isUIThread()){t.oo1.JsStorageDb=function(h="session"){const l=T.normalizeArgs(...arguments);h=l.filename,h!=="session"&&h!=="local"&&n("JsStorageDb db name must be one of 'session' or 'local'."),l.vfs="kvvfs",T.call(this,l)};const f=t.oo1.JsStorageDb;f.prototype=Object.create(A.prototype),f.clearStorage=r.sqlite3_js_kvvfs_clear,f.prototype.clearStorage=function(){return f.clearStorage(w(this).filename)},f.storageSize=r.sqlite3_js_kvvfs_size,f.prototype.storageSize=function(){return f.storageSize(w(this).filename)}}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.util;t.initWorker1API=(function(){const r=(...T)=>{throw new Error(T.join(" "))};globalThis.WorkerGlobalScope instanceof Function||r("initWorker1API() must be run from a Worker thread.");const s=this.sqlite3||r("Missing this.sqlite3 object."),o=s.oo1.DB,p=function(T){let A=g.idMap.get(T);return A||(A="db#"+ ++g.idSeq+"@"+T.pointer,g.idMap.set(T,A),A)},g={dbList:[],idSeq:0,idMap:new WeakMap,xfer:[],open:function(T){const A=new o(T);return this.dbs[p(A)]=A,this.dbList.indexOf(A)<0&&this.dbList.push(A),A},close:function(T,A){if(T){delete this.dbs[p(T)];const D=T.filename,q=n.sqlite3__wasm_db_vfs(T.pointer,0);T.close();const w=this.dbList.indexOf(T);w>=0&&this.dbList.splice(w,1),A&&D&&q&&n.sqlite3__wasm_vfs_unlink(q,D)}},post:function(T,A){A&&A.length?(globalThis.postMessage(T,Array.from(A)),A.length=0):globalThis.postMessage(T)},dbs:Object.create(null),getDb:function(T,A=!0){return this.dbs[T]||(A?r("Unknown (or closed) DB ID:",T):void 0)}},P=function(T=g.dbList[0]){return T&&T.pointer?T:r("DB is not opened.")},R=function(T,A=!0){const D=g.getDb(T.dbId,!1)||g.dbList[0];return A?P(D):D},z=function(){return g.dbList[0]&&p(g.dbList[0])},Q={open:function(T){const A=Object.create(null),D=T.args||Object.create(null);D.simulateError&&r("Throwing because of simulateError flag.");const q=Object.create(null);A.vfs=D.vfs,A.filename=D.filename||"";const w=g.open(A);return q.filename=w.filename,q.persistent=!!s.capi.sqlite3_js_db_uses_vfs(w.pointer,"opfs"),q.dbId=p(w),q.vfs=w.dbVfsName(),q},close:function(T){const A=R(T,!1),D={filename:A&&A.filename};if(A){const q=T.args&&typeof T.args=="object"?!!T.args.unlink:!1;g.close(A,q)}return D},exec:function(T){const A=typeof T.args=="string"?{sql:T.args}:T.args||Object.create(null);A.rowMode==="stmt"?r("Invalid rowMode for 'exec': stmt mode","does not work in the Worker API."):A.sql||r("'exec' requires input SQL.");const D=R(T);(A.callback||Array.isArray(A.resultRows))&&(D._blobXfer=g.xfer);const q=A.callback;let w=0;const x=!!A.columnNames;typeof q=="string"&&(x||(A.columnNames=[]),A.callback=function(N,O){g.post({type:q,columnNames:A.columnNames,rowNumber:++w,row:N},g.xfer)});try{const N=A.countChanges?D.changes(!0,A.countChanges===64):void 0;D.exec(A),N!==void 0&&(A.changeCount=D.changes(!0,A.countChanges===64)-N);const O=A.lastInsertRowId?s.capi.sqlite3_last_insert_rowid(D):void 0;O!==void 0&&(A.lastInsertRowId=O),A.callback instanceof Function&&(A.callback=q,g.post({type:q,columnNames:A.columnNames,rowNumber:null,row:void 0}))}finally{delete D._blobXfer,A.callback&&(A.callback=q)}return A},"config-get":function(){const T=Object.create(null),A=s.config;return["bigIntEnabled"].forEach(function(D){Object.getOwnPropertyDescriptor(A,D)&&(T[D]=A[D])}),T.version=s.version,T.vfsList=s.capi.sqlite3_js_vfs_list(),T},export:function(T){const A=R(T),D={byteArray:s.capi.sqlite3_js_db_export(A.pointer),filename:A.filename,mimetype:"application/x-sqlite3"};return g.xfer.push(D.byteArray.buffer),D},toss:function(T){r("Testing worker exception")}};globalThis.onmessage=async function(T){T=T.data;let A,D=T.dbId,q=T.type;const w=performance.now();try{Q.hasOwnProperty(q)&&Q[q]instanceof Function?A=await Q[q](T):r("Unknown db worker message type:",T.type)}catch(x){q="error",A={operation:T.type,message:x.message,errorClass:x.name,input:T},x.stack&&(A.stack=typeof x.stack=="string"?x.stack.split(/\n\s*/):x.stack)}D||(D=A.dbId||z()),g.post({type:q,dbId:D,messageId:T.messageId,workerReceivedTime:w,workerRespondTime:performance.now(),departureTime:T.departureTime,result:A},g.xfer)},globalThis.postMessage({type:"sqlite3-api",result:"worker1-ready"})}).bind({sqlite3:t})}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.wasm,r=t.capi,s=t.util.toss3,o=Object.create(null);t.vfs=o,r.sqlite3_vfs.prototype.registerVfs=function(p=!1){this instanceof t.capi.sqlite3_vfs||s("Expecting a sqlite3_vfs-type argument.");const g=r.sqlite3_vfs_register(this,p?1:0);return g&&s("sqlite3_vfs_register(",this,") failed with rc",g),this.pointer!==r.sqlite3_vfs_find(this.$zName)&&s("BUG: sqlite3_vfs_find(vfs.$zName) failed for just-installed VFS",this),this},o.installVfs=function(p){let g=0;const P=["io","vfs"];for(const R of P){const z=p[R];z&&(++g,z.struct.installMethods(z.methods,!!z.applyArgcCheck),R==="vfs"&&(!z.struct.$zName&&typeof z.name=="string"&&z.struct.addOnDispose(z.struct.$zName=n.allocCString(z.name)),z.struct.registerVfs(!!z.asDefault)))}return g||s("Misuse: installVfs() options object requires at least","one of:",P),this}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){if(!t.wasm.exports.sqlite3_declare_vtab)return;const n=t.wasm,r=t.capi,s=t.util.toss3,o=Object.create(null);t.vtab=o;const p=r.sqlite3_index_info;p.prototype.nthConstraint=function(R,z=!1){if(R<0||R>=this.$nConstraint)return!1;const Q=this.$aConstraint+p.sqlite3_index_constraint.structInfo.sizeof*R;return z?Q:new p.sqlite3_index_constraint(Q)},p.prototype.nthConstraintUsage=function(R,z=!1){if(R<0||R>=this.$nConstraint)return!1;const Q=this.$aConstraintUsage+p.sqlite3_index_constraint_usage.structInfo.sizeof*R;return z?Q:new p.sqlite3_index_constraint_usage(Q)},p.prototype.nthOrderBy=function(R,z=!1){if(R<0||R>=this.$nOrderBy)return!1;const Q=this.$aOrderBy+p.sqlite3_index_orderby.structInfo.sizeof*R;return z?Q:new p.sqlite3_index_orderby(Q)};const g=function(R,z){return(function(Q,T=!1){if(arguments.length===0&&(Q=new z),Q instanceof z)return this.set(Q.pointer,Q),Q;n.isPtr(Q)||t.SQLite3Error.toss("Invalid argument to",R+"()");let A=this.get(Q);return T&&this.delete(Q),A}).bind(new Map)},P=function(R,z){const Q=g(R,z);return Object.assign(Object.create(null),{StructType:z,create:T=>{const A=Q();return n.pokePtr(T,A.pointer),A},get:T=>Q(T),unget:T=>Q(T,!0),dispose:T=>{const A=Q(T,!0);A&&A.dispose()}})};o.xVtab=P("xVtab",r.sqlite3_vtab),o.xCursor=P("xCursor",r.sqlite3_vtab_cursor),o.xIndexInfo=R=>new r.sqlite3_index_info(R),o.xError=function R(z,Q,T){if(R.errorReporter instanceof Function)try{R.errorReporter("sqlite3_module::"+z+"(): "+Q.message)}catch{}let A;return Q instanceof t.WasmAllocError?A=r.SQLITE_NOMEM:arguments.length>2?A=T:Q instanceof t.SQLite3Error&&(A=Q.resultCode),A||r.SQLITE_ERROR},o.xError.errorReporter=console.error.bind(console),o.xRowid=(R,z)=>n.poke(R,z,"i64"),o.setupModule=function(R){let z=!1;const Q=this instanceof r.sqlite3_module?this:R.struct||(z=new r.sqlite3_module);try{const T=R.methods||s("Missing 'methods' object.");for(const A of Object.entries({xConnect:"xCreate",xDisconnect:"xDestroy"})){const D=A[0],q=A[1];T[D]===!0?T[D]=T[q]:T[q]===!0&&(T[q]=T[D])}if(R.catchExceptions){const A=function(w,x){return["xConnect","xCreate"].indexOf(w)>=0?function(N,O,S,L,$,c){try{return x(...arguments)||0}catch(d){return d instanceof t.WasmAllocError||(n.dealloc(n.peekPtr(c)),n.pokePtr(c,n.allocCString(d.message))),o.xError(w,d)}}:function(...N){try{return x(...N)||0}catch(O){return o.xError(w,O)}}},D=["xCreate","xConnect","xBestIndex","xDisconnect","xDestroy","xOpen","xClose","xFilter","xNext","xEof","xColumn","xRowid","xUpdate","xBegin","xSync","xCommit","xRollback","xFindFunction","xRename","xSavepoint","xRelease","xRollbackTo","xShadowName"],q=Object.create(null);for(const w of D){const x=T[w];if(x instanceof Function)w==="xConnect"&&T.xCreate===x?q[w]=T.xCreate:w==="xCreate"&&T.xConnect===x?q[w]=T.xConnect:q[w]=A(w,x);else continue}Q.installMethods(q,!1)}else Q.installMethods(T,!!R.applyArgcCheck);if(Q.$iVersion===0){let A;typeof R.iVersion=="number"?A=R.iVersion:Q.$xShadowName?A=3:Q.$xSavePoint||Q.$xRelease||Q.$xRollbackTo?A=2:A=1,Q.$iVersion=A}}catch(T){throw z&&z.dispose(),T}return Q},r.sqlite3_module.prototype.setupModule=function(R){return o.setupModule.call(this,R)}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=function r(s){if(!globalThis.SharedArrayBuffer||!globalThis.Atomics)return Promise.reject(new Error("Cannot install OPFS: Missing SharedArrayBuffer and/or Atomics. The server must emit the COOP/COEP response headers to enable those. See https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep"));if(typeof WorkerGlobalScope>"u")return Promise.reject(new Error("The OPFS sqlite3_vfs cannot run in the main thread because it requires Atomics.wait()."));if(!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle||!globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle||!navigator?.storage?.getDirectory)return Promise.reject(new Error("Missing required OPFS APIs."));(!s||typeof s!="object")&&(s=Object.create(null));const o=new URL(globalThis.location.href).searchParams;return o.has("opfs-disable")?Promise.resolve(t):(s.verbose===void 0&&(s.verbose=o.has("opfs-verbose")?+o.get("opfs-verbose")||2:1),s.sanityChecks===void 0&&(s.sanityChecks=o.has("opfs-sanity-check")),s.proxyUri===void 0&&(s.proxyUri=r.defaultProxyUri),typeof s.proxyUri=="function"&&(s.proxyUri=s.proxyUri()),new Promise(function(g,P){const R=[t.config.error,t.config.warn,t.config.log],z=(E,...C)=>{s.verbose>E&&R[E]("OPFS syncer:",...C)},Q=(...E)=>z(2,...E),T=(...E)=>z(1,...E),A=(...E)=>z(0,...E),D=t.util.toss,q=t.capi,w=t.util,x=t.wasm,N=q.sqlite3_vfs,O=q.sqlite3_file,S=q.sqlite3_io_methods,L=Object.create(null),$=()=>globalThis.FileSystemHandle&&globalThis.FileSystemDirectoryHandle&&globalThis.FileSystemFileHandle&&globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle&&navigator?.storage?.getDirectory;L.metrics={dump:function(){let E,C=0,M=0,J=0;for(E in u.opIds){const G=I[E];C+=G.count,M+=G.time,J+=G.wait,G.avgTime=G.count&&G.time?G.time/G.count:0,G.avgWait=G.count&&G.wait?G.wait/G.count:0}t.config.log(globalThis.location.href,"metrics for",globalThis.location.href,":",I,` +Total of`,C,"op(s) for",M,"ms (incl. "+J+" ms of waiting on the async side)"),t.config.log("Serialization metrics:",I.s11n),h.postMessage({type:"opfs-async-metrics"})},reset:function(){let E;const C=J=>J.count=J.time=J.wait=0;for(E in u.opIds)C(I[E]=Object.create(null));let M=I.s11n=Object.create(null);M=M.serialize=Object.create(null),M.count=M.time=0,M=I.s11n.deserialize=Object.create(null),M.count=M.time=0}};const c=new S,d=new N().addOnDispose(()=>c.dispose());let y;const B=E=>(y=!0,d.dispose(),P(E)),f=()=>(y=!1,g(t)),h=new Worker(new URL(""+new URL("sqlite3-opfs-async-proxy-C_otN2ZJ.js",import.meta.url).href,import.meta.url));setTimeout(()=>{y===void 0&&B(new Error("Timeout while waiting for OPFS async proxy worker."))},4e3),h._originalOnError=h.onerror,h.onerror=function(E){A("Error initializing OPFS asyncer:",E),B(new Error("Loading OPFS async Worker failed for unknown reasons."))};const l=q.sqlite3_vfs_find(null),_=l?new N(l):null;c.$iVersion=1,d.$iVersion=2,d.$szOsFile=q.sqlite3_file.structInfo.sizeof,d.$mxPathname=1024,d.$zName=x.allocCString("opfs"),d.$xDlOpen=d.$xDlError=d.$xDlSym=d.$xDlClose=null,d.addOnDispose("$zName",d.$zName,"cleanup default VFS wrapper",()=>_?_.dispose():null);const u=Object.create(null);u.verbose=s.verbose,u.littleEndian=(()=>{const E=new ArrayBuffer(2);return new DataView(E).setInt16(0,256,!0),new Int16Array(E)[0]===256})(),u.asyncIdleWaitTime=150,u.asyncS11nExceptions=1,u.fileBufferSize=1024*64,u.sabS11nOffset=u.fileBufferSize,u.sabS11nSize=d.$mxPathname*2,u.sabIO=new SharedArrayBuffer(u.fileBufferSize+u.sabS11nSize),u.opIds=Object.create(null);const I=Object.create(null);{let E=0;u.opIds.whichOp=E++,u.opIds.rc=E++,u.opIds.xAccess=E++,u.opIds.xClose=E++,u.opIds.xDelete=E++,u.opIds.xDeleteNoWait=E++,u.opIds.xFileSize=E++,u.opIds.xLock=E++,u.opIds.xOpen=E++,u.opIds.xRead=E++,u.opIds.xSleep=E++,u.opIds.xSync=E++,u.opIds.xTruncate=E++,u.opIds.xUnlock=E++,u.opIds.xWrite=E++,u.opIds.mkdir=E++,u.opIds["opfs-async-metrics"]=E++,u.opIds["opfs-async-shutdown"]=E++,u.opIds.retry=E++,u.sabOP=new SharedArrayBuffer(E*4),L.metrics.reset()}u.sq3Codes=Object.create(null),["SQLITE_ACCESS_EXISTS","SQLITE_ACCESS_READWRITE","SQLITE_BUSY","SQLITE_CANTOPEN","SQLITE_ERROR","SQLITE_IOERR","SQLITE_IOERR_ACCESS","SQLITE_IOERR_CLOSE","SQLITE_IOERR_DELETE","SQLITE_IOERR_FSYNC","SQLITE_IOERR_LOCK","SQLITE_IOERR_READ","SQLITE_IOERR_SHORT_READ","SQLITE_IOERR_TRUNCATE","SQLITE_IOERR_UNLOCK","SQLITE_IOERR_WRITE","SQLITE_LOCK_EXCLUSIVE","SQLITE_LOCK_NONE","SQLITE_LOCK_PENDING","SQLITE_LOCK_RESERVED","SQLITE_LOCK_SHARED","SQLITE_LOCKED","SQLITE_MISUSE","SQLITE_NOTFOUND","SQLITE_OPEN_CREATE","SQLITE_OPEN_DELETEONCLOSE","SQLITE_OPEN_MAIN_DB","SQLITE_OPEN_READONLY"].forEach(E=>{(u.sq3Codes[E]=q[E])===void 0&&D("Maintenance required: not found:",E)}),u.opfsFlags=Object.assign(Object.create(null),{OPFS_UNLOCK_ASAP:1,OPFS_UNLINK_BEFORE_OPEN:2,defaultUnlockAsap:!1});const U=(E,...C)=>{const M=u.opIds[E]||D("Invalid op ID:",E);u.s11n.serialize(...C),Atomics.store(u.sabOPView,u.opIds.rc,-1),Atomics.store(u.sabOPView,u.opIds.whichOp,M),Atomics.notify(u.sabOPView,u.opIds.whichOp);const J=performance.now();for(;Atomics.wait(u.sabOPView,u.opIds.rc,-1)!=="not-equal";);const G=Atomics.load(u.sabOPView,u.opIds.rc);if(I[E].wait+=performance.now()-J,G&&u.asyncS11nExceptions){const te=u.s11n.deserialize();te&&A(E+"() async error:",...te)}return G};L.debug={asyncShutdown:()=>{T("Shutting down OPFS async listener. The OPFS VFS will no longer work."),U("opfs-async-shutdown")},asyncRestart:()=>{T("Attempting to restart OPFS VFS async listener. Might work, might not."),h.postMessage({type:"opfs-async-restart"})}};const ee=()=>{if(u.s11n)return u.s11n;const E=new TextDecoder,C=new TextEncoder("utf-8"),M=new Uint8Array(u.sabIO,u.sabS11nOffset,u.sabS11nSize),J=new DataView(u.sabIO,u.sabS11nOffset,u.sabS11nSize);u.s11n=Object.create(null);const G=Object.create(null);G.number={id:1,size:8,getter:"getFloat64",setter:"setFloat64"},G.bigint={id:2,size:8,getter:"getBigInt64",setter:"setBigInt64"},G.boolean={id:3,size:4,getter:"getInt32",setter:"setInt32"},G.string={id:4};const te=Y=>G[typeof Y]||D("Maintenance required: this value type cannot be serialized.",Y),le=Y=>{switch(Y){case G.number.id:return G.number;case G.bigint.id:return G.bigint;case G.boolean.id:return G.boolean;case G.string.id:return G.string;default:D("Invalid type ID:",Y)}};return u.s11n.deserialize=function(Y=!1){++I.s11n.deserialize.count;const be=performance.now(),F=M[0],V=F?[]:null;if(F){const K=[];let X=1,_e,he,de;for(_e=0;_e{ie.start=performance.now(),ie.op=E,++I[E].count},b=()=>I[ie.op].time+=performance.now()-ie.start,k={xCheckReservedLock:function(E,C){return x.poke(C,0,"i32"),0},xClose:function(E){j("xClose");let C=0;const M=se[E];return M&&(delete se[E],C=U("xClose",E),M.sq3File&&M.sq3File.dispose()),b(),C},xDeviceCharacteristics:function(E){return q.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN},xFileControl:function(E,C,M){return q.SQLITE_NOTFOUND},xFileSize:function(E,C){j("xFileSize");let M=U("xFileSize",E);if(M==0)try{const J=u.s11n.deserialize()[0];x.poke(C,J,"i64")}catch(J){A("Unexpected error reading xFileSize() result:",J),M=u.sq3Codes.SQLITE_IOERR}return b(),M},xLock:function(E,C){j("xLock");const M=se[E];let J=0;return M.lockType?M.lockType=C:(J=U("xLock",E,C),J===0&&(M.lockType=C)),b(),J},xRead:function(E,C,M,J){j("xRead");const G=se[E];let te;try{te=U("xRead",E,M,Number(J)),(te===0||q.SQLITE_IOERR_SHORT_READ===te)&&x.heap8u().set(G.sabView.subarray(0,M),C)}catch(le){A("xRead(",arguments,") failed:",le,G),te=q.SQLITE_IOERR_READ}return b(),te},xSync:function(E,C){j("xSync"),++I.xSync.count;const M=U("xSync",E,C);return b(),M},xTruncate:function(E,C){j("xTruncate");const M=U("xTruncate",E,Number(C));return b(),M},xUnlock:function(E,C){j("xUnlock");const M=se[E];let J=0;return q.SQLITE_LOCK_NONE===C&&M.lockType&&(J=U("xUnlock",E,C)),J===0&&(M.lockType=C),b(),J},xWrite:function(E,C,M,J){j("xWrite");const G=se[E];let te;try{G.sabView.set(x.heap8u().subarray(C,C+M)),te=U("xWrite",E,M,Number(J))}catch(le){A("xWrite(",arguments,") failed:",le,G),te=q.SQLITE_IOERR_WRITE}return b(),te}},W={xAccess:function(E,C,M,J){j("xAccess");const G=U("xAccess",x.cstrToJs(C));return x.poke(J,G?0:1,"i32"),b(),0},xCurrentTime:function(E,C){return x.poke(C,24405875e-1+new Date().getTime()/864e5,"double"),0},xCurrentTimeInt64:function(E,C){return x.poke(C,24405875e-1*864e5+new Date().getTime(),"i64"),0},xDelete:function(E,C,M){j("xDelete");const J=U("xDelete",x.cstrToJs(C),M,!1);return b(),J},xFullPathname:function(E,C,M,J){return x.cstrncpy(J,C,M)!!J):M},L.getDirForFilename=async function(C,M=!1){const J=L.getResolvedPath(C,!0),G=J.pop();let te=L.rootDirectory;for(const le of J)le&&(te=await te.getDirectoryHandle(le,{create:!!M}));return[te,G]},L.mkdir=async function(E){try{return await L.getDirForFilename(E+"/filepart",!0),!0}catch{return!1}},L.entryExists=async function(E){try{const[C,M]=await L.getDirForFilename(E);return await C.getFileHandle(M),!0}catch{return!1}},L.randomFilename=ne,L.treeList=async function(){const E=async function M(J,G){G.name=J.name,G.dirs=[],G.files=[];for await(const te of J.values())if(te.kind==="directory"){const le=Object.create(null);G.dirs.push(le),await M(te,le)}else G.files.push(te.name)},C=Object.create(null);return await E(L.rootDirectory,C),C},L.rmfr=async function(){const E=L.rootDirectory,C={recurse:!0};for await(const M of E.values())E.removeEntry(M.name,C)},L.unlink=async function(E,C=!1,M=!1){try{const[J,G]=await L.getDirForFilename(E,!1);return await J.removeEntry(G,{recursive:C}),!0}catch(J){if(M)throw new Error("unlink(",arguments[0],") failed: "+J.message,{cause:J});return!1}},L.traverse=async function(E){const C={recursive:!0,directory:L.rootDirectory};typeof E=="function"&&(E={callback:E}),E=Object.assign(C,E||{}),async function J(G,te){for await(const le of G.values()){if(E.callback(le,G,te)===!1)return!1;if(E.recursive&&le.kind==="directory"&&await J(le,te+1)===!1)break}}(E.directory,0)};const H=async function(E,C){const[M,J]=await L.getDirForFilename(E,!0);let te=await(await M.getFileHandle(J,{create:!0})).createSyncAccessHandle(),le=0,Y,be=!1;try{for(te.truncate(0);(Y=await C())!==void 0;)Y instanceof ArrayBuffer&&(Y=new Uint8Array(Y)),le===0&&Y.byteLength>=15&&(w.affirmDbHeader(Y),be=!0),te.write(Y,{at:le}),le+=Y.byteLength;if((le<512||le%512!==0)&&D("Input size",le,"is not correct for an SQLite database."),!be){const F=new Uint8Array(20);te.read(F,{at:0}),w.affirmDbHeader(F)}return te.write(new Uint8Array([1,1]),{at:18}),le}catch(F){throw await te.close(),te=void 0,await M.removeEntry(J).catch(()=>{}),F}finally{te&&await te.close()}};if(L.importDb=async function(E,C){if(C instanceof Function)return H(E,C);C instanceof ArrayBuffer&&(C=new Uint8Array(C)),w.affirmIsDb(C);const M=C.byteLength,[J,G]=await L.getDirForFilename(E,!0);let te,le=0;try{return te=await(await J.getFileHandle(G,{create:!0})).createSyncAccessHandle(),te.truncate(0),le=te.write(C,{at:0}),le!=M&&D("Expected to write "+M+" bytes but wrote "+le+"."),te.write(new Uint8Array([1,1]),{at:18}),le}catch(Y){throw te&&(await te.close(),te=void 0),await J.removeEntry(G).catch(()=>{}),Y}finally{te&&await te.close()}},t.oo1){const E=function(...C){const M=t.oo1.DB.dbCtorHelper.normalizeArgs(...C);M.vfs=d.$zName,t.oo1.DB.dbCtorHelper.call(this,M)};E.prototype=Object.create(t.oo1.DB.prototype),t.oo1.OpfsDb=E,E.importDb=L.importDb,t.oo1.DB.dbCtorHelper.setVfsPostOpenCallback(d.pointer,function(C,M){M.capi.sqlite3_busy_timeout(C,1e4)})}const Z=function(){const E=x.scopedAllocPush(),C=new O;try{const M=C.pointer,J=q.SQLITE_OPEN_CREATE|q.SQLITE_OPEN_READWRITE|q.SQLITE_OPEN_MAIN_DB,G=x.scopedAlloc(8),te="/sanity/check/file"+ne(8),le=x.scopedAllocCString(te);let Y;if(u.s11n.serialize("This is ä string."),Y=u.s11n.deserialize(),Q("deserialize() says:",Y),Y[0]!=="This is ä string."&&D("String d13n error."),W.xAccess(d.pointer,le,0,G),Y=x.peek(G,"i32"),Q("xAccess(",te,") exists ?=",Y),Y=W.xOpen(d.pointer,le,M,J,G),Q("open rc =",Y,"state.sabOPView[xOpen] =",u.sabOPView[u.opIds.xOpen]),Y!==0){A("open failed with code",Y);return}W.xAccess(d.pointer,le,0,G),Y=x.peek(G,"i32"),Y||D("xAccess() failed to detect file."),Y=k.xSync(C.pointer,0),Y&&D("sync failed w/ rc",Y),Y=k.xTruncate(C.pointer,1024),Y&&D("truncate failed w/ rc",Y),x.poke(G,0,"i64"),Y=k.xFileSize(C.pointer,G),Y&&D("xFileSize failed w/ rc",Y),Q("xFileSize says:",x.peek(G,"i64")),Y=k.xWrite(C.pointer,le,10,1),Y&&D("xWrite() failed!");const be=x.scopedAlloc(16);Y=k.xRead(C.pointer,be,6,2),x.poke(be+6,0);let F=x.cstrToJs(be);Q("xRead() got:",F),F!=="sanity"&&D("Unexpected xRead() value."),W.xSleep&&(Q("xSleep()ing before close()ing..."),W.xSleep(d.pointer,2e3),Q("waking up from xSleep()")),Y=k.xClose(M),Q("xClose rc =",Y,"sabOPView =",u.sabOPView),Q("Deleting file:",te),W.xDelete(d.pointer,le,4660),W.xAccess(d.pointer,le,0,G),Y=x.peek(G,"i32"),Y&&D("Expecting 0 from xAccess(",te,") after xDelete()."),T("End of OPFS sanity checks.")}finally{C.dispose(),x.scopedAllocPop(E)}};h.onmessage=function({data:E}){switch(E.type){case"opfs-unavailable":B(new Error(E.payload.join(" ")));break;case"opfs-async-loaded":h.postMessage({type:"opfs-async-init",args:u});break;case"opfs-async-inited":{if(y===!0)break;try{t.vfs.installVfs({io:{struct:c,methods:k},vfs:{struct:d,methods:W}}),u.sabOPView=new Int32Array(u.sabOP),u.sabFileBufView=new Uint8Array(u.sabIO,0,u.fileBufferSize),u.sabS11nView=new Uint8Array(u.sabIO,u.sabS11nOffset,u.sabS11nSize),ee(),s.sanityChecks&&(T("Running sanity checks because of opfs-sanity-check URL arg..."),Z()),$()?navigator.storage.getDirectory().then(C=>{h.onerror=h._originalOnError,delete h._originalOnError,t.opfs=L,L.rootDirectory=C,Q("End of OPFS sqlite3_vfs setup.",d),f()}).catch(B):f()}catch(C){A(C),B(C)}break}default:{const C="Unexpected message from the OPFS async worker: "+JSON.stringify(E);A(C),B(new Error(C));break}}}}))};n.defaultProxyUri="sqlite3-opfs-async-proxy.js",globalThis.sqlite3ApiBootstrap.initializersAsync.push(async r=>{try{let s=n.defaultProxyUri;return r.scriptInfo.sqlite3Dir&&(n.defaultProxyUri=r.scriptInfo.sqlite3Dir+s),n().catch(o=>{r.config.warn("Ignoring inability to install OPFS sqlite3_vfs:",o.message)})}catch(s){return r.config.error("installOpfsVfs() exception:",s),Promise.reject(s)}})}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.util.toss,r=t.util.toss3,s=Object.create(null),o=t.capi,p=t.util,g=t.wasm,P=4096,R=512,z=4,Q=8,T=R+z,A=R,D=T,q=P,w=o.SQLITE_OPEN_MAIN_DB|o.SQLITE_OPEN_MAIN_JOURNAL|o.SQLITE_OPEN_SUPER_JOURNAL|o.SQLITE_OPEN_WAL,x=o.SQLITE_OPEN_MEMORY,N=".opaque",O=()=>Math.random().toString(36).slice(2),S=new TextDecoder,L=new TextEncoder,$=Object.assign(Object.create(null),{name:"opfs-sahpool",directory:void 0,initialCapacity:6,clearOnInit:!1,verbosity:2,forceReinitIfPreviouslyFailed:!1}),c=[t.config.error,t.config.warn,t.config.log];t.config.log;const d=t.config.warn;t.config.error;const y=new Map,B=j=>y.get(j),f=(j,b)=>{b?y.set(j,b):y.delete(j)},h=new Map,l=j=>h.get(j),_=(j,b)=>{b?h.set(j,b):h.delete(j)},u={xCheckReservedLock:function(j,b){const k=l(j);return k.log("xCheckReservedLock"),k.storeErr(),g.poke32(b,1),0},xClose:function(j){const b=l(j);b.storeErr();const k=b.getOFileForS3File(j);if(k)try{b.log(`xClose ${k.path}`),b.mapS3FileToOFile(j,!1),k.sah.flush(),k.flags&o.SQLITE_OPEN_DELETEONCLOSE&&b.deletePath(k.path)}catch(W){return b.storeErr(W,o.SQLITE_IOERR)}return 0},xDeviceCharacteristics:function(j){return o.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN},xFileControl:function(j,b,k){return o.SQLITE_NOTFOUND},xFileSize:function(j,b){const k=l(j);k.log("xFileSize");const H=k.getOFileForS3File(j).sah.getSize()-q;return g.poke64(b,BigInt(H)),0},xLock:function(j,b){const k=l(j);k.log(`xLock ${b}`),k.storeErr();const W=k.getOFileForS3File(j);return W.lockType=b,0},xRead:function(j,b,k,W){const H=l(j);H.storeErr();const Z=H.getOFileForS3File(j);H.log(`xRead ${Z.path} ${k} @ ${W}`);try{const E=Z.sah.read(g.heap8u().subarray(b,b+k),{at:q+Number(W)});return Eb&&g.poke8(k+b-1,0)}catch{return o.SQLITE_NOMEM}finally{g.scopedAllocPop(Z)}}return H?H.sqlite3Rc||o.SQLITE_IOERR:0},xOpen:function(b,k,W,H,Z){const E=B(b);try{H&=~x,E.log(`xOpen ${g.cstrToJs(k)} ${H}`);const C=k&&g.peek8(k)?E.getPath(k):O();let M=E.getSAHForPath(C);!M&&H&o.SQLITE_OPEN_CREATE&&(E.getFileCount()f(b.pointer,0)),W&&(b.$xRandomness=W.$xRandomness,b.$xSleep=W.$xSleep,W.dispose()),!b.$xRandomness&&!U.xRandomness&&(U.xRandomness=function(H,Z,E){const C=g.heap8u();let M=0;for(;M0),t.vfs.installVfs({vfs:{struct:b,methods:U}}),b};class ne{vfsDir;#e;#o;#a;#r=new Map;#t=new Map;#s=new Set;#l=new Map;#n=new Uint8Array(T);#c;#i;#u;constructor(b=Object.create(null)){this.#u=b.verbosity??$.verbosity,this.vfsName=b.name||$.name,this.#i=ee(this.vfsName),f(this.#i.pointer,this),this.vfsDir=b.directory||"."+this.vfsName,this.#c=new DataView(this.#n.buffer,this.#n.byteOffset),this.isReady=this.reset(!!(b.clearOnInit??$.clearOnInit)).then(()=>{if(this.$error)throw this.$error;return this.getCapacity()?Promise.resolve(void 0):this.addCapacity(b.initialCapacity||$.initialCapacity)})}#_(b,...k){this.#u>b&&c[b](this.vfsName+":",...k)}log(...b){this.#_(2,...b)}warn(...b){this.#_(1,...b)}error(...b){this.#_(0,...b)}getVfs(){return this.#i}getCapacity(){return this.#r.size}getFileCount(){return this.#t.size}getFileNames(){const b=[];for(const k of this.#t.keys())b.push(k);return b}async addCapacity(b){for(let k=0;k{try{const Z=await H.createSyncAccessHandle();if(this.#r.set(Z,W),b)Z.truncate(q),this.setAssociatedPath(Z,"",0);else{const E=this.getAssociatedPath(Z);E?this.#t.set(E,Z):this.#s.add(Z)}}catch(Z){throw this.storeErr(Z),this.releaseAccessHandles(),Z}}))}getAssociatedPath(b){b.read(this.#n,{at:0});const k=this.#c.getUint32(A);if(this.#n[0]&&(k&o.SQLITE_OPEN_DELETEONCLOSE||(k&w)===0))return d(`Removing file with unexpected flags ${k.toString(16)}`,this.#n),this.setAssociatedPath(b,"",0),"";const W=new Uint32Array(Q/4);b.read(W,{at:D});const H=this.computeDigest(this.#n,k);if(W.every((Z,E)=>Z===H[E])){const Z=this.#n.findIndex(E=>E===0);return Z===0&&b.truncate(q),Z?S.decode(this.#n.subarray(0,Z)):""}else return d("Disassociating file with bad digest."),this.setAssociatedPath(b,"",0),""}setAssociatedPath(b,k,W){const H=L.encodeInto(k,this.#n);R<=H.written+1&&n("Path too long:",k),k&&W&&(W|=x),this.#n.fill(0,H.written,R),this.#c.setUint32(A,W);const Z=this.computeDigest(this.#n,W);b.write(this.#n,{at:0}),b.write(Z,{at:D}),b.flush(),k?(this.#t.set(k,b),this.#s.delete(b)):(b.truncate(q),this.#s.add(b))}computeDigest(b,k){if(k&x){let W=3735928559,H=1103547991;for(const Z of b)W=Math.imul(W^Z,2654435761),H=Math.imul(H^Z,104729);return new Uint32Array([W>>>0,H>>>0])}else return new Uint32Array([0,0])}async reset(b){await this.isReady;let k=await navigator.storage.getDirectory(),W;for(const H of this.vfsDir.split("/"))H&&(W=k,k=await k.getDirectoryHandle(H,{create:!0}));return this.#e=k,this.#a=W,this.#o=await this.#e.getDirectoryHandle(N,{create:!0}),this.releaseAccessHandles(),this.acquireAccessHandles(b)}getPath(b){return g.isPtr(b)&&(b=g.cstrToJs(b)),(b instanceof URL?b:new URL(b,"file://localhost/")).pathname}deletePath(b){const k=this.#t.get(b);return k&&(this.#t.delete(b),this.setAssociatedPath(k,"",0)),!!k}storeErr(b,k){return b&&(b.sqlite3Rc=k||o.SQLITE_IOERR,this.error(b)),this.$error=b,k}popErr(){const b=this.$error;return this.$error=void 0,b}nextAvailableSAH(){const[b]=this.#s.keys();return b}getOFileForS3File(b){return this.#l.get(b)}mapS3FileToOFile(b,k){k?(this.#l.set(b,k),_(b,this)):(this.#l.delete(b),_(b,!1))}hasFilename(b){return this.#t.has(b)}getSAHForPath(b){return this.#t.get(b)}async removeVfs(){if(!this.#i.pointer||!this.#o)return!1;o.sqlite3_vfs_unregister(this.#i.pointer),this.#i.dispose(),delete s[this.vfsName];try{this.releaseAccessHandles(),await this.#e.removeEntry(N,{recursive:!0}),this.#o=void 0,await this.#a.removeEntry(this.#e.name,{recursive:!0}),this.#e=this.#a=void 0}catch(b){t.config.error(this.vfsName,"removeVfs() failed with no recovery strategy:",b)}return!0}pauseVfs(){return this.#l.size>0&&t.SQLite3Error.toss(o.SQLITE_MISUSE,"Cannot pause VFS",this.vfsName,"because it has opened files."),this.#r.size>0&&(o.sqlite3_vfs_unregister(this.vfsName),this.releaseAccessHandles()),this}isPaused(){return this.#r.size===0}async unpauseVfs(){return this.#r.size===0?this.acquireAccessHandles(!1).then(()=>o.sqlite3_vfs_register(this.#i,0),this):this}exportFile(b){const k=this.#t.get(b)||n("File not found:",b),W=k.getSize()-q,H=new Uint8Array(W>0?W:0);if(W>0){const Z=k.read(H,{at:q});Z!=W&&n("Expected to read "+W+" bytes but read "+Z+".")}return H}async importDbChunked(b,k){const W=this.#t.get(b)||this.nextAvailableSAH()||n("No available handles to import to.");W.truncate(0);let H=0,Z,E=!1;try{for(;(Z=await k())!==void 0;)Z instanceof ArrayBuffer&&(Z=new Uint8Array(Z)),H===0&&Z.byteLength>=15&&(p.affirmDbHeader(Z),E=!0),W.write(Z,{at:q+H}),H+=Z.byteLength;if((H<512||H%512!==0)&&n("Input size",H,"is not correct for an SQLite database."),!E){const C=new Uint8Array(20);W.read(C,{at:0}),p.affirmDbHeader(C)}W.write(new Uint8Array([1,1]),{at:q+18})}catch(C){throw this.setAssociatedPath(W,"",0),C}return this.setAssociatedPath(W,b,o.SQLITE_OPEN_MAIN_DB),H}importDb(b,k){if(k instanceof ArrayBuffer)k=new Uint8Array(k);else if(k instanceof Function)return this.importDbChunked(b,k);const W=this.#t.get(b)||this.nextAvailableSAH()||n("No available handles to import to."),H=k.byteLength;(H<512||H%512!=0)&&n("Byte array size is invalid for an SQLite db.");const Z="SQLite format 3";for(let C=0;Cthis)}isPaused(){return this.#e.isPaused()}}const ie=async()=>{const j=await navigator.storage.getDirectory(),b=".opfs-sahpool-sync-check-"+O(),H=(await(await j.getFileHandle(b,{create:!0})).createSyncAccessHandle()).close();return await H,await j.removeEntry(b),H?.then&&n("The local OPFS API is too old for opfs-sahpool:","it has an async FileSystemSyncAccessHandle.close() method."),!0};t.installOpfsSAHPoolVfs=async function(j=Object.create(null)){j=Object.assign(Object.create(null),$,j||{});const b=j.name;if(j.$testThrowPhase1)throw j.$testThrowPhase1;if(s[b])try{return await s[b]}catch(k){if(j.forceReinitIfPreviouslyFailed)delete s[b];else throw k}return!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle||!globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle||!navigator?.storage?.getDirectory?s[b]=Promise.reject(new Error("Missing required OPFS APIs.")):s[b]=ie().then(async function(){if(j.$testThrowPhase2)throw j.$testThrowPhase2;const k=new ne(j);return k.isReady.then(async()=>{const W=new se(k);if(t.oo1){const H=t.oo1,Z=k.getVfs(),E=function(...C){const M=H.DB.dbCtorHelper.normalizeArgs(...C);M.vfs=Z.$zName,H.DB.dbCtorHelper.call(this,M)};E.prototype=Object.create(H.DB.prototype),W.OpfsSAHPoolDb=E}return k.log("VFS initialized."),W}).catch(async W=>{throw await k.removeVfs().catch(()=>{}),W})}).catch(k=>s[b]=Promise.reject(k))}}),typeof i<"u"){const t=Object.assign(Object.create(null),{exports:typeof m>"u"?i.asm:m,memory:i.wasmMemory},globalThis.sqlite3ApiConfig||{});globalThis.sqlite3ApiConfig=t;let n;try{n=globalThis.sqlite3ApiBootstrap()}catch(r){throw console.error("sqlite3ApiBootstrap() error:",r),r}finally{delete globalThis.sqlite3ApiBootstrap,delete globalThis.sqlite3ApiConfig}i.sqlite3=n}else console.warn("This is not running in an Emscripten module context, so","globalThis.sqlite3ApiBootstrap() is _not_ being called due to lack","of config info for the WASM environment.","It must be called manually.")},ge=Ne,ge}})();const Xn=(function(){const qe=Ft;if(!qe)throw new Error("Expecting globalThis.sqlite3InitModule to be defined by the Emscripten build.");const ce=globalThis.sqlite3InitModuleState=Object.assign(Object.create(null),{moduleScript:globalThis?.document?.currentScript,isWorker:typeof WorkerGlobalScope<"u",location:globalThis.location,urlParams:globalThis?.location?.href?new URL(globalThis.location.href).searchParams:new URLSearchParams});if(ce.debugModule=ce.urlParams.has("sqlite3.debugModule")?(...ge)=>console.warn("sqlite3.debugModule:",...ge):()=>{},ce.urlParams.has("sqlite3.dir"))ce.sqlite3Dir=ce.urlParams.get("sqlite3.dir")+"/";else if(ce.moduleScript){const ge=ce.moduleScript.src.split("/");ge.pop(),ce.sqlite3Dir=ge.join("/")+"/"}if(globalThis.sqlite3InitModule=function ge(...i){return qe(...i).then(ye=>{ye.runSQLite3PostLoadInit(ye);const Ee=ye.sqlite3;Ee.scriptInfo=ce,ge.__isUnderTest&&(Ee.__isUnderTest=!0);const Ne=Ee.asyncPostInit;return delete Ee.asyncPostInit,Ne()}).catch(ye=>{throw console.error("Exception loading sqlite3 module:",ye),ye})},globalThis.sqlite3InitModule.ready=qe.ready,globalThis.sqlite3InitModuleState.moduleScript){const ge=globalThis.sqlite3InitModuleState;let i=ge.moduleScript.src.split("/");i.pop(),ge.scriptDir=i.join("/")+"/"}return ce.debugModule("sqlite3InitModuleState =",ce),globalThis.sqlite3InitModule})();Ft=Xn;globalThis.sqlite3Worker1Promiser=function qe(ce=qe.defaultConfig){if(arguments.length===1&&typeof arguments[0]=="function"){const re=ce;ce=Object.assign(Object.create(null),qe.defaultConfig),ce.onready=re}else ce=Object.assign(Object.create(null),qe.defaultConfig,ce);const ge=Object.create(null),i=function(){},ye=ce.onerror||i,Ee=ce.debug||i,Ne=ce.generateMessageId?void 0:Object.create(null),Je=ce.generateMessageId||function(re){return re.type+"#"+(Ne[re.type]=(Ne[re.type]||0)+1)},Oe=(...re)=>{throw new Error(re.join(" "))};ce.worker||(ce.worker=qe.defaultConfig.worker),typeof ce.worker=="function"&&(ce.worker=ce.worker());let Fe,Qe;return ce.worker.onmessage=function(re){re=re.data,Ee("worker1.onmessage",re);let me=ge[re.messageId];if(!me){if(re&&re.type==="sqlite3-api"&&re.result==="worker1-ready"){ce.onready&&ce.onready(Qe);return}if(me=ge[re.type],me&&me.onrow){me.onrow(re);return}ce.onunhandled?ce.onunhandled(arguments[0]):ye("sqlite3Worker1Promiser() unhandled worker message:",re);return}switch(delete ge[re.messageId],re.type){case"error":me.reject(re);return;case"open":Fe||(Fe=re.dbId);break;case"close":re.dbId===Fe&&(Fe=void 0);break}try{me.resolve(re)}catch(Ae){me.reject(Ae)}},Qe=function(){let re;arguments.length===1?re=arguments[0]:arguments.length===2?(re=Object.create(null),re.type=arguments[0],re.args=arguments[1],re.dbId=re.args.dbId):Oe("Invalid arguments for sqlite3Worker1Promiser()-created factory."),!re.dbId&&re.type!=="open"&&(re.dbId=Fe),re.messageId=Je(re),re.departureTime=performance.now();const me=Object.create(null);me.message=re;let Ae;re.type==="exec"&&re.args&&(typeof re.args.callback=="function"?(Ae=re.messageId+":row",me.onrow=re.args.callback,re.args.callback=Ae,ge[Ae]=me):typeof re.args.callback=="string"&&Oe("exec callback may not be a string when using the Promise interface."));let Le=new Promise(function(Me,He){me.resolve=Me,me.reject=He,ge[re.messageId]=me,Ee("Posting",re.type,"message to Worker dbId="+(Fe||"default")+":",re),ce.worker.postMessage(re)});return Ae&&(Le=Le.finally(()=>delete ge[Ae])),Le}};globalThis.sqlite3Worker1Promiser.defaultConfig={worker:function(){return new Worker(new URL(""+new URL("sqlite3-worker1-bundler-friendly-Bv6ABw9v.js",import.meta.url).href,import.meta.url),{type:"module"})},onerror:(...qe)=>console.error("worker1 promiser error",...qe)};sqlite3Worker1Promiser.v2=(function(qe){let ce;typeof qe=="function"?(ce=qe,qe={}):typeof qe?.onready=="function"&&(ce=qe.onready,delete qe.onready);const ge=Object.create(null);qe=Object.assign(qe||Object.create(null),{onready:async function(ye){try{ce&&await ce(ye),ge.resolve(ye)}catch(Ee){ge.reject(Ee)}}});const i=new Promise(function(ye,Ee){ge.resolve=ye,ge.reject=Ee});try{this.original(qe)}catch(ye){ge.reject(ye)}return i}).bind({original:sqlite3Worker1Promiser});sqlite3Worker1Promiser.v2;const er=globalThis.sqlite3Worker1Promiser;export{Ft as default,er as sqlite3Worker1Promiser}; diff --git a/docus/dist/_nuxt/CrCM1jgP.js b/docus/dist/_nuxt/CrCM1jgP.js new file mode 100644 index 0000000..a9fa1f3 --- /dev/null +++ b/docus/dist/_nuxt/CrCM1jgP.js @@ -0,0 +1 @@ +const o={or:"или",error:{title:"Страница не найдена",description:"Извините, но запрашиваемая страница не найдена."}},a={copy:{page:"Копировать страницу",link:"Копировать Markdown-страницу",view:"Просмотреть как Markdown",gpt:"Открыть в ChatGPT",claude:"Открыть в Claude"},links:"Сообщество",toc:"На этой странице",menu:"Меню",report:"Сообщить о проблеме",edit:"Редактировать эту страницу"},e={copyLogo:"Копировать логотип",copyWordmark:"Копировать словесный знак",downloadLogo:"Скачать логотип",downloadWordmark:"Скачать словесный знак",brandAssets:"Материалы бренда",logoCopied:"Логотип скопирован",wordmarkCopied:"Словесный знак скопирован",logoDownloaded:"Логотип скачан",wordmarkDownloaded:"Словесный знак скачан",copyLogoFailed:"Не удалось скопировать логотип",copyWordmarkFailed:"Не удалось скопировать словесный знак"},n={title:"Спросите ИИ",placeholder:"Задайте вопрос...",tooltip:"Задайте вопрос ИИ",tryAsking:"Попробуйте задать вопрос",askAnything:"Спросите что угодно...",clearChat:"Очистить чат",close:"Закрыть",expand:"Развернуть",collapse:"Свернуть",thinking:"Думаю...",askMeAnything:"Спросите что угодно",askMeAnythingDescription:"Получите помощь в навигации по документации, понимании концепций и поиске ответов.",faq:"Часто задаваемые вопросы",chatCleared:"Чат очищается при обновлении",lineBreak:"Разрыв строки",explainWithAi:"Объясните с помощью ИИ",toolListPages:"Перечисленные страницы документации",toolReadPage:"Читать",loading:{searching:"Поиск документации",reading:"Чтение документации",analyzing:"Анализ контента",finding:"Поиск лучшего ответа",finished:"Использованные источники"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/Crnsupp9.js b/docus/dist/_nuxt/Crnsupp9.js new file mode 100644 index 0000000..09dc1bf --- /dev/null +++ b/docus/dist/_nuxt/Crnsupp9.js @@ -0,0 +1 @@ +const o={or:"ឬ",error:{title:"រកមិនឃើញទំព័រ",description:"យើងសុំទោស ប៉ុន្តែទំព័រដែលអ្នកកំពុងស្វែងរកមិនអាចរកឃើញទេ។"}},a={copy:{page:"ចម្លងទំព័រ",link:"ចម្លងទំព័រ Markdown",view:"មើលជា Markdown",gpt:"បើកនៅ ChatGPT",claude:"បើកនៅ Claude"},links:"សហគមន៍",toc:"នៅលើទំព័រនេះ",menu:"ម៉ឺនុយ",report:"រាយការណ៍បញ្ហា",edit:"កែសម្រួលទំព័រនេះ"},e={copyLogo:"ចម្លងនិមិត្តសញ្ញា",copyWordmark:"ចម្លង wordmark",downloadLogo:"ទាញយកនិមិត្តសញ្ញា",downloadWordmark:"ទាញយក wordmark",brandAssets:"ទ្រព្យសម្បត្តិម៉ាក",logoCopied:"បានចម្លងនិមិត្តសញ្ញា",wordmarkCopied:"បានចម្លង wordmark",logoDownloaded:"បានទាញយកនិមិត្តសញ្ញា",wordmarkDownloaded:"បានទាញយក wordmark",copyLogoFailed:"មិនអាចចម្លងនិមិត្តសញ្ញាបានទេ",copyWordmarkFailed:"មិនអាចចម្លង wordmark បានទេ"},d={title:"សួរ AI",placeholder:"សំណួរមួយ...",tooltip:"សួរសំណួរទៅកាន់ AI",tryAsking:"ព្យាយាមសួរសំណួរមួយ",askAnything:"សួរអ្វីក៏បាន...",clearChat:"ជម្រះការជជែកកំសាន្ត",close:"បិទ",expand:"ពង្រីក",collapse:"បង្រួម",thinking:"កំពុងគិត...",askMeAnything:"សួរអ្វីក៏បាន",askMeAnythingDescription:"ទទួលបានជំនួយក្នុងការរុករកឯកសារ ការយល់ដឹងអំពីគោលគំនិត និងការស្វែងរកចម្លើយ ។",faq:"សំណួរដែលចោទសួរញឹកញាប់",chatCleared:"បានសម្អាតការជជែកកំសាន្តនៅពេលរីហ្វ្រែស",lineBreak:"ការបំបែកបន្ទាត់",explainWithAi:"ពន្យល់ដោយ AI",toolListPages:"ទំព័រឯកសារដែលបានចុះបញ្ជី",toolReadPage:"អាន",loading:{searching:"ការស្វែងរកឯកសារ",reading:"ការ អាន តាម រយៈ ឯកសារ",analyzing:"ការវិភាគមាតិកា",finding:"ការស្វែងរកចម្លើយដែលត្រឹមត្រូវបំផុត",finished:"ប្រភពដែលបានប្រើ"}},n={common:o,docs:a,logo:e,assistant:d};export{d as assistant,o as common,n as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/CsIQayK_.js b/docus/dist/_nuxt/CsIQayK_.js new file mode 100644 index 0000000..877a106 --- /dev/null +++ b/docus/dist/_nuxt/CsIQayK_.js @@ -0,0 +1 @@ +import{a0 as i,a1 as p,a as n,p as c,ac as d,s as a,P as f,c as m,am as t,o as v,q as y}from"./B3fabVUf.js";const C={base:"my-5 divide-y divide-default *:not-last:pb-5"},P={__name:"ProseFieldGroup",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(s){const e=s,o=i(),l=p("prose.fieldGroup",e),r=m(()=>t({extend:t(C),...o.ui?.prose?.fieldGroup||{}}));return(u,b)=>(v(),n(a(f),{as:s.as,class:d(r.value({class:[a(l)?.base,e.class]}))},{default:c(()=>[y(u.$slots,"default")]),_:3},8,["as","class"]))}};export{P as default}; diff --git a/docus/dist/_nuxt/CsxHJ_Yb.js b/docus/dist/_nuxt/CsxHJ_Yb.js new file mode 100644 index 0000000..54bc819 --- /dev/null +++ b/docus/dist/_nuxt/CsxHJ_Yb.js @@ -0,0 +1 @@ +const a={or:"atau",error:{title:"Halaman tidak dijumpai",description:"Kami mohon maaf, tetapi halaman yang anda cari tidak dapat dijumpai."}},n={copy:{page:"Salin halaman",link:"Salin halaman Markdown",view:"Lihat sebagai Markdown",gpt:"Buka di ChatGPT",claude:"Buka di Claude"},links:"Komuniti",toc:"Dalam halaman ini",menu:"Menu",report:"Laporkan masalah",edit:"Edit halaman ini"},o={copyLogo:"Salin logo",copyWordmark:"Salin wordmark",downloadLogo:"Muat turun logo",downloadWordmark:"Muat turun wordmark",brandAssets:"Aset jenama",logoCopied:"Logo disalin",wordmarkCopied:"Wordmark disalin",logoDownloaded:"Logo dimuat turun",wordmarkDownloaded:"Wordmark dimuat turun",copyLogoFailed:"Gagal menyalin logo",copyWordmarkFailed:"Gagal menyalin wordmark"},i={title:"Tanya AI",placeholder:"Tanya soalan...",tooltip:"Tanya soalan kepada AI",tryAsking:"Cuba tanya soalan",askAnything:"Tanya apa-apa...",clearChat:"Kosongkan sembang",close:"Tutup",expand:"Kembangkan",collapse:"Kecilkan",thinking:"Berfikir...",askMeAnything:"Tanya apa sahaja",askMeAnythingDescription:"Dapatkan bantuan untuk menavigasi dokumentasi, memahami konsep, dan mencari jawapan.",faq:"Soalan Lazim",chatCleared:"Sembang dikosongkan semasa segar semula",lineBreak:"Pemutus baris",explainWithAi:"Terangkan dengan AI",toolListPages:"Halaman dokumentasi tersenarai",toolReadPage:"Baca",loading:{searching:"Mencari dokumentasi",reading:"Membaca dokumen",analyzing:"Menganalisis kandungan",finding:"Mencari jawapan terbaik",finished:"Sumber yang digunakan"}},e={common:a,docs:n,logo:o,assistant:i};export{i as assistant,a as common,e as default,n as docs,o as logo}; diff --git a/docus/dist/_nuxt/CuQFqh_W.js b/docus/dist/_nuxt/CuQFqh_W.js new file mode 100644 index 0000000..c412ff2 --- /dev/null +++ b/docus/dist/_nuxt/CuQFqh_W.js @@ -0,0 +1 @@ +const o={or:"অথবা",error:{title:"পেজ খুঁজে পাওয়া যায়নি",description:"দুঃখিত, আপনি যে পেজটি খুঁজছেন সেটি পাওয়া যায়নি।"}},a={copy:{page:"পেজ কপি করুন",link:"Markdown পেজ কপি করুন",view:"Markdown হিসেবে দেখুন",gpt:"ChatGPT এ খুলুন",claude:"Claude এ খুলুন"},links:"কমিউনিটি",toc:"এই পেজে",menu:"মেনু",report:"সমস্যা রিপোর্ট করুন",edit:"এই পেজ সম্পাদনা করুন"},e={copyLogo:"লোগো কপি করুন",copyWordmark:"ওয়ার্ডমার্ক কপি করুন",downloadLogo:"লোগো ডাউনলোড করুন",downloadWordmark:"ওয়ার্ডমার্ক ডাউনলোড করুন",brandAssets:"ব্র্যান্ড অ্যাসেট",logoCopied:"লোগো কপি হয়েছে",wordmarkCopied:"ওয়ার্ডমার্ক কপি হয়েছে",logoDownloaded:"লোগো ডাউনলোড হয়েছে",wordmarkDownloaded:"ওয়ার্ডমার্ক ডাউনলোড হয়েছে",copyLogoFailed:"লোগো কপি করা যায়নি",copyWordmarkFailed:"ওয়ার্ডমার্ক কপি করা যায়নি"},n={title:"AI-কে জিজ্ঞাসা করুন",placeholder:"একটি প্রশ্ন জিজ্ঞাসা করুন...",tooltip:"AI-কে একটি প্রশ্ন জিজ্ঞাসা করুন",tryAsking:"একটি প্রশ্ন জিজ্ঞাসা করার চেষ্টা করুন",askAnything:"যেকোনো কিছু জিজ্ঞাসা করুন...",clearChat:"চ্যাট সাফ করুন",close:"বন্ধ করুন",expand:"প্রসারিত করুন",collapse:"সঙ্কুচিত",thinking:"চিন্তা করা হচ্ছে...",askMeAnything:"যেকোনো কিছু জিজ্ঞাসা করুন",askMeAnythingDescription:"ডকুমেন্টেশন নেভিগেট করতে, ধারণাগুলি বুঝতে এবং উত্তর খুঁজে পেতে সহায়তা পান ।",faq:"প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী",chatCleared:"রিফ্রেশে চ্যাট সাফ করা হয়",lineBreak:"লাইন ব্রেক",explainWithAi:"AI এর সাথে ব্যাখ্যা করুন",toolListPages:"তালিকাভুক্ত ডকুমেন্টেশন পৃষ্ঠাগুলি",toolReadPage:"পড়ুন",loading:{searching:"ডকুমেন্টেশন অনুসন্ধান করা হচ্ছে",reading:"ডকুমেন্টের মাধ্যমে পড়া",analyzing:"বিষয়বস্তু বিশ্লেষণ করা হচ্ছে",finding:"সেরা উত্তর খোঁজা",finished:"ব্যবহৃত উৎসসমূহ"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/CxBf5103.js b/docus/dist/_nuxt/CxBf5103.js new file mode 100644 index 0000000..f1c49a6 --- /dev/null +++ b/docus/dist/_nuxt/CxBf5103.js @@ -0,0 +1,4 @@ +import{c as z,t as ie,u as Gt,d as ne,w as ve,o as E,a as B,m as V,V as Ut,b as Ye,e as H,f as Q,F as ae,r as me,i as Yt,g as Qt,h as ke,j as Xt,k as Jt,l as _t,n as xe,p as O,q as j,s as f,P as he,v as te,x as Te,y as Zt,z as Qe,A as Mt,B as Z,C as ye,D as Xe,E as es,G as ts,H as ss,I as wt,J as kt,K as is,L as ns,M as rt,N as rs,O as as,Q as Je,R as ls,S as os,T as us,U as cs,W as ds,X as hs,Y as fs,Z as se,_ as Ft,$ as Lt,a0 as zt,a1 as Tt,a2 as ps,a3 as Ke,a4 as gs,a5 as ms,a6 as Bt,a7 as vs,a8 as ys,a9 as Re,aa as bs,ab as Se,ac as q,ad as xs,ae as Ss,af as at,ag as pe,ah as Be,ai as As,aj as Dt,ak as lt,al as $e,am as _e,an as Cs,ao as qe,ap as Is,aq as Es,ar as _s,as as Ms,at as ws,au as ks,av as ot,aw as ut,ax as ct,ay as Fs,az as Ls,aA as zs}from"./B3fabVUf.js";import{f as Ie}from"./C5B99YjC.js";import{_ as Ts}from"./DJxuwfoz.js";function Bs(n){return z(()=>ie(n)?!!Gt(n)?.closest("form"):!0)}function Ds(){return{ALT:"Alt",ARROW_DOWN:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",BACKSPACE:"Backspace",CAPS_LOCK:"CapsLock",CONTROL:"Control",DELETE:"Delete",END:"End",ENTER:"Enter",ESCAPE:"Escape",F1:"F1",F10:"F10",F11:"F11",F12:"F12",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",HOME:"Home",META:"Meta",PAGE_DOWN:"PageDown",PAGE_UP:"PageUp",SHIFT:"Shift",SPACE:" ",TAB:"Tab",CTRL:"Control",ASTERISK:"*",SPACE_CODE:"Space"}}var Os=ne({inheritAttrs:!1,__name:"VisuallyHiddenInputBubble",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(n){const t=n,{primitiveElement:e,currentElement:s}=Ye(),i=z(()=>t.checked??t.value);return ve(i,(r,a)=>{if(!s.value)return;const l=s.value,u=window.HTMLInputElement.prototype,d=Object.getOwnPropertyDescriptor(u,"value").set;if(d&&r!==a){const g=new Event("input",{bubbles:!0}),c=new Event("change",{bubbles:!0});d.call(l,r),l.dispatchEvent(g),l.dispatchEvent(c)}}),(r,a)=>(E(),B(Ut,V({ref_key:"primitiveElement",ref:e},{...t,...r.$attrs},{as:"input"}),null,16))}}),dt=Os,Ks=ne({inheritAttrs:!1,__name:"VisuallyHiddenInput",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(n){const t=n,e=z(()=>typeof t.value=="object"&&Array.isArray(t.value)&&t.value.length===0&&t.required),s=z(()=>typeof t.value=="string"||typeof t.value=="number"||typeof t.value=="boolean"||t.value===null||t.value===void 0?[{name:t.name,value:t.value}]:typeof t.value=="object"&&Array.isArray(t.value)?t.value.flatMap((i,r)=>typeof i=="object"?Object.entries(i).map(([a,l])=>({name:`${t.name}[${r}][${a}]`,value:l})):{name:`${t.name}[${r}]`,value:i}):t.value!==null&&typeof t.value=="object"&&!Array.isArray(t.value)?Object.entries(t.value).map(([i,r])=>({name:`${t.name}[${i}]`,value:r})):[]);return(i,r)=>(E(),H(ae,null,[Q(" We render single input if it's required "),e.value?(E(),B(dt,V({key:i.name},{...t,...i.$attrs},{name:i.name,value:i.value}),null,16,["name","value"])):(E(!0),H(ae,{key:1},me(s.value,a=>(E(),B(dt,V({key:a.name},{ref_for:!0},{...t,...i.$attrs},{name:a.name,value:a.value}),null,16,["name","value"]))),128))],2112))}}),Rs=Ks;function ht(n){return n?.querySelector("[data-state=checked]")}function $s(n,t,e){return n===void 0?!1:Array.isArray(n)?n.some(s=>le(s,t,e)):le(n,t,e)}function le(n,t,e){return n===void 0||t===void 0?!1:typeof n=="string"?n===t:typeof e=="function"?e(n,t):typeof e=="string"?n?.[e]===t?.[e]:Yt(n,t)}const[Fe,qs]=Qe("ListboxRoot");var Ps=ne({__name:"ListboxRoot",props:{modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},multiple:{type:Boolean,required:!1},orientation:{type:String,required:!1,default:"vertical"},dir:{type:String,required:!1},disabled:{type:Boolean,required:!1},selectionBehavior:{type:String,required:!1,default:"toggle"},highlightOnHover:{type:Boolean,required:!1},by:{type:[String,Function],required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","highlight","entryFocus","leave"],setup(n,{expose:t,emit:e}){const s=n,i=e,{multiple:r,highlightOnHover:a,orientation:l,disabled:u,selectionBehavior:p,dir:d}=Qt(s),{getItems:g}=ke({isProvider:!0}),{handleTypeaheadSearch:c}=Xt(),{primitiveElement:o,currentElement:m}=Ye(),v=Ds(),y=Jt(d),S=Bs(m),_=te(),L=te(!1),K=te(!0),w=_t(s,"modelValue",i,{defaultValue:s.defaultValue??(r.value?[]:void 0),passive:s.modelValue===void 0,deep:!0});function W(b){if(L.value=!0,s.multiple){const M=Array.isArray(w.value)?[...w.value]:[],F=M.findIndex(N=>le(N,b,s.by));s.selectionBehavior==="toggle"?(F===-1?M.push(b):M.splice(F,1),w.value=M):(w.value=[b],_.value=b)}else s.selectionBehavior==="toggle"&&le(w.value,b,s.by)?w.value=void 0:w.value=b;setTimeout(()=>{L.value=!1},1)}const A=te(null),k=te(null),R=te(!1),D=te(!1),J=Te(),ee=Te(),I=Te();function P(){return g().map(b=>b.ref).filter(b=>b.dataset.disabled!=="")}function h(b,M=!0,F){if(!b)return;A.value=b,(F??K.value)&&A.value.focus(),M&&A.value.scrollIntoView({block:"nearest"});const N=g().find(re=>re.ref===b);i("highlight",N)}function $(b){if(R.value)I.trigger(b);else{const M=g().find(F=>le(F.value,b,s.by));M&&(A.value=M.ref,h(M.ref))}}function x(b){A.value&&A.value.isConnected&&(b.preventDefault(),b.stopPropagation(),D.value||A.value.click())}function T(b){if(K.value){if(L.value=!0,R.value)ee.trigger(b);else{const M=b.altKey||b.ctrlKey||b.metaKey;if(M&&b.key==="a"&&r.value){const F=g(),N=F.map(ze=>ze.value);w.value=[...N],b.preventDefault();const re=F.at(-1);re&&h(re.ref)}else if(!M){const F=c(b.key,g());F&&h(F)}}setTimeout(()=>{L.value=!1},1)}}function Y(){D.value=!0}function G(){xe(()=>{D.value=!1})}function fe(){xe(()=>{const b=new KeyboardEvent("keydown",{key:"PageUp"});it(b)})}function Le(b){const M=A.value;M?.isConnected&&(k.value=M),A.value=null,i("leave",b)}function jt(b){const M=new CustomEvent("listbox.entryFocus",{bubbles:!1,cancelable:!0});if(b.currentTarget?.dispatchEvent(M),i("entryFocus",M),!M.defaultPrevented)if(k.value)h(k.value);else{const F=P()?.[0];h(F)}}function it(b){const M=Zt(b,l.value,y.value);if(!M)return;let F=P();if(A.value){if(M==="last")F.reverse();else if(M==="prev"||M==="next"){M==="prev"&&F.reverse();const N=F.indexOf(A.value);F=F.slice(N+1)}Wt(b,F[0])}if(F.length){const N=!A.value&&M==="prev"?F.length-1:0;h(F[N])}if(R.value)return ee.trigger(b)}function Wt(b,M){if(!(R.value||s.selectionBehavior!=="replace"||!r.value||!Array.isArray(w.value)||(b.altKey||b.ctrlKey||b.metaKey)&&!b.shiftKey)&&b.shiftKey){const N=g().filter(be=>be.ref.dataset.disabled!=="");let re=N.find(be=>be.ref===M)?.value;if(b.key===v.END?re=N.at(-1)?.value:b.key===v.HOME&&(re=N[0]?.value),!re||!_.value)return;const ze=Ie(N.map(be=>be.value),_.value,re);w.value=ze}}async function nt(b){if(await xe(),R.value)J.trigger(b);else{const M=P(),F=M.find(N=>N.dataset.state==="checked");F?h(F):M.length&&h(M[0])}}return ve(w,()=>{L.value||xe(()=>{nt()})},{immediate:!0,deep:!0}),t({highlightedElement:A,highlightItem:$,highlightFirstItem:fe,highlightSelected:nt,getItems:g}),qs({modelValue:w,onValueChange:W,multiple:r,orientation:l,dir:y,disabled:u,highlightOnHover:a,highlightedElement:A,isVirtual:R,virtualFocusHook:J,virtualKeydownHook:ee,virtualHighlightHook:I,by:s.by,firstValue:_,selectionBehavior:p,focusable:K,onLeave:Le,onEnter:jt,changeHighlight:h,onKeydownEnter:x,onKeydownNavigation:it,onKeydownTypeAhead:T,onCompositionStart:Y,onCompositionEnd:G,highlightFirstItem:fe}),(b,M)=>(E(),B(f(he),{ref_key:"primitiveElement",ref:o,as:b.as,"as-child":b.asChild,dir:f(y),"data-disabled":f(u)?"":void 0,onPointerleave:Le,onFocusout:M[0]||(M[0]=async F=>{const N=F.relatedTarget||F.target;await xe(),A.value&&f(m)&&!f(m).contains(N)&&Le(F)})},{default:O(()=>[j(b.$slots,"default",{modelValue:f(w)}),f(S)&&b.name?(E(),B(f(Rs),{key:0,name:b.name,value:f(w),disabled:f(u),required:b.required},null,8,["name","value","disabled","required"])):Q("v-if",!0)]),_:3},8,["as","as-child","dir","data-disabled"]))}}),Hs=Ps,Vs=ne({__name:"ListboxContent",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const{CollectionSlot:t}=ke(),e=Fe(),s=Mt(!1,10);return(i,r)=>(E(),B(f(t),null,{default:O(()=>[Z(f(he),{role:"listbox",as:i.as,"as-child":i.asChild,tabindex:f(e).focusable.value?f(e).highlightedElement.value?"-1":"0":"-1","aria-orientation":f(e).orientation.value,"aria-multiselectable":!!f(e).multiple.value,"data-orientation":f(e).orientation.value,onMousedown:r[0]||(r[0]=Xe(a=>s.value=!0,["left"])),onFocus:r[1]||(r[1]=a=>{f(s)||f(e).onEnter(a)}),onKeydown:[r[2]||(r[2]=ye(a=>{f(e).orientation.value==="vertical"&&(a.key==="ArrowLeft"||a.key==="ArrowRight")||f(e).orientation.value==="horizontal"&&(a.key==="ArrowUp"||a.key==="ArrowDown")||(a.preventDefault(),f(e).focusable.value&&f(e).onKeydownNavigation(a))},["down","up","left","right","home","end"])),ye(f(e).onKeydownEnter,["enter"]),f(e).onKeydownTypeAhead]},{default:O(()=>[j(i.$slots,"default")]),_:3},8,["as","as-child","tabindex","aria-orientation","aria-multiselectable","data-orientation","onKeydown"])]),_:3}))}}),Ns=Vs,js=ne({__name:"ListboxFilter",props:{modelValue:{type:String,required:!1},autoFocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"input"}},emits:["update:modelValue"],setup(n,{emit:t}){const e=n,i=_t(e,"modelValue",t,{defaultValue:"",passive:e.modelValue===void 0}),r=Fe(),{primitiveElement:a,currentElement:l}=Ye(),u=z(()=>e.disabled||r.disabled.value||!1),p=te();return es(()=>p.value=r.highlightedElement.value?.id),ts(()=>{r.focusable.value=!1,setTimeout(()=>{e.autoFocus&&l.value?.focus()},1)}),ss(()=>{r.focusable.value=!0}),(d,g)=>(E(),B(f(he),{ref_key:"primitiveElement",ref:a,as:d.as,"as-child":d.asChild,value:f(i),disabled:u.value?"":void 0,"data-disabled":u.value?"":void 0,"aria-disabled":u.value??void 0,"aria-activedescendant":p.value,type:"text",onKeydown:[ye(Xe(f(r).onKeydownNavigation,["prevent"]),["down","up","home","end"]),ye(f(r).onKeydownEnter,["enter"])],onInput:g[0]||(g[0]=c=>{i.value=c.target.value,f(r).highlightFirstItem()}),onCompositionstart:f(r).onCompositionStart,onCompositionend:f(r).onCompositionEnd},{default:O(()=>[j(d.$slots,"default",{modelValue:f(i)})]),_:3},8,["as","as-child","value","disabled","data-disabled","aria-disabled","aria-activedescendant","onKeydown","onCompositionstart","onCompositionend"]))}}),Ws=js;const[Gs,Us]=Qe("ListboxGroup");var Ys=ne({__name:"ListboxGroup",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const t=n,e=wt(void 0,"reka-listbox-group");return Us({id:e}),(s,i)=>(E(),B(f(he),V({role:"group"},t,{"aria-labelledby":f(e)}),{default:O(()=>[j(s.$slots,"default")]),_:3},16,["aria-labelledby"]))}}),Qs=Ys,Xs=ne({__name:"ListboxGroupLabel",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},setup(n){const t=n,e=Gs({id:""});return(s,i)=>(E(),B(f(he),V(t,{id:f(e).id}),{default:O(()=>[j(s.$slots,"default")]),_:3},16,["id"]))}}),Js=Xs;const Zs="listbox.select",[ei,ti]=Qe("ListboxItem");var si=ne({__name:"ListboxItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},emits:["select"],setup(n,{emit:t}){const e=n,s=t,i=wt(void 0,"reka-listbox-item"),{CollectionItem:r}=ke(),{forwardRef:a,currentElement:l}=kt(),u=Fe(),p=z(()=>l.value===u.highlightedElement.value),d=z(()=>$s(u.modelValue.value,e.value,u.by)),g=z(()=>u.disabled.value||e.disabled);async function c(m){s("select",m),!m?.defaultPrevented&&!g.value&&m&&(u.onValueChange(e.value),u.changeHighlight(l.value))}function o(m){const v={originalEvent:m,value:e.value};ns(Zs,c,v)}return ti({isSelected:d}),(m,v)=>(E(),B(f(r),{value:m.value},{default:O(()=>[is([p.value,d.value],()=>Z(f(he),V({id:f(i)},m.$attrs,{ref:f(a),role:"option",tabindex:f(u).focusable.value?p.value?"0":"-1":-1,"aria-selected":d.value,as:m.as,"as-child":m.asChild,disabled:g.value?"":void 0,"data-disabled":g.value?"":void 0,"data-highlighted":p.value?"":void 0,"data-state":d.value?"checked":"unchecked",onClick:o,onKeydown:ye(Xe(o,["prevent"]),["space"]),onPointermove:v[0]||(v[0]=()=>{f(u).highlightedElement.value!==f(l)&&f(u).highlightOnHover.value&&f(u).changeHighlight(f(l),!1,!1)})}),{default:O(()=>[j(m.$slots,"default")]),_:3},16,["id","tabindex","aria-selected","as","as-child","disabled","data-disabled","data-highlighted","data-state","onKeydown"]),v,1)]),_:3},8,["value"]))}}),ii=si,ni=ne({__name:"ListboxItemIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(n){const t=n;kt();const e=ei();return(s,i)=>f(e).isSelected.value?(E(),B(f(he),V({key:0,"aria-hidden":"true"},t),{default:O(()=>[j(s.$slots,"default")]),_:3},16)):Q("v-if",!0)}}),ri=ni;function ge(n,t,e){let s=e.initialDeps??[],i,r=!0;function a(){var l,u,p;let d;e.key&&((l=e.debug)!=null&&l.call(e))&&(d=Date.now());const g=n();if(!(g.length!==s.length||g.some((m,v)=>s[v]!==m)))return i;s=g;let o;if(e.key&&((u=e.debug)!=null&&u.call(e))&&(o=Date.now()),i=t(...g),e.key&&((p=e.debug)!=null&&p.call(e))){const m=Math.round((Date.now()-d)*100)/100,v=Math.round((Date.now()-o)*100)/100,y=v/16,S=(_,L)=>{for(_=String(_);_.length{s=l},a}function ft(n,t){if(n===void 0)throw new Error("Unexpected undefined");return n}const ai=(n,t)=>Math.abs(n-t)<1.01,li=(n,t,e)=>{let s;return function(...i){n.clearTimeout(s),s=n.setTimeout(()=>t.apply(this,i),e)}},pt=n=>{const{offsetWidth:t,offsetHeight:e}=n;return{width:t,height:e}},oi=n=>n,ui=n=>{const t=Math.max(n.startIndex-n.overscan,0),e=Math.min(n.endIndex+n.overscan,n.count-1),s=[];for(let i=t;i<=e;i++)s.push(i);return s},ci=(n,t)=>{const e=n.scrollElement;if(!e)return;const s=n.targetWindow;if(!s)return;const i=a=>{const{width:l,height:u}=a;t({width:Math.round(l),height:Math.round(u)})};if(i(pt(e)),!s.ResizeObserver)return()=>{};const r=new s.ResizeObserver(a=>{const l=()=>{const u=a[0];if(u?.borderBoxSize){const p=u.borderBoxSize[0];if(p){i({width:p.inlineSize,height:p.blockSize});return}}i(pt(e))};n.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(l):l()});return r.observe(e,{box:"border-box"}),()=>{r.unobserve(e)}},gt={passive:!0},mt=typeof window>"u"?!0:"onscrollend"in window,di=(n,t)=>{const e=n.scrollElement;if(!e)return;const s=n.targetWindow;if(!s)return;let i=0;const r=n.options.useScrollendEvent&&mt?()=>{}:li(s,()=>{t(i,!1)},n.options.isScrollingResetDelay),a=d=>()=>{const{horizontal:g,isRtl:c}=n.options;i=g?e.scrollLeft*(c&&-1||1):e.scrollTop,r(),t(i,d)},l=a(!0),u=a(!1);e.addEventListener("scroll",l,gt);const p=n.options.useScrollendEvent&&mt;return p&&e.addEventListener("scrollend",u,gt),()=>{e.removeEventListener("scroll",l),p&&e.removeEventListener("scrollend",u)}},hi=(n,t,e)=>{if(t?.borderBoxSize){const s=t.borderBoxSize[0];if(s)return Math.round(s[e.options.horizontal?"inlineSize":"blockSize"])}return n[e.options.horizontal?"offsetWidth":"offsetHeight"]},fi=(n,{adjustments:t=0,behavior:e},s)=>{var i,r;const a=n+t;(r=(i=s.scrollElement)==null?void 0:i.scrollTo)==null||r.call(i,{[s.options.horizontal?"left":"top"]:a,behavior:e})};class pi{constructor(t){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.now=()=>{var e,s,i;return((i=(s=(e=this.targetWindow)==null?void 0:e.performance)==null?void 0:s.now)==null?void 0:i.call(s))??Date.now()},this.observer=(()=>{let e=null;const s=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(i=>{i.forEach(r=>{const a=()=>{const l=r.target,u=this.indexFromElement(l);if(!l.isConnected){this.observer.unobserve(l);return}this.shouldMeasureDuringScroll(u)&&this.resizeItem(u,this.options.measureElement(l,r,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(a):a()})}));return{disconnect:()=>{var i;(i=s())==null||i.disconnect(),e=null},observe:i=>{var r;return(r=s())==null?void 0:r.observe(i,{box:"border-box"})},unobserve:i=>{var r;return(r=s())==null?void 0:r.unobserve(i)}}})(),this.range=null,this.setOptions=e=>{Object.entries(e).forEach(([s,i])=>{typeof i>"u"&&delete e[s]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:oi,rangeExtractor:ui,onChange:()=>{},measureElement:hi,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:"estimate",...e}},this.notify=e=>{var s,i;(i=(s=this.options).onChange)==null||i.call(s,this,e)},this.maybeNotify=ge(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var e;const s=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==s){if(this.cleanup(),!s){this.maybeNotify();return}this.scrollElement=s,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((e=this.scrollElement)==null?void 0:e.window)??null,this.elementsCache.forEach(i=>{this.observer.observe(i)}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,r)=>{this.scrollAdjustments=0,this.scrollDirection=r?this.getScrollOffset()this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,s)=>{const i=new Map,r=new Map;for(let a=s-1;a>=0;a--){const l=e[a];if(i.has(l.lane))continue;const u=r.get(l.lane);if(u==null||l.end>u.end?r.set(l.lane,l):l.enda.end===l.end?a.index-l.index:a.end-l.end)[0]:void 0},this.getMeasurementOptions=ge(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,s,i,r,a,l,u)=>(this.prevLanes!==void 0&&this.prevLanes!==l&&(this.lanesChangedFlag=!0),this.prevLanes=l,this.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:s,scrollMargin:i,getItemKey:r,enabled:a,lanes:l,laneAssignmentMode:u}),{key:!1}),this.getMeasurements=ge(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:e,paddingStart:s,scrollMargin:i,getItemKey:r,enabled:a,lanes:l,laneAssignmentMode:u},p)=>{if(!a)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(const o of this.laneAssignments.keys())o>=e&&this.laneAssignments.delete(o);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(o=>{this.itemSizeCache.set(o.key,o.size)}));const d=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1);const g=this.measurementsCache.slice(0,d),c=new Array(l).fill(void 0);for(let o=0;o1){y=v;const W=c[y],A=W!==void 0?g[W]:void 0;S=A?A.end+this.options.gap:s+i}else{const W=this.options.lanes===1?g[o-1]:this.getFurthestMeasurement(g,o);S=W?W.end+this.options.gap:s+i,y=W?W.lane:o%this.options.lanes,this.options.lanes>1&&_&&this.laneAssignments.set(o,y)}const L=p.get(m),K=typeof L=="number"?L:this.options.estimateSize(o),w=S+K;g[o]={index:o,start:S,size:K,end:w,key:m,lane:y},c[y]=o}return this.measurementsCache=g,g},{key:!1,debug:()=>this.options.debug}),this.calculateRange=ge(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,s,i,r)=>this.range=e.length>0&&s>0?gi({measurements:e,outerSize:s,scrollOffset:i,lanes:r}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=ge(()=>{let e=null,s=null;const i=this.calculateRange();return i&&(e=i.startIndex,s=i.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,s]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,s]},(e,s,i,r,a)=>r===null||a===null?[]:e({startIndex:r,endIndex:a,overscan:s,count:i}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{const s=this.options.indexAttribute,i=e.getAttribute(s);return i?parseInt(i,10):(console.warn(`Missing attribute name '${s}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{var s;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const i=this.scrollState.index??((s=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:s.index);if(i!==void 0&&this.range){const r=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),a=Math.max(0,i-r),l=Math.min(this.options.count-1,i+r);return e>=a&&e<=l}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((a,l)=>{a.isConnected||(this.observer.unobserve(a),this.elementsCache.delete(l))});return}const s=this.indexFromElement(e),i=this.options.getItemKey(s),r=this.elementsCache.get(i);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(i,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(s)&&this.resizeItem(s,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,s)=>{var i;const r=this.measurementsCache[e];if(!r)return;const a=this.itemSizeCache.get(r.key)??r.size,l=s-a;l!==0&&(((i=this.scrollState)==null?void 0:i.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(r,l,this):r.start[this.getVirtualIndexes(),this.getMeasurements()],(e,s)=>{const i=[];for(let r=0,a=e.length;rthis.options.debug}),this.getVirtualItemForOffset=e=>{const s=this.getMeasurements();if(s.length!==0)return ft(s[Ot(0,s.length-1,i=>ft(s[i]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(e,s,i=0)=>{if(!this.scrollElement)return 0;const r=this.getSize(),a=this.getScrollOffset();s==="auto"&&(s=e>=a+r?"end":"start"),s==="center"?e+=(i-r)/2:s==="end"&&(e-=r);const l=this.getMaxScrollOffset();return Math.max(Math.min(l,e),0)},this.getOffsetForIndex=(e,s="auto")=>{e=Math.max(0,Math.min(e,this.options.count-1));const i=this.getSize(),r=this.getScrollOffset(),a=this.measurementsCache[e];if(!a)return;if(s==="auto")if(a.end>=r+i-this.options.scrollPaddingEnd)s="end";else if(a.start<=r+this.options.scrollPaddingStart)s="start";else return[r,s];if(s==="end"&&e===this.options.count-1)return[this.getMaxScrollOffset(),s];const l=s==="end"?a.end+this.options.scrollPaddingEnd:a.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(l,s,a.size),s]},this.scrollToOffset=(e,{align:s="start",behavior:i="auto"}={})=>{const r=this.getOffsetForAlignment(e,s),a=this.now();this.scrollState={index:null,align:s,behavior:i,startedAt:a,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:i}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:s="auto",behavior:i="auto"}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));const r=this.getOffsetForIndex(e,s);if(!r)return;const[a,l]=r,u=this.now();this.scrollState={index:e,align:l,behavior:i,startedAt:u,lastTargetOffset:a,stableFrames:0},this._scrollToOffset(a,{adjustments:void 0,behavior:i}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:s="auto"}={})=>{const i=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:"start",behavior:s,startedAt:r,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{var e;const s=this.getMeasurements();let i;if(s.length===0)i=this.options.paddingStart;else if(this.options.lanes===1)i=((e=s[s.length-1])==null?void 0:e.end)??0;else{const r=Array(this.options.lanes).fill(null);let a=s.length-1;for(;a>=0&&r.some(l=>l===null);){const l=s[a];r[l.lane]===null&&(r[l.lane]=l.end),a--}i=Math.max(...r.filter(l=>l!==null))}return Math.max(i-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(e,{adjustments:s,behavior:i})=>{this.options.scrollToFn(e,{behavior:i,adjustments:s},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(t)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const s=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,i=s?s[0]:this.scrollState.lastTargetOffset,r=1,a=i!==this.scrollState.lastTargetOffset;if(!a&&ai(i,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=r){this.scrollState=null;return}}else this.scrollState.stableFrames=0,a&&(this.scrollState.lastTargetOffset=i,this.scrollState.behavior="auto",this._scrollToOffset(i,{adjustments:void 0,behavior:"auto"}));this.scheduleScrollReconcile()}}const Ot=(n,t,e,s)=>{for(;n<=t;){const i=(n+t)/2|0,r=e(i);if(rs)t=i-1;else return i}return n>0?n-1:0};function gi({measurements:n,outerSize:t,scrollOffset:e,lanes:s}){const i=n.length-1,r=u=>n[u].start;if(n.length<=s)return{startIndex:0,endIndex:i};let a=Ot(0,i,r,e),l=a;if(s===1)for(;l1){const u=Array(s).fill(0);for(;ld=0&&p.some(d=>d>=e);){const d=n[a];p[d.lane]=d.start,a--}a=Math.max(0,a-a%s),l=Math.min(i,l+(s-1-l%s))}return{startIndex:a,endIndex:l}}function mi(n){const t=new pi(f(n)),e=as(t),s=t._didMount();return ve(()=>f(n).getScrollElement(),i=>{i&&t._willUpdate()},{immediate:!0}),ve(()=>f(n),i=>{t.setOptions({...i,onChange:(r,a)=>{var l;rt(e),(l=i.onChange)==null||l.call(i,r,a)}}),t._willUpdate(),rt(e)},{immediate:!0}),rs(s),e}function vi(n){return mi(z(()=>({observeElementRect:ci,observeElementOffset:di,scrollToFn:fi,...f(n)})))}var yi=ne({__name:"ListboxVirtualizer",props:{options:{type:Array,required:!0},overscan:{type:Number,required:!1},estimateSize:{type:[Number,Function],required:!1},textContent:{type:Function,required:!1}},setup(n){const t=n,e=Je(),s=Fe(),i=ls(),{getItems:r}=ke();s.isVirtual.value=!0;const a=z(()=>{const c=i.value;if(c){const o=window.getComputedStyle(c);return{start:Number.parseFloat(o.paddingBlockStart||o.paddingTop),end:Number.parseFloat(o.paddingBlockEnd||o.paddingBottom)}}else return{start:0,end:0}}),l=vi({get scrollPaddingStart(){return a.value.start},get scrollPaddingEnd(){return a.value.end},get count(){return t.options.length},get horizontal(){return s.orientation.value==="horizontal"},estimateSize(c){return typeof t.estimateSize=="function"?t.estimateSize(c):t.estimateSize??28},getScrollElement(){return i.value},overscan:t.overscan??12}),u=z(()=>l.value.getVirtualItems().map(c=>{const o=e.default({option:t.options[c.index],virtualizer:l.value,virtualItem:c})[0],m=o.type===ae&&Array.isArray(o.children)?o.children[0]:o;return{item:c,is:fs(m,{key:`${c.key}`,"data-index":c.index,"aria-setsize":t.options.length,"aria-posinset":c.index+1,style:{position:"absolute",top:0,left:0,transform:`translateY(${c.start}px)`,overflowAnchor:"none"}})}}));s.virtualFocusHook.on(c=>{const o=t.options.findIndex(m=>Array.isArray(s.modelValue.value)?le(m,s.modelValue.value[0],s.by):le(m,s.modelValue.value,s.by));o!==-1?(c?.preventDefault(),l.value.scrollToIndex(o,{align:"start"}),requestAnimationFrame(()=>{const m=ht(i.value);m&&(s.changeHighlight(m),c&&m?.focus())})):s.highlightFirstItem()}),s.virtualHighlightHook.on(c=>{const o=t.options.findIndex(m=>le(m,c,s.by));l.value.scrollToIndex(o,{align:"start"}),requestAnimationFrame(()=>{const m=ht(i.value);m&&s.changeHighlight(m)})});const p=Mt("",1e3),d=z(()=>{const c=o=>t.textContent?t.textContent(o):o?.toString().toLowerCase();return t.options.map((o,m)=>({index:m,textContent:c(o)}))});function g(c,o){if(!s.firstValue?.value||!s.multiple.value||!Array.isArray(s.modelValue.value))return;const v=r().filter(S=>S.ref.dataset.disabled!=="").find(S=>S.ref===s.highlightedElement.value)?.value;if(!v)return;let y=null;switch(o){case"prev":case"next":{y=Ie(t.options,s.firstValue.value,v);break}case"first":{y=Ie(t.options,s.firstValue.value,t.options?.[0]);break}case"last":{y=Ie(t.options,s.firstValue.value,t.options?.[t.options.length-1]);break}}s.modelValue.value=y}return s.virtualKeydownHook.on(c=>{const o=c.altKey||c.ctrlKey||c.metaKey;if(c.key==="Tab"&&!o)return;let v=os[c.key];if(o&&c.key==="a"&&s.multiple.value?(c.preventDefault(),s.modelValue.value=[...t.options],v="last"):c.shiftKey&&v&&g(c,v),["first","last"].includes(v)){c.preventDefault();const y=v==="first"?0:t.options.length-1;l.value.scrollToIndex(y),requestAnimationFrame(()=>{const S=r(),_=v==="first"?S[0]:S[S.length-1];_&&s.changeHighlight(_.ref)})}else if(!v&&!o){p.value+=c.key;const y=Number(us()?.getAttribute("data-index")),S=d.value[y].textContent,_=d.value.map(w=>w.textContent??""),L=cs(_,p.value,S),K=d.value.find(w=>w.textContent===L);K&&(l.value.scrollToIndex(K.index,{align:"start"}),requestAnimationFrame(()=>{const w=i.value.querySelector(`[data-index="${K.index}"]`);w instanceof HTMLElement&&s.changeHighlight(w)}))}}),(c,o)=>(E(),H("div",{"data-reka-virtualizer":"",style:hs({position:"relative",width:"100%",height:`${f(l).getTotalSize()}px`})},[(E(!0),H(ae,null,me(u.value,({is:m,item:v})=>(E(),B(ds(m),{key:v.index}))),128))],4))}}),bi=yi;function oe(n){return Array.isArray?Array.isArray(n):Rt(n)==="[object Array]"}function xi(n){if(typeof n=="string")return n;if(typeof n=="bigint")return n.toString();const t=n+"";return t=="0"&&1/n==-1/0?"-0":t}function Pe(n){return n==null?"":xi(n)}function U(n){return typeof n=="string"}function Ee(n){return typeof n=="number"}function Si(n){return n===!0||n===!1||Ai(n)&&Rt(n)=="[object Boolean]"}function Kt(n){return typeof n=="object"}function Ai(n){return Kt(n)&&n!==null}function X(n){return n!=null}function Ce(n){return!n.trim().length}function Rt(n){return n==null?n===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(n)}const Ci="Incorrect 'index' type",Ii=n=>`Invalid value for key ${n}`,Ei=n=>`Pattern length exceeds max of ${n}.`,_i=n=>`Missing ${n} property in key`,Mi=n=>`Property 'weight' in key '${n}' must be a positive integer`,vt=Object.prototype.hasOwnProperty;class wi{constructor(t){this._keys=[],this._keyMap={};let e=0;t.forEach(s=>{const i=$t(s);this._keys.push(i),this._keyMap[i.id]=i,e+=i.weight}),this._keys.forEach(s=>{s.weight/=e})}get(t){return this._keyMap[t]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function $t(n){let t=null,e=null,s=null,i=1,r=null;if(U(n)||oe(n))s=n,t=yt(n),e=He(n);else{if(!vt.call(n,"name"))throw new Error(_i("name"));const a=n.name;if(s=a,vt.call(n,"weight")&&(i=n.weight,i<=0))throw new Error(Mi(a));t=yt(a),e=He(a),r=n.getFn}return{path:t,id:e,weight:i,src:s,getFn:r}}function yt(n){return oe(n)?n:n.split(".")}function He(n){return oe(n)?n.join("."):n}function ki(n,t){const e=[];let s=!1;const i=(r,a,l,u)=>{if(X(r))if(!a[l])e.push(u!==void 0?{v:r,i:u}:r);else{const p=a[l],d=r[p];if(!X(d))return;if(l===a.length-1&&(U(d)||Ee(d)||Si(d)||typeof d=="bigint"))e.push(u!==void 0?{v:Pe(d),i:u}:Pe(d));else if(oe(d)){s=!0;for(let g=0,c=d.length;gn.score===t.score?n.idx{this._keysMap[e.id]=s})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,U(this.docs[0])?this.docs.forEach((t,e)=>{this._addString(t,e)}):this.docs.forEach((t,e)=>{this._addObject(t,e)}),this.norm.clear())}add(t){const e=this.size();U(t)?this._addString(t,e):this._addObject(t,e)}removeAt(t){this.records.splice(t,1);for(let e=t,s=this.size();e=0;e-=1)this.records.splice(t[e],1);for(let e=0,s=this.records.length;e{const a=i.getFn?i.getFn(t):this.getFn(t,i.path);if(X(a)){if(oe(a)){const l=[];for(let u=0,p=a.length;ue),records:this.records}}}function qt(n,t,{getFn:e=C.getFn,fieldNormWeight:s=C.fieldNormWeight}={}){const i=new Ze({getFn:e,fieldNormWeight:s});return i.setKeys(n.map($t)),i.setSources(t),i.create(),i}function Oi(n,{getFn:t=C.getFn,fieldNormWeight:e=C.fieldNormWeight}={}){const{keys:s,records:i}=n,r=new Ze({getFn:t,fieldNormWeight:e});return r.setKeys(s),r.setIndexRecords(i),r}function Ki(n=[],t=C.minMatchCharLength){const e=[];let s=-1,i=-1,r=0;for(let a=n.length;r=t&&e.push([s,i]),s=-1)}return n[r-1]&&r-s>=t&&e.push([s,r-1]),e}const de=32;function Ri(n,t,e,{location:s=C.location,distance:i=C.distance,threshold:r=C.threshold,findAllMatches:a=C.findAllMatches,minMatchCharLength:l=C.minMatchCharLength,includeMatches:u=C.includeMatches,ignoreLocation:p=C.ignoreLocation}={}){if(t.length>de)throw new Error(Ei(de));const d=t.length,g=n.length,c=Math.max(0,Math.min(s,g));let o=r,m=c;const v=(k,R)=>{const D=k/d;if(p)return D;const J=Math.abs(c-R);return i?D+J/i:J?1:D},y=l>1||u,S=y?Array(g):[];let _;for(;(_=n.indexOf(t,m))>-1;){const k=v(0,_);if(o=Math.min(k,o),m=_+d,y){let R=0;for(;R=J;h-=1){const $=h-1,x=e[n[$]];if(y&&(S[$]=+!!x),I[h]=(I[h+1]<<1|1)&x,k&&(I[h]|=(L[h+1]|L[h])<<1|1|L[h+1]),I[h]&W&&(K=v(k,$),K<=o)){if(o=K,m=$,m<=c)break;J=Math.max(1,2*c-m)}}if(v(k+1,c)>o)break;L=I}const A={isMatch:m>=0,score:Math.max(.001,K)};if(y){const k=Ki(S,l);k.length?u&&(A.indices=k):A.isMatch=!1}return A}function $i(n){const t={};for(let e=0,s=n.length;ee[0]-s[0]||e[1]-s[1]);const t=[n[0]];for(let e=1,s=n.length;en.normalize("NFD").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g,"").replace(qi,t=>Pt[t]):n=>n;class tt{constructor(t,{location:e=C.location,threshold:s=C.threshold,distance:i=C.distance,includeMatches:r=C.includeMatches,findAllMatches:a=C.findAllMatches,minMatchCharLength:l=C.minMatchCharLength,isCaseSensitive:u=C.isCaseSensitive,ignoreDiacritics:p=C.ignoreDiacritics,ignoreLocation:d=C.ignoreLocation}={}){if(this.options={location:e,threshold:s,distance:i,includeMatches:r,findAllMatches:a,minMatchCharLength:l,isCaseSensitive:u,ignoreDiacritics:p,ignoreLocation:d},t=u?t:t.toLowerCase(),t=p?Ae(t):t,this.pattern=t,this.chunks=[],!this.pattern.length)return;const g=(o,m)=>{this.chunks.push({pattern:o,alphabet:$i(o),startIndex:m})},c=this.pattern.length;if(c>de){let o=0;const m=c%de,v=c-m;for(;o{const{isMatch:_,score:L,indices:K}=Ri(t,v,y,{location:r+S,distance:a,threshold:l,findAllMatches:u,minMatchCharLength:p,includeMatches:i,ignoreLocation:d});_&&(o=!0),c+=L,_&&K&&g.push(...K)});const m={isMatch:o,score:o?c/this.chunks.length:1};return o&&i&&(m.indices=et(g)),m}}class ue{constructor(t){this.pattern=t}static isMultiMatch(t){return bt(t,this.multiRegex)}static isSingleMatch(t){return bt(t,this.singleRegex)}search(t){return{isMatch:!1,score:1}}}function bt(n,t){const e=n.match(t);return e?e[1]:null}class Pi extends ue{constructor(t){super(t)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(t){const e=t===this.pattern;return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}}class Hi extends ue{constructor(t){super(t)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(t){const s=t.indexOf(this.pattern)===-1;return{isMatch:s,score:s?0:1,indices:[0,t.length-1]}}}class Vi extends ue{constructor(t){super(t)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(t){const e=t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}}class Ni extends ue{constructor(t){super(t)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(t){const e=!t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}}class ji extends ue{constructor(t){super(t)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(t){const e=t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[t.length-this.pattern.length,t.length-1]}}}class Wi extends ue{constructor(t){super(t)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(t){const e=!t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}}class Ht extends ue{constructor(t,{location:e=C.location,threshold:s=C.threshold,distance:i=C.distance,includeMatches:r=C.includeMatches,findAllMatches:a=C.findAllMatches,minMatchCharLength:l=C.minMatchCharLength,isCaseSensitive:u=C.isCaseSensitive,ignoreDiacritics:p=C.ignoreDiacritics,ignoreLocation:d=C.ignoreLocation}={}){super(t),this._bitapSearch=new tt(t,{location:e,threshold:s,distance:i,includeMatches:r,findAllMatches:a,minMatchCharLength:l,isCaseSensitive:u,ignoreDiacritics:p,ignoreLocation:d})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(t){return this._bitapSearch.searchIn(t)}}class Vt extends ue{constructor(t){super(t)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(t){let e=0,s;const i=[],r=this.pattern.length;for(;(s=t.indexOf(this.pattern,e))>-1;)e=s+r,i.push([s,e-1]);const a=!!i.length;return{isMatch:a,score:a?0:1,indices:i}}}const Ve=[Pi,Vt,Vi,Ni,Wi,ji,Hi,Ht],xt=Ve.length,Gi="\0",Ui="|";function Yi(n){const t=[],e=n.length;let s=0;for(;s=e)break;let i=s;for(;i=e||n[r]===" "){i++;break}if(n[r]==="$"&&(r+1>=e||n[r+1]===" ")){i+=2;break}}i++}t.push(n.substring(s,i)),s=i}else{for(;i{const i=s.replace(/\u0000/g,"|"),r=Yi(i.trim()).filter(l=>l&&!!l.trim()),a=[];for(let l=0,u=r.length;l!!(n[we.AND]||n[we.OR]),Zi=n=>!!n[je.PATH],en=n=>!oe(n)&&Kt(n)&&!We(n),St=n=>({[we.AND]:Object.keys(n).map(t=>({[t]:n[t]}))});function Nt(n,t,{auto:e=!0}={}){const s=i=>{if(U(i)){const u={keyId:null,pattern:i};return e&&(u.searcher=Me(i,t)),u}const r=Object.keys(i),a=Zi(i);if(!a&&r.length>1&&!We(i))return s(St(i));if(en(i)){const u=a?i[je.PATH]:r[0],p=a?i[je.PATTERN]:i[u];if(!U(p))throw new Error(Ii(u));const d={keyId:He(u),pattern:p};return e&&(d.searcher=Me(p,t)),d}const l={children:[],operator:r[0]};return r.forEach(u=>{const p=i[u];oe(p)&&p.forEach(d=>{l.children.push(s(d))})}),l};return We(n)||(n=St(n)),s(n)}function Ge(n,{ignoreFieldNorm:t=C.ignoreFieldNorm}){let e=1;return n.forEach(({key:s,norm:i,score:r})=>{const a=s?s.weight:null;e*=Math.pow(r===0&&a?Number.EPSILON:r,(a||1)*(t?1:i))}),e}function tn(n,{ignoreFieldNorm:t=C.ignoreFieldNorm}){n.forEach(e=>{e.score=Ge(e.matches,{ignoreFieldNorm:t})})}class sn{constructor(t){this.limit=t,this.heap=[]}get size(){return this.heap.length}shouldInsert(t){return this.size0;){const s=t-1>>1;if(e[t].score<=e[s].score)break;const i=e[t];e[t]=e[s],e[s]=i,t=s}}_sinkDown(t){const e=this.heap,s=e.length;let i=t;do{t=i;const r=2*t+1,a=2*t+2;if(re[i].score&&(i=r),ae[i].score&&(i=a),i!==t){const l=e[t];e[t]=e[i],e[i]=l}}while(i!==t)}}function nn(n,t){const e=n.matches;t.matches=[],X(e)&&e.forEach(s=>{if(!X(s.indices)||!s.indices.length)return;const{indices:i,value:r}=s,a={indices:i,value:r};s.key&&(a.key=s.key.src),s.idx>-1&&(a.refIndex=s.idx),t.matches.push(a)})}function rn(n,t){t.score=n.score}function an(n,t,{includeMatches:e=C.includeMatches,includeScore:s=C.includeScore}={}){const i=[];return e&&i.push(nn),s&&i.push(rn),n.map(r=>{const{idx:a}=r,l={item:t[a],refIndex:a};return i.length&&i.forEach(u=>{u(r,l)}),l})}const ln=/\b\w+\b/g;function Ue({isCaseSensitive:n=!1,ignoreDiacritics:t=!1}={}){return{tokenize(e){return n||(e=e.toLowerCase()),t&&(e=Ae(e)),e.match(ln)||[]}}}function on(n,t,e){const s=new Map,i=new Map;let r=0;function a(l,u,p,d){const g=e.tokenize(l);if(!g.length)return;r++;const c=new Map;for(const o of g)c.set(o,(c.get(o)||0)+1);for(const[o,m]of c){const v={docIdx:u,keyIdx:p,subIdx:d,tf:m};let y=s.get(o);y||(y=[],s.set(o,y)),y.push(v),i.set(o,(i.get(o)||0)+1)}}for(const l of n){const{i:u,v:p,$:d}=l;if(p!==void 0){a(p,u,-1,-1);continue}if(d)for(let g=0;ga.docIdx!==t),r=s.length-i.length;r>0&&(n.fieldCount-=r,n.df.set(e,(n.df.get(e)||0)-r),i.length===0?(n.terms.delete(e),n.df.delete(e)):n.terms.set(e,i))}}class ce{constructor(t,e,s){this.options={...C,...e},this.options.useExtendedSearch,this.options.useTokenSearch,this._keyStore=new wi(this.options.keys),this._docs=t,this._myIndex=null,this._invertedIndex=null,this.setCollection(t,s),this._lastQuery=null,this._lastSearcher=null}_getSearcher(t){if(this._lastQuery===t)return this._lastSearcher;const e=this._invertedIndex?{...this.options,_invertedIndex:this._invertedIndex}:this.options,s=Me(t,e);return this._lastQuery=t,this._lastSearcher=s,s}setCollection(t,e){if(this._docs=t,e&&!(e instanceof Ze))throw new Error(Ci);if(this._myIndex=e||qt(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight}),this.options.useTokenSearch){const s=Ue({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics});this._invertedIndex=on(this._myIndex.records,this._myIndex.keys.length,s)}}add(t){if(X(t)&&(this._docs.push(t),this._myIndex.add(t),this._invertedIndex)){const e=this._myIndex.records[this._myIndex.records.length-1],s=Ue({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics});un(this._invertedIndex,e,this._myIndex.keys.length,s)}}remove(t=()=>!1){const e=[],s=[];for(let i=0,r=this._docs.length;i=0;i-=1)this._docs.splice(s[i],1);this._myIndex.removeAll(s)}return e}removeAt(t){this._invertedIndex&&At(this._invertedIndex,t);const e=this._docs.splice(t,1)[0];return this._myIndex.removeAt(t),e}getIndex(){return this._myIndex}search(t,e){const{limit:s=-1}=e||{},{includeMatches:i,includeScore:r,shouldSort:a,sortFn:l,ignoreFieldNorm:u}=this.options;if(U(t)&&!t.trim()){let g=this._docs.map((c,o)=>({item:c,refIndex:o}));return Ee(s)&&s>-1&&(g=g.slice(0,s)),g}const p=Ee(s)&&s>0&&U(t);let d;if(p){const g=new sn(s);U(this._docs[0])?this._searchStringList(t,{heap:g,ignoreFieldNorm:u}):this._searchObjectList(t,{heap:g,ignoreFieldNorm:u}),d=g.extractSorted(l)}else d=U(t)?U(this._docs[0])?this._searchStringList(t):this._searchObjectList(t):this._searchLogical(t),tn(d,{ignoreFieldNorm:u}),a&&d.sort(l),Ee(s)&&s>-1&&(d=d.slice(0,s));return an(d,this._docs,{includeMatches:i,includeScore:r})}_searchStringList(t,{heap:e,ignoreFieldNorm:s}={}){const i=this._getSearcher(t),{records:r}=this._myIndex,a=e?null:[];return r.forEach(({v:l,i:u,n:p})=>{if(!X(l))return;const{isMatch:d,score:g,indices:c}=i.searchIn(l);if(d){const o={item:l,idx:u,matches:[{score:g,value:l,norm:p,indices:c}]};e?(o.score=Ge(o.matches,{ignoreFieldNorm:s}),e.shouldInsert(o.score)&&e.insert(o)):a.push(o)}}),a}_searchLogical(t){const e=Nt(t,this.options),s=(l,u,p)=>{if(!("children"in l)){const{keyId:o,searcher:m}=l;let v;return o===null?(v=[],this._myIndex.keys.forEach((y,S)=>{v.push(...this._findMatches({key:y,value:u[S],searcher:m}))})):v=this._findMatches({key:this._keyStore.get(o),value:this._myIndex.getValueForItemAtKeyId(u,o),searcher:m}),v&&v.length?[{idx:p,item:u,matches:v}]:[]}const{children:d,operator:g}=l,c=[];for(let o=0,m=d.length;o{if(X(l)){const p=s(e,l,u);p.length&&(r.has(u)||(r.set(u,{idx:u,item:l,matches:[]}),a.push(r.get(u))),p.forEach(({matches:d})=>{r.get(u).matches.push(...d)}))}}),a}_searchObjectList(t,{heap:e,ignoreFieldNorm:s}={}){const i=this._getSearcher(t),{keys:r,records:a}=this._myIndex,l=e?null:[];return a.forEach(({$:u,i:p})=>{if(!X(u))return;const d=[];let g=!1,c=!1;if(r.forEach((o,m)=>{const v=this._findMatches({key:o,value:u[m],searcher:i});v.length?(d.push(...v),v[0].hasInverse&&(c=!0)):g=!0}),!(c&&g)&&d.length){const o={idx:p,item:u,matches:d};e?(o.score=Ge(o.matches,{ignoreFieldNorm:s}),e.shouldInsert(o.score)&&e.insert(o)):l.push(o)}}),l}_findMatches({key:t,value:e,searcher:s}){if(!X(e))return[];const i=[];if(oe(e))e.forEach(({v:r,i:a,n:l})=>{if(!X(r))return;const{isMatch:u,score:p,indices:d,hasInverse:g}=s.searchIn(r);u&&i.push({score:p,key:t,value:r,idx:a,norm:l,indices:d,hasInverse:g})});else{const{v:r,n:a}=e,{isMatch:l,score:u,indices:p,hasInverse:d}=s.searchIn(r);l&&i.push({score:u,key:t,value:r,norm:a,indices:p,hasInverse:d})}return i}}class cn{static condition(t,e){return e.useTokenSearch}constructor(t,e){this.options=e,this.analyzer=Ue({isCaseSensitive:e.isCaseSensitive,ignoreDiacritics:e.ignoreDiacritics});const s=this.analyzer.tokenize(t),i=e._invertedIndex,{df:r,fieldCount:a}=i;this.termSearchers=[],this.idfWeights=[];for(const l of s){this.termSearchers.push(new tt(l,{location:e.location,threshold:e.threshold,distance:e.distance,includeMatches:e.includeMatches,findAllMatches:e.findAllMatches,minMatchCharLength:e.minMatchCharLength,isCaseSensitive:e.isCaseSensitive,ignoreDiacritics:e.ignoreDiacritics,ignoreLocation:!0}));const u=r.get(l)||0,p=Math.log(1+(a-u+.5)/(u+.5));this.idfWeights.push(p)}}searchIn(t){if(!this.termSearchers.length)return{isMatch:!1,score:1};const e=[];let s=0,i=0,r=0;for(let u=0;u0?1-s/i:0,l={isMatch:!0,score:Math.max(.001,a)};return this.options.includeMatches&&e.length&&(l.indices=et(e)),l}}ce.version="7.3.0";ce.createIndex=qt;ce.parseIndex=Oi;ce.config=C;ce.match=function(n,t,e){return Me(n,{...C,...e}).searchIn(t)};ce.parseQuery=Nt;st(Ji);st(cn);ce.use=function(...n){n.forEach(t=>st(t))};function dn(n,t,e){const s=()=>{var r,a;return new ce((r=ie(t))!==null&&r!==void 0?r:[],(a=ie(e))===null||a===void 0?void 0:a.fuseOptions)},i=te(s());return ve(()=>{var r;return(r=ie(e))===null||r===void 0?void 0:r.fuseOptions},()=>{i.value=s()},{deep:!0}),ve(()=>ie(t),r=>{i.value.setCollection(r)},{deep:!0}),{fuse:i,results:z(()=>{const r=ie(e);if(r?.matchAllWhenSearchEmpty&&!ie(n))return ie(t).map((l,u)=>({item:l,refIndex:u}));const a=r?.resultLimit;return i.value.search(ie(n),a?{limit:a}:void 0)})}}const hn={"&":"&","<":"<",">":">",'"':""","'":"'"};function fn(n){return n.replace(/[&<>"']/g,t=>hn[t])}function pn(n){return/&(?:amp|lt|gt|quot|#39);/.test(n)}function De(n){return pn(n)?n:fn(n)}function gn(n,t){let e="",s=0,i=!1;for(let r=n.length-1;r>=0;r--){if(n[r]===">")i=!0;else if(n[r]==="<"){i=!1,e=n[r]+e;continue}if(i||s++,s<=t)e=n[r]+e;else{e="..."+e;break}}return e}function Ct(n,t,e,s){function i(r,a=[]){r=r||"";let l="",u=0;a.forEach(d=>{if(d.length===2&&d[0]===d[1])return;const g=d[1]+1,c=g-d[0]>=t.length;l+=[De(r.substring(u,d[0])),c&&"",De(r.substring(d[0],g)),c&&""].filter(Boolean).join(""),u=g}),l+=De(r.substring(u));const p=l.indexOf("");return p!==-1&&(l=gn(l,l.length-p)),l}if(n.matches?.length){for(const r of n.matches)if(!(e&&r.key!==e)&&!s?.includes(r.key))return i(r.value,r.indices)}}function mn(n,t){if(typeof n!="object"||n===null)return!1;const e=se(n,t);return e!=null&&e!==""}function It(n,t){return t?{xs:44,sm:48,md:52,lg:56,xl:60}[n]:{xs:24,sm:28,md:32,lg:36,xl:40}[n]}function vn(n,t,e,s){const i=It(t,!0),r=It(t,!1);return s?()=>i:e?a=>mn(n[a],e)?i:r:()=>r}const yn={slots:{root:"flex flex-col min-h-0 min-w-0 divide-y divide-default",input:"",close:"",back:"p-0",content:"relative overflow-hidden flex flex-col",footer:"p-1",viewport:"relative scroll-py-1 overflow-y-auto flex-1 focus:outline-none",group:"p-1 isolate",empty:"text-center text-muted",label:"font-semibold text-highlighted",item:"group relative w-full flex items-start select-none outline-none before:absolute before:z-[-1] before:inset-px before:rounded-md data-disabled:cursor-not-allowed data-disabled:opacity-75",itemLeadingIcon:"shrink-0",itemLeadingAvatar:"shrink-0",itemLeadingAvatarSize:"",itemLeadingChip:"shrink-0",itemLeadingChipSize:"",itemTrailing:"ms-auto inline-flex items-center",itemTrailingIcon:"shrink-0",itemTrailingHighlightedIcon:"shrink-0 text-dimmed hidden group-data-highlighted:inline-flex",itemTrailingKbds:"hidden lg:inline-flex items-center shrink-0",itemTrailingKbdsSize:"",itemWrapper:"flex-1 flex flex-col text-start min-w-0",itemLabel:"truncate space-x-1 text-dimmed",itemDescription:"truncate text-muted",itemLabelBase:"text-highlighted [&>mark]:text-inverted [&>mark]:bg-primary",itemLabelPrefix:"text-default",itemLabelSuffix:"text-dimmed [&>mark]:text-inverted [&>mark]:bg-primary"},variants:{virtualize:{true:{viewport:"p-1 isolate"},false:{viewport:"divide-y divide-default"}},size:{xs:{input:"[&>input]:h-10",empty:"py-3 text-xs",label:"p-1 text-[10px]/3 gap-1",item:"p-1 text-xs gap-1",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemLeadingChip:"size-4",itemLeadingChipSize:"sm",itemTrailing:"gap-1",itemTrailingIcon:"size-4",itemTrailingHighlightedIcon:"size-4",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"sm"},sm:{input:"[&>input]:h-11",empty:"py-4 text-xs",label:"p-1.5 text-[10px]/3 gap-1.5",item:"p-1.5 text-xs gap-1.5",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemLeadingChip:"size-4",itemLeadingChipSize:"sm",itemTrailing:"gap-1.5",itemTrailingIcon:"size-4",itemTrailingHighlightedIcon:"size-4",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"sm"},md:{input:"[&>input]:h-12",empty:"py-6 text-sm",label:"p-1.5 text-xs gap-1.5",item:"p-1.5 text-sm gap-1.5",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemLeadingChip:"size-5",itemLeadingChipSize:"md",itemTrailing:"gap-1.5",itemTrailingIcon:"size-5",itemTrailingHighlightedIcon:"size-5",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"md"},lg:{input:"[&>input]:h-13",empty:"py-7 text-sm",label:"p-2 text-xs gap-2",item:"p-2 text-sm gap-2",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemLeadingChip:"size-5",itemLeadingChipSize:"md",itemTrailing:"gap-2",itemTrailingIcon:"size-5",itemTrailingHighlightedIcon:"size-5",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"md"},xl:{input:"[&>input]:h-14",empty:"py-8 text-base",label:"p-2 text-sm gap-2",item:"p-2 text-base gap-2",itemLeadingIcon:"size-6",itemLeadingAvatarSize:"xs",itemLeadingChip:"size-6",itemLeadingChipSize:"lg",itemTrailing:"gap-2",itemTrailingIcon:"size-6",itemTrailingHighlightedIcon:"size-6",itemTrailingKbds:"gap-0.5",itemTrailingKbdsSize:"lg"}},active:{true:{item:"text-highlighted before:bg-elevated",itemLeadingIcon:"text-default"},false:{item:["text-default data-highlighted:not-data-disabled:text-highlighted data-highlighted:not-data-disabled:before:bg-elevated/50","transition-colors before:transition-colors"],itemLeadingIcon:["text-dimmed group-data-highlighted:not-group-data-disabled:text-default","transition-colors"]}},loading:{true:{itemLeadingIcon:"animate-spin"}}},defaultVariants:{size:"md"}},bn=["innerHTML"],xn=["innerHTML"],Sn=Object.assign({inheritAttrs:!1},{__name:"UCommandPalette",props:$e({as:{type:null,required:!1},size:{type:null,required:!1},icon:{type:null,required:!1},trailingIcon:{type:null,required:!1},selectedIcon:{type:null,required:!1},childrenIcon:{type:null,required:!1},placeholder:{type:String,required:!1},autofocus:{type:Boolean,required:!1,default:!0},close:{type:[Boolean,Object],required:!1},closeIcon:{type:null,required:!1},back:{type:[Boolean,Object],required:!1,default:!0},backIcon:{type:null,required:!1},input:{type:[Boolean,Object],required:!1,default:!0},groups:{type:Array,required:!1},fuse:{type:Object,required:!1},virtualize:{type:[Boolean,Object],required:!1,default:!1},valueKey:{type:null,required:!1},labelKey:{type:null,required:!1,default:"label"},descriptionKey:{type:null,required:!1,default:"description"},preserveGroupOrder:{type:Boolean,required:!1,default:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},multiple:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},highlightOnHover:{type:Boolean,required:!1,default:!0},selectionBehavior:{type:String,required:!1},by:{type:[String,Function],required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1}},{searchTerm:{type:String,default:""},searchTermModifiers:{}}),emits:$e(["update:modelValue","highlight","entryFocus","leave","update:open"],["update:searchTerm"]),setup(n,{emit:t}){const e=n,s=t,i=Je(),r=Ft(n,"searchTerm",{type:String,default:""}),{t:a}=Lt(),l=zt(),u=Tt("commandPalette",e),p=ps(Ke(e,"as","disabled","multiple","modelValue","defaultValue","highlightOnHover","by"),s),d=Cs(()=>e.virtualize?qe(typeof e.virtualize=="boolean"?{}:e.virtualize,{estimateSize:vn(A.value,"md",e.descriptionKey,!!i["item-description"])}):!1),[g,c]=gs({props:{item:{type:Object,required:!0},group:{type:Object,required:!1},index:{type:Number,required:!1}}}),o=z(()=>_e({extend:_e(yn),...l.ui?.commandPalette||{}})({size:e.size,virtualize:!!e.virtualize})),m=z(()=>qe({},e.fuse,{fuseOptions:{ignoreLocation:!0,threshold:.1,keys:[e.labelKey,"suffix"]},resultLimit:12,matchAllWhenSearchEmpty:!0})),v=te([]),y=z(()=>v.value[v.value.length-1]?.placeholder||e.placeholder||a("commandPalette.placeholder")),S=z(()=>v.value?.length?[v.value[v.value.length-1]]:e.groups),_=z(()=>S.value?.filter(I=>I.id?!I.ignoreFilter:(console.warn("[@nuxt/ui] CommandPalette group is missing an `id` property"),!1))?.flatMap(I=>I.items?.map(P=>({...P,group:I.id}))||[])||[]),{results:L}=dn(r,_,m),K=ms(L,16,!0);function w(I,P){let h=P;return I?.postFilter&&typeof I.postFilter=="function"&&(h=I.postFilter(r.value,h)),{...I,items:h.slice(0,m.value.resultLimit).map($=>({...$,labelHtml:Ct($,r.value,e.labelKey),suffixHtml:Ct($,r.value,void 0,[e.labelKey])}))}}const W=z(()=>{const I=S.value,P=K.value.reduce((x,T)=>{const{item:Y,matches:G}=T;return Y.group&&(x[Y.group]||=[],x[Y.group]?.push({...Y,matches:G})),x},{});if(e.preserveGroupOrder){const x=[];for(const T of I||[]){if(!T.items?.length)continue;const Y=T.ignoreFilter?T.items:P[T.id];if(!Y?.length)continue;const G=w(T,Y);G.items?.length&&x.push(G)}return x}const h=Object.entries(P).map(([x,T])=>{const Y=I?.find(fe=>fe.id===x);if(!Y)return;const G=w(Y,T);return G.items?.length?G:void 0}).filter(x=>!!x);return(I?.map((x,T)=>({...x,index:T}))?.filter(x=>x.ignoreFilter&&x.items?.length)?.map(x=>({...w(x,x.items||[]),index:x.index}))?.filter(x=>x.items?.length)||[]).reduce((x,T)=>(x.splice(T.index,0,T),x),[...h])}),A=z(()=>W.value.flatMap(I=>I.items||[])),k=Bt("rootRef");function R(I){I.children?.length&&(v.value.push({id:`history-${v.value.length}`,label:I.label,slot:I.slot,placeholder:I.placeholder,items:I.children}),r.value="",k.value?.highlightFirstItem())}function D(){v.value.length&&(v.value.pop(),r.value="",k.value?.highlightFirstItem())}function J(){r.value||D()}function ee(I,P){P.children?.length?(I.preventDefault(),R(P)):P.onSelect?.(I)}return(I,P)=>(E(),H(ae,null,[Z(f(g),null,{default:O(({item:h,index:$,group:x})=>[Z(vs,V(f(ys)(h),{custom:""}),{default:O(({active:T,...Y})=>[Z(f(ii),{value:e.valueKey?f(se)(h,e.valueKey):f(Re)(h,["matches","group","onSelect","labelHtml","suffixHtml","children"]),disabled:h.disabled,"as-child":"",onSelect:G=>ee(G,h)},{default:O(()=>[Z(bs,V(Y,{"data-slot":"item",class:o.value.item({class:[f(u)?.item,h.ui?.item,h.class],active:T||h.active})}),{default:O(()=>[j(I.$slots,h.slot||x?.slot||"item",{item:h,index:$,ui:o.value},()=>[j(I.$slots,h.slot?`${h.slot}-leading`:x?.slot?`${x.slot}-leading`:"item-leading",{item:h,index:$,ui:o.value},()=>[h.loading?(E(),B(Se,{key:0,name:n.loadingIcon||f(l).ui.icons.loading,"data-slot":"itemLeadingIcon",class:q(o.value.itemLeadingIcon({class:[f(u)?.itemLeadingIcon,h.ui?.itemLeadingIcon],loading:!0}))},null,8,["name","class"])):h.icon?(E(),B(Se,{key:1,name:h.icon,"data-slot":"itemLeadingIcon",class:q(o.value.itemLeadingIcon({class:[f(u)?.itemLeadingIcon,h.ui?.itemLeadingIcon],active:T||h.active}))},null,8,["name","class"])):h.avatar?(E(),B(xs,V({key:2,size:h.ui?.itemLeadingAvatarSize||f(u)?.itemLeadingAvatarSize||o.value.itemLeadingAvatarSize()},h.avatar,{"data-slot":"itemLeadingAvatar",class:o.value.itemLeadingAvatar({class:[f(u)?.itemLeadingAvatar,h.ui?.itemLeadingAvatar],active:T||h.active})}),null,16,["size","class"])):h.chip?(E(),B(Ss,V({key:3,size:h.ui?.itemLeadingChipSize||f(u)?.itemLeadingChipSize||o.value.itemLeadingChipSize(),inset:"",standalone:""},h.chip,{"data-slot":"itemLeadingChip",class:o.value.itemLeadingChip({class:[f(u)?.itemLeadingChip,h.ui?.itemLeadingChip],active:T||h.active})}),null,16,["size","class"])):Q("",!0)]),h.prefix||h.labelHtml||f(se)(h,e.labelKey)||h.suffixHtml||h.suffix||i[h.slot?`${h.slot}-label`:x?.slot?`${x.slot}-label`:"item-label"]||f(se)(h,e.descriptionKey)||i[h.slot?`${h.slot}-description`:x?.slot?`${x.slot}-description`:"item-description"]?(E(),H("span",{key:0,"data-slot":"itemWrapper",class:q(o.value.itemWrapper({class:[f(u)?.itemWrapper,h.ui?.itemWrapper]}))},[at("span",{"data-slot":"itemLabel",class:q(o.value.itemLabel({class:[f(u)?.itemLabel,h.ui?.itemLabel],active:T||h.active}))},[j(I.$slots,h.slot?`${h.slot}-label`:x?.slot?`${x.slot}-label`:"item-label",{item:h,index:$,ui:o.value},()=>[h.prefix?(E(),H("span",{key:0,"data-slot":"itemLabelPrefix",class:q(o.value.itemLabelPrefix({class:[f(u)?.itemLabelPrefix,h.ui?.itemLabelPrefix]}))},pe(h.prefix),3)):Q("",!0),h.labelHtml?(E(),H("span",{key:1,"data-slot":"itemLabelBase",class:q(o.value.itemLabelBase({class:[f(u)?.itemLabelBase,h.ui?.itemLabelBase],active:T||h.active})),innerHTML:h.labelHtml},null,10,bn)):(E(),H("span",{key:2,"data-slot":"itemLabelBase",class:q(o.value.itemLabelBase({class:[f(u)?.itemLabelBase,h.ui?.itemLabelBase],active:T||h.active}))},pe(f(se)(h,e.labelKey)),3)),h.suffixHtml?(E(),H("span",{key:3,"data-slot":"itemLabelSuffix",class:q(o.value.itemLabelSuffix({class:[f(u)?.itemLabelSuffix,h.ui?.itemLabelSuffix],active:T||h.active})),innerHTML:h.suffixHtml},null,10,xn)):h.suffix?(E(),H("span",{key:4,"data-slot":"itemLabelSuffix",class:q(o.value.itemLabelSuffix({class:[f(u)?.itemLabelSuffix,h.ui?.itemLabelSuffix],active:T||h.active}))},pe(h.suffix),3)):Q("",!0)])],2),f(se)(h,e.descriptionKey)||i[h.slot?`${h.slot}-description`:x?.slot?`${x.slot}-description`:"item-description"]?(E(),H("span",{key:0,"data-slot":"itemDescription",class:q(o.value.itemDescription({class:[f(u)?.itemDescription,h.ui?.itemDescription]}))},[j(I.$slots,h.slot?`${h.slot}-description`:x?.slot?`${x.slot}-description`:"item-description",{item:h,index:$,ui:o.value},()=>[Be(pe(f(se)(h,e.descriptionKey)),1)])],2)):Q("",!0)],2)):Q("",!0),at("span",{"data-slot":"itemTrailing",class:q(o.value.itemTrailing({class:[f(u)?.itemTrailing,h.ui?.itemTrailing]}))},[j(I.$slots,h.slot?`${h.slot}-trailing`:x?.slot?`${x.slot}-trailing`:"item-trailing",{item:h,index:$,ui:o.value},()=>[h.children&&h.children.length>0?(E(),B(Se,{key:0,name:n.childrenIcon||f(l).ui.icons.chevronRight,"data-slot":"itemTrailingIcon",class:q(o.value.itemTrailingIcon({class:[f(u)?.itemTrailingIcon,h.ui?.itemTrailingIcon]}))},null,8,["name","class"])):h.kbds?.length?(E(),H("span",{key:1,"data-slot":"itemTrailingKbds",class:q(o.value.itemTrailingKbds({class:[f(u)?.itemTrailingKbds,h.ui?.itemTrailingKbds]}))},[(E(!0),H(ae,null,me(h.kbds,(G,fe)=>(E(),B(As,V({key:fe,size:h.ui?.itemTrailingKbdsSize||f(u)?.itemTrailingKbdsSize||o.value.itemTrailingKbdsSize()},{ref_for:!0},typeof G=="string"?{value:G}:G),null,16,["size"]))),128))],2)):x?.highlightedIcon?(E(),B(Se,{key:2,name:x.highlightedIcon,"data-slot":"itemTrailingHighlightedIcon",class:q(o.value.itemTrailingHighlightedIcon({class:[f(u)?.itemTrailingHighlightedIcon,h.ui?.itemTrailingHighlightedIcon]}))},null,8,["name","class"])):Q("",!0)]),h.children?.length?Q("",!0):(E(),B(f(ri),{key:0,"as-child":""},{default:O(()=>[Z(Se,{name:n.selectedIcon||f(l).ui.icons.check,"data-slot":"itemTrailingIcon",class:q(o.value.itemTrailingIcon({class:[f(u)?.itemTrailingIcon,h.ui?.itemTrailingIcon]}))},null,8,["name","class"])]),_:2},1024))],2)])]),_:2},1040,["class"])]),_:2},1032,["value","disabled","onSelect"])]),_:2},1040)]),_:3}),Z(f(Hs),V({...f(p),...I.$attrs},{ref_key:"rootRef",ref:k,"selection-behavior":n.selectionBehavior,"data-slot":"root",class:o.value.root({class:[f(u)?.root,e.class]})}),{default:O(()=>[n.input?(E(),B(f(Ws),{key:0,modelValue:r.value,"onUpdate:modelValue":P[1]||(P[1]=h=>r.value=h),"as-child":""},{default:O(()=>[Z(Ts,V({variant:"none",size:n.size},typeof e.input=="object"?e.input:{},{placeholder:y.value,autofocus:n.autofocus,loading:n.loading,"loading-icon":n.loadingIcon,"trailing-icon":n.trailingIcon,icon:n.icon||f(l).ui.icons.search,"data-slot":"input",class:o.value.input({class:f(u)?.input}),onKeydown:ye(J,["backspace"])}),Dt({_:2},[v.value?.length&&(n.back||i.back)?{name:"leading",fn:O(()=>[j(I.$slots,"back",{ui:o.value},()=>[Z(lt,V({size:n.size,icon:n.backIcon||f(l).ui.icons.arrowLeft,color:"neutral",variant:"link","aria-label":f(a)("commandPalette.back")},typeof n.back=="object"?n.back:{},{"data-slot":"back",class:o.value.back({class:f(u)?.back}),onClick:D}),null,16,["size","icon","aria-label","class"])])]),key:"0"}:void 0,n.close||i.close?{name:"trailing",fn:O(()=>[j(I.$slots,"close",{ui:o.value},()=>[n.close?(E(),B(lt,V({key:0,size:n.size,icon:n.closeIcon||f(l).ui.icons.close,color:"neutral",variant:"ghost","aria-label":f(a)("commandPalette.close")},typeof n.close=="object"?n.close:{},{"data-slot":"close",class:o.value.close({class:f(u)?.close}),onClick:P[0]||(P[0]=h=>s("update:open",!1))}),null,16,["size","icon","aria-label","class"])):Q("",!0)])]),key:"1"}:void 0]),1040,["size","placeholder","autofocus","loading","loading-icon","trailing-icon","icon","class"])]),_:3},8,["modelValue"])):Q("",!0),Z(f(Ns),{"data-slot":"content",class:q(o.value.content({class:f(u)?.content}))},{default:O(()=>[W.value?.length?(E(),H("div",{key:0,role:"presentation","data-slot":"viewport",class:q(o.value.viewport({class:f(u)?.viewport}))},[n.virtualize?(E(),B(f(bi),V({key:0,options:A.value,"text-content":h=>f(se)(h,e.labelKey)},d.value),{default:O(({option:h,virtualItem:$})=>[Z(f(c),{item:h,index:$.index},null,8,["item","index"])]),_:1},16,["options","text-content"])):(E(!0),H(ae,{key:1},me(W.value,h=>(E(),B(f(Qs),{key:`group-${h.id}`,"data-slot":"group",class:q(o.value.group({class:f(u)?.group}))},{default:O(()=>[f(se)(h,e.labelKey)?(E(),B(f(Js),{key:0,"data-slot":"label",class:q(o.value.label({class:f(u)?.label}))},{default:O(()=>[Be(pe(f(se)(h,e.labelKey)),1)]),_:2},1032,["class"])):Q("",!0),(E(!0),H(ae,null,me(h.items,($,x)=>(E(),B(f(c),{key:`group-${h.id}-${x}`,item:$,index:x,group:h},null,8,["item","index","group"]))),128))]),_:2},1032,["class"]))),128))],2)):(E(),H("div",{key:1,"data-slot":"empty",class:q(o.value.empty({class:f(u)?.empty}))},[j(I.$slots,"empty",{searchTerm:r.value},()=>[Be(pe(r.value?f(a)("commandPalette.noMatch",{searchTerm:r.value}):f(a)("commandPalette.noData")),1)])],2))]),_:3},8,["class"]),i.footer?(E(),H("div",{key:1,"data-slot":"footer",class:q(o.value.footer({class:f(u)?.footer}))},[j(I.$slots,"footer",{ui:o.value})],2)):Q("",!0)]),_:3},16,["selection-behavior","class"])],64))}}),An={slots:{modal:"",input:""},variants:{fullscreen:{false:{modal:"sm:max-w-3xl h-full sm:h-[28rem]"}},size:{xs:{},sm:{},md:{},lg:{},xl:{}}},defaultVariants:{size:"md"}},Cn=/^[^-]+.*-.*[^-]+$/,In=/^[^_]+.*_.*[^_]+$/,Et=["arrowleft","arrowright","arrowup","arrowright","tab","escape","enter","backspace"];function Oe(n){return/^[a-z]$/i.test(n)?`Key${n.toUpperCase()}`:/^\d$/.test(n)?`Digit${n}`:/^f\d+$/i.test(n)?n.toUpperCase():{space:"Space",enter:"Enter",escape:"Escape",tab:"Tab",backspace:"Backspace",delete:"Delete",arrowup:"ArrowUp",arrowdown:"ArrowDown",arrowleft:"ArrowLeft",arrowright:"ArrowRight"}[n.toLowerCase()]||n}function En(n,t={}){const e=te([]),s=()=>{e.value.splice(0,e.value.length)},i=Is(s,t.chainDelay??800),{macOS:r}=Es(),a=Ms(),l=t.layoutIndependent??!1,u=Et.map(c=>Oe(c)),p=c=>{if(!c.key)return;const o=l?/^Key[A-Z]$/i.test(c.code):/^[a-z]{1}$/i.test(c.key),m=l?u.includes(c.code):Et.includes(c.key.toLowerCase());let v;if(e.value.push(l?c.code:c.key),e.value.length>=2){v=e.value.slice(-2).join("-");for(const y of g.value.filter(S=>S.chained))if(y.key===v){y.enabled&&(c.preventDefault(),y.handler(c)),s();return}}for(const y of g.value.filter(S=>!S.chained)){if(l){if(c.code!==y.key)continue}else if(c.key.toLowerCase()!==y.key)continue;if(c.metaKey===y.metaKey&&c.ctrlKey===y.ctrlKey&&c.altKey===y.altKey&&!((o||m||y.shiftKey||c.shiftKey&&(c.metaKey||c.ctrlKey))&&c.shiftKey!==y.shiftKey)){y.enabled&&(c.preventDefault(),y.handler(c)),s();return}}i()},d=z(()=>{const c=a.value?.tagName,o=a.value?.contentEditable;return c==="INPUT"||c==="TEXTAREA"||o==="true"||o==="plaintext-only"?a.value?.name||!0:!1}),g=z(()=>Object.entries(ie(n)).map(([c,o])=>{if(!o)return null;let m;c.includes("-")&&c!=="-"&&!c.includes("_")&&!c.match(Cn)?.length&&console.trace(`[Shortcut] Invalid key: "${c}"`),c.includes("_")&&c!=="_"&&!c.match(In)?.length&&console.trace(`[Shortcut] Invalid key: "${c}"`);const v=c.includes("-")&&c!=="-"&&!c.includes("_");if(v)l?m={key:c.split("-").map(_=>Oe(_)).join("-"),metaKey:!1,ctrlKey:!1,shiftKey:!1,altKey:!1}:m={key:c.toLowerCase(),metaKey:!1,ctrlKey:!1,shiftKey:!1,altKey:!1};else{const S=c.toLowerCase().split("_").map(L=>L);let _=S.filter(L=>!["meta","command","ctrl","shift","alt","option"].includes(L)).join("_");l&&(_=Oe(_)),m={key:_,metaKey:S.includes("meta")||S.includes("command"),ctrlKey:S.includes("ctrl"),shiftKey:S.includes("shift"),altKey:S.includes("alt")||S.includes("option")}}if(m.chained=v,!r.value&&m.metaKey&&!m.ctrlKey&&(m.metaKey=!1,m.ctrlKey=!0),typeof o=="function"?m.handler=o:typeof o=="object"&&(m={...m,handler:o.handler}),!m.handler)return console.trace("[Shortcut] Invalid value"),null;let y=!0;return o.usingInput?typeof o.usingInput=="string"&&(y=d.value===o.usingInput):y=!d.value,m.enabled=y,m}).filter(Boolean));return _s("keydown",p)}const kn={__name:"UContentSearch",props:$e({size:{type:null,required:!1},icon:{type:null,required:!1},placeholder:{type:String,required:!1},autofocus:{type:Boolean,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},shortcut:{type:String,required:!1,default:"meta_k"},links:{type:Array,required:!1},navigation:{type:Array,required:!1},groups:{type:Array,required:!1},files:{type:Array,required:!1},fuse:{type:Object,required:!1},colorMode:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},overlay:{type:Boolean,required:!1},transition:{type:Boolean,required:!1},content:{type:Object,required:!1},dismissible:{type:Boolean,required:!1},fullscreen:{type:Boolean,required:!1,default:!1},modal:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0}},{searchTerm:{type:String,default:""},searchTermModifiers:{}}),emits:["update:searchTerm"],setup(n,{expose:t}){const e=n,s=Je(),i=Ft(n,"searchTerm",{type:String,default:""}),{t:r}=Lt(),{open:a,mapNavigationItems:l,postFilter:u}=ws(),p=ks(),d=zt(),g=Tt("contentSearch",e),c=ot(Ke(e,"size","icon","placeholder","autofocus","loading","loadingIcon","close","closeIcon")),o=ot(Ke(e,"overlay","transition","content","dismissible","fullscreen","modal","portal")),m=()=>Re(s,["content"]),v=z(()=>qe({},e.fuse,{fuseOptions:{includeMatches:!0}})),y=z(()=>_e({extend:_e(An),...d.ui?.contentSearch||{}})({size:e.size,fullscreen:e.fullscreen})),S=Bt("commandPaletteRef"),_=z(()=>e.links?.length?e.links.flatMap(A=>[{...A,suffix:A.description,description:void 0,icon:A.icon||d.ui.icons.file,children:void 0},...A.children?.map(k=>({...k,prefix:A.label+" >",suffix:k.description,description:void 0,icon:k.icon||A.icon||d.ui.icons.file}))||[]]):[]),L=z(()=>e.navigation?.length?e.navigation.some(A=>!!A.children?.length)?e.navigation.map(A=>({id:A.path,label:A.title,items:l(A.children||[],e.files||[]),postFilter:u})):[{id:"docs",items:l(e.navigation,e.files||[]),postFilter:u}]:[]),K=z(()=>!e.colorMode||p?.forced?null:{id:"theme",label:r("contentSearch.theme"),items:[{label:r("colorMode.system"),icon:d.ui.icons.system,active:p.preference==="system",onSelect:()=>{p.preference="system"}},{label:r("colorMode.light"),icon:d.ui.icons.light,active:p.preference==="light",onSelect:()=>{p.preference="light"}},{label:r("colorMode.dark"),icon:d.ui.icons.dark,active:p.preference==="dark",onSelect:()=>{p.preference="dark"}}]}),w=z(()=>{const A=[];return _.value.length&&A.push({id:"links",label:r("contentSearch.links"),items:_.value}),A.push(...L.value),A.push(...e.groups||[]),K.value&&A.push(K.value),A});function W(A){A.disabled||(a.value=!1,i.value="")}return En({[e.shortcut]:{usingInput:!0,handler:()=>a.value=!a.value}}),t({commandPaletteRef:S}),(A,k)=>(E(),B(zs,V({open:f(a),"onUpdate:open":k[2]||(k[2]=R=>Ls(a)?a.value=R:null),title:n.title||f(r)("contentSearch.title"),description:n.description||f(r)("contentSearch.description")},f(o),{"data-slot":"modal",class:y.value.modal({class:[f(g)?.modal,e.class]})}),{content:O(R=>[j(A.$slots,"content",ut(ct(R)),()=>[Z(Sn,V({ref_key:"commandPaletteRef",ref:S,"search-term":i.value,"onUpdate:searchTerm":k[0]||(k[0]=D=>i.value=D)},f(c),{groups:w.value,fuse:v.value,input:{fixed:!0},ui:f(Fs)(f(Re)(y.value,["modal"]),f(g)),"onUpdate:modelValue":W,"onUpdate:open":k[1]||(k[1]=D=>a.value=D)}),Dt({_:2},[me(m(),(D,J)=>({name:J,fn:O(ee=>[j(A.$slots,J,ut(ct(ee)))])}))]),1040,["search-term","groups","fuse","ui"])])]),_:3},16,["open","title","description","class"]))}};export{kn as default}; diff --git a/docus/dist/_nuxt/Czt-ZuAe.js b/docus/dist/_nuxt/Czt-ZuAe.js new file mode 100644 index 0000000..98a86b9 --- /dev/null +++ b/docus/dist/_nuxt/Czt-ZuAe.js @@ -0,0 +1 @@ +import{aQ as c,e as t,s as d,q as n,c as p,o as r}from"./B3fabVUf.js";const u=["id"],f=["href"],k={__name:"ProseH6",props:{id:{type:String,required:!1}},setup(a){const e=a,{headings:o}=c().public.mdc,i=p(()=>e.id&&(typeof o?.anchorLinks=="boolean"&&o?.anchorLinks===!0||typeof o?.anchorLinks=="object"&&o?.anchorLinks?.h6));return(s,h)=>(r(),t("h6",{id:e.id},[e.id&&d(i)?(r(),t("a",{key:0,href:`#${e.id}`},[n(s.$slots,"default")],8,f)):n(s.$slots,"default",{key:1})],8,u))}};export{k as default}; diff --git a/docus/dist/_nuxt/D-lyTl4E.js b/docus/dist/_nuxt/D-lyTl4E.js new file mode 100644 index 0000000..8090829 --- /dev/null +++ b/docus/dist/_nuxt/D-lyTl4E.js @@ -0,0 +1 @@ +const o={or:"또는",error:{title:"페이지를 찾을 수 없습니다",description:"죄송합니다. 찾고 계신 페이지를 찾을 수 없습니다."}},a={copy:{page:"페이지 복사",link:"Markdown 페이지 복사",view:"Markdown으로 보기",gpt:"ChatGPT에서 열기",claude:"Claude에서 열기"},links:"커뮤니티",toc:"이 페이지에서",menu:"메뉴",report:"문제 신고",edit:"이 페이지 편집"},e={copyLogo:"로고 복사",copyWordmark:"워드마크 복사",downloadLogo:"로고 다운로드",downloadWordmark:"워드마크 다운로드",brandAssets:"브랜드 에셋",logoCopied:"로고가 복사되었습니다",wordmarkCopied:"워드마크가 복사되었습니다",logoDownloaded:"로고가 다운로드되었습니다",wordmarkDownloaded:"워드마크가 다운로드되었습니다",copyLogoFailed:"로고 복사 실패",copyWordmarkFailed:"워드마크 복사 실패"},n={title:"AI에게 물어보기",placeholder:"질문하기...",tooltip:"AI에 질문하기",tryAsking:"질문을 해보세요",askAnything:"무엇이든 물어보세요...",clearChat:"채팅 지우기",close:"닫기",expand:"펼치기",collapse:"접기",thinking:"생각 중...",askMeAnything:"무엇이든 물어보세요",askMeAnythingDescription:"문서를 탐색하고, 개념을 이해하고, 답을 찾는 데 도움을 받으세요.",faq:"자주 묻는 질문",chatCleared:"새로 고침 시 채팅이 지워집니다",lineBreak:"줄바꿈",explainWithAi:"AI로 설명",toolListPages:"나열된 문서 페이지",toolReadPage:"읽기",loading:{searching:"문서를 검색하는 중",reading:"문서 읽기",analyzing:"콘텐츠 분석",finding:"최선의 답 찾기",finished:"사용된 출처"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/D0RjKS9E.js b/docus/dist/_nuxt/D0RjKS9E.js new file mode 100644 index 0000000..7f868b5 --- /dev/null +++ b/docus/dist/_nuxt/D0RjKS9E.js @@ -0,0 +1 @@ +const e={or:"eller",error:{title:"Side ikke funnet",description:"Vi beklager, men siden du leter etter kunne ikke finnes."}},o={copy:{page:"Kopier side",link:"Kopier Markdown-side",view:"Vis som Markdown",gpt:"Åpne i ChatGPT",claude:"Åpne i Claude"},links:"Fellesskap",toc:"På denne siden",menu:"Meny",report:"Rapporter et problem",edit:"Rediger denne siden"},n={copyLogo:"Kopier logo",copyWordmark:"Kopier wordmark",downloadLogo:"Last ned logo",downloadWordmark:"Last ned wordmark",brandAssets:"Merkevareressurser",logoCopied:"Logo kopiert",wordmarkCopied:"Wordmark kopiert",logoDownloaded:"Logo lastet ned",wordmarkDownloaded:"Wordmark lastet ned",copyLogoFailed:"Kunne ikke kopiere logo",copyWordmarkFailed:"Kunne ikke kopiere wordmark"},r={title:"Spør AI",placeholder:"Still et spørsmål...",tooltip:"Still AI et spørsmål",tryAsking:"Prøv å stille et spørsmål",askAnything:"Spør hva som helst...",clearChat:"Tøm chat",close:"Lukk",expand:"Utvid",collapse:"Skjul",thinking:"Tenker...",askMeAnything:"Spør hva som helst",askMeAnythingDescription:"Få hjelp til å navigere i dokumentasjonen, forstå konsepter og finne svar.",faq:"Ofte stilte spørsmål",chatCleared:"Chat slettes ved oppdatering",lineBreak:"Linjeskift",explainWithAi:"Forklar med AI",toolListPages:"Oppførte dokumentasjonssider",toolReadPage:"Les",loading:{searching:"Søker i dokumentasjonen",reading:"Leser gjennom dokumentene",analyzing:"Analyserer innholdet",finding:"Finne det beste svaret",finished:"Kilder brukt"}},t={common:e,docs:o,logo:n,assistant:r};export{r as assistant,e as common,t as default,o as docs,n as logo}; diff --git a/docus/dist/_nuxt/D2PgxUb5.js b/docus/dist/_nuxt/D2PgxUb5.js new file mode 100644 index 0000000..18b1b12 --- /dev/null +++ b/docus/dist/_nuxt/D2PgxUb5.js @@ -0,0 +1 @@ +import{Q as z,c2 as B,a0 as I,a1 as P,c3 as V,w as F,o as s,a as h,p as C,e as c,ac as n,s as r,f as g,af as x,q as d,ab as T,ah as k,ag as q,a7 as j,m as N,X as O,P as A,c as p,am as w,c4 as E,v as R}from"./B3fabVUf.js";const U={slots:{root:"relative flex rounded-lg",spotlight:"absolute inset-0 rounded-[inherit] pointer-events-none bg-default/90",container:"relative flex flex-col flex-1 lg:grid gap-x-8 gap-y-4 p-4 sm:p-6",wrapper:"flex flex-col flex-1 items-start",header:"mb-4",body:"flex-1",footer:"pt-4 mt-auto",leading:"inline-flex items-center mb-2.5",leadingIcon:"size-5 shrink-0 text-primary",title:"text-base text-pretty font-semibold text-highlighted",description:"text-[15px] text-pretty"},variants:{orientation:{horizontal:{container:"lg:grid-cols-2 lg:items-center"},vertical:{container:""}},reverse:{true:{wrapper:"order-last"}},variant:{solid:{root:"bg-inverted text-inverted",title:"text-inverted",description:"text-dimmed"},outline:{root:"bg-default ring ring-default",description:"text-muted"},soft:{root:"bg-elevated/50",description:"text-toned"},subtle:{root:"bg-elevated/50 ring ring-default",description:"text-toned"},ghost:{description:"text-muted"},naked:{container:"p-0 sm:p-0",description:"text-muted"}},to:{true:{root:["has-focus-visible:ring-2 has-focus-visible:ring-primary","transition"]}},title:{true:{description:"mt-1"}},highlight:{true:{root:"ring-2"}},highlightColor:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},spotlight:{true:{root:"[--spotlight-size:400px] before:absolute before:-inset-px before:pointer-events-none before:rounded-[inherit] before:bg-[radial-gradient(var(--spotlight-size)_var(--spotlight-size)_at_calc(var(--spotlight-x,0px))_calc(var(--spotlight-y,0px)),var(--spotlight-color),transparent_70%)]"}},spotlightColor:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""}},compoundVariants:[{variant:"solid",to:!0,class:{root:"hover:bg-inverted/90"}},{variant:"outline",to:!0,class:{root:"hover:bg-elevated/50"}},{variant:"soft",to:!0,class:{root:"hover:bg-elevated"}},{variant:"subtle",to:!0,class:{root:"hover:bg-elevated"}},{variant:"subtle",to:!0,highlight:!1,class:{root:"hover:ring-accented"}},{variant:"ghost",to:!0,class:{root:"hover:bg-elevated/50"}},{highlightColor:"primary",highlight:!0,class:{root:"ring-primary"}},{highlightColor:"secondary",highlight:!0,class:{root:"ring-secondary"}},{highlightColor:"success",highlight:!0,class:{root:"ring-success"}},{highlightColor:"info",highlight:!0,class:{root:"ring-info"}},{highlightColor:"warning",highlight:!0,class:{root:"ring-warning"}},{highlightColor:"error",highlight:!0,class:{root:"ring-error"}},{highlightColor:"neutral",highlight:!0,class:{root:"ring-inverted"}},{spotlightColor:"primary",spotlight:!0,class:{root:"[--spotlight-color:var(--ui-primary)]"}},{spotlightColor:"secondary",spotlight:!0,class:{root:"[--spotlight-color:var(--ui-secondary)]"}},{spotlightColor:"success",spotlight:!0,class:{root:"[--spotlight-color:var(--ui-success)]"}},{spotlightColor:"info",spotlight:!0,class:{root:"[--spotlight-color:var(--ui-info)]"}},{spotlightColor:"warning",spotlight:!0,class:{root:"[--spotlight-color:var(--ui-warning)]"}},{spotlightColor:"error",spotlight:!0,class:{root:"[--spotlight-color:var(--ui-error)]"}},{spotlightColor:"neutral",spotlight:!0,class:{root:"[--spotlight-color:var(--ui-bg-inverted)]"}}],defaultVariants:{variant:"outline",highlightColor:"primary",spotlightColor:"primary"}},D=Object.assign({inheritAttrs:!1},{__name:"UPageCard",props:{as:{type:null,required:!1},icon:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},orientation:{type:null,required:!1,default:"vertical"},reverse:{type:Boolean,required:!1},highlight:{type:Boolean,required:!1},highlightColor:{type:null,required:!1},spotlight:{type:Boolean,required:!1},spotlightColor:{type:null,required:!1},variant:{type:null,required:!1},to:{type:null,required:!1},target:{type:[String,Object,null],required:!1},onClick:{type:Function,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const o=t,e=z(),v=R(),u=B(),$=I(),l=P("pageCard",o),{elementX:f,elementY:y}=V(v,{eventFilter:u.eventFilter}),m=p(()=>o.spotlight&&(f.value!==0||y.value!==0));F(()=>o.spotlight,a=>{a?u.resume():u.pause()},{immediate:!0});const i=p(()=>w({extend:w(U),...$.ui?.pageCard||{}})({orientation:o.orientation,reverse:o.reverse,variant:o.variant,to:!!o.to||!!o.onClick,title:!!o.title||!!e.title,highlight:o.highlight,highlightColor:o.highlightColor,spotlight:m.value,spotlightColor:o.spotlightColor})),S=p(()=>(e.title&&E(e.title())||o.title||"Card link").trim());return(a,b)=>(s(),h(r(A),{ref_key:"cardRef",ref:v,as:t.as,"data-orientation":t.orientation,"data-slot":"root",class:n(i.value.root({class:[r(l)?.root,o.class]})),style:O(m.value&&{"--spotlight-x":`${r(f)}px`,"--spotlight-y":`${r(y)}px`}),onClick:t.onClick},{default:C(()=>[o.spotlight?(s(),c("div",{key:0,"data-slot":"spotlight",class:n(i.value.spotlight({class:r(l)?.spotlight}))},null,2)):g("",!0),x("div",{"data-slot":"container",class:n(i.value.container({class:r(l)?.container}))},[e.header||t.icon||e.leading||e.body||t.title||e.title||t.description||e.description||e.footer?(s(),c("div",{key:0,"data-slot":"wrapper",class:n(i.value.wrapper({class:r(l)?.wrapper}))},[e.header?(s(),c("div",{key:0,"data-slot":"header",class:n(i.value.header({class:r(l)?.header}))},[d(a.$slots,"header")],2)):g("",!0),t.icon||e.leading?(s(),c("div",{key:1,"data-slot":"leading",class:n(i.value.leading({class:r(l)?.leading}))},[d(a.$slots,"leading",{ui:i.value},()=>[t.icon?(s(),h(T,{key:0,name:t.icon,"data-slot":"leadingIcon",class:n(i.value.leadingIcon({class:r(l)?.leadingIcon}))},null,8,["name","class"])):g("",!0)])],2)):g("",!0),e.body||t.title||e.title||t.description||e.description?(s(),c("div",{key:2,"data-slot":"body",class:n(i.value.body({class:r(l)?.body}))},[d(a.$slots,"body",{},()=>[t.title||e.title?(s(),c("div",{key:0,"data-slot":"title",class:n(i.value.title({class:r(l)?.title}))},[d(a.$slots,"title",{},()=>[k(q(t.title),1)])],2)):g("",!0),t.description||e.description?(s(),c("div",{key:1,"data-slot":"description",class:n(i.value.description({class:r(l)?.description}))},[d(a.$slots,"description",{},()=>[k(q(t.description),1)])],2)):g("",!0)])],2)):g("",!0),e.footer?(s(),c("div",{key:3,"data-slot":"footer",class:n(i.value.footer({class:r(l)?.footer}))},[d(a.$slots,"footer")],2)):g("",!0)],2)):g("",!0),d(a.$slots,"default")],2),t.to?(s(),h(j,N({key:1,"aria-label":S.value},{to:t.to,target:t.target,...a.$attrs},{class:"focus:outline-none peer",raw:""}),{default:C(()=>[...b[0]||(b[0]=[x("span",{class:"absolute inset-0","aria-hidden":"true"},null,-1)])]),_:1},16,["aria-label"])):g("",!0)]),_:3},8,["as","data-orientation","class","style","onClick"]))}});export{D as default}; diff --git a/docus/dist/_nuxt/D5DWQP-B.js b/docus/dist/_nuxt/D5DWQP-B.js new file mode 100644 index 0000000..8ed93fb --- /dev/null +++ b/docus/dist/_nuxt/D5DWQP-B.js @@ -0,0 +1 @@ +import{a0 as m,a1 as g,aQ as b,e as i,ac as n,s as c,q as r,c as u,am as d,o as h}from"./B3fabVUf.js";const k={slots:{base:"text-lg text-highlighted font-bold mt-6 mb-2 scroll-mt-[calc(24px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(24px+var(--ui-header-height))] [&>a]:focus-visible:outline-primary",link:""}},v=["id"],y=["href"],q={__name:"ProseH4",props:{id:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const s=e,p=m(),a=g("prose.h4",s),{headings:t}=b().public?.mdc||{},o=u(()=>d({extend:d(k),...p.ui?.prose?.h4||{}})()),f=u(()=>s.id&&typeof t?.anchorLinks=="object"&&t.anchorLinks.h4);return(l,x)=>(h(),i("h4",{id:e.id,class:n(o.value.base({class:[c(a)?.base,s.class]}))},[e.id&&f.value?(h(),i("a",{key:0,href:`#${e.id}`,class:n(o.value.link({class:c(a)?.link}))},[r(l.$slots,"default")],10,y)):r(l.$slots,"default",{key:1})],10,v))}};export{q as default}; diff --git a/docus/dist/_nuxt/D5E4Znt1.js b/docus/dist/_nuxt/D5E4Znt1.js new file mode 100644 index 0000000..c069175 --- /dev/null +++ b/docus/dist/_nuxt/D5E4Znt1.js @@ -0,0 +1 @@ +import{a0 as m,a1 as g,aQ as k,e as o,ac as i,s as c,q as r,c as u,am as d,o as h}from"./B3fabVUf.js";const b={slots:{base:"text-4xl text-highlighted font-bold mb-8 scroll-mt-[calc(45px+var(--ui-header-height))] lg:scroll-mt-(--ui-header-height)",link:"inline-flex items-center gap-2"}},x=["id"],y=["href"],q={__name:"ProseH1",props:{id:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const s=e,p=m(),a=g("prose.h1",s),{headings:t}=k().public?.mdc||{},l=u(()=>d({extend:d(b),...p.ui?.prose?.h1||{}})()),f=u(()=>s.id&&typeof t?.anchorLinks=="object"&&t.anchorLinks.h1);return(n,v)=>(h(),o("h1",{id:e.id,class:i(l.value.base({class:[c(a)?.base,s.class]}))},[e.id&&f.value?(h(),o("a",{key:0,href:`#${e.id}`,class:i(l.value.link({class:c(a)?.link}))},[r(n.$slots,"default")],10,y)):r(n.$slots,"default",{key:1})],10,x))}};export{q as default}; diff --git a/docus/dist/_nuxt/DB_5vY_E.js b/docus/dist/_nuxt/DB_5vY_E.js new file mode 100644 index 0000000..a312f06 --- /dev/null +++ b/docus/dist/_nuxt/DB_5vY_E.js @@ -0,0 +1 @@ +import{a0 as n,a1 as c,e as l,q as u,ac as i,s as m,c as f,am as s,o as d}from"./B3fabVUf.js";const _={base:"my-5 leading-7 text-pretty"},b={__name:"ProseP",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const e=a,t=n(),o=c("prose.p",e),p=f(()=>s({extend:s(_),...t.ui?.prose?.p||{}}));return(r,y)=>(d(),l("p",{class:i(p.value({class:[m(o)?.base,e.class]}))},[u(r.$slots,"default")],2))}};export{b as default}; diff --git a/docus/dist/_nuxt/DEklDIUE.js b/docus/dist/_nuxt/DEklDIUE.js new file mode 100644 index 0000000..e6a47d1 --- /dev/null +++ b/docus/dist/_nuxt/DEklDIUE.js @@ -0,0 +1 @@ +const o={or:"կամ",error:{title:"Էջը չի գտնվել",description:"Ներողություն, բայց այն էջը, որը փնտրում եք, չի գտնվել:"}},a={copy:{page:"Պատճենել էջը",link:"Պատճենել Markdown էջը",view:"Դիտել որպես Markdown",gpt:"Բացել ChatGPT-ում",claude:"Բացել Claude-ում"},links:"Համայնք",toc:"Այս էջում",menu:"Ընտրացանկ",report:"Հաղորդել խնդրի մասին",edit:"Խմբագրել այս էջը"},d={copyLogo:"Copy logo",copyWordmark:"Copy wordmark",downloadLogo:"Download logo",downloadWordmark:"Download wordmark",brandAssets:"Brand assets",logoCopied:"Logo copied",wordmarkCopied:"Wordmark copied",logoDownloaded:"Logo downloaded",wordmarkDownloaded:"Wordmark downloaded",copyLogoFailed:"Failed to copy logo",copyWordmarkFailed:"Failed to copy wordmark"},e={title:"Հարցրեք AI-ին",placeholder:"Հարց տվեք...",tooltip:"Հարց տվեք AI-ին",tryAsking:"Փորձեք հարց տալ",askAnything:"Հարցրեք որևէ բան...",clearChat:"Ջնջել չատը",close:"Փակել",expand:"Ընդարձակել",collapse:"Փակել",thinking:"Մտածում եմ...",askMeAnything:"Հարցրեք որևէ բան",askMeAnythingDescription:"Ստացեք օգնություն՝ փաստաթղթերում կողմնորոշվելու, հասկացությունները հասկանալու և պատասխաններ գտնելու համար։",faq:"ՀՏՀ",chatCleared:"Զրույցը մաքրվում է թարմացնելիս",lineBreak:"Գծի ընդմիջում",explainWithAi:"Բացատրիր AI-ով",toolListPages:"Հրապարակված փաստաթղթերի էջեր",toolReadPage:"Կարդալ",loading:{searching:"Փաստաթղթերի որոնում",reading:"Փաստաթղթերի ընթերցում",analyzing:"Բովանդակության վերլուծություն",finding:"Գտնել լավագույն պատասխանը",finished:"Օգտագործված աղբյուրներ"}},n={common:o,docs:a,logo:d,assistant:e};export{e as assistant,o as common,n as default,a as docs,d as logo}; diff --git a/docus/dist/_nuxt/DHP-KcjK.js b/docus/dist/_nuxt/DHP-KcjK.js new file mode 100644 index 0000000..816a7d3 --- /dev/null +++ b/docus/dist/_nuxt/DHP-KcjK.js @@ -0,0 +1 @@ +import{Q as v,a0 as m,a1 as f,e as d,af as w,q as n,ac as o,s as r,f as b,c as y,am as l,o as u}from"./B3fabVUf.js";const C={slots:{root:"my-5",preview:"flex justify-center border border-muted relative p-4 rounded-md",code:"[&>div>pre]:rounded-t-none [&>div]:my-0"},variants:{code:{true:{preview:"border-b-0 rounded-b-none"}}}},k={__name:"ProseCodePreview",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(i){const a=i,t=v(),p=m(),e=f("prose.codePreview",a),s=y(()=>l({extend:l(C),...p.ui?.prose?.codePreview||{}})({code:!!t.code}));return(c,P)=>(u(),d("div",{class:o(s.value.root({class:[r(e)?.root,a.class]}))},[w("div",{class:o(s.value.preview({class:[r(e)?.preview]}))},[n(c.$slots,"default")],2),t.code?(u(),d("div",{key:0,class:o(s.value.code({class:[r(e)?.code]}))},[n(c.$slots,"code")],2)):b("",!0)],2))}};export{k as default}; diff --git a/docus/dist/_nuxt/DJxuwfoz.js b/docus/dist/_nuxt/DJxuwfoz.js new file mode 100644 index 0000000..98129ee --- /dev/null +++ b/docus/dist/_nuxt/DJxuwfoz.js @@ -0,0 +1 @@ +import{Q as K,l as W,a0 as X,a1 as Y,aB as Z,aC as _,aD as ee,a6 as ie,G as ae,o as n,a as d,p as le,af as se,m as q,s as a,q as m,e as I,ac as o,ab as S,ad as te,f as g,P as ne,c as B,am as A,aE as re}from"./B3fabVUf.js";const oe={slots:{root:"relative inline-flex items-center",base:["w-full rounded-md border-0 appearance-none placeholder:text-dimmed focus:outline-none disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leading:"absolute inset-y-0 start-0 flex items-center",leadingIcon:"shrink-0 text-dimmed",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailing:"absolute inset-y-0 end-0 flex items-center",trailingIcon:"shrink-0 text-dimmed"},variants:{fieldGroup:{horizontal:{root:"group has-focus-visible:z-[1]",base:"group-not-only:group-first:rounded-e-none group-not-only:group-last:rounded-s-none group-not-last:group-not-first:rounded-none"},vertical:{root:"group has-focus-visible:z-[1]",base:"group-not-only:group-first:rounded-b-none group-not-only:group-last:rounded-t-none group-not-last:group-not-first:rounded-none"}},size:{xs:{base:"px-2 py-1 text-sm/4 gap-1",leading:"ps-2",trailing:"pe-2",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},sm:{base:"px-2.5 py-1.5 text-sm/4 gap-1.5",leading:"ps-2.5",trailing:"pe-2.5",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},md:{base:"px-2.5 py-1.5 text-base/5 gap-1.5",leading:"ps-2.5",trailing:"pe-2.5",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},lg:{base:"px-3 py-2 text-base/5 gap-2",leading:"ps-3",trailing:"pe-3",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},xl:{base:"px-3 py-2 text-base gap-2",leading:"ps-3",trailing:"pe-3",leadingIcon:"size-6",leadingAvatarSize:"xs",trailingIcon:"size-6"}},variant:{outline:"text-highlighted bg-default ring ring-inset ring-accented",soft:"text-highlighted bg-elevated/50 hover:bg-elevated focus:bg-elevated disabled:bg-elevated/50",subtle:"text-highlighted bg-elevated ring ring-inset ring-accented",ghost:"text-highlighted bg-transparent hover:bg-elevated focus:bg-elevated disabled:bg-transparent dark:disabled:bg-transparent",none:"text-highlighted bg-transparent"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},leading:{true:""},trailing:{true:""},loading:{true:""},highlight:{true:""},fixed:{false:""},type:{file:"file:me-1.5 file:font-medium file:text-muted file:outline-none"}},compoundVariants:[{color:"primary",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary"},{color:"secondary",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-secondary"},{color:"success",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-success"},{color:"info",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-info"},{color:"warning",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-warning"},{color:"error",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-error"},{color:"primary",highlight:!0,class:"ring ring-inset ring-primary"},{color:"secondary",highlight:!0,class:"ring ring-inset ring-secondary"},{color:"success",highlight:!0,class:"ring ring-inset ring-success"},{color:"info",highlight:!0,class:"ring ring-inset ring-info"},{color:"warning",highlight:!0,class:"ring ring-inset ring-warning"},{color:"error",highlight:!0,class:"ring ring-inset ring-error"},{color:"neutral",variant:["outline","subtle"],class:"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-inverted"},{color:"neutral",highlight:!0,class:"ring ring-inset ring-inverted"},{leading:!0,size:"xs",class:"ps-7"},{leading:!0,size:"sm",class:"ps-8"},{leading:!0,size:"md",class:"ps-9"},{leading:!0,size:"lg",class:"ps-10"},{leading:!0,size:"xl",class:"ps-11"},{trailing:!0,size:"xs",class:"pe-7"},{trailing:!0,size:"sm",class:"pe-8"},{trailing:!0,size:"md",class:"pe-9"},{trailing:!0,size:"lg",class:"pe-10"},{trailing:!0,size:"xl",class:"pe-11"},{loading:!0,leading:!0,class:{leadingIcon:"animate-spin"}},{loading:!0,leading:!1,trailing:!0,class:{trailingIcon:"animate-spin"}},{fixed:!1,size:"xs",class:"md:text-xs"},{fixed:!1,size:"sm",class:"md:text-xs"},{fixed:!1,size:"md",class:"md:text-sm"},{fixed:!1,size:"lg",class:"md:text-sm"}],defaultVariants:{size:"md",color:"primary",variant:"outline"}},ue=["id","type","value","name","placeholder","disabled","required","autocomplete"],ge=Object.assign({inheritAttrs:!1},{__name:"UInput",props:{as:{type:null,required:!1},id:{type:String,required:!1},name:{type:String,required:!1},type:{type:null,required:!1,default:"text"},placeholder:{type:String,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},autocomplete:{type:[String,Object],required:!1,default:"off"},autofocus:{type:Boolean,required:!1},autofocusDelay:{type:Number,required:!1,default:0},disabled:{type:Boolean,required:!1},highlight:{type:Boolean,required:!1},fixed:{type:Boolean,required:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},modelModifiers:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1}},emits:["update:modelValue","blur","change"],setup(s,{expose:k,emit:V}){const i=s,c=V,u=K(),v=W(i,"modelValue",c,{defaultValue:i.defaultValue}),C=X(),t=Y("input",i),{emitFormBlur:M,emitFormInput:F,emitFormChange:w,size:G,color:N,id:$,name:j,highlight:O,disabled:P,emitFormFocus:b,ariaAttrs:R}=Z(i,{}),{orientation:T,size:D}=_(i),{isLeading:f,isTrailing:h,leadingIconName:y,trailingIconName:x}=ee(i),E=B(()=>D.value||G.value),l=B(()=>A({extend:A(oe),...C.ui?.input||{}})({type:i.type,color:N.value,variant:i.variant,size:E?.value,loading:i.loading,highlight:O.value,fixed:i.fixed,leading:f.value||!!i.avatar||!!u.leading,trailing:h.value||!!u.trailing,fieldGroup:T.value})),p=ie("inputRef");function z(e){i.modelModifiers?.trim&&(typeof e=="string"||e===null||e===void 0)&&(e=e?.trim()??null),(i.modelModifiers?.number||i.type==="number")&&(e=re(e)),i.modelModifiers?.nullable&&(e||=null),i.modelModifiers?.optional&&!i.modelModifiers?.nullable&&e!==null&&(e||=void 0),v.value=e,F()}function U(e){i.modelModifiers?.lazy||z(e.target.value)}function L(e){const r=e.target.value;i.modelModifiers?.lazy&&z(r),i.modelModifiers?.trim&&(e.target.value=r.trim()),w(),c("change",e)}function Q(e){M(),c("blur",e)}function H(){i.autofocus&&p.value?.focus()}return ae(()=>{setTimeout(()=>{H()},i.autofocusDelay)}),k({inputRef:p}),(e,r)=>(n(),d(a(ne),{as:s.as,"data-slot":"root",class:o(l.value.root({class:[a(t)?.root,i.class]}))},{default:le(()=>[se("input",q({id:a($),ref_key:"inputRef",ref:p,type:s.type,value:a(v),name:a(j),placeholder:s.placeholder,"data-slot":"base",class:l.value.base({class:a(t)?.base}),disabled:a(P),required:s.required,autocomplete:s.autocomplete},{...e.$attrs,...a(R)},{onInput:U,onBlur:Q,onChange:L,onFocus:r[0]||(r[0]=(...J)=>a(b)&&a(b)(...J))}),null,16,ue),m(e.$slots,"default",{ui:l.value}),a(f)||s.avatar||u.leading?(n(),I("span",{key:0,"data-slot":"leading",class:o(l.value.leading({class:a(t)?.leading}))},[m(e.$slots,"leading",{ui:l.value},()=>[a(f)&&a(y)?(n(),d(S,{key:0,name:a(y),"data-slot":"leadingIcon",class:o(l.value.leadingIcon({class:a(t)?.leadingIcon}))},null,8,["name","class"])):s.avatar?(n(),d(te,q({key:1,size:a(t)?.leadingAvatarSize||l.value.leadingAvatarSize()},s.avatar,{"data-slot":"leadingAvatar",class:l.value.leadingAvatar({class:a(t)?.leadingAvatar})}),null,16,["size","class"])):g("",!0)])],2)):g("",!0),a(h)||u.trailing?(n(),I("span",{key:1,"data-slot":"trailing",class:o(l.value.trailing({class:a(t)?.trailing}))},[m(e.$slots,"trailing",{ui:l.value},()=>[a(x)?(n(),d(S,{key:0,name:a(x),"data-slot":"trailingIcon",class:o(l.value.trailingIcon({class:a(t)?.trailingIcon}))},null,8,["name","class"])):g("",!0)])],2)):g("",!0)]),_:3},8,["as","class"]))}});export{ge as _}; diff --git a/docus/dist/_nuxt/DLv9Mxsp.js b/docus/dist/_nuxt/DLv9Mxsp.js new file mode 100644 index 0000000..f400088 --- /dev/null +++ b/docus/dist/_nuxt/DLv9Mxsp.js @@ -0,0 +1 @@ +import{a0 as d,a1 as c,e as n,q as i,ac as u,s as p,c as m,am as e,o as f}from"./B3fabVUf.js";const h={base:"[&:first-child>th:first-child]:rounded-tl-md [&:first-child>th:last-child]:rounded-tr-md [&:last-child>td:first-child]:rounded-bl-md [&:last-child>td:last-child]:rounded-br-md"},C={__name:"ProseTr",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const s=t,a=d(),r=c("prose.tr",s),l=m(()=>e({extend:e(h),...a.ui?.prose?.tr||{}}));return(o,b)=>(f(),n("tr",{class:u(l.value({class:[p(r)?.base,s.class]}))},[i(o.$slots,"default")],2))}};export{C as default}; diff --git a/docus/dist/_nuxt/DOelY9Nb.js b/docus/dist/_nuxt/DOelY9Nb.js new file mode 100644 index 0000000..c13edd4 --- /dev/null +++ b/docus/dist/_nuxt/DOelY9Nb.js @@ -0,0 +1 @@ +const o={or:"or",error:{title:"Page not found",description:"We are sorry but this page could not be found."}},e={copy:{page:"Copy page",link:"Copy Markdown page",view:"View as Markdown",gpt:"Open in ChatGPT",claude:"Open in Claude"},links:"Community",toc:"On this page",menu:"Menu",report:"Report an issue",edit:"Edit this page"},n={copyLogo:"Copy logo",copyWordmark:"Copy wordmark",downloadLogo:"Download logo",downloadWordmark:"Download wordmark",brandAssets:"Brand assets",logoCopied:"Logo copied",wordmarkCopied:"Wordmark copied",logoDownloaded:"Logo downloaded",wordmarkDownloaded:"Wordmark downloaded",copyLogoFailed:"Failed to copy logo",copyWordmarkFailed:"Failed to copy wordmark"},a={title:"Ask AI",placeholder:"Ask a question...",tooltip:"Ask AI a question",tryAsking:"Try asking a question",askAnything:"Ask anything...",clearChat:"Clear chat",close:"Close",expand:"Expand",collapse:"Collapse",thinking:"Thinking...",askMeAnything:"Ask anything",askMeAnythingDescription:"Get help navigating the documentation, understanding concepts, and finding answers.",faq:"FAQ",chatCleared:"Chat is cleared on refresh",lineBreak:"Line break",explainWithAi:"Explain with AI",toolListPages:"Listed documentation pages",toolReadPage:"Read",loading:{searching:"Searching the documentation",reading:"Reading through the docs",analyzing:"Analyzing the content",finding:"Finding the best answer",finished:"Sources used"}},i={common:o,docs:e,logo:n,assistant:a};export{a as assistant,o as common,i as default,e as docs,n as logo}; diff --git a/docus/dist/_nuxt/DVlZI4kn.js b/docus/dist/_nuxt/DVlZI4kn.js new file mode 100644 index 0000000..e3ce303 --- /dev/null +++ b/docus/dist/_nuxt/DVlZI4kn.js @@ -0,0 +1 @@ +const a={or:"o",error:{title:"Página no encontrada",description:"Lo sentimos, no se pudo encontrar esta página."}},o={copy:{page:"Copiar página",link:"Copiar página en Markdown",view:"Ver como Markdown",gpt:"Abrir en ChatGPT",claude:"Abrir en Claude"},links:"Comunidad",toc:"En esta página",menu:"Menú",report:"Reportar un problema",edit:"Editar esta página"},e={copyLogo:"Copiar logo",copyWordmark:"Copiar wordmark",downloadLogo:"Descargar logo",downloadWordmark:"Descargar wordmark",brandAssets:"Recursos de marca",logoCopied:"Logo copiado",wordmarkCopied:"Wordmark copiado",logoDownloaded:"Logo descargado",wordmarkDownloaded:"Wordmark descargado",copyLogoFailed:"No se pudo copiar el logo",copyWordmarkFailed:"No se pudo copiar el wordmark"},r={title:"Preguntar a la IA",placeholder:"Haz una pregunta...",tooltip:"Haz una pregunta a la IA",tryAsking:"Intenta hacer una pregunta",askAnything:"Pregunta lo que quieras...",clearChat:"Borrar chat",close:"Cerrar",expand:"Expandir",collapse:"Contraer",thinking:"Pensando...",askMeAnything:"Preguntar cualquier cosa",askMeAnythingDescription:"Obtenga ayuda para navegar por la documentación, comprender conceptos y encontrar respuestas.",faq:"Preguntas frecuentes",chatCleared:"El chat se borra al actualizar",lineBreak:"Salto de línea",explainWithAi:"Explicar con IA",toolListPages:"Páginas de documentación publicadas",toolReadPage:"Leer",loading:{searching:"Búsqueda de la documentación",reading:"Leyendo los documentos",analyzing:"Análisis del contenido",finding:"Encontrar la mejor respuesta",finished:"Fuentes utilizadas"}},n={common:a,docs:o,logo:e,assistant:r};export{r as assistant,a as common,n as default,o as docs,e as logo}; diff --git a/docus/dist/_nuxt/DXQrCARz.js b/docus/dist/_nuxt/DXQrCARz.js new file mode 100644 index 0000000..2404ae3 --- /dev/null +++ b/docus/dist/_nuxt/DXQrCARz.js @@ -0,0 +1 @@ +import{a0 as o,a1 as r,o as u,a as p,p as m,q as f,ac as d,s as e,P as h,c as v,am as t}from"./B3fabVUf.js";const C={base:"min-h-[calc(100vh-var(--ui-header-height))]"},b={__name:"UMain",props:{as:{type:null,required:!1,default:"main"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const s=a,n=o(),c=r("main",s),i=v(()=>t({extend:t(C),...n.ui?.main||{}}));return(l,_)=>(u(),p(e(h),{as:a.as,class:d(i.value({class:[e(c)?.base,s.class]}))},{default:m(()=>[f(l.$slots,"default")]),_:3},8,["as","class"]))}};export{b as _}; diff --git a/docus/dist/_nuxt/D_gYX37v.js b/docus/dist/_nuxt/D_gYX37v.js new file mode 100644 index 0000000..65d74fb --- /dev/null +++ b/docus/dist/_nuxt/D_gYX37v.js @@ -0,0 +1 @@ +import{a0 as l,a1 as i,e as c,q as p,ac as u,s as d,c as f,am as t,o as m}from"./B3fabVUf.js";const b={base:"py-3 px-4 font-semibold text-sm border-e border-b first:border-s border-t border-muted",variants:{align:{left:"text-left",center:"text-center",right:"text-right"}},defaultVariants:{align:"left"}},x={__name:"ProseTh",props:{align:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(s){const e=s,a=l(),r=i("prose.th",e),o=f(()=>t({extend:t(b),...a.ui?.prose?.th||{}}));return(n,g)=>(m(),c("th",{class:u(o.value({align:e.align,class:[d(r)?.base,e.class]}))},[p(n.$slots,"default")],2))}};export{x as default}; diff --git a/docus/dist/_nuxt/D_wlStJ8.js b/docus/dist/_nuxt/D_wlStJ8.js new file mode 100644 index 0000000..e576a34 --- /dev/null +++ b/docus/dist/_nuxt/D_wlStJ8.js @@ -0,0 +1 @@ +const a={or:"eller",error:{title:"Sidan hittades inte",description:"Vi ber om ursäkt, men sidan du letar efter kunde inte hittas."}},e={copy:{page:"Kopiera sida",link:"Kopiera Markdown-sida",view:"Visa som Markdown",gpt:"Öppna i ChatGPT",claude:"Öppna i Claude"},links:"Gemenskap",toc:"På denna sida",menu:"Meny",report:"Rapportera ett problem",edit:"Redigera denna sida"},o={copyLogo:"Kopiera logotyp",copyWordmark:"Kopiera ordmärke",downloadLogo:"Ladda ner logotyp",downloadWordmark:"Ladda ner ordmärke",brandAssets:"Varumärkesmaterial",logoCopied:"Logotyp kopierad",wordmarkCopied:"Ordmärke kopierat",logoDownloaded:"Logotyp nedladdad",wordmarkDownloaded:"Ordmärke nedladdat",copyLogoFailed:"Kunde inte kopiera logotyp",copyWordmarkFailed:"Kunde inte kopiera ordmärke"},t={title:"Fråga AI",placeholder:"Ställ en fråga...",tooltip:"Ställ en fråga till AI",tryAsking:"Försök att ställa en fråga",askAnything:"Fråga vad som helst...",clearChat:"Rensa chatten",close:"Stäng",expand:"Expandera",collapse:"Kollapsa",thinking:"Funderar...",askMeAnything:"Fråga vad som helst",askMeAnythingDescription:"Få hjälp med att navigera i dokumentationen, förstå begrepp och hitta svar.",faq:"FAQ",chatCleared:"Chatten rensas vid uppdatering",lineBreak:"Radbrytning",explainWithAi:"Förklara med AI",toolListPages:"Listade dokumentationssidor",toolReadPage:"Läs",loading:{searching:"Söker i dokumentationen",reading:"Läser igenom dokumenten",analyzing:"Analysera innehållet",finding:"Att hitta det bästa svaret",finished:"Använda källor"}},n={common:a,docs:e,logo:o,assistant:t};export{t as assistant,a as common,n as default,e as docs,o as logo}; diff --git a/docus/dist/_nuxt/DbjiwLiW.js b/docus/dist/_nuxt/DbjiwLiW.js new file mode 100644 index 0000000..c16f93a --- /dev/null +++ b/docus/dist/_nuxt/DbjiwLiW.js @@ -0,0 +1 @@ +const n={or:"hoặc",error:{title:"Không tìm thấy trang",description:"Chúng tôi xin lỗi, nhưng trang bạn đang tìm kiếm không tồn tại."}},o={copy:{page:"Sao chép trang",link:"Sao chép trang Markdown",view:"Xem dưới dạng Markdown",gpt:"Mở trong ChatGPT",claude:"Mở trong Claude"},links:"Cộng đồng",toc:"Trên trang này",menu:"Menu",report:"Báo cáo sự cố",edit:"Chỉnh sửa trang này"},i={copyLogo:"Sao chép logo",copyWordmark:"Sao chép wordmark",downloadLogo:"Tải logo",downloadWordmark:"Tải wordmark",brandAssets:"Tài nguyên thương hiệu",logoCopied:"Đã sao chép logo",wordmarkCopied:"Đã sao chép wordmark",logoDownloaded:"Đã tải logo",wordmarkDownloaded:"Đã tải wordmark",copyLogoFailed:"Không thể sao chép logo",copyWordmarkFailed:"Không thể sao chép wordmark"},t={title:"Hỏi AI",placeholder:"Đặt một câu hỏi...",tooltip:"Đặt câu hỏi cho AI",tryAsking:"Hãy thử đặt một câu hỏi",askAnything:"Hỏi bất cứ điều gì...",clearChat:"Xóa cuộc trò chuyện",close:"Đóng",expand:"Mở rộng",collapse:"Thu gọn",thinking:"Đang suy nghĩ...",askMeAnything:"Hỏi bất cứ điều gì",askMeAnythingDescription:"Nhận trợ giúp điều hướng tài liệu, hiểu các khái niệm và tìm câu trả lời.",faq:"Câu hỏi thường gặp",chatCleared:"Trò chuyện sẽ bị xóa khi làm mới",lineBreak:"Ngắt dòng",explainWithAi:"Giải thích bằng AI",toolListPages:"Các trang tài liệu được liệt kê",toolReadPage:"Đọc",loading:{searching:"Tìm kiếm tài liệu",reading:"Đọc qua tài liệu",analyzing:"Phân tích nội dung",finding:"Tìm câu trả lời tốt nhất",finished:"Nguồn được sử dụng"}},a={common:n,docs:o,logo:i,assistant:t};export{t as assistant,n as common,a as default,o as docs,i as logo}; diff --git a/docus/dist/_nuxt/Dcswgw4K.js b/docus/dist/_nuxt/Dcswgw4K.js new file mode 100644 index 0000000..5aeeba0 --- /dev/null +++ b/docus/dist/_nuxt/Dcswgw4K.js @@ -0,0 +1 @@ +const o={or:"nebo",error:{title:"Stránka nenalezena",description:"Je nám líto, ale stránka, kterou hledáte, nebyla nalezena."}},e={copy:{page:"Kopírovat stránku",link:"Kopírovat Markdown stránku",view:"Zobrazit jako Markdown",gpt:"Otevřít v ChatGPT",claude:"Otevřít v Claude"},links:"Komunita",toc:"Na této stránce",menu:"Nabídka",report:"Nahlásit problém",edit:"Upravit tuto stránku"},a={copyLogo:"Kopírovat logo",copyWordmark:"Kopírovat wordmark",downloadLogo:"Stáhnout logo",downloadWordmark:"Stáhnout wordmark",brandAssets:"Materiály značky",logoCopied:"Logo zkopírováno",wordmarkCopied:"Wordmark zkopírován",logoDownloaded:"Logo staženo",wordmarkDownloaded:"Wordmark stažen",copyLogoFailed:"Kopírování loga selhalo",copyWordmarkFailed:"Kopírování wordmarku selhalo"},t={title:"Zeptejte se AI",placeholder:"Zeptej se...",tooltip:"Zeptejte se umělé inteligence",tryAsking:"Zkus položit otázku",askAnything:"Zeptej se na cokoliv...",clearChat:"Vymazat chat",close:"Zavřít",expand:"Rozbalit",collapse:"Sbalit",thinking:"Přemýšlím...",askMeAnything:"Zeptej se na cokoliv",askMeAnythingDescription:"Získejte pomoc s orientací v dokumentaci, porozuměním konceptům a nalezením odpovědí.",faq:"Často kladené otázky",chatCleared:"Chat je vymazán při obnovení",lineBreak:"Zalomení řádku",explainWithAi:"Vysvětlete pomocí AI",toolListPages:"Uvedené stránky dokumentace",toolReadPage:"Číst",loading:{searching:"Vyhledávání v dokumentaci",reading:"Čtení dokumentů",analyzing:"Analýza obsahu",finding:"Nalezení nejlepší odpovědi",finished:"Použité zdroje"}},n={common:o,docs:e,logo:a,assistant:t};export{t as assistant,o as common,n as default,e as docs,a as logo}; diff --git a/docus/dist/_nuxt/DewHeYIb.js b/docus/dist/_nuxt/DewHeYIb.js new file mode 100644 index 0000000..6af9d0c --- /dev/null +++ b/docus/dist/_nuxt/DewHeYIb.js @@ -0,0 +1 @@ +import{d as b,g as V,k as M,J as m,l as B,I as $,o as _,a as y,p,q as g,s as t,P as h,v as C,O as z,z as k,G as L,aW as A,B as I,X as D,f as w,bD as F,c,w as P,bE as O,bF as E,m as H,bG as N,C as G,D as K}from"./B3fabVUf.js";import{R as W}from"./B6bUjJBd.js";const[q,j]=k("TabsRoot");var J=b({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(i,{emit:s}){const n=i,e=s,{orientation:r,unmountOnHide:u,dir:o}=V(n),a=M(o);m();const l=B(n,"modelValue",e,{defaultValue:n.defaultValue,passive:n.modelValue===void 0}),f=C(),v=z(new Set);return j({modelValue:l,changeModelValue:d=>{l.value=d},orientation:r,dir:a,unmountOnHide:u,activationMode:n.activationMode,baseId:$(void 0,"reka-tabs"),tabsList:f,contentIds:v,registerContent:d=>{v.value=new Set([...v.value,d])},unregisterContent:d=>{const T=new Set(v.value);T.delete(d),v.value=T}}),(d,T)=>(_(),y(t(h),{dir:t(a),"data-orientation":t(r),"as-child":d.asChild,as:d.as},{default:p(()=>[g(d.$slots,"default",{modelValue:t(l)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),ee=J;function S(i,s){return`${i}-trigger-${s}`}function R(i,s){return`${i}-content-${s}`}var U=b({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(i){const s=i,{forwardRef:n}=m(),e=q(),r=c(()=>S(e.baseId,s.value)),u=c(()=>R(e.baseId,s.value)),o=c(()=>s.value===e.modelValue.value),a=C(o.value);return L(()=>{e.registerContent(s.value),requestAnimationFrame(()=>{a.value=!1})}),A(()=>{e.unregisterContent(s.value)}),(l,f)=>(_(),y(t(F),{present:l.forceMount||o.value,"force-mount":""},{default:p(({present:v})=>[I(t(h),{id:u.value,ref:t(n),"as-child":l.asChild,as:l.as,role:"tabpanel","data-state":o.value?"active":"inactive","data-orientation":t(e).orientation.value,"aria-labelledby":r.value,hidden:!v,tabindex:"0",style:D({animationDuration:a.value?"0s":void 0})},{default:p(()=>[!t(e).unmountOnHide.value||v?g(l.$slots,"default",{key:0}):w("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),ae=U,X=b({__name:"TabsIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(i,{expose:s}){const n=i,e=q();s({updateIndicatorStyle:o}),m();const r=C({size:null,position:null}),u=C([]);P(()=>[e.modelValue.value,e?.dir.value],()=>{o()},{immediate:!0,flush:"post"}),O(()=>{u.value=Array.from(e.tabsList.value?.querySelectorAll('[role="tab"]')||[])}),E(c(()=>[e.tabsList.value,...u.value]),o);function o(){const a=e.tabsList.value?.querySelector('[role="tab"][data-state="active"]');a&&(e.orientation.value==="horizontal"?r.value={size:a.offsetWidth,position:a.offsetLeft}:r.value={size:a.offsetHeight,position:a.offsetTop})}return(a,l)=>typeof r.value.size=="number"?(_(),y(t(h),H({key:0},n,{style:{"--reka-tabs-indicator-size":`${r.value.size}px`,"--reka-tabs-indicator-position":`${r.value.position}px`}}),{default:p(()=>[g(a.$slots,"default")]),_:3},16,["style"])):w("v-if",!0)}}),te=X,Q=b({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(i){const s=i,{loop:n}=V(s),{forwardRef:e,currentElement:r}=m(),u=q();return u.tabsList=r,(o,a)=>(_(),y(t(N),{"as-child":"",orientation:t(u).orientation.value,dir:t(u).dir.value,loop:t(n)},{default:p(()=>[I(t(h),{ref:t(e),role:"tablist","as-child":o.asChild,as:o.as,"aria-orientation":t(u).orientation.value},{default:p(()=>[g(o.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),se=Q,Y=b({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(i){const s=i,{forwardRef:n}=m(),e=q(),r=c(()=>S(e.baseId,s.value)),u=c(()=>e.contentIds.value.has(s.value)?R(e.baseId,s.value):void 0),o=c(()=>s.value===e.modelValue.value);return(a,l)=>(_(),y(t(W),{"as-child":"",focusable:!a.disabled,active:o.value},{default:p(()=>[I(t(h),{id:r.value,ref:t(n),role:"tab",type:a.as==="button"?"button":void 0,as:a.as,"as-child":a.asChild,"aria-selected":o.value?"true":"false","aria-controls":u.value,"data-state":o.value?"active":"inactive",disabled:a.disabled,"data-disabled":a.disabled?"":void 0,"data-orientation":t(e).orientation.value,onMousedown:l[0]||(l[0]=K(f=>{!a.disabled&&f.ctrlKey===!1?t(e).changeModelValue(a.value):f.preventDefault()},["left"])),onKeydown:l[1]||(l[1]=G(f=>t(e).changeModelValue(a.value),["enter","space"])),onFocus:l[2]||(l[2]=()=>{const f=t(e).activationMode!=="manual";!o.value&&!a.disabled&&f&&t(e).changeModelValue(a.value)})},{default:p(()=>[g(a.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),oe=Y;export{ee as T,se as a,te as b,oe as c,ae as d}; diff --git a/docus/dist/_nuxt/Df-aV_dL.js b/docus/dist/_nuxt/Df-aV_dL.js new file mode 100644 index 0000000..5237057 --- /dev/null +++ b/docus/dist/_nuxt/Df-aV_dL.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ClIRhDxf.js","./B3fabVUf.js","./entry.B0IIbxeE.css"])))=>i.map(i=>d[i]); +import{b_ as w,bm as b,b$ as d,c0 as l,c1 as p}from"./B3fabVUf.js";async function h(n,a="gzip"){let e;if(typeof Buffer<"u"){const i=Buffer.from(n,"base64");e=Uint8Array.from(i)}else if(typeof atob<"u")e=Uint8Array.from(atob(n),i=>i.charCodeAt(0));else throw new TypeError("No base64 decoding method available");const o=new Response(new Blob([e])).body?.pipeThrough(new DecompressionStream(a)),c=await new Response(o).text();return JSON.parse(c)}function f(n,a){const e=g(n),t={...a};for(const o in t)e[o]==="json"&&t[o]&&t[o]!=="undefined"&&(t[o]=JSON.parse(t[o])),e[o]==="boolean"&&t[o]!=="undefined"&&(t[o]=!!t[o]);for(const o in t)t[o]==="NULL"&&(t[o]=void 0);return t}function g(n){const a=n.match(/FROM\s+(\w+)/);return a?w[y(a[1])]?.fields||{}:{}}function y(n){return n.replace(/^_content_/,"")}let r;const u=new Map,s=new Map;function E(n){async function a(e){const t=String(e);return r||(s.has("_")||s.set("_",S()),r=await s.get("_"),s.delete("_")),u.has(t)||(s.has(t)||s.set(t,_(e)),await s.get(t),u.set(t,"loaded"),s.delete(t)),r}return{all:async(e,t)=>(await a(n),r.exec({sql:e,bind:t,rowMode:"object",returnValue:"resultRows"}).map(o=>f(e,o))),first:async(e,t)=>(await a(n),f(e,r.exec({sql:e,bind:t,rowMode:"object",returnValue:"resultRows"}).shift())),exec:async(e,t)=>{await a(n),await r.exec({sql:e,bind:t})}}}async function S(){if(!r){const n=await b(()=>import("./ClIRhDxf.js"),__vite__mapDeps([0,1,2]),import.meta.url).then(e=>e.default);globalThis.sqlite3ApiConfig={silent:!0,debug:(...e)=>console.debug(...e),warn:(...e)=>{String(e[0]).includes("OPFS sqlite3_vfs")||console.warn(...e)},error:(...e)=>console.error(...e),log:(...e)=>console.log(...e)};const a=await n();r=new a.oo1.DB}return r}async function _(n){if(window.sessionStorage.getItem("previewToken"))return r;let a=null;const e=`checksum_${n}`,t=`collection_${n}`;let o="matched";try{r.exec({sql:`SELECT * FROM ${d.info} where id = '${e}'`,rowMode:"object",returnValue:"resultRows"}).shift()?.version!==l[String(n)]&&(o="mismatch")}catch{o="missing"}if(o!=="matched"){if(window.localStorage.getItem(`content_${e}`)===l[String(n)]&&(a=window.localStorage.getItem(`content_${t}`)),!a){a=await p(void 0,String(n));try{window.localStorage.setItem(`content_${e}`,l[String(n)]),window.localStorage.setItem(`content_${t}`,a)}catch(i){console.error("Database integrity check failed, rebuilding database",i)}}const c=await h(a);await r.exec({sql:`DROP TABLE IF EXISTS ${d[String(n)]}`}),o==="mismatch"&&await r.exec({sql:`DELETE FROM ${d.info} WHERE id = '${e}'`});for(const i of c)try{await r.exec(i)}catch(m){console.error("Error executing command",m)}}return r}export{E as loadDatabaseAdapter}; diff --git a/docus/dist/_nuxt/Dme4Sp_Z.js b/docus/dist/_nuxt/Dme4Sp_Z.js new file mode 100644 index 0000000..b8741d5 --- /dev/null +++ b/docus/dist/_nuxt/Dme4Sp_Z.js @@ -0,0 +1 @@ +const e={or:"of",error:{title:"Pagina niet gevonden",description:"Sorry, maar deze pagina is niet gevonden."}},o={copy:{page:"Kopieer pagina",link:"Kopieer Markdown pagina",view:"Bekijk als Markdown",gpt:"Open in ChatGPT",claude:"Open in Claude"},links:"Community",toc:"Op deze pagina",menu:"Menu",report:"Rapporteer een probleem",edit:"Bewerk deze pagina"},n={copyLogo:"Logo kopiëren",copyWordmark:"Woordmerk kopiëren",downloadLogo:"Logo downloaden",downloadWordmark:"Woordmerk downloaden",brandAssets:"Merkmaterialen",logoCopied:"Logo gekopieerd",wordmarkCopied:"Woordmerk gekopieerd",logoDownloaded:"Logo gedownload",wordmarkDownloaded:"Woordmerk gedownload",copyLogoFailed:"Logo kopiëren mislukt",copyWordmarkFailed:"Woordmerk kopiëren mislukt"},a={title:"Vraag AI",placeholder:"Stel een vraag...",tooltip:"Stel een vraag aan AI",tryAsking:"Probeer een vraag te stellen",askAnything:"Vraag maar raak...",clearChat:"Chat wissen",close:"Sluiten",expand:"Uitvouwen",collapse:"Inklappen",thinking:"Aan het nadenken...",askMeAnything:"Vraag maar raak",askMeAnythingDescription:"Krijg hulp bij het navigeren door de documentatie, het begrijpen van concepten en het vinden van antwoorden.",faq:"Veelgestelde vragen",chatCleared:"De chat wordt gewist bij verversen",lineBreak:"Regelafbreking",explainWithAi:"Uitleggen met AI",toolListPages:"Vermelde documentatiepagina's",toolReadPage:"Lezen",loading:{searching:"De documentatie doorzoeken",reading:"De documentatie doornemen",analyzing:"De inhoud analyseren",finding:"Het beste antwoord vinden",finished:"Gebruikte bronnen"}},r={common:e,docs:o,logo:n,assistant:a};export{a as assistant,e as common,r as default,o as docs,n as logo}; diff --git a/docus/dist/_nuxt/Dq00p3Sb.js b/docus/dist/_nuxt/Dq00p3Sb.js new file mode 100644 index 0000000..5103a73 --- /dev/null +++ b/docus/dist/_nuxt/Dq00p3Sb.js @@ -0,0 +1 @@ +import{Q as y,a0 as _,a1 as k,O as d,bt as q,o as r,a as c,p as n,s,bu as h,ac as l,q as u,f as m,af as B,P,c as b,am as v}from"./B3fabVUf.js";const x={slots:{root:"flex flex-col lg:grid lg:grid-cols-10 lg:gap-10",left:"lg:col-span-2",center:"lg:col-span-8",right:"lg:col-span-2 order-first lg:order-last"},variants:{left:{true:""},right:{true:""}},compoundVariants:[{left:!0,right:!0,class:{center:"lg:col-span-6"}},{left:!1,right:!1,class:{center:"lg:col-span-10"}}]},V={__name:"UPage",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(i){const f=i,e=y(),C=_(),a=k("page",f),g=d(!!e.left),p=d(!!e.right);q(()=>{g.value=!!e.left,p.value=!!e.right});const t=b(()=>v({extend:v(x),...C.ui?.page||{}})({left:g.value,right:p.value}));return(o,S)=>(r(),c(s(P),{as:i.as,"data-slot":"root",class:l(t.value.root({class:[s(a)?.root,f.class]}))},{default:n(()=>[e.left?(r(),c(s(h),{key:0,"data-slot":"left",class:l(t.value.left({class:s(a)?.left}))},{default:n(()=>[u(o.$slots,"left")]),_:3},8,["class"])):m("",!0),B("div",{"data-slot":"center",class:l(t.value.center({class:s(a)?.center}))},[u(o.$slots,"default")],2),e.right?(r(),c(s(h),{key:1,"data-slot":"right",class:l(t.value.right({class:s(a)?.right}))},{default:n(()=>[u(o.$slots,"right")]),_:3},8,["class"])):m("",!0)]),_:3},8,["as","class"]))}};export{V as _}; diff --git a/docus/dist/_nuxt/Ds9OA60O.js b/docus/dist/_nuxt/Ds9OA60O.js new file mode 100644 index 0000000..3dcceb1 --- /dev/null +++ b/docus/dist/_nuxt/Ds9OA60O.js @@ -0,0 +1 @@ +const o={or:"أو",error:{title:"الصفحة غير موجودة",description:"نأسف، لكن الصفحة التي تبحث عنها غير موجودة."}},a={copy:{page:"نسخ الصفحة",link:"نسخ صفحة Markdown",view:"عرض كـ Markdown",gpt:"فتح في ChatGPT",claude:"فتح في Claude"},links:"المجتمع",toc:"في هذه الصفحة",menu:"قائمة",report:"الإبلاغ عن مشكلة",edit:"تحرير هذه الصفحة"},e={copyLogo:"نسخ الشعار",copyWordmark:"نسخ العلامة النصية",downloadLogo:"تحميل الشعار",downloadWordmark:"تحميل العلامة النصية",brandAssets:"أصول العلامة التجارية",logoCopied:"تم نسخ الشعار",wordmarkCopied:"تم نسخ العلامة النصية",logoDownloaded:"تم تحميل الشعار",wordmarkDownloaded:"تم تحميل العلامة النصية",copyLogoFailed:"فشل نسخ الشعار",copyWordmarkFailed:"فشل نسخ العلامة النصية"},n={title:"اسأل الذكاء الاصطناعي",placeholder:"اطرح سؤالاً...",tooltip:"اطرح سؤالاً على الذكاء الاصطناعي",tryAsking:"حاول طرح سؤال",askAnything:"اسأل أي شيء...",clearChat:"محو المحادثة",close:"إغلاق",expand:"توسيع",collapse:"طي",thinking:"التفكير...",askMeAnything:"اسأل عن أي شيء",askMeAnythingDescription:"احصل على المساعدة في التنقل بين الوثائق وفهم المفاهيم والعثور على الإجابات.",faq:"الأسئلة الشائعة",chatCleared:"تم مسح الدردشة عند التحديث",lineBreak:"فاصل الأسطر",explainWithAi:"اشرح باستخدام الذكاء الاصطناعي",toolListPages:"صفحات الوثائق المدرجة",toolReadPage:"قراءة",loading:{searching:"البحث في الوثائق",reading:"قراءة المستندات",analyzing:"تحليل المحتوى",finding:"العثور على أفضل إجابة",finished:"المصادر المستخدمة"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/Du9oxZzF.js b/docus/dist/_nuxt/Du9oxZzF.js new file mode 100644 index 0000000..720dd5c --- /dev/null +++ b/docus/dist/_nuxt/Du9oxZzF.js @@ -0,0 +1 @@ +const e={or:"eller",error:{title:"Side ikke fundet",description:"Vi beklager, men siden du leder efter kunne ikke findes."}},o={copy:{page:"Kopier side",link:"Kopier Markdown side",view:"Vis som Markdown",gpt:"Åbn i ChatGPT",claude:"Åbn i Claude"},links:"Fællesskab",toc:"På denne side",menu:"Menu",report:"Rapporter et problem",edit:"Rediger denne side"},n={copyLogo:"Kopiér logo",copyWordmark:"Kopiér wordmark",downloadLogo:"Download logo",downloadWordmark:"Download wordmark",brandAssets:"Brandmaterialer",logoCopied:"Logo kopieret",wordmarkCopied:"Wordmark kopieret",logoDownloaded:"Logo downloadet",wordmarkDownloaded:"Wordmark downloadet",copyLogoFailed:"Kunne ikke kopiere logo",copyWordmarkFailed:"Kunne ikke kopiere wordmark"},d={title:"Spørg AI",placeholder:"Stil et spørgsmål...",tooltip:"Stil AI et spørgsmål",tryAsking:"Prøv at stille et spørgsmål",askAnything:"Spørg om hvad som helst...",clearChat:"Ryd chat",close:"Luk",expand:"Udvid",collapse:"Skjul",thinking:"Tænker...",askMeAnything:"Spørg om hvad som helst",askMeAnythingDescription:"Få hjælp til at navigere i dokumentationen, forstå begreber og finde svar.",faq:"FAQ",chatCleared:"Chat ryddes ved opdatering",lineBreak:"Linjeskift",explainWithAi:"Forklar med AI",toolListPages:"Opførte dokumentationssider",toolReadPage:"Læs",loading:{searching:"Søgning i dokumentationen",reading:"Gennemlæsning af dokumenterne",analyzing:"Analyse af indholdet",finding:"Find det bedste svar",finished:"Anvendte kilder"}},i={common:e,docs:o,logo:n,assistant:d};export{d as assistant,e as common,i as default,o as docs,n as logo}; diff --git a/docus/dist/_nuxt/DuhoAnL7.js b/docus/dist/_nuxt/DuhoAnL7.js new file mode 100644 index 0000000..4b6e238 --- /dev/null +++ b/docus/dist/_nuxt/DuhoAnL7.js @@ -0,0 +1 @@ +const e={or:"ou",error:{title:"Page non trouvée",description:"Nous sommes désolés, mais la page que vous cherchez n'existe pas."}},o={copy:{page:"Copier la page",link:"Copier le lien Markdown",view:"Voir en Markdown",gpt:"Ouvrir dans ChatGPT",claude:"Ouvrir dans Claude"},links:"Communauté",toc:"Sur cette page",menu:"Menu",report:"Signaler un problème",edit:"Éditer cette page"},r={copyLogo:"Copier le logo",copyWordmark:"Copier le wordmark",downloadLogo:"Télécharger le logo",downloadWordmark:"Télécharger le wordmark",brandAssets:"Brand assets",logoCopied:"Logo copié",wordmarkCopied:"Wordmark copié",logoDownloaded:"Logo téléchargé",wordmarkDownloaded:"Wordmark téléchargé",copyLogoFailed:"Impossible de copier le logo",copyWordmarkFailed:"Impossible de copier le wordmark"},a={title:"Demander à l'IA",placeholder:"Posez une question...",tooltip:"Poser une question à l'IA",tryAsking:"Essayez de poser une question",askAnything:"Demandez n'importe quoi...",clearChat:"Effacer le chat",close:"Fermer",expand:"Agrandir",collapse:"Réduire",thinking:"Réflexion...",askMeAnything:"Posez une question",askMeAnythingDescription:"Obtenez de l'aide pour naviguer dans la documentation, comprendre des concepts et trouver des réponses.",faq:"FAQ",chatCleared:"Le chat est effacé au rechargement",lineBreak:"Retour à la ligne",explainWithAi:"Expliquer avec l'IA",toolListPages:"Pages de documentation listées",toolReadPage:"Lecture de",loading:{searching:"Recherche dans la documentation",reading:"Lecture des documents",analyzing:"Analyse du contenu",finding:"Recherche de la meilleure réponse",finished:"Sources utilisées"}},n={common:e,docs:o,logo:r,assistant:a};export{a as assistant,e as common,n as default,o as docs,r as logo}; diff --git a/docus/dist/_nuxt/DvjBH7HE.js b/docus/dist/_nuxt/DvjBH7HE.js new file mode 100644 index 0000000..5bc51a5 --- /dev/null +++ b/docus/dist/_nuxt/DvjBH7HE.js @@ -0,0 +1 @@ +const a={or:"tai",error:{title:"Sivua ei löytynyt",description:"Pahoittelut, etsimääsi sivua ei löytynyt."}},i={copy:{page:"Kopioi sivu",link:"Kopioi Markdown-sivu",view:"Näytä Markdownina",gpt:"Avaa ChatGPT:ssä",claude:"Avaa Claudessa"},links:"Yhteisö",toc:"Tällä sivulla",menu:"Valikko",report:"Ilmoita ongelmasta",edit:"Muokkaa tätä sivua"},t={copyLogo:"Kopioi logo",copyWordmark:"Kopioi sanamerkki",downloadLogo:"Lataa logo",downloadWordmark:"Lataa sanamerkki",brandAssets:"Brändimateriaalit",logoCopied:"Logo kopioitu",wordmarkCopied:"Sanamerkki kopioitu",logoDownloaded:"Logo ladattu",wordmarkDownloaded:"Sanamerkki ladattu",copyLogoFailed:"Logon kopiointi epäonnistui",copyWordmarkFailed:"Sanamerkin kopiointi epäonnistui"},o={title:"Kysy tekoälyltä",placeholder:"Esitä kysymys...",tooltip:"Esitä tekoälylle kysymys",tryAsking:"Kokeile kysymyksen esittämistä",askAnything:"Kysy mitä tahansa...",clearChat:"Tyhjennä chat",close:"Sulje",expand:"Laajenna",collapse:"Pienennä",thinking:"Ajatellaan...",askMeAnything:"Kysy mitä tahansa",askMeAnythingDescription:"Saat apua dokumentaatiossa navigointiin, käsitteiden ymmärtämiseen ja vastausten löytämiseen.",faq:"UKK",chatCleared:"Keskustelu tyhjennetään päivitettäessä",lineBreak:"Rivinvaihto",explainWithAi:"Selitä tekoälyllä",toolListPages:"Luetellut dokumentaatiosivut",toolReadPage:"Lue",loading:{searching:"Dokumentaation hakeminen",reading:"Asiakirjojen lukeminen",analyzing:"Sisällön analysointi",finding:"Parhaan vastauksen löytäminen",finished:"Käytetyt lähteet"}},e={common:a,docs:i,logo:t,assistant:o};export{o as assistant,a as common,e as default,i as docs,t as logo}; diff --git a/docus/dist/_nuxt/DxN8ZPeP.js b/docus/dist/_nuxt/DxN8ZPeP.js new file mode 100644 index 0000000..8ed2dc2 --- /dev/null +++ b/docus/dist/_nuxt/DxN8ZPeP.js @@ -0,0 +1 @@ +const o={or:"же",error:{title:"Барак табылган жок",description:"Кечиресиз, бирок сиз издеген барак табылган жок."}},a={copy:{page:"Баракты көчүрүү",link:"Markdown барагын көчүрүү",view:"Markdown катары көрүү",gpt:"ChatGPT'те ачуу",claude:"Claude'да ачуу"},links:"Коом",toc:"Бул барактта",menu:"Меню",report:"Көйгөй туурасында кабарлоо",edit:"Бул баракты түзөтүү"},e={copyLogo:"Логотипти көчүрүү",copyWordmark:"Сөз белгисин көчүрүү",downloadLogo:"Логотипти жүктөө",downloadWordmark:"Сөз белгисин жүктөө",brandAssets:"Бренд материалдары",logoCopied:"Логотип көчүрүлдү",wordmarkCopied:"Сөз белгиси көчүрүлдү",logoDownloaded:"Логотип жүктөлдү",wordmarkDownloaded:"Сөз белгиси жүктөлдү",copyLogoFailed:"Логотипти көчүрүү ишке ашкан жок",copyWordmarkFailed:"Сөз белгисин көчүрүү ишке ашкан жок"},n={title:"AIден сураңыз",placeholder:"Суроо берүү...",tooltip:"АИге суроо берүү",tryAsking:"Суроо берүүгө аракет кылыңыз",askAnything:"Суроо...",clearChat:"Чатты тазалоо",close:"Жабуу",expand:"Кеңейтүү",collapse:"Бузулуу",thinking:"Ойлонуу...",askMeAnything:"Суроо",askMeAnythingDescription:"Документтерди навигациялоого, түшүнүктөрдү түшүнүүгө жана жоопторду табууга жардам алыңыз.",faq:"Көп берилүүчү суроолор",chatCleared:"Чат жаңыртууда тазаланды",lineBreak:"Сызыктын үзүлүшү",explainWithAi:"AI менен түшүндүрүү",toolListPages:"Тизмедеги документтердин барактары",toolReadPage:"Окуу",loading:{searching:"Документтерди издөө",reading:"Документтер аркылуу окуу",analyzing:"Мазмунду талдоо",finding:"Мыкты жооп табуу",finished:"Колдонулган булактар"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/DzNJTbjO.js b/docus/dist/_nuxt/DzNJTbjO.js new file mode 100644 index 0000000..ce0327d --- /dev/null +++ b/docus/dist/_nuxt/DzNJTbjO.js @@ -0,0 +1 @@ +import{u as p,_}from"./n8vERajx.js";import{d as m,aO as d,aS as v,b5 as f,ba as g,s,a as b,f as y,b6 as C,b8 as h,c as I,o as w}from"./B3fabVUf.js";import"./BN_7HF1G.js";const N=m({__name:"landing",async setup(x){let a,t;const n=d(),{locale:u,isEnabled:c}=v(),o=I(()=>c.value?`landing_${u.value}`:"landing"),{data:e}=([a,t]=f(()=>C(o.value,()=>h(o.value).path(n.path).first(),"$KuVI-rcQns")),a=await a,t(),a);if(!e.value)throw g({statusCode:404,statusMessage:"Page not found",fatal:!0});const l=e.value.seo?.title||e.value.title,r=e.value.seo?.description||e.value.description;return p({title:l,description:r,type:"website",ogImage:e.value?.seo?.ogImage}),e.value?.seo?.ogImage,(k,A)=>{const i=_;return s(e)?(w(),b(i,{key:0,value:s(e)},null,8,["value"])):y("",!0)}}});export{N as default}; diff --git a/docus/dist/_nuxt/FIW8Ti8B.js b/docus/dist/_nuxt/FIW8Ti8B.js new file mode 100644 index 0000000..320f44e --- /dev/null +++ b/docus/dist/_nuxt/FIW8Ti8B.js @@ -0,0 +1 @@ +const o={or:"или",error:{title:"Страницата не е намерена",description:"Съжаляваме, но тази страница не може да бъде намерена."}},a={copy:{page:"Копиране на Markdown кода на страницата",link:"Копиране на връзка към Markdown файла на страницата",view:"Отваряне на Markdown файла на страницата",gpt:"Отваряне в ChatGPT",claude:"Отваряне в Claude"},links:"Общност",toc:"На тази страница",menu:"Меню",report:"Докладване на проблем",edit:"Редактиране на тази страница"},e={copyLogo:"Копиране на логото",copyWordmark:"Копиране на словната марка",downloadLogo:"Изтегляне на логото",downloadWordmark:"Изтегляне на словната марка",brandAssets:"Брандови материали",logoCopied:"Логото е копирано",wordmarkCopied:"Словната марка е копирана",logoDownloaded:"Логото е изтеглено",wordmarkDownloaded:"Словната марка е изтеглена",copyLogoFailed:"Неуспешно копиране на логото",copyWordmarkFailed:"Неуспешно копиране на словната марка"},n={title:"Попитайте AI",placeholder:"Задайте въпрос...",tooltip:"Задайте въпрос на AI",tryAsking:"Опитайте да зададете въпрос",askAnything:"Попитайте каквото и да е...",clearChat:"Изчистване на чата",close:"Затваряне",expand:"Разширяване",collapse:"Свиване",thinking:"Мисля си...",askMeAnything:"Попитайте за всичко",askMeAnythingDescription:"Потърсете помощ за навигация в документацията, разбиране на концепциите и намиране на отговори.",faq:"Често задавани въпроси",chatCleared:"Чатът е изчистен при обновяване",lineBreak:"Прекъсване на линията",explainWithAi:"Обяснете с ИИ",toolListPages:"Изброени страници от документацията",toolReadPage:"Четене",loading:{searching:"Търсене в документацията",reading:"Четене на документите",analyzing:"Анализиране на съдържанието",finding:"Намиране на най-добрия отговор",finished:"Използвани източници"}},d={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,d as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/FyXvkSrC.js b/docus/dist/_nuxt/FyXvkSrC.js new file mode 100644 index 0000000..0c73c83 --- /dev/null +++ b/docus/dist/_nuxt/FyXvkSrC.js @@ -0,0 +1 @@ +import{_ as d,$ as f,a0 as g,a1 as m,e as v,q as x,af as C,B as y,s as e,ac as n,ak as b,al as h,c as _,am as i,o as q}from"./B3fabVUf.js";const B={slots:{root:"relative [&_pre]:h-[200px]",footer:"h-16 absolute inset-x-px bottom-px rounded-b-md flex items-center justify-center",trigger:"group",triggerIcon:"group-data-[state=open]:rotate-180"},variants:{open:{true:{root:"[&_pre]:h-auto [&_pre]:min-h-[200px] [&_pre]:max-h-[80vh] [&_pre]:pb-12"},false:{root:"[&_pre]:overflow-hidden",footer:"bg-gradient-to-t from-muted"}}}},I={__name:"ProseCodeCollapse",props:h({icon:{type:null,required:!1},name:{type:String,required:!1},openText:{type:String,required:!1},closeText:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(l){const o=l,a=d(l,"open",{type:Boolean,default:!1}),{t:r}=f(),p=g(),s=m("prose.codeCollapse",o),t=_(()=>i({extend:i(B),...p.ui?.prose?.codeCollapse||{}})({open:a.value}));return(u,c)=>(q(),v("div",{class:n(t.value.root({class:[e(s)?.root,o.class]}))},[x(u.$slots,"default"),C("div",{class:n(t.value.footer({class:e(s)?.footer}))},[y(b,{icon:l.icon||e(p).ui.icons.chevronDown,color:"neutral",variant:"outline","data-state":a.value?"open":"closed",label:`${a.value?o.closeText||e(r)("prose.codeCollapse.closeText"):o.openText||e(r)("prose.codeCollapse.openText")} ${o.name||e(r)("prose.codeCollapse.name")}`,class:n(t.value.trigger({class:e(s)?.trigger})),ui:{leadingIcon:t.value.triggerIcon({class:e(s)?.triggerIcon})},onClick:c[0]||(c[0]=T=>a.value=!a.value)},null,8,["icon","data-state","label","class","ui"])],2)],2))}};export{I as default}; diff --git a/docus/dist/_nuxt/G6op-Gdf.js b/docus/dist/_nuxt/G6op-Gdf.js new file mode 100644 index 0000000..123ec15 --- /dev/null +++ b/docus/dist/_nuxt/G6op-Gdf.js @@ -0,0 +1 @@ +import{Q as q,a0 as S,a1 as w,o as a,a as f,p as k,q as d,B as C,bZ as z,ac as r,s,e as n,ab as B,f as c,ah as h,ag as m,F as v,r as b,m as p,ak as I,P,c as j,am as x}from"./B3fabVUf.js";import V from"./BecbEIqG.js";const A={slots:{root:"relative isolate",container:"flex flex-col lg:grid py-16 sm:py-24 lg:py-32 gap-8 sm:gap-16",wrapper:"",header:"",leading:"flex items-center mb-6",leadingIcon:"size-10 shrink-0 text-primary",headline:"mb-3",title:"text-3xl sm:text-4xl lg:text-5xl text-pretty tracking-tight font-bold text-highlighted",description:"text-base sm:text-lg text-muted",body:"mt-8",features:"grid",footer:"mt-8",links:"flex flex-wrap gap-x-6 gap-y-3"},variants:{orientation:{horizontal:{container:"lg:grid-cols-2 lg:items-center",description:"text-pretty",features:"gap-4"},vertical:{container:"",headline:"justify-center",leading:"justify-center",title:"text-center",description:"text-center text-balance",links:"justify-center",features:"sm:grid-cols-2 lg:grid-cols-3 gap-8"}},reverse:{true:{wrapper:"order-last"}},headline:{true:{headline:"font-semibold text-primary flex items-center gap-1.5"}},title:{true:{description:"mt-6"}},description:{true:""},body:{true:""}},compoundVariants:[{orientation:"vertical",title:!0,class:{body:"mt-16"}},{orientation:"vertical",description:!0,class:{body:"mt-16"}},{orientation:"vertical",body:!0,class:{footer:"mt-16"}}]},N={key:2,class:"hidden lg:block"},E={__name:"UPageSection",props:{as:{type:null,required:!1,default:"section"},headline:{type:String,required:!1},icon:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},links:{type:Array,required:!1},features:{type:Array,required:!1},orientation:{type:null,required:!1,default:"vertical"},reverse:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(t){const u=t,e=q(),$=S(),i=w("pageSection",u),l=j(()=>x({extend:x(A),...$.ui?.pageSection||{}})({orientation:u.orientation,reverse:u.reverse,title:!!u.title||!!e.title,description:!!u.description||!!e.description,body:!!e.body||!!u.features?.length||!!e.features}));return(o,F)=>(a(),f(s(P),{as:t.as,"data-orientation":t.orientation,"data-slot":"root",class:r(l.value.root({class:[s(i)?.root,u.class]}))},{default:k(()=>[d(o.$slots,"top"),C(z,{"data-slot":"container",class:r(l.value.container({class:s(i)?.container}))},{default:k(()=>[e.header||t.icon||e.leading||t.headline||e.headline||t.title||e.title||t.description||e.description||e.body||t.features?.length||e.features||e.footer||t.links?.length||e.links?(a(),n("div",{key:0,"data-slot":"wrapper",class:r(l.value.wrapper({class:s(i)?.wrapper}))},[e.header||t.icon||e.leading||t.headline||e.headline||t.title||e.title||t.description||e.description?(a(),n("div",{key:0,"data-slot":"header",class:r(l.value.header({class:s(i)?.header}))},[d(o.$slots,"header",{},()=>[t.icon||e.leading?(a(),n("div",{key:0,"data-slot":"leading",class:r(l.value.leading({class:s(i)?.leading}))},[d(o.$slots,"leading",{ui:l.value},()=>[t.icon?(a(),f(B,{key:0,name:t.icon,"data-slot":"leadingIcon",class:r(l.value.leadingIcon({class:s(i)?.leadingIcon}))},null,8,["name","class"])):c("",!0)])],2)):c("",!0),t.headline||e.headline?(a(),n("div",{key:1,"data-slot":"headline",class:r(l.value.headline({class:s(i)?.headline,headline:!e.headline}))},[d(o.$slots,"headline",{},()=>[h(m(t.headline),1)])],2)):c("",!0),t.title||e.title?(a(),n("h2",{key:2,"data-slot":"title",class:r(l.value.title({class:s(i)?.title}))},[d(o.$slots,"title",{},()=>[h(m(t.title),1)])],2)):c("",!0),t.description||e.description?(a(),n("div",{key:3,"data-slot":"description",class:r(l.value.description({class:s(i)?.description}))},[d(o.$slots,"description",{},()=>[h(m(t.description),1)])],2)):c("",!0)])],2)):c("",!0),e.body||t.features?.length||e.features?(a(),n("div",{key:1,"data-slot":"body",class:r(l.value.body({class:s(i)?.body}))},[d(o.$slots,"body",{},()=>[t.features?.length||e.features?(a(),n("ul",{key:0,"data-slot":"features",class:r(l.value.features({class:s(i)?.features}))},[d(o.$slots,"features",{},()=>[(a(!0),n(v,null,b(t.features,(g,y)=>(a(),f(V,p({key:y,as:"li"},{ref_for:!0},g),null,16))),128))])],2)):c("",!0)])],2)):c("",!0),e.footer||t.links?.length||e.links?(a(),n("div",{key:2,"data-slot":"footer",class:r(l.value.footer({class:s(i)?.footer}))},[d(o.$slots,"footer",{},()=>[t.links?.length||e.links?(a(),n("div",{key:0,"data-slot":"links",class:r(l.value.links({class:s(i)?.links}))},[d(o.$slots,"links",{},()=>[(a(!0),n(v,null,b(t.links,(g,y)=>(a(),f(I,p({key:y,size:"lg"},{ref_for:!0},g),null,16))),128))])],2)):c("",!0)])],2)):c("",!0)],2)):c("",!0),e.default?d(o.$slots,"default",{key:1}):t.orientation==="horizontal"?(a(),n("div",N)):c("",!0)]),_:3},8,["class"]),d(o.$slots,"bottom")]),_:3},8,["as","data-orientation","class"]))}};export{E as default}; diff --git a/docus/dist/_nuxt/ICECbu1X.js b/docus/dist/_nuxt/ICECbu1X.js new file mode 100644 index 0000000..82a87f4 --- /dev/null +++ b/docus/dist/_nuxt/ICECbu1X.js @@ -0,0 +1 @@ +import{a0 as b,a1 as a,e as l,q as h,ac as i,s as u,c,am as r,o as p}from"./B3fabVUf.js";const d={base:"ms-4 border-s border-default ps-8 [counter-reset:step]",variants:{level:{2:"[&>h2]:[counter-increment:step] [&>h2]:relative [&>h2]:before:absolute [&>h2]:before:size-8 [&>h2]:before:bg-elevated [&>h2]:before:rounded-full [&>h2]:before:font-semibold [&>h2]:before:text-sm [&>h2]:before:tabular-nums [&>h2]:before:inline-flex [&>h2]:before:items-center [&>h2]:before:justify-center [&>h2]:before:ring-4 [&>h2]:before:ring-bg [&>h2]:before:-ms-[48.5px] [&>h2]:before:-mt-0 [&>h2]:before:content-[counter(step)] [&>h2>a>span.absolute]:hidden",3:"[&>h3]:[counter-increment:step] [&>h3]:relative [&>h3]:before:absolute [&>h3]:before:size-7 [&>h3]:before:inset-x-0.5 [&>h3]:before:bg-elevated [&>h3]:before:rounded-full [&>h3]:before:font-semibold [&>h3]:before:text-sm [&>h3]:before:tabular-nums [&>h3]:before:inline-flex [&>h3]:before:items-center [&>h3]:before:justify-center [&>h3]:before:ring-4 [&>h3]:before:ring-bg [&>h3]:before:-ms-[48.5px] [&>h3]:before:content-[counter(step)] [&>h3>a>span.absolute]:hidden",4:"[&>h4]:[counter-increment:step] [&>h4]:relative [&>h4]:before:absolute [&>h4]:before:size-7 [&>h4]:before:inset-x-0.5 [&>h4]:before:bg-elevated [&>h4]:before:rounded-full [&>h4]:before:font-semibold [&>h4]:before:text-sm [&>h4]:before:tabular-nums [&>h4]:before:inline-flex [&>h4]:before:items-center [&>h4]:before:justify-center [&>h4]:before:ring-4 [&>h4]:before:ring-bg [&>h4]:before:-ms-[48.5px] [&>h4]:before:content-[counter(step)] [&>h4>a>span.absolute]:hidden"}},defaultVariants:{level:"3"}},g={__name:"ProseSteps",props:{level:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(o){const e=o,t=b(),s=a("prose.steps",e),n=c(()=>r({extend:r(d),...t.ui?.prose?.steps||{}}));return(f,m)=>(p(),l("div",{class:i(n.value({class:[u(s)?.base,e.class],level:e.level}))},[h(f.$slots,"default")],2))}};export{g as default}; diff --git a/docus/dist/_nuxt/Jc8Ntx_l.js b/docus/dist/_nuxt/Jc8Ntx_l.js new file mode 100644 index 0000000..2aa83b0 --- /dev/null +++ b/docus/dist/_nuxt/Jc8Ntx_l.js @@ -0,0 +1 @@ +import{r as m}from"./Cf5i2Hk_.js";import{a0 as _,a1 as p,e as y,a as c,p as g,m as h,a7 as k,f as n,ac as i,s as o,ab as x,c as f,am as v,o as t,af as w}from"./B3fabVUf.js";import"./BN_7HF1G.js";const I={slots:{base:["group relative block px-4 py-3 rounded-md text-sm/6 my-5 last:mb-0 [&_code]:text-xs/5 [&_code]:bg-default [&_pre]:bg-default [&>div]:my-2.5 [&_ul]:my-2.5 [&_ol]:my-2.5 [&>*]:last:!mb-0 [&_ul]:ps-4.5 [&_ol]:ps-4.5 [&_li]:my-0","transition-colors"],icon:["size-4 shrink-0 align-sub me-1.5 inline-block","transition-colors"],externalIcon:["size-4 align-top absolute right-2 top-2 pointer-events-none","transition-colors"]},variants:{color:{primary:{base:"border border-primary/25 bg-primary/10 text-primary-600 dark:text-primary-300 [&_a]:text-primary [&_a]:hover:border-primary [&_a]:focus-visible:outline-primary [&_code]:text-primary-600 dark:[&_code]:text-primary-300 [&_code]:border-primary/25 [&_a]:hover:[&>code]:border-primary [&_a]:hover:[&>code]:text-primary [&_a]:focus-visible:[&>code]:border-primary [&_a]:focus-visible:[&>code]:text-primary [&>ul]:marker:text-primary/50",icon:"text-primary",externalIcon:"text-primary-600 dark:text-primary-300"},secondary:{base:"border border-secondary/25 bg-secondary/10 text-secondary-600 dark:text-secondary-300 [&_a]:text-secondary [&_a]:hover:border-secondary [&_a]:focus-visible:outline-secondary [&_code]:text-secondary-600 dark:[&_code]:text-secondary-300 [&_code]:border-secondary/25 [&_a]:hover:[&>code]:border-secondary [&_a]:hover:[&>code]:text-secondary [&_a]:focus-visible:[&>code]:border-secondary [&_a]:focus-visible:[&>code]:text-secondary [&>ul]:marker:text-secondary/50",icon:"text-secondary",externalIcon:"text-secondary-600 dark:text-secondary-300"},success:{base:"border border-success/25 bg-success/10 text-success-600 dark:text-success-300 [&_a]:text-success [&_a]:hover:border-success [&_a]:focus-visible:outline-success [&_code]:text-success-600 dark:[&_code]:text-success-300 [&_code]:border-success/25 [&_a]:hover:[&>code]:border-success [&_a]:hover:[&>code]:text-success [&_a]:focus-visible:[&>code]:border-success [&_a]:focus-visible:[&>code]:text-success [&>ul]:marker:text-success/50",icon:"text-success",externalIcon:"text-success-600 dark:text-success-300"},info:{base:"border border-info/25 bg-info/10 text-info-600 dark:text-info-300 [&_a]:text-info [&_a]:hover:border-info [&_a]:focus-visible:outline-info [&_code]:text-info-600 dark:[&_code]:text-info-300 [&_code]:border-info/25 [&_a]:hover:[&>code]:border-info [&_a]:hover:[&>code]:text-info [&_a]:focus-visible:[&>code]:border-info [&_a]:focus-visible:[&>code]:text-info [&>ul]:marker:text-info/50",icon:"text-info",externalIcon:"text-info-600 dark:text-info-300"},warning:{base:"border border-warning/25 bg-warning/10 text-warning-600 dark:text-warning-300 [&_a]:text-warning [&_a]:hover:border-warning [&_a]:focus-visible:outline-warning [&_code]:text-warning-600 dark:[&_code]:text-warning-300 [&_code]:border-warning/25 [&_a]:hover:[&>code]:border-warning [&_a]:hover:[&>code]:text-warning [&_a]:focus-visible:[&>code]:border-warning [&_a]:focus-visible:[&>code]:text-warning [&>ul]:marker:text-warning/50",icon:"text-warning",externalIcon:"text-warning-600 dark:text-warning-300"},error:{base:"border border-error/25 bg-error/10 text-error-600 dark:text-error-300 [&_a]:text-error [&_a]:hover:border-error [&_a]:focus-visible:outline-error [&_code]:text-error-600 dark:[&_code]:text-error-300 [&_code]:border-error/25 [&_a]:hover:[&>code]:border-error [&_a]:hover:[&>code]:text-error [&_a]:focus-visible:[&>code]:border-error [&_a]:focus-visible:[&>code]:text-error [&>ul]:marker:text-error/50",icon:"text-error",externalIcon:"text-error-600 dark:text-error-300"},neutral:{base:"border border-muted bg-muted text-default",icon:"text-highlighted",externalIcon:"text-dimmed"}},to:{true:"border-dashed"}},compoundVariants:[{color:"primary",to:!0,class:{base:"hover:border-primary has-focus-visible:border-primary",externalIcon:"group-hover:text-primary"}},{color:"secondary",to:!0,class:{base:"hover:border-secondary has-focus-visible:border-secondary",externalIcon:"group-hover:text-secondary"}},{color:"success",to:!0,class:{base:"hover:border-success has-focus-visible:border-success",externalIcon:"group-hover:text-success"}},{color:"info",to:!0,class:{base:"hover:border-info has-focus-visible:border-info",externalIcon:"group-hover:text-info"}},{color:"warning",to:!0,class:{base:"hover:border-warning has-focus-visible:border-warning",externalIcon:"group-hover:text-warning"}},{color:"error",to:!0,class:{base:"hover:border-error has-focus-visible:border-error",externalIcon:"group-hover:text-error"}},{color:"neutral",to:!0,class:{base:"hover:border-inverted has-focus-visible:border-inverted",externalIcon:"group-hover:text-highlighted"}}],defaultVariants:{color:"neutral"}},V=Object.assign({inheritAttrs:!1},{__name:"ProseCallout",props:{to:{type:null,required:!1},target:{type:[String,Object,null],required:!1},icon:{type:null,required:!1},color:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(r){const e=r,d=_(),a=p("prose.callout",e),s=f(()=>v({extend:v(I),...d.ui?.prose?.callout||{}})({color:e.color,to:!!e.to})),l=f(()=>e.target||(e.to&&typeof e.to=="string"&&e.to.startsWith("http")?"_blank":void 0));return(u,b)=>(t(),y("div",{class:i(s.value.base({class:[o(a)?.base,e.class]}))},[r.to?(t(),c(k,h({key:0},{to:r.to,target:l.value,...u.$attrs},{class:"focus:outline-none",raw:""}),{default:g(()=>[...b[0]||(b[0]=[w("span",{class:"absolute inset-0","aria-hidden":"true"},null,-1)])]),_:1},16)):n("",!0),r.icon?(t(),c(x,{key:1,name:r.icon,class:i(s.value.icon({class:o(a)?.icon}))},null,8,["name","class"])):n("",!0),r.to&&l.value==="_blank"?(t(),c(x,{key:2,name:o(d).ui.icons.external,class:i(s.value.externalIcon({class:o(a)?.externalIcon}))},null,8,["name","class"])):n("",!0),m(u.$slots,"default",{mdcUnwrap:"p"})],2))}});export{V as default}; diff --git a/docus/dist/_nuxt/LZNkr4Qo.js b/docus/dist/_nuxt/LZNkr4Qo.js new file mode 100644 index 0000000..6e4d554 --- /dev/null +++ b/docus/dist/_nuxt/LZNkr4Qo.js @@ -0,0 +1 @@ +import{r as a}from"./Cf5i2Hk_.js";import s from"./Jc8Ntx_l.js";import{a0 as t,a as e,p as n,s as p,o as i}from"./B3fabVUf.js";import"./BN_7HF1G.js";const d={__name:"ProseNote",setup(c){const o=t();return(r,f)=>(i(),e(s,{color:"info",icon:p(o).ui.icons.info},{default:n(()=>[a(r.$slots,"default",{mdcUnwrap:"p"})]),_:3},8,["icon"]))}};export{d as default}; diff --git a/docus/dist/_nuxt/PB_A7Nh4.js b/docus/dist/_nuxt/PB_A7Nh4.js new file mode 100644 index 0000000..0292a26 --- /dev/null +++ b/docus/dist/_nuxt/PB_A7Nh4.js @@ -0,0 +1 @@ +const o={or:"或",error:{title:"页面未找到",description:"很抱歉,您访问的页面未找到。"}},a={copy:{page:"复制页面",link:"复制页面(Markdown)",view:"以 Markdown 格式查看",gpt:"在 ChatGPT 中打开",claude:"在 Claude 中打开"},links:"社区",toc:"在此页面上",menu:"菜单",report:"提交问题报告",edit:"编辑此页面"},e={copyLogo:"复制图标",copyWordmark:"复制文字标识",downloadLogo:"下载图标",downloadWordmark:"下载文字标识",brandAssets:"品牌资源",logoCopied:"图标已复制",wordmarkCopied:"文字标识已复制",logoDownloaded:"图标已下载",wordmarkDownloaded:"文字标识已下载",copyLogoFailed:"复制图标失败",copyWordmarkFailed:"复制文字标识失败"},n={title:"询问人工智能",placeholder:"问一个问题...",tooltip:"问人工智能一个问题",tryAsking:"尝试提问",askAnything:"想问什么都可以...",clearChat:"清除聊天内容",close:"关闭",expand:"展开",collapse:"崩溃",thinking:"想着……",askMeAnything:"询问任何事情",askMeAnythingDescription:"获取浏览文档、理解概念和寻找答案的帮助。",faq:"常见问题解答",chatCleared:"刷新时聊天会被清除",lineBreak:"换行符",explainWithAi:"用AI解释",toolListPages:"列出的文档页面",toolReadPage:"阅读",loading:{searching:"搜索文档",reading:"通读文档",analyzing:"分析内容",finding:"寻找最佳答案",finished:"使用的来源"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/Y1bVb6fC.js b/docus/dist/_nuxt/Y1bVb6fC.js new file mode 100644 index 0000000..1a6a4fe --- /dev/null +++ b/docus/dist/_nuxt/Y1bVb6fC.js @@ -0,0 +1 @@ +const o={or:"немесе",error:{title:"Бет табылмады",description:"Кешіріңіз, бірақ сіз іздеген бет табылмады."}},a={copy:{page:"Бетті көшіру",link:"Markdown бетін көшіру",view:"Markdown ретінде көру",gpt:"ChatGPT-те ашу",claude:"Claude-те ашу"},links:"Қауымдастық",toc:"Осы бетте",menu:"Мәзір",report:"Мәселе туралы хабарлау",edit:"Осы бетті өңдеу"},e={copyLogo:"Логотипті көшіру",copyWordmark:"Сөз белгісін көшіру",downloadLogo:"Логотипті жүктеу",downloadWordmark:"Сөз белгісін жүктеу",brandAssets:"Бренд материалдары",logoCopied:"Логотип көшірілді",wordmarkCopied:"Сөз белгісі көшірілді",logoDownloaded:"Логотип жүктелді",wordmarkDownloaded:"Сөз белгісі жүктелді",copyLogoFailed:"Логотипті көшіру сәтсіз",copyWordmarkFailed:"Сөз белгісін көшіру сәтсіз"},n={title:"AI-ден сұраңыз",placeholder:"Сұрақ қойыңыз...",tooltip:"ЖИ-ге сұрақ қойыңыз",tryAsking:"Сұрақ қоюға тырысыңыз",askAnything:"Кез келген нәрсені сұраңыз...",clearChat:"Чатты тазалау",close:"Жабу",expand:"Кеңейту",collapse:"Жию",thinking:"Ойлану...",askMeAnything:"Кез келген нәрсені сұраңыз",askMeAnythingDescription:"Құжаттамада шарлауға, тұжырымдамаларды түсінуге және жауап табуға көмектеседі.",faq:"Жиі қойылатын сұрақтар",chatCleared:"Чат жаңартылғанда тазартылды",lineBreak:"Сызық үзілісі",explainWithAi:"Жасанды интеллектпен түсіндіріңіз",toolListPages:"Тізімделген құжаттама беттері",toolReadPage:"Оқу",loading:{searching:"Құжаттаманы іздеу",reading:"Құжаттар арқылы оқу",analyzing:"Мазмұнды талдау",finding:"Үздік жауап табу",finished:"Пайдаланылған көздер"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/Y2TJq070.js b/docus/dist/_nuxt/Y2TJq070.js new file mode 100644 index 0000000..6d710a2 --- /dev/null +++ b/docus/dist/_nuxt/Y2TJq070.js @@ -0,0 +1 @@ +import{a0 as n,a1 as r,a as u,ac as l,s as p,ai as i,c as m,am as a,o as d}from"./B3fabVUf.js";const f={base:"align-text-top"},g={__name:"ProseKbd",props:{value:{type:String,required:!0},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const s=e,t=n(),o=r("prose.kbd",s),c=m(()=>a({extend:a(f),...t.ui?.prose?.kbd||{}}));return(b,v)=>(d(),u(i,{value:e.value,class:l(c.value({class:[p(o)?.base,s.class]}))},null,8,["value","class"]))}};export{g as default}; diff --git a/docus/dist/_nuxt/builds/latest.json b/docus/dist/_nuxt/builds/latest.json new file mode 100644 index 0000000..043ab25 --- /dev/null +++ b/docus/dist/_nuxt/builds/latest.json @@ -0,0 +1 @@ +{"id":"3a1bf7b7-6f51-4d2c-9c98-142f71e69a9a","timestamp":1776806590495} \ No newline at end of file diff --git a/docus/dist/_nuxt/builds/meta/3a1bf7b7-6f51-4d2c-9c98-142f71e69a9a.json b/docus/dist/_nuxt/builds/meta/3a1bf7b7-6f51-4d2c-9c98-142f71e69a9a.json new file mode 100644 index 0000000..6705147 --- /dev/null +++ b/docus/dist/_nuxt/builds/meta/3a1bf7b7-6f51-4d2c-9c98-142f71e69a9a.json @@ -0,0 +1 @@ +{"id":"3a1bf7b7-6f51-4d2c-9c98-142f71e69a9a","timestamp":1776806590495,"prerendered":["/","/server-extension","/getting-started","/client-addons","/server-modules","/getting-started/surrealdb-setup","/server-extension/api-reference","/getting-started/development","/server-extension/usage-examples","/getting-started/architecture","/server-modules/task","/getting-started/module-reference","/server-modules/actor","/server-modules/store","/server-modules/bank","/client-addons/main","/server-modules/cad","/client-addons/phone","/client-addons/store","/client-addons/common","/server-modules/garage","/client-addons/actor","/server-modules/organization","/server-modules/locker","/server-modules/economy","/client-addons/cad","/client-addons/bank","/server-modules/owned-storage","/server-modules/phone","/client-addons/organization","/client-addons/garage","/client-addons/locker","/client-addons/notifications"]} \ No newline at end of file diff --git a/docus/dist/_nuxt/entry.B0IIbxeE.css b/docus/dist/_nuxt/entry.B0IIbxeE.css new file mode 100644 index 0000000..561010f --- /dev/null +++ b/docus/dist/_nuxt/entry.B0IIbxeE.css @@ -0,0 +1 @@ +@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-yellow-950:oklch(28.6% .066 53.813);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--text-xl:1.25rem;--text-xl--line-height:1.4;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--text-3xl:1.875rem;--text-3xl--line-height:1.2;--text-4xl:2.25rem;--text-4xl--line-height:1.11111;--text-5xl:3rem;--text-5xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1) infinite;--blur-sm:8px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-old-neutral-50:oklch(98.5% 0 0);--color-old-neutral-100:oklch(97% 0 0);--color-old-neutral-200:oklch(92.2% 0 0);--color-old-neutral-300:oklch(87% 0 0);--color-old-neutral-400:oklch(70.8% 0 0);--color-old-neutral-500:oklch(55.6% 0 0);--color-old-neutral-600:oklch(43.9% 0 0);--color-old-neutral-700:oklch(37.1% 0 0);--color-old-neutral-800:oklch(26.9% 0 0);--color-old-neutral-900:oklch(20.5% 0 0);--color-old-neutral-950:oklch(14.5% 0 0)}:host,:root{--ui-header-height:4rem;--ui-radius:.25rem;--ui-container:80rem}.light,:host,:root{--ui-text-dimmed:var(--ui-color-neutral-400);--ui-text-muted:var(--ui-color-neutral-500);--ui-text-toned:var(--ui-color-neutral-600);--ui-text:var(--ui-color-neutral-700);--ui-text-highlighted:var(--ui-color-neutral-900);--ui-text-inverted:#fff;--ui-bg:#fff;--ui-bg-muted:var(--ui-color-neutral-50);--ui-bg-elevated:var(--ui-color-neutral-100);--ui-bg-accented:var(--ui-color-neutral-200);--ui-bg-inverted:var(--ui-color-neutral-900);--ui-border:var(--ui-color-neutral-200);--ui-border-muted:var(--ui-color-neutral-200);--ui-border-accented:var(--ui-color-neutral-300);--ui-border-inverted:var(--ui-color-neutral-900)}.dark{--ui-text-dimmed:var(--ui-color-neutral-500);--ui-text-muted:var(--ui-color-neutral-400);--ui-text-toned:var(--ui-color-neutral-300);--ui-text:var(--ui-color-neutral-200);--ui-text-highlighted:#fff;--ui-text-inverted:var(--ui-color-neutral-900);--ui-bg:var(--ui-color-neutral-900);--ui-bg-muted:var(--ui-color-neutral-800);--ui-bg-elevated:var(--ui-color-neutral-800);--ui-bg-accented:var(--ui-color-neutral-700);--ui-bg-inverted:#fff;--ui-border:var(--ui-color-neutral-800);--ui-border-muted:var(--ui-color-neutral-700);--ui-border-accented:var(--ui-color-neutral-700);--ui-border-inverted:#fff}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}::file-selector-button{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}body{background-color:var(--ui-bg);color:var(--ui-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color-scheme:light}body:where(.dark,.dark *){color-scheme:dark}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.not-sr-only{clip-path:none;height:auto;margin:0;overflow:visible;padding:0;position:static;white-space:normal;width:auto}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-1{inset-inline:calc(var(--spacing)*1)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-x-px{inset-inline:1px}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-1{inset-block:calc(var(--spacing)*1)}.inset-y-1\.5{inset-block:calc(var(--spacing)*1.5)}.inset-y-2{inset-block:calc(var(--spacing)*2)}.inset-y-3{inset-block:calc(var(--spacing)*3)}.inset-y-4{inset-block:calc(var(--spacing)*4)}.-start-px{inset-inline-start:-1px}.start{inset-inline-start:var(--spacing)}.start-0{inset-inline-start:calc(var(--spacing)*0)}.start-4{inset-inline-start:calc(var(--spacing)*4)}.start-32{inset-inline-start:calc(var(--spacing)*32)}.start-\[calc\(--spacing\(4\)-1px\)\]{inset-inline-start:calc(var(--spacing)*4 - 1px)}.start-\[calc\(50\%\+16px\)\]{inset-inline-start:calc(50% + 16px)}.start-\[calc\(50\%\+20px\)\]{inset-inline-start:calc(50% + 20px)}.start-\[calc\(50\%\+28px\)\]{inset-inline-start:calc(50% + 28px)}.start-\[calc\(50\%\+32px\)\]{inset-inline-start:calc(50% + 32px)}.start-\[calc\(50\%\+36px\)\]{inset-inline-start:calc(50% + 36px)}.start-\[calc\(50\%-1px\)\]{inset-inline-start:calc(50% - 1px)}.-end-1\.5{inset-inline-end:calc(var(--spacing)*-1.5)}.end{inset-inline-end:var(--spacing)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.end-4{inset-inline-end:calc(var(--spacing)*4)}.end-\[calc\(-50\%\+16px\)\]{inset-inline-end:calc(16px - 50%)}.end-\[calc\(-50\%\+20px\)\]{inset-inline-end:calc(20px - 50%)}.end-\[calc\(-50\%\+28px\)\]{inset-inline-end:calc(28px - 50%)}.end-\[calc\(-50\%\+32px\)\]{inset-inline-end:calc(32px - 50%)}.end-\[calc\(-50\%\+36px\)\]{inset-inline-end:calc(36px - 50%)}.-top-1\.5{top:calc(var(--spacing)*-1.5)}.-top-8{top:calc(var(--spacing)*-8)}.top-\(--ui-header-height\){top:var(--ui-header-height)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.top-1{top:calc(var(--spacing)*1)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\[11px\]{top:11px}.top-\[30px\]{top:30px}.top-\[38px\]{top:38px}.top-\[46px\]{top:46px}.top-\[50\%\]{top:50%}.top-\[54px\]{top:54px}.top-\[62px\]{top:62px}.top-\[86\%\]{top:86%}.top-\[calc\(50\%-2px\)\]{top:calc(50% - 2px)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1\/2{right:50%}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-\[11px\]{right:11px}.-bottom-7{bottom:calc(var(--spacing)*-7)}.-bottom-\[10px\]{bottom:-10px}.-bottom-px{bottom:-1px}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-\[max\(1\.5rem\,env\(safe-area-inset-bottom\)\)\]{bottom:max(1.5rem,env(safe-area-inset-bottom))}.bottom-px{bottom:1px}.left-\(--reka-navigation-menu-viewport-left\){left:var(--reka-navigation-menu-viewport-left)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-4{left:calc(var(--spacing)*4)}.left-6\.5{left:calc(var(--spacing)*6.5)}.left-11{left:calc(var(--spacing)*11)}.left-auto\!{left:auto!important}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.z-\(--index\){z-index:var(--index)}.z-1{z-index:1}.z-2{z-index:2}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[100\]{z-index:100}.order-first{order:-9999}.order-last{order:9999}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.m-0\.5{margin:calc(var(--spacing)*.5)}.\!mx-0{margin-inline:calc(var(--spacing)*0)!important}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-2\.5{margin-inline:calc(var(--spacing)*-2.5)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.mx-0\.5{margin-inline:calc(var(--spacing)*.5)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-1\.5{margin-block:calc(var(--spacing)*1.5)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.my-12{margin-block:calc(var(--spacing)*12)}.-ms-1\.5{margin-inline-start:calc(var(--spacing)*-1.5)}.-ms-4{margin-inline-start:calc(var(--spacing)*-4)}.-ms-8{margin-inline-start:calc(var(--spacing)*-8)}.-ms-\[8\.5px\]{margin-inline-start:-8.5px}.-ms-px{margin-inline-start:-1px}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-2\.5{margin-inline-start:calc(var(--spacing)*2.5)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.ms-4\.5{margin-inline-start:calc(var(--spacing)*4.5)}.ms-5{margin-inline-start:calc(var(--spacing)*5)}.ms-5\.5{margin-inline-start:calc(var(--spacing)*5.5)}.ms-6{margin-inline-start:calc(var(--spacing)*6)}.ms-auto{margin-inline-start:auto}.-me-0\.5{margin-inline-end:calc(var(--spacing)*-.5)}.-me-1{margin-inline-end:calc(var(--spacing)*-1)}.-me-1\.5{margin-inline-end:calc(var(--spacing)*-1.5)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.-mt-0\.5{margin-top:calc(var(--spacing)*-.5)}.-mt-1\.5{margin-top:calc(var(--spacing)*-1.5)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.-mt-8{margin-top:calc(var(--spacing)*-8)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-2\.5{margin-top:calc(var(--spacing)*2.5)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-3\.5{margin-top:calc(var(--spacing)*3.5)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.\!mr-4{margin-right:calc(var(--spacing)*4)!important}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-24{margin-bottom:calc(var(--spacing)*24)}.mb-auto{margin-bottom:auto}.\!ml-4{margin-left:calc(var(--spacing)*4)!important}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-square{aspect-ratio:1}.size-1{height:calc(var(--spacing)*1);width:calc(var(--spacing)*1)}.size-2{height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.size-2\.5{height:calc(var(--spacing)*2.5);width:calc(var(--spacing)*2.5)}.size-3{height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.size-3\.5{height:calc(var(--spacing)*3.5);width:calc(var(--spacing)*3.5)}.size-4{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.size-4\.5{height:calc(var(--spacing)*4.5);width:calc(var(--spacing)*4.5)}.size-5{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}.size-6{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.size-7{height:calc(var(--spacing)*7);width:calc(var(--spacing)*7)}.size-8{height:calc(var(--spacing)*8);width:calc(var(--spacing)*8)}.size-9{height:calc(var(--spacing)*9);width:calc(var(--spacing)*9)}.size-10{height:calc(var(--spacing)*10);width:calc(var(--spacing)*10)}.size-10\/12{height:83.3333%;width:83.3333%}.size-11{height:calc(var(--spacing)*11);width:calc(var(--spacing)*11)}.size-12{height:calc(var(--spacing)*12);width:calc(var(--spacing)*12)}.size-14{height:calc(var(--spacing)*14);width:calc(var(--spacing)*14)}.size-full{height:100%;width:100%}.\!h-1\.5{height:calc(var(--spacing)*1.5)!important}.\!h-12{height:calc(var(--spacing)*12)!important}.h-\(--indicator-size\){height:var(--indicator-size)}.h-\(--reka-navigation-menu-viewport-height\){height:var(--reka-navigation-menu-viewport-height)}.h-\(--reka-tabs-indicator-size\){height:var(--reka-tabs-indicator-size)}.h-\(--ui-header-height\){height:var(--ui-header-height)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-38{height:calc(var(--spacing)*38)}.h-40{height:calc(var(--spacing)*40)}.h-42{height:calc(var(--spacing)*42)}.h-44{height:calc(var(--spacing)*44)}.h-46{height:calc(var(--spacing)*46)}.h-\[4px\]{height:4px}.h-\[5px\]{height:5px}.h-\[6px\]{height:6px}.h-\[7px\]{height:7px}.h-\[8px\]{height:8px}.h-\[9px\]{height:9px}.h-\[10px\]{height:10px}.h-\[11px\]{height:11px}.h-\[12px\]{height:12px}.h-\[48px\]{height:48px}.h-\[350px\]{height:350px}.h-\[700px\]{height:700px}.h-\[fit-content\]{height:-moz-fit-content;height:fit-content}.h-auto{height:auto}.h-auto\!{height:auto!important}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[70vh\]{max-height:70vh}.max-h-\[95vh\]{max-height:95vh}.max-h-\[96\%\]{max-height:96%}.max-h-\[200px\]{max-height:200px}.max-h-\[calc\(100\%-2rem\)\]{max-height:calc(100% - 2rem)}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.max-h-\[calc\(100vh-var\(--ui-header-height\)\)\]{max-height:calc(100vh - var(--ui-header-height))}.max-h-full{max-height:100%}.min-h-\(--ui-header-height\){min-height:var(--ui-header-height)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-6{min-height:calc(var(--spacing)*6)}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-12{min-height:calc(var(--spacing)*12)}.min-h-\[49px\]{min-height:49px}.min-h-\[calc\(100vh-var\(--ui-header-height\)\)\]{min-height:calc(100vh - var(--ui-header-height))}.min-h-fit{min-height:-moz-fit-content;min-height:fit-content}.min-h-svh{min-height:100svh}.\!w-1\.5{width:calc(var(--spacing)*1.5)!important}.\!w-12{width:calc(var(--spacing)*12)!important}.w-\(--reka-combobox-trigger-width\){width:var(--reka-combobox-trigger-width)}.w-\(--reka-navigation-menu-indicator-size\){width:var(--reka-navigation-menu-indicator-size)}.w-\(--reka-select-trigger-width\){width:var(--reka-select-trigger-width)}.w-\(--reka-tabs-indicator-size\){width:var(--reka-tabs-indicator-size)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-\(--width\){width:var(--width)}.w-0{width:calc(var(--spacing)*0)}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-32{width:calc(var(--spacing)*32)}.w-38{width:calc(var(--spacing)*38)}.w-40{width:calc(var(--spacing)*40)}.w-42{width:calc(var(--spacing)*42)}.w-44{width:calc(var(--spacing)*44)}.w-46{width:calc(var(--spacing)*46)}.w-60{width:calc(var(--spacing)*60)}.w-\[6px\]{width:6px}.w-\[7px\]{width:7px}.w-\[8px\]{width:8px}.w-\[9px\]{width:9px}.w-\[10px\]{width:10px}.w-\[48px\]{width:48px}.w-\[350px\]{width:350px}.w-\[700px\]{width:700px}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-full\!{width:100%!important}.w-px{width:1px}.max-w-\(--ui-container\){max-width:var(--ui-container)}.max-w-2\/3{max-width:66.6667%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-60{max-width:calc(var(--spacing)*60)}.max-w-96{max-width:calc(var(--spacing)*96)}.max-w-\[75\%\]{max-width:75%}.max-w-\[95vw\]{max-width:95vw}.max-w-\[200px\]{max-width:200px}.max-w-\[900px\]{max-width:900px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-16{min-width:calc(var(--spacing)*16)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-\[4px\]{min-width:4px}.min-w-\[5px\]{min-width:5px}.min-w-\[6px\]{min-width:6px}.min-w-\[7px\]{min-width:7px}.min-w-\[8px\]{min-width:8px}.min-w-\[9px\]{min-width:9px}.min-w-\[10px\]{min-width:10px}.min-w-\[11px\]{min-width:11px}.min-w-\[12px\]{min-width:12px}.min-w-\[16px\]{min-width:16px}.min-w-\[20px\]{min-width:20px}.min-w-\[24px\]{min-width:24px}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.min-w-full{min-width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0)}.border-spacing-0,.border-spacing-x-0{border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.border-spacing-x-0{--tw-border-spacing-x:calc(var(--spacing)*0)}.origin-\(--reka-combobox-content-transform-origin\){transform-origin:var(--reka-combobox-content-transform-origin)}.origin-\(--reka-context-menu-content-transform-origin\){transform-origin:var(--reka-context-menu-content-transform-origin)}.origin-\(--reka-dropdown-menu-content-transform-origin\){transform-origin:var(--reka-dropdown-menu-content-transform-origin)}.origin-\(--reka-popover-content-transform-origin\){transform-origin:var(--reka-popover-content-transform-origin)}.origin-\(--reka-select-content-transform-origin\){transform-origin:var(--reka-select-content-transform-origin)}.origin-\(--reka-tooltip-content-transform-origin\){transform-origin:var(--reka-tooltip-content-transform-origin)}.origin-\[top_center\]{transform-origin:top}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-\[4px\]{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-\[4px\]{--tw-translate-x:-4px}.translate-x-\(--reka-navigation-menu-indicator-position\){--tw-translate-x:var(--reka-navigation-menu-indicator-position);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\(--reka-tabs-indicator-position\){--tw-translate-x:var(--reka-tabs-indicator-position);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-1\/2{--tw-translate-x:50%}.-translate-y-1\/2,.translate-x-1\/2{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-y-\(--indicator-position\){--tw-translate-y:var(--indicator-position);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\(--reka-tabs-indicator-position\){--tw-translate-y:var(--reka-tabs-indicator-position);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-1\/2{--tw-translate-y:50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-none{translate:none}.scale-80{--tw-scale-x:80%;--tw-scale-y:80%;--tw-scale-z:80%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-3d{scale:var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform-\(--transform\){transform:var(--transform)}.animate-\[marquee-vertical_var\(--duration\)_linear_infinite\]{animation:marquee-vertical var(--duration) linear infinite}.animate-\[marquee_var\(--duration\)_linear_infinite\]{animation:marquee var(--duration) linear infinite}.animate-\[shimmer_var\(--duration\)_linear_infinite\]{animation:shimmer var(--duration) linear infinite}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-e-resize{cursor:e-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-w-resize{cursor:w-resize}.cursor-zoom-in{cursor:zoom-in}.cursor-zoom-out{cursor:zoom-out}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.scroll-mt-3{scroll-margin-top:calc(var(--spacing)*3)}.scroll-mt-4{scroll-margin-top:calc(var(--spacing)*4)}.scroll-mt-\[calc\(24px\+45px\+var\(--ui-header-height\)\)\]{scroll-margin-top:calc(69px + var(--ui-header-height))}.scroll-mt-\[calc\(32px\+45px\+var\(--ui-header-height\)\)\]{scroll-margin-top:calc(77px + var(--ui-header-height))}.scroll-mt-\[calc\(45px\+var\(--ui-header-height\)\)\]{scroll-margin-top:calc(45px + var(--ui-header-height))}.scroll-mt-\[calc\(48px\+45px\+var\(--ui-header-height\)\)\]{scroll-margin-top:calc(93px + var(--ui-header-height))}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.place-items-baseline{place-items:baseline}.place-items-center{place-items:center}.content-center{align-content:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-\(--gap\){gap:var(--gap)}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-0\.25{gap:calc(var(--spacing)*.25)}.gap-0\.75{gap:calc(var(--spacing)*.75)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-3\.5{gap:calc(var(--spacing)*3.5)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-16{gap:calc(var(--spacing)*16)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(-1px*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(-1px*var(--tw-space-y-reverse))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*1*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*1*var(--tw-space-y-reverse))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*3*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*3*var(--tw-space-y-reverse))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*5*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*5*var(--tw-space-y-reverse))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*8*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*8*var(--tw-space-y-reverse))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*12*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*12*var(--tw-space-y-reverse))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}.gap-x-1\.5{-moz-column-gap:calc(var(--spacing)*1.5);column-gap:calc(var(--spacing)*1.5)}.gap-x-2{-moz-column-gap:calc(var(--spacing)*2);column-gap:calc(var(--spacing)*2)}.gap-x-3{-moz-column-gap:calc(var(--spacing)*3);column-gap:calc(var(--spacing)*3)}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}.gap-x-6{-moz-column-gap:calc(var(--spacing)*6);column-gap:calc(var(--spacing)*6)}.gap-x-8{-moz-column-gap:calc(var(--spacing)*8);column-gap:calc(var(--spacing)*8)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(-1px*var(--tw-space-x-reverse))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*1*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*1*var(--tw-space-x-reverse))}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-1\.5{row-gap:calc(var(--spacing)*1.5)}.gap-y-3{row-gap:calc(var(--spacing)*3)}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-8{row-gap:calc(var(--spacing)*8)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-accented>:not(:last-child)){border-color:var(--ui-border-accented)}:where(.divide-default>:not(:last-child)){border-color:var(--ui-border)}:where(.divide-transparent>:not(:last-child)){border-color:#0000}.self-center{align-self:center}.self-end{align-self:flex-end}.self-stretch{align-self:stretch}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-\[0\.5px\]{border-radius:.5px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:calc(var(--ui-radius)*2)}.rounded-md{border-radius:calc(var(--ui-radius)*1.5)}.rounded-sm{border-radius:var(--ui-radius)}.rounded-xl{border-radius:calc(var(--ui-radius)*3)}.rounded-xs{border-radius:calc(var(--ui-radius)*.5)}.rounded-s{border-end-start-radius:.25rem}.rounded-s,.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-end-end-radius:.25rem}.rounded-e,.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:calc(var(--ui-radius)*2);border-top-right-radius:calc(var(--ui-radius)*2)}.rounded-t-md{border-top-left-radius:calc(var(--ui-radius)*1.5);border-top-right-radius:calc(var(--ui-radius)*1.5)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-l{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.rounded-l-lg{border-bottom-left-radius:calc(var(--ui-radius)*2);border-top-left-radius:calc(var(--ui-radius)*2)}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.rounded-r-lg{border-bottom-right-radius:calc(var(--ui-radius)*2);border-top-right-radius:calc(var(--ui-radius)*2)}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:calc(var(--ui-radius)*2);border-bottom-right-radius:calc(var(--ui-radius)*2)}.rounded-b-md{border-bottom-left-radius:calc(var(--ui-radius)*1.5);border-bottom-right-radius:calc(var(--ui-radius)*1.5)}.rounded-b-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-s-4{border-inline-start-style:var(--tw-border-style);border-inline-start-width:4px}.border-s-\[2px\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-s-\[3px\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:3px}.border-s-\[4px\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:4px}.border-s-\[5px\]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:5px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-bs{border-block-start-style:var(--tw-border-style);border-block-start-width:1px}.border-be{border-block-end-style:var(--tw-border-style);border-block-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-\[2px\]{border-top-style:var(--tw-border-style);border-top-width:2px}.border-t-\[3px\]{border-top-style:var(--tw-border-style);border-top-width:3px}.border-t-\[4px\]{border-top-style:var(--tw-border-style);border-top-width:4px}.border-t-\[5px\]{border-top-style:var(--tw-border-style);border-top-width:5px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-solid{--tw-border-style:solid;border-style:solid}.border-accented{border-color:var(--ui-border-accented)}.border-bg{border-color:var(--ui-bg)}.border-default{border-color:var(--ui-border)}.border-error,.border-error\/25{border-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.border-error\/25{border-color:color-mix(in oklab,var(--ui-error) 25%,transparent)}}.border-info,.border-info\/25{border-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.border-info\/25{border-color:color-mix(in oklab,var(--ui-info) 25%,transparent)}}.border-inverted{border-color:var(--ui-border-inverted)}.border-muted{border-color:var(--ui-border-muted)}.border-primary,.border-primary\/25{border-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/25{border-color:color-mix(in oklab,var(--ui-primary) 25%,transparent)}}.border-secondary,.border-secondary\/25{border-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.border-secondary\/25{border-color:color-mix(in oklab,var(--ui-secondary) 25%,transparent)}}.border-success,.border-success\/25{border-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.border-success\/25{border-color:color-mix(in oklab,var(--ui-success) 25%,transparent)}}.border-transparent{border-color:#0000}.border-warning,.border-warning\/25{border-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.border-warning\/25{border-color:color-mix(in oklab,var(--ui-warning) 25%,transparent)}}.\!bg-accented{background-color:var(--ui-bg-accented)!important}.bg-\(--ui-border\){background-color:var(--ui-border)}.bg-\(--ui-border-accented\){background-color:var(--ui-border-accented)}.bg-accented{background-color:var(--ui-bg-accented)}.bg-border{background-color:var(--ui-border)}.bg-current{background-color:currentColor}.bg-default,.bg-default\/75{background-color:var(--ui-bg)}@supports (color:color-mix(in lab,red,red)){.bg-default\/75{background-color:color-mix(in oklab,var(--ui-bg) 75%,transparent)}}.bg-default\/90{background-color:var(--ui-bg)}@supports (color:color-mix(in lab,red,red)){.bg-default\/90{background-color:color-mix(in oklab,var(--ui-bg) 90%,transparent)}}.bg-default\/95{background-color:var(--ui-bg)}@supports (color:color-mix(in lab,red,red)){.bg-default\/95{background-color:color-mix(in oklab,var(--ui-bg) 95%,transparent)}}.bg-elevated,.bg-elevated\/50{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.bg-elevated\/50{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}.bg-elevated\/75{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.bg-elevated\/75{background-color:color-mix(in oklab,var(--ui-bg-elevated) 75%,transparent)}}.bg-error,.bg-error\/10{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.bg-error\/10{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.bg-info,.bg-info\/10{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.bg-info\/10{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.bg-inverted{background-color:var(--ui-bg-inverted)}.bg-muted{background-color:var(--ui-bg-muted)}.bg-neutral-200{background-color:var(--ui-color-neutral-200)}.bg-neutral-950{background-color:var(--ui-color-neutral-950)}.bg-primary,.bg-primary\/10{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.bg-secondary,.bg-secondary\/10{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/10{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.bg-success,.bg-success\/10{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.bg-success\/10{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-warning,.bg-warning\/10{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\/10{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab}.bg-gradient-to-b,.bg-gradient-to-t{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab}.bg-\[image\:linear-gradient\(90deg\,\#0000_calc\(50\%-var\(--spread\)\)\,var\(--ui-text-highlighted\)\,\#0000_calc\(50\%\+var\(--spread\)\)\)\,linear-gradient\(var\(--ui-text-muted\)\,var\(--ui-text-muted\)\)\]{background-image:linear-gradient(90deg,#0000 calc(50% - var(--spread)),var(--ui-text-highlighted),#0000 calc(50% + var(--spread))),linear-gradient(var(--ui-text-muted),var(--ui-text-muted))}.bg-\[radial-gradient\(circle_at_top_right\,rgba\(255\,255\,255\,0\.10\)_0\%\,rgba\(255\,255\,255\,0\.04\)_40\%\,transparent_70\%\)\]{background-image:radial-gradient(circle at 100% 0,#ffffff1a 0,#ffffff0a 40%,#0000 70%)}.bg-\[radial-gradient\(circle_at_top_right\,rgba\(255\,255\,255\,0\.22\)_0\%\,rgba\(255\,255\,255\,0\.08\)_35\%\,transparent_65\%\)\]{background-image:radial-gradient(circle at 100% 0,#ffffff38 0,#ffffff14 35%,#0000 65%)}.from-default{--tw-gradient-from:var(--ui-bg);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-muted{--tw-gradient-from:var(--ui-bg-muted);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-size-\[calc\(200\%\+var\(--spread\)\*2\+2px\)_100\%\,auto\]{background-size:calc(200% + var(--spread)*2 + 2px) 100%,auto}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat{background-repeat:repeat}.mask-no-clip{-webkit-mask-clip:no-clip;mask-clip:no-clip}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.fill-bg{fill:var(--ui-bg)}.stroke-default{stroke:var(--ui-border)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-top{-o-object-position:top;object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-3\.5{padding:calc(var(--spacing)*3.5)}.p-4{padding:calc(var(--spacing)*4)}.p-4\.5{padding:calc(var(--spacing)*4.5)}.p-6{padding:calc(var(--spacing)*6)}.\!px-1{padding-inline:calc(var(--spacing)*1)!important}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-\[80px\]{padding-inline:80px}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-7{padding-block:calc(var(--spacing)*7)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-24{padding-block:calc(var(--spacing)*24)}.py-\[60px\]{padding-block:60px}.ps-1{padding-inline-start:calc(var(--spacing)*1)}.ps-1\.5{padding-inline-start:calc(var(--spacing)*1.5)}.ps-2{padding-inline-start:calc(var(--spacing)*2)}.ps-2\.5{padding-inline-start:calc(var(--spacing)*2.5)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-4{padding-inline-start:calc(var(--spacing)*4)}.ps-6{padding-inline-start:calc(var(--spacing)*6)}.ps-6\.5{padding-inline-start:calc(var(--spacing)*6.5)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.ps-8{padding-inline-start:calc(var(--spacing)*8)}.ps-9{padding-inline-start:calc(var(--spacing)*9)}.ps-10{padding-inline-start:calc(var(--spacing)*10)}.ps-11{padding-inline-start:calc(var(--spacing)*11)}.ps-px{padding-inline-start:1px}.pe-1{padding-inline-end:calc(var(--spacing)*1)}.pe-2{padding-inline-end:calc(var(--spacing)*2)}.pe-2\.5{padding-inline-end:calc(var(--spacing)*2.5)}.pe-3{padding-inline-end:calc(var(--spacing)*3)}.pe-4\.5{padding-inline-end:calc(var(--spacing)*4.5)}.pe-5{padding-inline-end:calc(var(--spacing)*5)}.pe-5\.5{padding-inline-end:calc(var(--spacing)*5.5)}.pe-6{padding-inline-end:calc(var(--spacing)*6)}.pe-6\.5{padding-inline-end:calc(var(--spacing)*6.5)}.pe-7{padding-inline-end:calc(var(--spacing)*7)}.pe-7\.5{padding-inline-end:calc(var(--spacing)*7.5)}.pe-8{padding-inline-end:calc(var(--spacing)*8)}.pe-8\.5{padding-inline-end:calc(var(--spacing)*8.5)}.pe-9{padding-inline-end:calc(var(--spacing)*9)}.pe-10{padding-inline-end:calc(var(--spacing)*10)}.pe-11{padding-inline-end:calc(var(--spacing)*11)}.\!pt-0{padding-top:calc(var(--spacing)*0)!important}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pb-2\.5{padding-bottom:calc(var(--spacing)*2.5)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-3\.5{padding-bottom:calc(var(--spacing)*3.5)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-4\.5{padding-bottom:calc(var(--spacing)*4.5)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-5\.5{padding-bottom:calc(var(--spacing)*5.5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-6\.5{padding-bottom:calc(var(--spacing)*6.5)}.pb-7{padding-bottom:calc(var(--spacing)*7)}.pb-7\.5{padding-bottom:calc(var(--spacing)*7.5)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-8\.5{padding-bottom:calc(var(--spacing)*8.5)}.pb-24{padding-bottom:calc(var(--spacing)*24)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-\[22px\]{padding-left:22px}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.align-sub{vertical-align:sub}.align-text-top{vertical-align:text-top}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-\[8px\]\/3{font-size:8px;line-height:calc(var(--spacing)*3)}.text-\[10px\]\/3{font-size:10px;line-height:calc(var(--spacing)*3)}.text-base{line-height:var(--tw-leading,var(--text-base--line-height))}.text-base,.text-base\/5{font-size:var(--text-base)}.text-base\/5{line-height:calc(var(--spacing)*5)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm,.text-sm\/4{font-size:var(--text-sm)}.text-sm\/4{line-height:calc(var(--spacing)*4)}.text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{line-height:var(--tw-leading,var(--text-xs--line-height))}.text-xs,.text-xs\/5{font-size:var(--text-xs)}.text-xs\/5{line-height:calc(var(--spacing)*5)}.text-\[4px\]{font-size:4px}.text-\[5px\]{font-size:5px}.text-\[6px\]{font-size:6px}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[15px\]{font-size:15px}.text-\[18px\]{font-size:18px}.text-\[22px\]{font-size:22px}.text-\[28px\]{font-size:28px}.text-\[50px\]{font-size:50px}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-\[1\.4\]{--tw-leading:1.4;line-height:1.4}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.05em\]{--tw-tracking:.05em;letter-spacing:.05em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.wrap-anywhere{overflow-wrap:anywhere}.wrap-break-word{overflow-wrap:break-word}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-default{color:var(--ui-text)}.text-dimmed{color:var(--ui-text-dimmed)}.text-error{color:var(--ui-error)}.text-error-600{color:var(--ui-color-error-600)}.text-error\/75{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.text-error\/75{color:color-mix(in oklab,var(--ui-error) 75%,transparent)}}.text-highlighted{color:var(--ui-text-highlighted)}.text-info{color:var(--ui-info)}.text-info-600{color:var(--ui-color-info-600)}.text-info\/75{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.text-info\/75{color:color-mix(in oklab,var(--ui-info) 75%,transparent)}}.text-inherit{color:inherit}.text-inverted{color:var(--ui-text-inverted)}.text-muted{color:var(--ui-text-muted)}.text-neutral-400{color:var(--ui-color-neutral-400)}.text-primary{color:var(--ui-primary)}.text-primary-600{color:var(--ui-color-primary-600)}.text-primary\/75{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.text-primary\/75{color:color-mix(in oklab,var(--ui-primary) 75%,transparent)}}.text-secondary{color:var(--ui-secondary)}.text-secondary-600{color:var(--ui-color-secondary-600)}.text-secondary\/75{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.text-secondary\/75{color:color-mix(in oklab,var(--ui-secondary) 75%,transparent)}}.text-success{color:var(--ui-success)}.text-success-600{color:var(--ui-color-success-600)}.text-success\/75{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.text-success\/75{color:color-mix(in oklab,var(--ui-success) 75%,transparent)}}.text-toned{color:var(--ui-text-toned)}.text-transparent{color:#0000}.text-warning{color:var(--ui-warning)}.text-warning-600{color:var(--ui-color-warning-600)}.text-warning\/75{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.text-warning\/75{color:color-mix(in oklab,var(--ui-warning) 75%,transparent)}}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions}.diagonal-fractions,.lining-nums{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums}.oldstyle-nums,.ordinal{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal}.proportional-nums{--tw-numeric-spacing:proportional-nums}.proportional-nums,.slashed-zero{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero}.stacked-fractions{--tw-numeric-fraction:stacked-fractions}.stacked-fractions,.tabular-nums{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow,.shadow-lg{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-none\!{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow-sm,.shadow-xs{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.ring,.ring-0{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.ring-2,.ring-3{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-3{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-accented{--tw-ring-color:var(--ui-border-accented)}.ring-bg{--tw-ring-color:var(--ui-bg)}.ring-default{--tw-ring-color:var(--ui-border)}.ring-error,.ring-error\/25{--tw-ring-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.ring-error\/25{--tw-ring-color:color-mix(in oklab,var(--ui-error) 25%,transparent)}}.ring-error\/50{--tw-ring-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.ring-error\/50{--tw-ring-color:color-mix(in oklab,var(--ui-error) 50%,transparent)}}.ring-info,.ring-info\/25{--tw-ring-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.ring-info\/25{--tw-ring-color:color-mix(in oklab,var(--ui-info) 25%,transparent)}}.ring-info\/50{--tw-ring-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.ring-info\/50{--tw-ring-color:color-mix(in oklab,var(--ui-info) 50%,transparent)}}.ring-inverted{--tw-ring-color:var(--ui-border-inverted)}.ring-primary,.ring-primary\/25{--tw-ring-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.ring-primary\/25{--tw-ring-color:color-mix(in oklab,var(--ui-primary) 25%,transparent)}}.ring-primary\/50{--tw-ring-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.ring-primary\/50{--tw-ring-color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.ring-secondary,.ring-secondary\/25{--tw-ring-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.ring-secondary\/25{--tw-ring-color:color-mix(in oklab,var(--ui-secondary) 25%,transparent)}}.ring-secondary\/50{--tw-ring-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.ring-secondary\/50{--tw-ring-color:color-mix(in oklab,var(--ui-secondary) 50%,transparent)}}.ring-success,.ring-success\/25{--tw-ring-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.ring-success\/25{--tw-ring-color:color-mix(in oklab,var(--ui-success) 25%,transparent)}}.ring-success\/50{--tw-ring-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.ring-success\/50{--tw-ring-color:color-mix(in oklab,var(--ui-success) 50%,transparent)}}.ring-warning,.ring-warning\/25{--tw-ring-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.ring-warning\/25{--tw-ring-color:color-mix(in oklab,var(--ui-warning) 25%,transparent)}}.ring-warning\/50{--tw-ring-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.ring-warning\/50{--tw-ring-color:color-mix(in oklab,var(--ui-warning) 50%,transparent)}}.ring-white{--tw-ring-color:var(--color-white)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline:2px solid #0000;outline-offset:2px}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm))}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl))}.backdrop-blur-xl,.backdrop-grayscale{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%)}.backdrop-invert{--tw-backdrop-invert:invert(100%)}.backdrop-invert,.backdrop-sepia{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[background\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:background;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[color\,opacity\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[color\,translate\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[left\,right\,width\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[margin-right\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:margin-right;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[right\,width\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[rotate\,opacity\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:rotate,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[transform\,translate\,height\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[translate\,height\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:translate,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[translate\,width\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:translate,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[width\,height\,left\,right\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:width,height,left,right;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-\[width\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-\[background-position\]{will-change:background-position}.will-change-\[height\]{will-change:height}.will-change-\[margin-right\]{will-change:margin-right}.will-change-\[right\,width\]{will-change:right,width}.will-change-transform{will-change:transform}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.\!\[animation-direction\:reverse\]{animation-direction:reverse!important}.\[--duration\:20s\]{--duration:20s}.\[--gap\:--spacing\(16\)\]{--gap:calc(var(--spacing)*16)}.\[--initial-transform\:calc\(100\%\+1\.5rem\)\]{--initial-transform: calc(100% + 1.5rem) }.\[--sidebar-width-icon\:4rem\]{--sidebar-width-icon:4rem}.\[--sidebar-width\:16rem\]{--sidebar-width:16rem}.\[--spotlight-color\:var\(--ui-bg-inverted\)\]{--spotlight-color:var(--ui-bg-inverted)}.\[--spotlight-color\:var\(--ui-error\)\]{--spotlight-color:var(--ui-error)}.\[--spotlight-color\:var\(--ui-info\)\]{--spotlight-color:var(--ui-info)}.\[--spotlight-color\:var\(--ui-primary\)\]{--spotlight-color:var(--ui-primary)}.\[--spotlight-color\:var\(--ui-secondary\)\]{--spotlight-color:var(--ui-secondary)}.\[--spotlight-color\:var\(--ui-success\)\]{--spotlight-color:var(--ui-success)}.\[--spotlight-color\:var\(--ui-warning\)\]{--spotlight-color:var(--ui-warning)}.\[--spotlight-size\:400px\]{--spotlight-size:400px}.\[counter-reset\:step\]{counter-reset:step}.backface-hidden{backface-visibility:hidden}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.ring-inset{--tw-ring-inset:inset}:is(.\*\:my-0>*){margin-block:calc(var(--spacing)*0)}:is(.\*\:my-1>*){margin-block:calc(var(--spacing)*1)}:is(.\*\:my-1\.5>*){margin-block:calc(var(--spacing)*1.5)}:is(.\*\:my-5>*){margin-block:calc(var(--spacing)*5)}:is(.\*\:size-2>*){height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}:is(.\*\:break-inside-avoid-column>*){-moz-column-break-inside:avoid;break-inside:avoid-column}:is(.\*\:rounded-full>*){border-radius:3.40282e+38px}:is(.\*\:rounded-none\!>*){border-radius:0!important}:is(.\*\:bg-accented>*){background-color:var(--ui-bg-accented)}:is(.\*\:bg-elevated>*){background-color:var(--ui-bg-elevated)}:is(.\*\:p-0\!>*){padding:calc(var(--spacing)*0)!important}:is(.\*\:pt-8>*){padding-top:calc(var(--spacing)*8)}:is(.\*\:text-base\!>*){font-size:var(--text-base)!important;line-height:var(--tw-leading,var(--text-base--line-height))!important}:is(.\*\:will-change-transform>*){will-change:transform}:is(.\*\:not-first\:\!static>*):not(:first-child){position:static!important}:is(.\*\:not-first\:\!my-0>*):not(:first-child){margin-block:calc(var(--spacing)*0)!important}:is(.\*\:not-last\:pb-5>*):not(:last-child){padding-bottom:calc(var(--spacing)*5)}.not-last\:not-first\:rounded-none:not(:last-child):not(:first-child){border-radius:0}.not-data-\[segment\=literal\]\:w-6:not([data-segment=literal]){width:calc(var(--spacing)*6)}.not-data-\[segment\=literal\]\:w-7:not([data-segment=literal]){width:calc(var(--spacing)*7)}.not-data-\[segment\=literal\]\:w-8:not([data-segment=literal]){width:calc(var(--spacing)*8)}.group-not-last\:group-not-first\:rounded-none:is(:where(.group):not(:last-child) *):is(:where(.group):not(:first-child) *){border-radius:0}.group-not-only\:group-first\:rounded-e-none:is(:where(.group):not(:only-child) *):is(:where(.group):first-child *){border-end-end-radius:0;border-start-end-radius:0}.group-not-only\:group-first\:rounded-b-none:is(:where(.group):not(:only-child) *):is(:where(.group):first-child *){border-bottom-left-radius:0;border-bottom-right-radius:0}.group-not-only\:group-last\:rounded-s-none:is(:where(.group):not(:only-child) *):is(:where(.group):last-child *){border-end-start-radius:0;border-start-start-radius:0}.group-not-only\:group-last\:rounded-t-none:is(:where(.group):not(:only-child) *):is(:where(.group):last-child *){border-top-left-radius:0;border-top-right-radius:0}.group-focus-within\:hidden:is(:where(.group):focus-within *){display:none}@media(hover:hover){.group-hover\:bg-primary:is(:where(.group):hover *),.group-hover\:bg-primary\/10:is(:where(.group):hover *){background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.group-hover\:bg-primary\/10:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.group-hover\:text-default:is(:where(.group):hover *){color:var(--ui-text)}.group-hover\:text-error:is(:where(.group):hover *){color:var(--ui-error)}.group-hover\:text-highlighted:is(:where(.group):hover *){color:var(--ui-text-highlighted)}.group-hover\:text-info:is(:where(.group):hover *){color:var(--ui-info)}.group-hover\:text-inverted:is(:where(.group):hover *){color:var(--ui-text-inverted)}.group-hover\:text-primary:is(:where(.group):hover *){color:var(--ui-primary)}.group-hover\:text-secondary:is(:where(.group):hover *){color:var(--ui-secondary)}.group-hover\:text-success:is(:where(.group):hover *){color:var(--ui-success)}.group-hover\:text-warning:is(:where(.group):hover *){color:var(--ui-warning)}.group-hover\:opacity-0:is(:where(.group):hover *){opacity:0}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\:ring-primary:is(:where(.group):hover *),.group-hover\:ring-primary\/50:is(:where(.group):hover *){--tw-ring-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.group-hover\:ring-primary\/50:is(:where(.group):hover *){--tw-ring-color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.group-hover\:\[animation-play-state\:paused\]:is(:where(.group):hover *){animation-play-state:paused}.group-hover\/blog-post\:scale-110:is(:where(.group\/blog-post):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\/blog-post\:rounded-r-none:is(:where(.group\/blog-post):hover *){border-bottom-right-radius:0;border-top-right-radius:0}.group-hover\/blog-post\:rounded-b-none:is(:where(.group\/blog-post):hover *){border-bottom-left-radius:0;border-bottom-right-radius:0}.group-hover\/blog-post\:shadow-none:is(:where(.group\/blog-post):hover *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-hover\/changelog-version-image\:scale-105:is(:where(.group\/changelog-version-image):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\/message\:opacity-100:is(:where(.group\/message):hover *){opacity:1}.group-hover\/user\:scale-115:is(:where(.group\/user):hover *){--tw-scale-x:115%;--tw-scale-y:115%;--tw-scale-z:115%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.group-focus\:opacity-100:is(:where(.group):focus *){opacity:1}.group-active\:-translate-x-0\.5:is(:where(.group):active *){--tw-translate-x:calc(var(--spacing)*-.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-active\:translate-x-0\.5:is(:where(.group):active *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-has-focus-visible\/changelog-version-image\:scale-105:is(:where(.group\/changelog-version-image):has(:focus-visible) *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-has-focus-visible\/user\:scale-115:is(:where(.group\/user):has(:focus-visible) *){--tw-scale-x:115%;--tw-scale-y:115%;--tw-scale-z:115%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-data-expanded\:rotate-180:is(:where(.group)[data-expanded] *){rotate:180deg}.group-data-highlighted\:inline-flex:is(:where(.group)[data-highlighted] *){display:inline-flex}.group-data-highlighted\:text-default:is(:where(.group)[data-highlighted] *){color:var(--ui-text)}.group-data-highlighted\:text-error:is(:where(.group)[data-highlighted] *){color:var(--ui-error)}.group-data-highlighted\:text-info:is(:where(.group)[data-highlighted] *){color:var(--ui-info)}.group-data-highlighted\:text-primary:is(:where(.group)[data-highlighted] *){color:var(--ui-primary)}.group-data-highlighted\:text-secondary:is(:where(.group)[data-highlighted] *){color:var(--ui-secondary)}.group-data-highlighted\:text-success:is(:where(.group)[data-highlighted] *){color:var(--ui-success)}.group-data-highlighted\:text-warning:is(:where(.group)[data-highlighted] *){color:var(--ui-warning)}.group-data-highlighted\:not-group-data-disabled\:text-default:is(:where(.group)[data-highlighted] *):not(:is(:where(.group)[data-disabled] *)){color:var(--ui-text)}.group-data-\[disabled\]\:opacity-75:is(:where(.group)[data-disabled] *){opacity:.75}.group-data-\[state\=active\]\:bg-error:is(:where(.group)[data-state=active] *){background-color:var(--ui-error)}.group-data-\[state\=active\]\:bg-info:is(:where(.group)[data-state=active] *){background-color:var(--ui-info)}.group-data-\[state\=active\]\:bg-inverted:is(:where(.group)[data-state=active] *){background-color:var(--ui-bg-inverted)}.group-data-\[state\=active\]\:bg-primary:is(:where(.group)[data-state=active] *){background-color:var(--ui-primary)}.group-data-\[state\=active\]\:bg-secondary:is(:where(.group)[data-state=active] *){background-color:var(--ui-secondary)}.group-data-\[state\=active\]\:bg-success:is(:where(.group)[data-state=active] *){background-color:var(--ui-success)}.group-data-\[state\=active\]\:bg-warning:is(:where(.group)[data-state=active] *){background-color:var(--ui-warning)}.group-data-\[state\=active\]\:text-inverted:is(:where(.group)[data-state=active] *){color:var(--ui-text-inverted)}.group-data-\[state\=checked\]\:text-error:is(:where(.group)[data-state=checked] *){color:var(--ui-error)}.group-data-\[state\=checked\]\:text-highlighted:is(:where(.group)[data-state=checked] *){color:var(--ui-text-highlighted)}.group-data-\[state\=checked\]\:text-info:is(:where(.group)[data-state=checked] *){color:var(--ui-info)}.group-data-\[state\=checked\]\:text-primary:is(:where(.group)[data-state=checked] *){color:var(--ui-primary)}.group-data-\[state\=checked\]\:text-secondary:is(:where(.group)[data-state=checked] *){color:var(--ui-secondary)}.group-data-\[state\=checked\]\:text-success:is(:where(.group)[data-state=checked] *){color:var(--ui-success)}.group-data-\[state\=checked\]\:text-warning:is(:where(.group)[data-state=checked] *){color:var(--ui-warning)}.group-data-\[state\=checked\]\:opacity-100:is(:where(.group)[data-state=checked] *){opacity:1}.group-data-\[state\=collapsed\]\/sidebar\:hidden:is(:where(.group\/sidebar)[data-state=collapsed] *){display:none}.group-data-\[state\=collapsed\]\/sidebar\:overflow-hidden:is(:where(.group\/sidebar)[data-state=collapsed] *){overflow:hidden}.group-data-\[state\=completed\]\:bg-error:is(:where(.group)[data-state=completed] *){background-color:var(--ui-error)}.group-data-\[state\=completed\]\:bg-info:is(:where(.group)[data-state=completed] *){background-color:var(--ui-info)}.group-data-\[state\=completed\]\:bg-inverted:is(:where(.group)[data-state=completed] *){background-color:var(--ui-bg-inverted)}.group-data-\[state\=completed\]\:bg-primary:is(:where(.group)[data-state=completed] *){background-color:var(--ui-primary)}.group-data-\[state\=completed\]\:bg-secondary:is(:where(.group)[data-state=completed] *){background-color:var(--ui-secondary)}.group-data-\[state\=completed\]\:bg-success:is(:where(.group)[data-state=completed] *){background-color:var(--ui-success)}.group-data-\[state\=completed\]\:bg-warning:is(:where(.group)[data-state=completed] *){background-color:var(--ui-warning)}.group-data-\[state\=completed\]\:text-inverted:is(:where(.group)[data-state=completed] *){color:var(--ui-text-inverted)}.group-data-\[state\=open\]\:rotate-90:is(:where(.group)[data-state=open] *){rotate:90deg}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[state\=open\]\:text-default:is(:where(.group)[data-state=open] *){color:var(--ui-text)}.group-data-\[state\=open\]\:text-error:is(:where(.group)[data-state=open] *){color:var(--ui-error)}.group-data-\[state\=open\]\:text-highlighted:is(:where(.group)[data-state=open] *){color:var(--ui-text-highlighted)}.group-data-\[state\=open\]\:text-info:is(:where(.group)[data-state=open] *){color:var(--ui-info)}.group-data-\[state\=open\]\:text-primary:is(:where(.group)[data-state=open] *){color:var(--ui-primary)}.group-data-\[state\=open\]\:text-secondary:is(:where(.group)[data-state=open] *){color:var(--ui-secondary)}.group-data-\[state\=open\]\:text-success:is(:where(.group)[data-state=open] *){color:var(--ui-success)}.group-data-\[state\=open\]\:text-warning:is(:where(.group)[data-state=open] *){color:var(--ui-warning)}.group-data-\[state\=open\]\:opacity-0:is(:where(.group)[data-state=open] *){opacity:0}.group-data-\[state\=open\]\:opacity-100:is(:where(.group)[data-state=open] *){opacity:1}.group-data-\[state\=unchecked\]\:text-dimmed:is(:where(.group)[data-state=unchecked] *){color:var(--ui-text-dimmed)}.group-data-\[state\=unchecked\]\:opacity-100:is(:where(.group)[data-state=unchecked] *){opacity:1}@media(hover:hover){.peer-hover\:text-highlighted:is(:where(.peer):hover~*){color:var(--ui-text-highlighted)}.peer-hover\:text-toned:is(:where(.peer):hover~*){color:var(--ui-text-toned)}}.peer-focus-visible\:text-highlighted:is(:where(.peer):focus-visible~*){color:var(--ui-text-highlighted)}.peer-focus-visible\:text-toned:is(:where(.peer):focus-visible~*){color:var(--ui-text-toned)}.marker\:text-\(--ui-border-accented\) ::marker{color:var(--ui-border-accented)}.marker\:text-\(--ui-border-accented\)::marker{color:var(--ui-border-accented)}.marker\:text-\(--ui-border-accented\) ::-webkit-details-marker,.marker\:text-\(--ui-border-accented\)::-webkit-details-marker{color:var(--ui-border-accented)}.marker\:text-muted ::marker{color:var(--ui-text-muted)}.marker\:text-muted::marker{color:var(--ui-text-muted)}.marker\:text-muted ::-webkit-details-marker,.marker\:text-muted::-webkit-details-marker{color:var(--ui-text-muted)}.selection\:bg-primary\/20 ::-moz-selection{background-color:var(--ui-primary)}.selection\:bg-primary\/20 ::selection{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.selection\:bg-primary\/20 ::-moz-selection{background-color:color-mix(in oklab,var(--ui-primary) 20%,transparent)}.selection\:bg-primary\/20 ::selection{background-color:color-mix(in oklab,var(--ui-primary) 20%,transparent)}}.selection\:bg-primary\/20::-moz-selection{background-color:var(--ui-primary)}.selection\:bg-primary\/20::selection{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.selection\:bg-primary\/20::-moz-selection{background-color:color-mix(in oklab,var(--ui-primary) 20%,transparent)}.selection\:bg-primary\/20::selection{background-color:color-mix(in oklab,var(--ui-primary) 20%,transparent)}}.file\:me-1\.5::file-selector-button{margin-inline-end:calc(var(--spacing)*1.5)}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-muted::file-selector-button{color:var(--ui-text-muted)}.file\:outline-none::file-selector-button{--tw-outline-style:none;outline-style:none}.placeholder\:text-dimmed::-moz-placeholder{color:var(--ui-text-dimmed)}.placeholder\:text-dimmed::placeholder{color:var(--ui-text-dimmed)}.before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:-inset-px:before{content:var(--tw-content);inset:-1px}.before\:inset-px:before{content:var(--tw-content);inset:1px}.before\:inset-x-0:before{content:var(--tw-content);inset-inline:calc(var(--spacing)*0)}.before\:inset-x-px:before{content:var(--tw-content);inset-inline:1px}.before\:inset-y-0:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.before\:inset-y-px:before{content:var(--tw-content);inset-block:1px}.before\:top-0:before{content:var(--tw-content);top:calc(var(--spacing)*0)}.before\:-right-1\.5:before{content:var(--tw-content);right:calc(var(--spacing)*-1.5)}.before\:-left-1\.5:before{content:var(--tw-content);left:calc(var(--spacing)*-1.5)}.before\:left-0:before{content:var(--tw-content);left:calc(var(--spacing)*0)}.before\:z-1:before{content:var(--tw-content);z-index:1}.before\:z-2:before{content:var(--tw-content);z-index:2}.before\:z-\[-1\]:before{content:var(--tw-content);z-index:-1}.before\:h-1\/3:before{content:var(--tw-content);height:33.3333%}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-1\/3:before{content:var(--tw-content);width:33.3333%}.before\:w-full:before{content:var(--tw-content);width:100%}.before\:rounded-\[inherit\]:before{border-radius:inherit;content:var(--tw-content)}.before\:rounded-md:before{border-radius:calc(var(--ui-radius)*1.5);content:var(--tw-content)}.before\:bg-elevated:before,.before\:bg-elevated\/75:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-elevated\/75:before{background-color:color-mix(in oklab,var(--ui-bg-elevated) 75%,transparent)}}.before\:bg-error\/10:before{background-color:var(--ui-error);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-error\/10:before{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.before\:bg-info\/10:before{background-color:var(--ui-info);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-info\/10:before{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.before\:bg-primary\/10:before{background-color:var(--ui-primary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-primary\/10:before{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.before\:bg-secondary\/10:before{background-color:var(--ui-secondary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-secondary\/10:before{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.before\:bg-success\/10:before{background-color:var(--ui-success);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-success\/10:before{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.before\:bg-warning\/10:before{background-color:var(--ui-warning);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.before\:bg-warning\/10:before{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.before\:bg-gradient-to-b:before{--tw-gradient-position:to bottom in oklab}.before\:bg-gradient-to-b:before,.before\:bg-gradient-to-r:before{background-image:linear-gradient(var(--tw-gradient-stops));content:var(--tw-content)}.before\:bg-gradient-to-r:before{--tw-gradient-position:to right in oklab}.before\:bg-\[radial-gradient\(var\(--spotlight-size\)_var\(--spotlight-size\)_at_calc\(var\(--spotlight-x\,0px\)\)_calc\(var\(--spotlight-y\,0px\)\)\,var\(--spotlight-color\)\,transparent_70\%\)\]:before{background-image:radial-gradient(var(--spotlight-size) var(--spotlight-size) at calc(var(--spotlight-x,0px)) calc(var(--spotlight-y,0px)),var(--spotlight-color),transparent 70%);content:var(--tw-content)}.before\:from-default:before{content:var(--tw-content);--tw-gradient-from:var(--ui-bg);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.before\:to-transparent:before{content:var(--tw-content);--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.before\:transition-colors:before{content:var(--tw-content);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.before\:content-\[\\\"\\\"\]:before{--tw-content:\"\";content:var(--tw-content)}.not-first-of-type\:before\:me-0\.5:not(:first-of-type):before{content:var(--tw-content);margin-inline-end:calc(var(--spacing)*.5)}.not-first-of-type\:before\:content-\[\'·\'\]:not(:first-of-type):before{--tw-content:"·";content:var(--tw-content)}.after\:pointer-events-none:after{content:var(--tw-content);pointer-events:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-x-0:after{content:var(--tw-content);inset-inline:calc(var(--spacing)*0)}.after\:inset-x-2\.5:after{content:var(--tw-content);inset-inline:calc(var(--spacing)*2.5)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:inset-y-0\.5:after{content:var(--tw-content);inset-block:calc(var(--spacing)*.5)}.after\:-start-1\.5:after{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*-1.5)}.after\:right-0:after{content:var(--tw-content);right:calc(var(--spacing)*0)}.after\:-bottom-2:after{bottom:calc(var(--spacing)*-2);content:var(--tw-content)}.after\:bottom-0:after{bottom:calc(var(--spacing)*0);content:var(--tw-content)}.after\:-left-1\.5:after{content:var(--tw-content);left:calc(var(--spacing)*-1.5)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:z-1:after{content:var(--tw-content);z-index:1}.after\:z-2:after{content:var(--tw-content);z-index:2}.after\:ms-0\.5:after{content:var(--tw-content);margin-inline-start:calc(var(--spacing)*.5)}.after\:block:after{content:var(--tw-content);display:block}.after\:hidden:after{content:var(--tw-content);display:none}.after\:size-1:after{content:var(--tw-content);height:calc(var(--spacing)*1);width:calc(var(--spacing)*1)}.after\:size-1\.5:after{content:var(--tw-content);height:calc(var(--spacing)*1.5);width:calc(var(--spacing)*1.5)}.after\:size-2:after{content:var(--tw-content);height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.after\:h-1\/3:after{content:var(--tw-content);height:33.3333%}.after\:h-full:after{content:var(--tw-content);height:100%}.after\:h-px:after{content:var(--tw-content);height:1px}.after\:w-1\/3:after{content:var(--tw-content);width:33.3333%}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:w-px:after{content:var(--tw-content);width:1px}.after\:animate-\[carousel-inverse_2s_ease-in-out_infinite\]:after{animation:carousel-inverse 2s ease-in-out infinite;content:var(--tw-content)}.after\:animate-\[carousel_2s_ease-in-out_infinite\]:after{animation:carousel 2s ease-in-out infinite;content:var(--tw-content)}.after\:animate-\[elastic_2s_ease-in-out_infinite\]:after{animation:elastic 2s ease-in-out infinite;content:var(--tw-content)}.after\:animate-\[swing_2s_ease-in-out_infinite\]:after{animation:swing 2s ease-in-out infinite;content:var(--tw-content)}.after\:rounded-full:after{border-radius:3.40282e+38px;content:var(--tw-content)}.after\:bg-default:after{background-color:var(--ui-bg);content:var(--tw-content)}.after\:bg-error:after{background-color:var(--ui-error);content:var(--tw-content)}.after\:bg-info:after{background-color:var(--ui-info);content:var(--tw-content)}.after\:bg-inverted:after{background-color:var(--ui-bg-inverted);content:var(--tw-content)}.after\:bg-primary:after{background-color:var(--ui-primary);content:var(--tw-content)}.after\:bg-secondary:after{background-color:var(--ui-secondary);content:var(--tw-content)}.after\:bg-success:after{background-color:var(--ui-success);content:var(--tw-content)}.after\:bg-warning:after{background-color:var(--ui-warning);content:var(--tw-content)}.after\:bg-gradient-to-l:after{--tw-gradient-position:to left in oklab}.after\:bg-gradient-to-l:after,.after\:bg-gradient-to-t:after{background-image:linear-gradient(var(--tw-gradient-stops));content:var(--tw-content)}.after\:bg-gradient-to-t:after{--tw-gradient-position:to top in oklab}.after\:from-default:after{content:var(--tw-content);--tw-gradient-from:var(--ui-bg);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.after\:to-transparent:after{content:var(--tw-content);--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.after\:text-error:after{color:var(--ui-error);content:var(--tw-content)}.after\:transition-colors:after{content:var(--tw-content);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.after\:content-\[\'\*\'\]:after{--tw-content:"*";content:var(--tw-content)}.after\:content-\[\\\"\\\"\]:after{--tw-content:\"\";content:var(--tw-content)}:is(.\*\:not-last\:after\:absolute>*):not(:last-child):after{content:var(--tw-content);position:absolute}:is(.\*\:not-last\:after\:inset-x-1>*):not(:last-child):after{content:var(--tw-content);inset-inline:calc(var(--spacing)*1)}:is(.\*\:not-last\:after\:bottom-0>*):not(:last-child):after{bottom:calc(var(--spacing)*0);content:var(--tw-content)}:is(.\*\:not-last\:after\:h-px>*):not(:last-child):after{content:var(--tw-content);height:1px}:is(.\*\:not-last\:after\:bg-border>*):not(:last-child):after{background-color:var(--ui-border);content:var(--tw-content)}.first\:me-0:first-child{margin-inline-end:calc(var(--spacing)*0)}.first\:border-s:first-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}:is(.\*\:first\:mt-0>*):first-child{margin-top:calc(var(--spacing)*0)}:is(.\*\:first\:mt-2\.5>*):first-child{margin-top:calc(var(--spacing)*2.5)}.not-only\:first\:rounded-e-none:not(:only-child):first-child{border-end-end-radius:0;border-start-end-radius:0}.not-only\:first\:rounded-b-none:not(:only-child):first-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}:is(.\*\:last\:mb-0>*):last-child{margin-bottom:calc(var(--spacing)*0)}.not-only\:last\:rounded-s-none:not(:only-child):last-child{border-end-start-radius:0;border-start-start-radius:0}.not-only\:last\:rounded-t-none:not(:only-child):last-child{border-top-left-radius:0;border-top-right-radius:0}.first-of-type\:rounded-s-lg:first-of-type{border-end-start-radius:calc(var(--ui-radius)*2);border-start-start-radius:calc(var(--ui-radius)*2)}.first-of-type\:rounded-t-lg:first-of-type{border-top-left-radius:calc(var(--ui-radius)*2);border-top-right-radius:calc(var(--ui-radius)*2)}.last-of-type\:rounded-e-lg:last-of-type{border-end-end-radius:calc(var(--ui-radius)*2);border-start-end-radius:calc(var(--ui-radius)*2)}.last-of-type\:rounded-b-lg:last-of-type{border-bottom-left-radius:calc(var(--ui-radius)*2);border-bottom-right-radius:calc(var(--ui-radius)*2)}@media(hover:hover){.hover\:scale-115:hover{--tw-scale-x:115%;--tw-scale-y:115%;--tw-scale-z:115%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-error:hover{border-color:var(--ui-error)}.hover\:border-info:hover{border-color:var(--ui-info)}.hover\:border-inverted:hover{border-color:var(--ui-border-inverted)}.hover\:border-primary:hover{border-color:var(--ui-primary)}.hover\:border-secondary:hover{border-color:var(--ui-secondary)}.hover\:border-success:hover{border-color:var(--ui-success)}.hover\:border-warning:hover{border-color:var(--ui-warning)}.hover\:bg-accented\/75:hover{background-color:var(--ui-bg-accented)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accented\/75:hover{background-color:color-mix(in oklab,var(--ui-bg-accented) 75%,transparent)}}.hover\:bg-default\/10:hover{background-color:var(--ui-bg)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-default\/10:hover{background-color:color-mix(in oklab,var(--ui-bg) 10%,transparent)}}.hover\:bg-elevated:hover,.hover\:bg-elevated\/25:hover{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-elevated\/25:hover{background-color:color-mix(in oklab,var(--ui-bg-elevated) 25%,transparent)}}.hover\:bg-elevated\/50:hover{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-elevated\/50:hover{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}.hover\:bg-error\/10:hover{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/10:hover{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.hover\:bg-error\/15:hover{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/15:hover{background-color:color-mix(in oklab,var(--ui-error) 15%,transparent)}}.hover\:bg-error\/75:hover{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/75:hover{background-color:color-mix(in oklab,var(--ui-error) 75%,transparent)}}.hover\:bg-error\/90:hover{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/90:hover{background-color:color-mix(in oklab,var(--ui-error) 90%,transparent)}}.hover\:bg-info\/10:hover{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-info\/10:hover{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.hover\:bg-info\/15:hover{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-info\/15:hover{background-color:color-mix(in oklab,var(--ui-info) 15%,transparent)}}.hover\:bg-info\/75:hover{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-info\/75:hover{background-color:color-mix(in oklab,var(--ui-info) 75%,transparent)}}.hover\:bg-info\/90:hover{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-info\/90:hover{background-color:color-mix(in oklab,var(--ui-info) 90%,transparent)}}.hover\:bg-inverted\/90:hover{background-color:var(--ui-bg-inverted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-inverted\/90:hover{background-color:color-mix(in oklab,var(--ui-bg-inverted) 90%,transparent)}}.hover\:bg-muted:hover{background-color:var(--ui-bg-muted)}.hover\:bg-primary\/10:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.hover\:bg-primary\/15:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/15:hover{background-color:color-mix(in oklab,var(--ui-primary) 15%,transparent)}}.hover\:bg-primary\/75:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/75:hover{background-color:color-mix(in oklab,var(--ui-primary) 75%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--ui-primary) 90%,transparent)}}.hover\:bg-secondary\/10:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/10:hover{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.hover\:bg-secondary\/15:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/15:hover{background-color:color-mix(in oklab,var(--ui-secondary) 15%,transparent)}}.hover\:bg-secondary\/75:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/75:hover{background-color:color-mix(in oklab,var(--ui-secondary) 75%,transparent)}}.hover\:bg-secondary\/90:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--ui-secondary) 90%,transparent)}}.hover\:bg-success\/10:hover{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/10:hover{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.hover\:bg-success\/15:hover{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/15:hover{background-color:color-mix(in oklab,var(--ui-success) 15%,transparent)}}.hover\:bg-success\/75:hover{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/75:hover{background-color:color-mix(in oklab,var(--ui-success) 75%,transparent)}}.hover\:bg-success\/90:hover{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/90:hover{background-color:color-mix(in oklab,var(--ui-success) 90%,transparent)}}.hover\:bg-warning\/10:hover{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/10:hover{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.hover\:bg-warning\/15:hover{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/15:hover{background-color:color-mix(in oklab,var(--ui-warning) 15%,transparent)}}.hover\:bg-warning\/75:hover{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/75:hover{background-color:color-mix(in oklab,var(--ui-warning) 75%,transparent)}}.hover\:bg-warning\/90:hover{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/90:hover{background-color:color-mix(in oklab,var(--ui-warning) 90%,transparent)}}.hover\:text-default:hover{color:var(--ui-text)}.hover\:text-error\/75:hover{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:text-error\/75:hover{color:color-mix(in oklab,var(--ui-error) 75%,transparent)}}.hover\:text-highlighted:hover{color:var(--ui-text-highlighted)}.hover\:text-info\/75:hover{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:text-info\/75:hover{color:color-mix(in oklab,var(--ui-info) 75%,transparent)}}.hover\:text-primary:hover,.hover\:text-primary\/75:hover{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:text-primary\/75:hover{color:color-mix(in oklab,var(--ui-primary) 75%,transparent)}}.hover\:text-secondary\/75:hover{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:text-secondary\/75:hover{color:color-mix(in oklab,var(--ui-secondary) 75%,transparent)}}.hover\:text-success\/75:hover{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:text-success\/75:hover{color:color-mix(in oklab,var(--ui-success) 75%,transparent)}}.hover\:text-warning\/75:hover{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:text-warning\/75:hover{color:color-mix(in oklab,var(--ui-warning) 75%,transparent)}}.hover\:ring-accented:hover{--tw-ring-color:var(--ui-border-accented)}.hover\:not-data-\[selected\]\:bg-error\/10:hover:not([data-selected]){background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-error\/10:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.hover\:not-data-\[selected\]\:bg-error\/20:hover:not([data-selected]){background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-error\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-error) 20%,transparent)}}.hover\:not-data-\[selected\]\:bg-info\/10:hover:not([data-selected]){background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-info\/10:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.hover\:not-data-\[selected\]\:bg-info\/20:hover:not([data-selected]){background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-info\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-info) 20%,transparent)}}.hover\:not-data-\[selected\]\:bg-inverted\/10:hover:not([data-selected]){background-color:var(--ui-bg-inverted)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-inverted\/10:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-bg-inverted) 10%,transparent)}}.hover\:not-data-\[selected\]\:bg-primary\/10:hover:not([data-selected]){background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-primary\/10:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.hover\:not-data-\[selected\]\:bg-primary\/20:hover:not([data-selected]){background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-primary\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-primary) 20%,transparent)}}.hover\:not-data-\[selected\]\:bg-secondary\/10:hover:not([data-selected]){background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-secondary\/10:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.hover\:not-data-\[selected\]\:bg-secondary\/20:hover:not([data-selected]){background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-secondary\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-secondary) 20%,transparent)}}.hover\:not-data-\[selected\]\:bg-success\/10:hover:not([data-selected]){background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-success\/10:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.hover\:not-data-\[selected\]\:bg-success\/20:hover:not([data-selected]){background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-success\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-success) 20%,transparent)}}.hover\:not-data-\[selected\]\:bg-warning\/10:hover:not([data-selected]){background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-warning\/10:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.hover\:not-data-\[selected\]\:bg-warning\/20:hover:not([data-selected]){background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.hover\:not-data-\[selected\]\:bg-warning\/20:hover:not([data-selected]){background-color:color-mix(in oklab,var(--ui-warning) 20%,transparent)}}.hover\:before\:bg-elevated\/50:hover:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.hover\:before\:bg-elevated\/50:hover:before{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}.hover\:after\:bg-\(--ui-border-accented\):hover:after{background-color:var(--ui-border-accented);content:var(--tw-content)}}.focus\:bg-accented:focus,.focus\:bg-accented\/50:focus{background-color:var(--ui-bg-accented)}@supports (color:color-mix(in lab,red,red)){.focus\:bg-accented\/50:focus{background-color:color-mix(in oklab,var(--ui-bg-accented) 50%,transparent)}}.focus\:bg-elevated:focus{background-color:var(--ui-bg-elevated)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-error:focus{--tw-ring-color:var(--ui-error)}.focus\:ring-info:focus{--tw-ring-color:var(--ui-info)}.focus\:ring-inverted:focus{--tw-ring-color:var(--ui-border-inverted)}.focus\:ring-primary:focus{--tw-ring-color:var(--ui-primary)}.focus\:ring-secondary:focus{--tw-ring-color:var(--ui-secondary)}.focus\:ring-success:focus{--tw-ring-color:var(--ui-success)}.focus\:ring-warning:focus{--tw-ring-color:var(--ui-warning)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:focus\:bg-accented:is(:where(.group):hover *):focus{background-color:var(--ui-bg-accented)}}.focus-visible\:z-\[1\]:focus-visible{z-index:1}.focus-visible\:bg-accented\/75:focus-visible{background-color:var(--ui-bg-accented)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-accented\/75:focus-visible{background-color:color-mix(in oklab,var(--ui-bg-accented) 75%,transparent)}}.focus-visible\:bg-default\/10:focus-visible{background-color:var(--ui-bg)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-default\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-bg) 10%,transparent)}}.focus-visible\:bg-elevated:focus-visible{background-color:var(--ui-bg-elevated)}.focus-visible\:bg-error\/10:focus-visible{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-error\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.focus-visible\:bg-error\/15:focus-visible{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-error\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-error) 15%,transparent)}}.focus-visible\:bg-info\/10:focus-visible{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-info\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.focus-visible\:bg-info\/15:focus-visible{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-info\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-info) 15%,transparent)}}.focus-visible\:bg-primary\/10:focus-visible{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-primary\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.focus-visible\:bg-primary\/15:focus-visible{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-primary\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-primary) 15%,transparent)}}.focus-visible\:bg-secondary\/10:focus-visible{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-secondary\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.focus-visible\:bg-secondary\/15:focus-visible{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-secondary\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-secondary) 15%,transparent)}}.focus-visible\:bg-success\/10:focus-visible{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-success\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.focus-visible\:bg-success\/15:focus-visible{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-success\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-success) 15%,transparent)}}.focus-visible\:bg-warning\/10:focus-visible{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-warning\/10:focus-visible{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.focus-visible\:bg-warning\/15:focus-visible{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-warning\/15:focus-visible{background-color:color-mix(in oklab,var(--ui-warning) 15%,transparent)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-error:focus-visible{--tw-ring-color:var(--ui-error)}.focus-visible\:ring-info:focus-visible{--tw-ring-color:var(--ui-info)}.focus-visible\:ring-inverted:focus-visible{--tw-ring-color:var(--ui-border-inverted)}.focus-visible\:ring-primary:focus-visible{--tw-ring-color:var(--ui-primary)}.focus-visible\:ring-secondary:focus-visible{--tw-ring-color:var(--ui-secondary)}.focus-visible\:ring-success:focus-visible{--tw-ring-color:var(--ui-success)}.focus-visible\:ring-warning:focus-visible{--tw-ring-color:var(--ui-warning)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-error:focus-visible,.focus-visible\:outline-error\/50:focus-visible{outline-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-error\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-error) 50%,transparent)}}.focus-visible\:outline-info:focus-visible,.focus-visible\:outline-info\/50:focus-visible{outline-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-info\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-info) 50%,transparent)}}.focus-visible\:outline-inverted:focus-visible,.focus-visible\:outline-inverted\/50:focus-visible{outline-color:var(--ui-border-inverted)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-inverted\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-border-inverted) 50%,transparent)}}.focus-visible\:outline-primary:focus-visible,.focus-visible\:outline-primary\/50:focus-visible{outline-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-primary\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.focus-visible\:outline-secondary:focus-visible,.focus-visible\:outline-secondary\/50:focus-visible{outline-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-secondary\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-secondary) 50%,transparent)}}.focus-visible\:outline-success:focus-visible,.focus-visible\:outline-success\/50:focus-visible{outline-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-success\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-success) 50%,transparent)}}.focus-visible\:outline-warning:focus-visible,.focus-visible\:outline-warning\/50:focus-visible{outline-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-warning\/50:focus-visible{outline-color:color-mix(in oklab,var(--ui-warning) 50%,transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:before\:ring-2:focus-visible:before{content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:before\:ring-error:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-error)}.focus-visible\:before\:ring-info:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-info)}.focus-visible\:before\:ring-inverted:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-border-inverted)}.focus-visible\:before\:ring-primary:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-primary)}.focus-visible\:before\:ring-secondary:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-secondary)}.focus-visible\:before\:ring-success:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-success)}.focus-visible\:before\:ring-warning:focus-visible:before{content:var(--tw-content);--tw-ring-color:var(--ui-warning)}.focus-visible\:before\:ring-inset:focus-visible:before{content:var(--tw-content);--tw-ring-inset:inset}.active\:bg-accented\/75:active{background-color:var(--ui-bg-accented)}@supports (color:color-mix(in lab,red,red)){.active\:bg-accented\/75:active{background-color:color-mix(in oklab,var(--ui-bg-accented) 75%,transparent)}}.active\:bg-elevated:active{background-color:var(--ui-bg-elevated)}.active\:bg-error\/10:active{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.active\:bg-error\/10:active{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.active\:bg-error\/15:active{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.active\:bg-error\/15:active{background-color:color-mix(in oklab,var(--ui-error) 15%,transparent)}}.active\:bg-error\/75:active{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.active\:bg-error\/75:active{background-color:color-mix(in oklab,var(--ui-error) 75%,transparent)}}.active\:bg-info\/10:active{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.active\:bg-info\/10:active{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.active\:bg-info\/15:active{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.active\:bg-info\/15:active{background-color:color-mix(in oklab,var(--ui-info) 15%,transparent)}}.active\:bg-info\/75:active{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.active\:bg-info\/75:active{background-color:color-mix(in oklab,var(--ui-info) 75%,transparent)}}.active\:bg-inverted\/90:active{background-color:var(--ui-bg-inverted)}@supports (color:color-mix(in lab,red,red)){.active\:bg-inverted\/90:active{background-color:color-mix(in oklab,var(--ui-bg-inverted) 90%,transparent)}}.active\:bg-primary\/10:active{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.active\:bg-primary\/10:active{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.active\:bg-primary\/15:active{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.active\:bg-primary\/15:active{background-color:color-mix(in oklab,var(--ui-primary) 15%,transparent)}}.active\:bg-primary\/75:active{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.active\:bg-primary\/75:active{background-color:color-mix(in oklab,var(--ui-primary) 75%,transparent)}}.active\:bg-secondary\/10:active{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.active\:bg-secondary\/10:active{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.active\:bg-secondary\/15:active{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.active\:bg-secondary\/15:active{background-color:color-mix(in oklab,var(--ui-secondary) 15%,transparent)}}.active\:bg-secondary\/75:active{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.active\:bg-secondary\/75:active{background-color:color-mix(in oklab,var(--ui-secondary) 75%,transparent)}}.active\:bg-success\/10:active{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.active\:bg-success\/10:active{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.active\:bg-success\/15:active{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.active\:bg-success\/15:active{background-color:color-mix(in oklab,var(--ui-success) 15%,transparent)}}.active\:bg-success\/75:active{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.active\:bg-success\/75:active{background-color:color-mix(in oklab,var(--ui-success) 75%,transparent)}}.active\:bg-warning\/10:active{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.active\:bg-warning\/10:active{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.active\:bg-warning\/15:active{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.active\:bg-warning\/15:active{background-color:color-mix(in oklab,var(--ui-warning) 15%,transparent)}}.active\:bg-warning\/75:active{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.active\:bg-warning\/75:active{background-color:color-mix(in oklab,var(--ui-warning) 75%,transparent)}}.active\:text-default:active{color:var(--ui-text)}.active\:text-error\/75:active{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.active\:text-error\/75:active{color:color-mix(in oklab,var(--ui-error) 75%,transparent)}}.active\:text-info\/75:active{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.active\:text-info\/75:active{color:color-mix(in oklab,var(--ui-info) 75%,transparent)}}.active\:text-primary\/75:active{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.active\:text-primary\/75:active{color:color-mix(in oklab,var(--ui-primary) 75%,transparent)}}.active\:text-secondary\/75:active{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.active\:text-secondary\/75:active{color:color-mix(in oklab,var(--ui-secondary) 75%,transparent)}}.active\:text-success\/75:active{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.active\:text-success\/75:active{color:color-mix(in oklab,var(--ui-success) 75%,transparent)}}.active\:text-warning\/75:active{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.active\:text-warning\/75:active{color:color-mix(in oklab,var(--ui-warning) 75%,transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-default:disabled{background-color:var(--ui-bg)}.disabled\:bg-elevated:disabled,.disabled\:bg-elevated\/50:disabled{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-elevated\/50:disabled{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}.disabled\:bg-error:disabled,.disabled\:bg-error\/10:disabled{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-error\/10:disabled{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.disabled\:bg-info:disabled,.disabled\:bg-info\/10:disabled{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-info\/10:disabled{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.disabled\:bg-inverted:disabled{background-color:var(--ui-bg-inverted)}.disabled\:bg-primary:disabled,.disabled\:bg-primary\/10:disabled{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-primary\/10:disabled{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.disabled\:bg-secondary:disabled,.disabled\:bg-secondary\/10:disabled{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-secondary\/10:disabled{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.disabled\:bg-success:disabled,.disabled\:bg-success\/10:disabled{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-success\/10:disabled{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.disabled\:bg-transparent:disabled{background-color:#0000}.disabled\:bg-warning:disabled,.disabled\:bg-warning\/10:disabled{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-warning\/10:disabled{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.disabled\:text-error:disabled{color:var(--ui-error)}.disabled\:text-info:disabled{color:var(--ui-info)}.disabled\:text-muted:disabled{color:var(--ui-text-muted)}.disabled\:text-primary:disabled{color:var(--ui-primary)}.disabled\:text-secondary:disabled{color:var(--ui-secondary)}.disabled\:text-success:disabled{color:var(--ui-success)}.disabled\:text-warning:disabled{color:var(--ui-warning)}.disabled\:opacity-75:disabled{opacity:.75}@media(hover:hover){.hover\:disabled\:bg-transparent:hover:disabled{background-color:#0000}.disabled\:hover\:text-muted:disabled:hover{color:var(--ui-text-muted)}}.has-focus\:bg-elevated:has(:focus){background-color:var(--ui-bg-elevated)}.has-focus-visible\:z-\[1\]:has(:focus-visible){z-index:1}.has-focus-visible\:border-error:has(:focus-visible){border-color:var(--ui-error)}.has-focus-visible\:border-info:has(:focus-visible){border-color:var(--ui-info)}.has-focus-visible\:border-inverted:has(:focus-visible){border-color:var(--ui-border-inverted)}.has-focus-visible\:border-primary:has(:focus-visible){border-color:var(--ui-primary)}.has-focus-visible\:border-secondary:has(:focus-visible){border-color:var(--ui-secondary)}.has-focus-visible\:border-success:has(:focus-visible){border-color:var(--ui-success)}.has-focus-visible\:border-warning:has(:focus-visible){border-color:var(--ui-warning)}.has-focus-visible\:ring-2:has(:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-focus-visible\:ring-error:has(:focus-visible){--tw-ring-color:var(--ui-error)}.has-focus-visible\:ring-info:has(:focus-visible){--tw-ring-color:var(--ui-info)}.has-focus-visible\:ring-inverted:has(:focus-visible){--tw-ring-color:var(--ui-border-inverted)}.has-focus-visible\:ring-primary:has(:focus-visible){--tw-ring-color:var(--ui-primary)}.has-focus-visible\:ring-secondary:has(:focus-visible){--tw-ring-color:var(--ui-secondary)}.has-focus-visible\:ring-success:has(:focus-visible){--tw-ring-color:var(--ui-success)}.has-focus-visible\:ring-warning:has(:focus-visible){--tw-ring-color:var(--ui-warning)}.has-focus-visible\:ring-inset:has(:focus-visible){--tw-ring-inset:inset}.has-data-\[state\=checked\]\:z-\[1\]:has([data-state=checked]){z-index:1}.has-data-\[state\=checked\]\:border-error:has([data-state=checked]),.has-data-\[state\=checked\]\:border-error\/50:has([data-state=checked]){border-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-error\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-error) 50%,transparent)}}.has-data-\[state\=checked\]\:border-info:has([data-state=checked]),.has-data-\[state\=checked\]\:border-info\/50:has([data-state=checked]){border-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-info\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-info) 50%,transparent)}}.has-data-\[state\=checked\]\:border-inverted:has([data-state=checked]),.has-data-\[state\=checked\]\:border-inverted\/50:has([data-state=checked]){border-color:var(--ui-border-inverted)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-inverted\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-border-inverted) 50%,transparent)}}.has-data-\[state\=checked\]\:border-primary:has([data-state=checked]),.has-data-\[state\=checked\]\:border-primary\/50:has([data-state=checked]){border-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-primary\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.has-data-\[state\=checked\]\:border-secondary:has([data-state=checked]),.has-data-\[state\=checked\]\:border-secondary\/50:has([data-state=checked]){border-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-secondary\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-secondary) 50%,transparent)}}.has-data-\[state\=checked\]\:border-success:has([data-state=checked]),.has-data-\[state\=checked\]\:border-success\/50:has([data-state=checked]){border-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-success\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-success) 50%,transparent)}}.has-data-\[state\=checked\]\:border-warning:has([data-state=checked]),.has-data-\[state\=checked\]\:border-warning\/50:has([data-state=checked]){border-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:border-warning\/50:has([data-state=checked]){border-color:color-mix(in oklab,var(--ui-warning) 50%,transparent)}}.has-data-\[state\=checked\]\:bg-elevated:has([data-state=checked]){background-color:var(--ui-bg-elevated)}.has-data-\[state\=checked\]\:bg-error\/10:has([data-state=checked]){background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-error\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.has-data-\[state\=checked\]\:bg-info\/10:has([data-state=checked]){background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-info\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.has-data-\[state\=checked\]\:bg-primary\/10:has([data-state=checked]){background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-primary\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.has-data-\[state\=checked\]\:bg-secondary\/10:has([data-state=checked]){background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-secondary\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.has-data-\[state\=checked\]\:bg-success\/10:has([data-state=checked]){background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-success\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.has-data-\[state\=checked\]\:bg-warning\/10:has([data-state=checked]){background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.has-data-\[state\=checked\]\:bg-warning\/10:has([data-state=checked]){background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.focus-visible\:has-\[\>code\]\:outline-0:focus-visible:has(>code){outline-style:var(--tw-outline-style);outline-width:0}.aria-disabled\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.aria-disabled\:bg-default[aria-disabled=true]{background-color:var(--ui-bg)}.aria-disabled\:bg-elevated[aria-disabled=true]{background-color:var(--ui-bg-elevated)}.aria-disabled\:bg-error[aria-disabled=true],.aria-disabled\:bg-error\/10[aria-disabled=true]{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-error\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.aria-disabled\:bg-info[aria-disabled=true],.aria-disabled\:bg-info\/10[aria-disabled=true]{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-info\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.aria-disabled\:bg-inverted[aria-disabled=true]{background-color:var(--ui-bg-inverted)}.aria-disabled\:bg-primary[aria-disabled=true],.aria-disabled\:bg-primary\/10[aria-disabled=true]{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-primary\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.aria-disabled\:bg-secondary[aria-disabled=true],.aria-disabled\:bg-secondary\/10[aria-disabled=true]{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-secondary\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.aria-disabled\:bg-success[aria-disabled=true],.aria-disabled\:bg-success\/10[aria-disabled=true]{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-success\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.aria-disabled\:bg-transparent[aria-disabled=true]{background-color:#0000}.aria-disabled\:bg-warning[aria-disabled=true],.aria-disabled\:bg-warning\/10[aria-disabled=true]{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.aria-disabled\:bg-warning\/10[aria-disabled=true]{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.aria-disabled\:text-error[aria-disabled=true]{color:var(--ui-error)}.aria-disabled\:text-info[aria-disabled=true]{color:var(--ui-info)}.aria-disabled\:text-muted[aria-disabled=true]{color:var(--ui-text-muted)}.aria-disabled\:text-primary[aria-disabled=true]{color:var(--ui-primary)}.aria-disabled\:text-secondary[aria-disabled=true]{color:var(--ui-secondary)}.aria-disabled\:text-success[aria-disabled=true]{color:var(--ui-success)}.aria-disabled\:text-warning[aria-disabled=true]{color:var(--ui-warning)}.aria-disabled\:opacity-75[aria-disabled=true]{opacity:.75}@media(hover:hover){.hover\:aria-disabled\:bg-transparent:hover[aria-disabled=true]{background-color:#0000}}.data-disabled\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-disabled\:text-muted[data-disabled]{color:var(--ui-text-muted)}.data-disabled\:opacity-75[data-disabled]{opacity:.75}.data-highlighted\:text-error[data-highlighted]{color:var(--ui-error)}.data-highlighted\:text-highlighted[data-highlighted]{color:var(--ui-text-highlighted)}.data-highlighted\:text-info[data-highlighted]{color:var(--ui-info)}.data-highlighted\:text-primary[data-highlighted]{color:var(--ui-primary)}.data-highlighted\:text-secondary[data-highlighted]{color:var(--ui-secondary)}.data-highlighted\:text-success[data-highlighted]{color:var(--ui-success)}.data-highlighted\:text-warning[data-highlighted]{color:var(--ui-warning)}.data-highlighted\:not-data-disabled\:text-highlighted[data-highlighted]:not([data-disabled]){color:var(--ui-text-highlighted)}.data-highlighted\:before\:bg-elevated\/50[data-highlighted]:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-elevated\/50[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}.data-highlighted\:before\:bg-error\/10[data-highlighted]:before{background-color:var(--ui-error);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-error\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.data-highlighted\:before\:bg-info\/10[data-highlighted]:before{background-color:var(--ui-info);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-info\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.data-highlighted\:before\:bg-primary\/10[data-highlighted]:before{background-color:var(--ui-primary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-primary\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.data-highlighted\:before\:bg-secondary\/10[data-highlighted]:before{background-color:var(--ui-secondary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-secondary\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.data-highlighted\:before\:bg-success\/10[data-highlighted]:before{background-color:var(--ui-success);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-success\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.data-highlighted\:before\:bg-warning\/10[data-highlighted]:before{background-color:var(--ui-warning);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:before\:bg-warning\/10[data-highlighted]:before{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.data-highlighted\:not-data-disabled\:before\:bg-elevated\/50[data-highlighted]:not([data-disabled]):before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-highlighted\:not-data-disabled\:before\:bg-elevated\/50[data-highlighted]:not([data-disabled]):before{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}.data-invalid\:text-error[data-invalid]{color:var(--ui-error)}.data-placeholder\:text-dimmed[data-placeholder]{color:var(--ui-text-dimmed)}.data-today\:font-semibold[data-today]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.data-today\:not-data-\[selected\]\:text-error[data-today]:not([data-selected]){color:var(--ui-error)}.data-today\:not-data-\[selected\]\:text-highlighted[data-today]:not([data-selected]){color:var(--ui-text-highlighted)}.data-today\:not-data-\[selected\]\:text-info[data-today]:not([data-selected]){color:var(--ui-info)}.data-today\:not-data-\[selected\]\:text-primary[data-today]:not([data-selected]){color:var(--ui-primary)}.data-today\:not-data-\[selected\]\:text-secondary[data-today]:not([data-selected]){color:var(--ui-secondary)}.data-today\:not-data-\[selected\]\:text-success[data-today]:not([data-selected]){color:var(--ui-success)}.data-today\:not-data-\[selected\]\:text-warning[data-today]:not([data-selected]){color:var(--ui-warning)}.data-unavailable\:pointer-events-none[data-unavailable]{pointer-events:none}.data-unavailable\:text-muted[data-unavailable]{color:var(--ui-text-muted)}.data-unavailable\:line-through[data-unavailable]{text-decoration-line:line-through}.data-\[disabled\]\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\[disabled\]\:opacity-75[data-disabled]{opacity:.75}.data-\[dragging\=true\]\:bg-elevated\/25[data-dragging=true]{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.data-\[dragging\=true\]\:bg-elevated\/25[data-dragging=true]{background-color:color-mix(in oklab,var(--ui-bg-elevated) 25%,transparent)}}.data-\[expanded\=true\]\:h-\(--height\)[data-expanded=true]{height:var(--height)}:is(.data-\[front\=false\]\:\*\:transition-opacity[data-front=false]>*){transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}:is(.data-\[front\=false\]\:\*\:duration-100[data-front=false]>*){--tw-duration:.1s;transition-duration:.1s}.data-\[expanded\=false\]\:data-\[front\=false\]\:h-\(--front-height\)[data-expanded=false][data-front=false]{height:var(--front-height)}:is(.data-\[expanded\=false\]\:data-\[front\=false\]\:\*\:opacity-0[data-expanded=false][data-front=false]>*){opacity:0}.data-\[highlighted\]\:bg-error\/10[data-highlighted]{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-error\/10[data-highlighted]{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.data-\[highlighted\]\:bg-error\/20[data-highlighted]{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-error\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-error) 20%,transparent)}}.data-\[highlighted\]\:bg-info\/10[data-highlighted]{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-info\/10[data-highlighted]{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.data-\[highlighted\]\:bg-info\/20[data-highlighted]{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-info\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-info) 20%,transparent)}}.data-\[highlighted\]\:bg-inverted\/10[data-highlighted]{background-color:var(--ui-bg-inverted)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-inverted\/10[data-highlighted]{background-color:color-mix(in oklab,var(--ui-bg-inverted) 10%,transparent)}}.data-\[highlighted\]\:bg-inverted\/20[data-highlighted]{background-color:var(--ui-bg-inverted)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-inverted\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-bg-inverted) 20%,transparent)}}.data-\[highlighted\]\:bg-primary\/10[data-highlighted]{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-primary\/10[data-highlighted]{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.data-\[highlighted\]\:bg-primary\/20[data-highlighted]{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-primary\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-primary) 20%,transparent)}}.data-\[highlighted\]\:bg-secondary\/10[data-highlighted]{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-secondary\/10[data-highlighted]{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.data-\[highlighted\]\:bg-secondary\/20[data-highlighted]{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-secondary\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-secondary) 20%,transparent)}}.data-\[highlighted\]\:bg-success\/10[data-highlighted]{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-success\/10[data-highlighted]{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.data-\[highlighted\]\:bg-success\/20[data-highlighted]{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-success\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-success) 20%,transparent)}}.data-\[highlighted\]\:bg-warning\/10[data-highlighted]{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-warning\/10[data-highlighted]{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.data-\[highlighted\]\:bg-warning\/20[data-highlighted]{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.data-\[highlighted\]\:bg-warning\/20[data-highlighted]{background-color:color-mix(in oklab,var(--ui-warning) 20%,transparent)}}.data-\[motion\=from-end\]\:animate-\[enter-from-right_200ms_ease\][data-motion=from-end]{animation:enter-from-right .2s}.data-\[motion\=from-start\]\:animate-\[enter-from-left_200ms_ease\][data-motion=from-start]{animation:enter-from-left .2s}.data-\[motion\=to-end\]\:animate-\[exit-to-right_200ms_ease\][data-motion=to-end]{animation:exit-to-right .2s}.data-\[motion\=to-start\]\:animate-\[exit-to-left_200ms_ease\][data-motion=to-start]{animation:exit-to-left .2s}.data-\[outside-view\]\:text-muted[data-outside-view]{color:var(--ui-text-muted)}.data-\[segment\=day\]\:w-6[data-segment=day]{width:calc(var(--spacing)*6)}.data-\[segment\=day\]\:w-7[data-segment=day]{width:calc(var(--spacing)*7)}.data-\[segment\=day\]\:w-8[data-segment=day]{width:calc(var(--spacing)*8)}.data-\[segment\=literal\]\:text-muted[data-segment=literal]{color:var(--ui-text-muted)}.data-\[segment\=month\]\:w-6[data-segment=month]{width:calc(var(--spacing)*6)}.data-\[segment\=month\]\:w-7[data-segment=month]{width:calc(var(--spacing)*7)}.data-\[segment\=month\]\:w-8[data-segment=month]{width:calc(var(--spacing)*8)}.data-\[segment\=year\]\:w-9[data-segment=year]{width:calc(var(--spacing)*9)}.data-\[segment\=year\]\:w-11[data-segment=year]{width:calc(var(--spacing)*11)}.data-\[segment\=year\]\:w-13[data-segment=year]{width:calc(var(--spacing)*13)}.data-\[selected\]\:bg-default[data-selected]{background-color:var(--ui-bg)}.data-\[selected\]\:bg-elevated[data-selected]{background-color:var(--ui-bg-elevated)}.data-\[selected\]\:bg-error[data-selected],.data-\[selected\]\:bg-error\/10[data-selected]{background-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:bg-error\/10[data-selected]{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.data-\[selected\]\:bg-info[data-selected],.data-\[selected\]\:bg-info\/10[data-selected]{background-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:bg-info\/10[data-selected]{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.data-\[selected\]\:bg-inverted[data-selected]{background-color:var(--ui-bg-inverted)}.data-\[selected\]\:bg-primary[data-selected],.data-\[selected\]\:bg-primary\/10[data-selected]{background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:bg-primary\/10[data-selected]{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.data-\[selected\]\:bg-secondary[data-selected],.data-\[selected\]\:bg-secondary\/10[data-selected]{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:bg-secondary\/10[data-selected]{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.data-\[selected\]\:bg-success[data-selected],.data-\[selected\]\:bg-success\/10[data-selected]{background-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:bg-success\/10[data-selected]{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.data-\[selected\]\:bg-warning[data-selected],.data-\[selected\]\:bg-warning\/10[data-selected]{background-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:bg-warning\/10[data-selected]{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.data-\[selected\]\:text-default[data-selected]{color:var(--ui-text)}.data-\[selected\]\:text-error[data-selected]{color:var(--ui-error)}.data-\[selected\]\:text-info[data-selected]{color:var(--ui-info)}.data-\[selected\]\:text-inverted[data-selected]{color:var(--ui-text-inverted)}.data-\[selected\]\:text-primary[data-selected]{color:var(--ui-primary)}.data-\[selected\]\:text-secondary[data-selected]{color:var(--ui-secondary)}.data-\[selected\]\:text-success[data-selected]{color:var(--ui-success)}.data-\[selected\]\:text-warning[data-selected]{color:var(--ui-warning)}.data-\[selected\]\:ring[data-selected]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[selected\]\:ring-accented[data-selected]{--tw-ring-color:var(--ui-border-accented)}.data-\[selected\]\:ring-error\/25[data-selected]{--tw-ring-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-error\/25[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-error) 25%,transparent)}}.data-\[selected\]\:ring-error\/50[data-selected]{--tw-ring-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-error\/50[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-error) 50%,transparent)}}.data-\[selected\]\:ring-info\/25[data-selected]{--tw-ring-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-info\/25[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-info) 25%,transparent)}}.data-\[selected\]\:ring-info\/50[data-selected]{--tw-ring-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-info\/50[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-info) 50%,transparent)}}.data-\[selected\]\:ring-primary\/25[data-selected]{--tw-ring-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-primary\/25[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-primary) 25%,transparent)}}.data-\[selected\]\:ring-primary\/50[data-selected]{--tw-ring-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-primary\/50[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.data-\[selected\]\:ring-secondary\/25[data-selected]{--tw-ring-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-secondary\/25[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-secondary) 25%,transparent)}}.data-\[selected\]\:ring-secondary\/50[data-selected]{--tw-ring-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-secondary\/50[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-secondary) 50%,transparent)}}.data-\[selected\]\:ring-success\/25[data-selected]{--tw-ring-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-success\/25[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-success) 25%,transparent)}}.data-\[selected\]\:ring-success\/50[data-selected]{--tw-ring-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-success\/50[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-success) 50%,transparent)}}.data-\[selected\]\:ring-warning\/25[data-selected]{--tw-ring-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-warning\/25[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-warning) 25%,transparent)}}.data-\[selected\]\:ring-warning\/50[data-selected]{--tw-ring-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\]\:ring-warning\/50[data-selected]{--tw-ring-color:color-mix(in oklab,var(--ui-warning) 50%,transparent)}}.data-\[selected\]\:ring-inset[data-selected]{--tw-ring-inset:inset}.data-\[selected\=true\]\:bg-elevated\/50[data-selected=true]{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.data-\[selected\=true\]\:bg-elevated\/50[data-selected=true]{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}.data-\[state\=\\\"active\\\"\]\:bg-accented[data-state='"active"']{background-color:var(--ui-bg-accented)}.data-\[state\=active\]\:bg-inverted[data-state=active]{background-color:var(--ui-bg-inverted)}.data-\[state\=active\]\:text-error[data-state=active]{color:var(--ui-error)}.data-\[state\=active\]\:text-highlighted[data-state=active]{color:var(--ui-text-highlighted)}.data-\[state\=active\]\:text-info[data-state=active]{color:var(--ui-info)}.data-\[state\=active\]\:text-inverted[data-state=active]{color:var(--ui-text-inverted)}.data-\[state\=active\]\:text-primary[data-state=active]{color:var(--ui-primary)}.data-\[state\=active\]\:text-secondary[data-state=active]{color:var(--ui-secondary)}.data-\[state\=active\]\:text-success[data-state=active]{color:var(--ui-success)}.data-\[state\=active\]\:text-warning[data-state=active]{color:var(--ui-warning)}.data-\[state\=checked\]\:translate-x-3[data-state=checked]{--tw-translate-x:calc(var(--spacing)*3);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-3\.5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-4\.5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-error[data-state=checked]{background-color:var(--ui-error)}.data-\[state\=checked\]\:bg-info[data-state=checked]{background-color:var(--ui-info)}.data-\[state\=checked\]\:bg-inverted[data-state=checked]{background-color:var(--ui-bg-inverted)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--ui-primary)}.data-\[state\=checked\]\:bg-secondary[data-state=checked]{background-color:var(--ui-secondary)}.data-\[state\=checked\]\:bg-success[data-state=checked]{background-color:var(--ui-success)}.data-\[state\=checked\]\:bg-warning[data-state=checked]{background-color:var(--ui-warning)}.data-\[state\=closed\]\:animate-\[accordion-up_200ms_ease-out\][data-state=closed]{animation:accordion-up .2s ease-out}.data-\[state\=closed\]\:animate-\[collapsible-up_200ms_ease-out\][data-state=closed]{animation:collapsible-up .2s ease-out}.data-\[state\=closed\]\:animate-\[fade-out_200ms_ease-in\][data-state=closed]{animation:fade-out .2s ease-in}.data-\[state\=closed\]\:animate-\[scale-out_100ms_ease-in\][data-state=closed]{animation:scale-out .1s ease-in}.data-\[state\=closed\]\:animate-\[scale-out_200ms_ease-in\][data-state=closed]{animation:scale-out .2s ease-in}.data-\[state\=closed\]\:animate-\[slide-out-to-bottom_200ms_ease-in-out\][data-state=closed]{animation:slide-out-to-bottom .2s ease-in-out}.data-\[state\=closed\]\:animate-\[slide-out-to-left_200ms_ease-in-out\][data-state=closed]{animation:slide-out-to-left .2s ease-in-out}.data-\[state\=closed\]\:animate-\[slide-out-to-right_200ms_ease-in-out\][data-state=closed]{animation:slide-out-to-right .2s ease-in-out}.data-\[state\=closed\]\:animate-\[slide-out-to-top_200ms_ease-in-out\][data-state=closed]{animation:slide-out-to-top .2s ease-in-out}.data-\[state\=closed\]\:animate-\[toast-closed_200ms_ease-in-out\][data-state=closed]{animation:toast-closed .2s ease-in-out}.data-\[state\=closed\]\:data-\[expanded\=false\]\:data-\[front\=false\]\:animate-\[toast-collapsed-closed_200ms_ease-in-out\][data-state=closed][data-expanded=false][data-front=false]{animation:toast-collapsed-closed .2s ease-in-out}.data-\[state\=collapsed\]\:-right-\(--sidebar-width\)[data-state=collapsed]{right:calc(var(--sidebar-width)*-1)}.data-\[state\=collapsed\]\:-left-\(--sidebar-width\)[data-state=collapsed]{left:calc(var(--sidebar-width)*-1)}.data-\[state\=collapsed\]\:w-\(--sidebar-width-icon\)[data-state=collapsed]{width:var(--sidebar-width-icon)}.data-\[state\=collapsed\]\:w-0[data-state=collapsed]{width:calc(var(--spacing)*0)}.data-\[state\=collapsed\]\:w-\[calc\(var\(--sidebar-width-icon\)\+--spacing\(8\)\)\][data-state=collapsed]{width:calc(var(--sidebar-width-icon) + var(--spacing)*8)}.data-\[state\=collapsed\]\:w-\[calc\(var\(--sidebar-width-icon\)\+--spacing\(8\)\+2px\)\][data-state=collapsed]{width:calc(var(--sidebar-width-icon) + var(--spacing)*8 + 2px)}.data-\[state\=collapsed\]\:cursor-e-resize[data-state=collapsed]{cursor:e-resize}.data-\[state\=collapsed\]\:cursor-w-resize[data-state=collapsed]{cursor:w-resize}.data-\[state\=delayed-open\]\:animate-\[scale-in_100ms_ease-out\][data-state=delayed-open]{animation:scale-in .1s ease-out}.data-\[state\=hidden\]\:animate-\[fade-out_100ms_ease-in\][data-state=hidden]{animation:fade-out .1s ease-in}.data-\[state\=hidden\]\:opacity-0[data-state=hidden]{opacity:0}.data-\[state\=inactive\]\:text-muted[data-state=inactive]{color:var(--ui-text-muted)}@media(hover:hover){.hover\:data-\[state\=inactive\]\:not-disabled\:text-default:hover[data-state=inactive]:not(:disabled){color:var(--ui-text)}}.data-\[state\=indeterminate\]\:animate-\[carousel-inverse-vertical_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:carousel-inverse-vertical 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[carousel-inverse_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:carousel-inverse 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[carousel-vertical_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:carousel-vertical 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[carousel_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:carousel 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[elastic-vertical_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:elastic-vertical 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[elastic_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:elastic 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[swing-vertical_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:swing-vertical 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:animate-\[swing_2s_ease-in-out_infinite\][data-state=indeterminate]{animation:swing 2s ease-in-out infinite}.data-\[state\=open\]\:mb-1\.5[data-state=open]{margin-bottom:calc(var(--spacing)*1.5)}.data-\[state\=open\]\:animate-\[accordion-down_200ms_ease-out\][data-state=open]{animation:accordion-down .2s ease-out}.data-\[state\=open\]\:animate-\[collapsible-down_200ms_ease-out\][data-state=open]{animation:collapsible-down .2s ease-out}.data-\[state\=open\]\:animate-\[fade-in_200ms_ease-out\][data-state=open]{animation:fade-in .2s ease-out}.data-\[state\=open\]\:animate-\[scale-in_100ms_ease-out\][data-state=open]{animation:scale-in .1s ease-out}.data-\[state\=open\]\:animate-\[scale-in_200ms_ease-out\][data-state=open]{animation:scale-in .2s ease-out}.data-\[state\=open\]\:animate-\[slide-in-from-bottom_200ms_ease-in-out\][data-state=open]{animation:slide-in-from-bottom .2s ease-in-out}.data-\[state\=open\]\:animate-\[slide-in-from-left_200ms_ease-in-out\][data-state=open]{animation:slide-in-from-left .2s ease-in-out}.data-\[state\=open\]\:animate-\[slide-in-from-right_200ms_ease-in-out\][data-state=open]{animation:slide-in-from-right .2s ease-in-out}.data-\[state\=open\]\:animate-\[slide-in-from-top_200ms_ease-in-out\][data-state=open]{animation:slide-in-from-top .2s ease-in-out}.data-\[state\=open\]\:animate-\[toast-slide-in-from-bottom_200ms_ease-in-out\][data-state=open]{animation:toast-slide-in-from-bottom .2s ease-in-out}.data-\[state\=open\]\:animate-\[toast-slide-in-from-top_200ms_ease-in-out\][data-state=open]{animation:toast-slide-in-from-top .2s ease-in-out}.data-\[state\=open\]\:text-highlighted[data-state=open]{color:var(--ui-text-highlighted)}.data-\[state\=open\]\:before\:bg-elevated\/50[data-state=open]:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-elevated\/50[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}.data-\[state\=open\]\:before\:bg-error\/10[data-state=open]:before{background-color:var(--ui-error);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-error\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-error) 10%,transparent)}}.data-\[state\=open\]\:before\:bg-info\/10[data-state=open]:before{background-color:var(--ui-info);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-info\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-info) 10%,transparent)}}.data-\[state\=open\]\:before\:bg-primary\/10[data-state=open]:before{background-color:var(--ui-primary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-primary\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-primary) 10%,transparent)}}.data-\[state\=open\]\:before\:bg-secondary\/10[data-state=open]:before{background-color:var(--ui-secondary);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-secondary\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-secondary) 10%,transparent)}}.data-\[state\=open\]\:before\:bg-success\/10[data-state=open]:before{background-color:var(--ui-success);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-success\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-success) 10%,transparent)}}.data-\[state\=open\]\:before\:bg-warning\/10[data-state=open]:before{background-color:var(--ui-warning);content:var(--tw-content)}@supports (color:color-mix(in lab,red,red)){.data-\[state\=open\]\:before\:bg-warning\/10[data-state=open]:before{background-color:color-mix(in oklab,var(--ui-warning) 10%,transparent)}}.data-\[state\=open\]\:data-\[pulsing\=even\]\:animate-\[toast-pulse-b_300ms_ease-out\][data-state=open][data-pulsing=even]{animation:toast-pulse-b .3s ease-out}.data-\[state\=open\]\:data-\[pulsing\=odd\]\:animate-\[toast-pulse-a_300ms_ease-out\][data-state=open][data-pulsing=odd]{animation:toast-pulse-a .3s ease-out}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-accented[data-state=unchecked]{background-color:var(--ui-bg-accented)}.data-\[state\=visible\]\:animate-\[fade-in_100ms_ease-out\][data-state=visible]{animation:fade-in .1s ease-out}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=cancel\]\:translate-y-0[data-swipe=cancel]{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\(--reka-toast-swipe-end-x\)[data-swipe=end]{--tw-translate-x:var(--reka-toast-swipe-end-x);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-y-\(--reka-toast-swipe-end-y\)[data-swipe=end]{--tw-translate-y:var(--reka-toast-swipe-end-y);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=end\]\:animate-\[toast-slide-down_200ms_ease-out\][data-swipe=end]{animation:toast-slide-down .2s ease-out}.data-\[swipe\=end\]\:animate-\[toast-slide-left_200ms_ease-out\][data-swipe=end]{animation:toast-slide-left .2s ease-out}.data-\[swipe\=end\]\:animate-\[toast-slide-right_200ms_ease-out\][data-swipe=end]{animation:toast-slide-right .2s ease-out}.data-\[swipe\=end\]\:animate-\[toast-slide-up_200ms_ease-out\][data-swipe=end]{animation:toast-slide-up .2s ease-out}.data-\[swipe\=move\]\:translate-x-\(--reka-toast-swipe-move-x\)[data-swipe=move]{--tw-translate-x:var(--reka-toast-swipe-move-x);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-y-\(--reka-toast-swipe-move-y\)[data-swipe=move]{--tw-translate-y:var(--reka-toast-swipe-move-y);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media(min-width:40rem){.sm\:-start-12{inset-inline-start:calc(var(--spacing)*-12)}.sm\:-end-12{inset-inline-end:calc(var(--spacing)*-12)}.sm\:-top-12{top:calc(var(--spacing)*-12)}.sm\:-bottom-12{bottom:calc(var(--spacing)*-12)}.sm\:-mx-6{margin-inline:calc(var(--spacing)*-6)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:h-\[28rem\]{height:28rem}.sm\:max-h-\[calc\(100dvh-4rem\)\]{max-height:calc(100dvh - 4rem)}.sm\:w-\(--reka-navigation-menu-viewport-width\){width:var(--reka-navigation-menu-viewport-width)}.sm\:w-96{width:calc(var(--spacing)*96)}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:max-w-96{max-width:calc(var(--spacing)*96)}.sm\:scroll-mt-6{scroll-margin-top:calc(var(--spacing)*6)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-16{gap:calc(var(--spacing)*16)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*0*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*0*var(--tw-space-y-reverse))}:where(.sm\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}.sm\:gap-y-12{row-gap:calc(var(--spacing)*12)}.sm\:gap-y-24{row-gap:calc(var(--spacing)*24)}.sm\:p-0{padding:calc(var(--spacing)*0)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-8{padding-inline:calc(var(--spacing)*8)}.sm\:px-12{padding-inline:calc(var(--spacing)*12)}.sm\:px-80{padding-inline:calc(var(--spacing)*80)}.sm\:py-8{padding-block:calc(var(--spacing)*8)}.sm\:py-24{padding-block:calc(var(--spacing)*24)}.sm\:py-32{padding-block:calc(var(--spacing)*32)}.sm\:pt-6{padding-top:calc(var(--spacing)*6)}.sm\:pb-4\.5{padding-bottom:calc(var(--spacing)*4.5)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.sm\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-xl\/8{font-size:var(--text-xl);line-height:calc(var(--spacing)*8)}.sm\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.sm\:ring,.sm\:shadow-lg{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.sm\:ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}}@media(min-width:48rem){.md\:hidden{display:none}.md\:table{display:table}.md\:columns-2{-moz-columns:2;column-count:2}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-\(--ui-header-height\){top:var(--ui-header-height)}.lg\:z-\[1\]{z-index:1}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-3{order:3}.lg\:order-last{order:9999}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:mx-auto{margin-inline:auto}.lg\:-ms-2{margin-inline-start:calc(var(--spacing)*-2)}.lg\:-ms-4{margin-inline-start:calc(var(--spacing)*-4)}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:me-0{margin-inline-end:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-12{margin-top:calc(var(--spacing)*12)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-flex{display:inline-flex}.lg\:h-\[450px\]{height:450px}.lg\:max-h-\[calc\(100vh-var\(--ui-header-height\)\)\]{max-height:calc(100vh - var(--ui-header-height))}.lg\:w-\(--width\){width:var(--width)}.lg\:w-full{width:100%}.lg\:max-w-xs{max-width:var(--container-xs)}.lg\:flex-1{flex:1}.lg\:scale-\[1\.1\]{scale:1.1}.lg\:scroll-mt-\(--ui-header-height\){scroll-margin-top:var(--ui-header-height)}.lg\:scroll-mt-\[calc\(24px\+var\(--ui-header-height\)\)\]{scroll-margin-top:calc(24px + var(--ui-header-height))}.lg\:scroll-mt-\[calc\(32px\+var\(--ui-header-height\)\)\]{scroll-margin-top:calc(32px + var(--ui-header-height))}.lg\:scroll-mt-\[calc\(48px\+var\(--ui-header-height\)\)\]{scroll-margin-top:calc(48px + var(--ui-header-height))}.lg\:columns-3{-moz-columns:3;column-count:3}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-\[repeat\(var\(--count\)\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(var(--count),minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:justify-start{justify-content:flex-start}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-x-3{-moz-column-gap:calc(var(--spacing)*3);column-gap:calc(var(--spacing)*3)}.lg\:gap-x-13{-moz-column-gap:calc(var(--spacing)*13);column-gap:calc(var(--spacing)*13)}.lg\:gap-y-16{row-gap:calc(var(--spacing)*16)}:where(.lg\:divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style)}:where(.lg\:divide-y-0>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.lg\:border-0{border-style:var(--tw-border-style);border-width:0}.lg\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.lg\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.lg\:bg-\[initial\]{background-color:initial}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:px-16{padding-inline:calc(var(--spacing)*16)}.lg\:py-4{padding-block:calc(var(--spacing)*4)}.lg\:py-8{padding-block:calc(var(--spacing)*8)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:py-40{padding-block:calc(var(--spacing)*40)}.lg\:ps-2{padding-inline-start:calc(var(--spacing)*2)}.lg\:ps-4{padding-inline-start:calc(var(--spacing)*4)}.lg\:pe-6\.5{padding-inline-end:calc(var(--spacing)*6.5)}.lg\:pr-6{padding-right:calc(var(--spacing)*6)}.lg\:pb-0{padding-bottom:calc(var(--spacing)*0)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:opacity-0{opacity:0}.lg\:not-last\:border-e:not(:last-child){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.lg\:not-last\:border-default:not(:last-child){border-color:var(--ui-border)}@media(hover:hover){.lg\:group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}}@media(min-width:80rem){.xl\:col-span-2{grid-column:span 2/span 2}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:mb-0{margin-bottom:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:p-10{padding:calc(var(--spacing)*10)}}.rtl\:right-\[calc\(100\%-var\(--reka-navigation-menu-viewport-left\)-var\(--reka-navigation-menu-viewport-width\)\)\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){right:calc(100% - var(--reka-navigation-menu-viewport-left) - var(--reka-navigation-menu-viewport-width))}.rtl\:left-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:auto}.rtl\:translate-x-\[4px\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:4px;translate:var(--tw-translate-x) var(--tw-translate-y)}.rtl\:-scale-x-100:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-scale-x:-100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rtl\:-rotate-90:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-90deg}.rtl\:animate-\[marquee-rtl_var\(--duration\)_linear_infinite\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){animation:marquee-rtl var(--duration) linear infinite}.rtl\:animate-\[marquee-vertical-rtl_var\(--duration\)_linear_infinite\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){animation:marquee-vertical-rtl var(--duration) linear infinite}.rtl\:animate-\[shimmer-rtl_var\(--duration\)_linear_infinite\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){animation:shimmer-rtl var(--duration) linear infinite}.rtl\:text-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}.rtl\:after\:animate-\[carousel-inverse-rtl_2s_ease-in-out_infinite\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *):after{animation:carousel-inverse-rtl 2s ease-in-out infinite;content:var(--tw-content)}.rtl\:after\:animate-\[carousel-rtl_2s_ease-in-out_infinite\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *):after{animation:carousel-rtl 2s ease-in-out infinite;content:var(--tw-content)}.data-\[state\=checked\]\:rtl\:-translate-x-3[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-3);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:rtl\:-translate-x-3\.5[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-3.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:rtl\:-translate-x-4[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:rtl\:-translate-x-4\.5[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-4.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:rtl\:-translate-x-5[data-state=checked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=indeterminate\]\:rtl\:animate-\[carousel-inverse-rtl_2s_ease-in-out_infinite\][data-state=indeterminate]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){animation:carousel-inverse-rtl 2s ease-in-out infinite}.data-\[state\=indeterminate\]\:rtl\:animate-\[carousel-rtl_2s_ease-in-out_infinite\][data-state=indeterminate]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){animation:carousel-rtl 2s ease-in-out infinite}.data-\[state\=unchecked\]\:rtl\:-translate-x-0[data-state=unchecked]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x) var(--tw-translate-y)}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:inline-block:where(.dark,.dark *){display:inline-block}.dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--ui-color-neutral-800)}.dark\:text-error-300:where(.dark,.dark *){color:var(--ui-color-error-300)}.dark\:text-info-300:where(.dark,.dark *){color:var(--ui-color-info-300)}.dark\:text-primary-300:where(.dark,.dark *){color:var(--ui-color-primary-300)}.dark\:text-secondary-300:where(.dark,.dark *){color:var(--ui-color-secondary-300)}.dark\:text-success-300:where(.dark,.dark *){color:var(--ui-color-success-300)}.dark\:text-warning-300:where(.dark,.dark *){color:var(--ui-color-warning-300)}.dark\:focus-visible\:outline-none:where(.dark,.dark *):focus-visible{--tw-outline-style:none;outline-style:none}.dark\:disabled\:bg-transparent:where(.dark,.dark *):disabled{background-color:#0000}@media(hover:hover){.dark\:hover\:disabled\:bg-transparent:where(.dark,.dark *):hover:disabled{background-color:#0000}}.dark\:aria-disabled\:bg-transparent:where(.dark,.dark *)[aria-disabled=true]{background-color:#0000}@media(hover:hover){.dark\:hover\:aria-disabled\:bg-transparent:where(.dark,.dark *):hover[aria-disabled=true]{background-color:#0000}}.\[\&_\.ProseMirror-selectednode\:not\(img\)\:not\(pre\)\:not\(\[data-node-view-wrapper\]\)\]\:bg-primary\/20 .ProseMirror-selectednode:not(img):not(pre):not([data-node-view-wrapper]){background-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.\[\&_\.ProseMirror-selectednode\:not\(img\)\:not\(pre\)\:not\(\[data-node-view-wrapper\]\)\]\:bg-primary\/20 .ProseMirror-selectednode:not(img):not(pre):not([data-node-view-wrapper]){background-color:color-mix(in oklab,var(--ui-primary) 20%,transparent)}}.\[\&_\.iconify\]\:mx-0\.5 .iconify{margin-inline:calc(var(--spacing)*.5)}.\[\&_\.iconify\]\:size-4 .iconify{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.\[\&_\.mention\]\:font-medium .mention{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\.mention\]\:text-primary .mention{color:var(--ui-primary)}.\[\&_\:is\(h1\,h2\,h3\,h4\,h5\,h6\)\]\:font-bold :is(h1,h2,h3,h4,h5,h6){--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_\:is\(h1\,h2\,h3\,h4\,h5\,h6\)\]\:text-highlighted :is(h1,h2,h3,h4,h5,h6){color:var(--ui-text-highlighted)}.\[\&_\:is\(h1\,h2\,h3\,h4\,h5\,h6\)\>code\]\:border-dashed :is(h1,h2,h3,h4,h5,h6)>code{--tw-border-style:dashed;border-style:dashed}.\[\&_\:is\(h1\,h2\,h3\,h4\,h5\,h6\)\>code\]\:font-bold :is(h1,h2,h3,h4,h5,h6)>code{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-editor-empty\:first-child\]\:before\:pointer-events-none :is(p,h1,h2,h3,h4,h5,h6).is-editor-empty:first-child:before{content:var(--tw-content);pointer-events:none}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-editor-empty\:first-child\]\:before\:float-start :is(p,h1,h2,h3,h4,h5,h6).is-editor-empty:first-child:before{content:var(--tw-content);float:inline-start}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-editor-empty\:first-child\]\:before\:h-0 :is(p,h1,h2,h3,h4,h5,h6).is-editor-empty:first-child:before{content:var(--tw-content);height:calc(var(--spacing)*0)}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-editor-empty\:first-child\]\:before\:text-dimmed :is(p,h1,h2,h3,h4,h5,h6).is-editor-empty:first-child:before{color:var(--ui-text-dimmed);content:var(--tw-content)}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-editor-empty\:first-child\]\:before\:content-\[attr\(data-placeholder\)\] :is(p,h1,h2,h3,h4,h5,h6).is-editor-empty:first-child:before{--tw-content:attr(data-placeholder);content:var(--tw-content)}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-empty\]\:before\:pointer-events-none :is(p,h1,h2,h3,h4,h5,h6).is-empty:before{content:var(--tw-content);pointer-events:none}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-empty\]\:before\:float-start :is(p,h1,h2,h3,h4,h5,h6).is-empty:before{content:var(--tw-content);float:inline-start}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-empty\]\:before\:h-0 :is(p,h1,h2,h3,h4,h5,h6).is-empty:before{content:var(--tw-content);height:calc(var(--spacing)*0)}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-empty\]\:before\:text-dimmed :is(p,h1,h2,h3,h4,h5,h6).is-empty:before{color:var(--ui-text-dimmed);content:var(--tw-content)}.\[\&_\:is\(p\,h1\,h2\,h3\,h4\,h5\,h6\)\.is-empty\]\:before\:content-\[attr\(data-placeholder\)\] :is(p,h1,h2,h3,h4,h5,h6).is-empty:before{--tw-content:attr(data-placeholder);content:var(--tw-content)}.\[\&_\:is\(ul\,ol\)\]\:ps-6 :is(ul,ol){padding-inline-start:calc(var(--spacing)*6)}.\[\&_\[data-type\=horizontalRule\]\]\:my-8 [data-type=horizontalRule]{margin-block:calc(var(--spacing)*8)}.\[\&_\[data-type\=horizontalRule\]\]\:py-2 [data-type=horizontalRule]{padding-block:calc(var(--spacing)*2)}.\[\&_a\]\:border-b a{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_a\]\:border-transparent a{border-color:#0000}.\[\&_a\]\:font-medium a{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_a\]\:text-error a{color:var(--ui-error)}.\[\&_a\]\:text-info a{color:var(--ui-info)}.\[\&_a\]\:text-primary a{color:var(--ui-primary)}.\[\&_a\]\:text-secondary a{color:var(--ui-secondary)}.\[\&_a\]\:text-success a{color:var(--ui-success)}.\[\&_a\]\:text-warning a{color:var(--ui-warning)}.\[\&_a\]\:transition-colors a{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}@media(hover:hover){.\[\&_a\]\:hover\:border-error a:hover{border-color:var(--ui-error)}.\[\&_a\]\:hover\:border-info a:hover{border-color:var(--ui-info)}.\[\&_a\]\:hover\:border-primary a:hover{border-color:var(--ui-primary)}.\[\&_a\]\:hover\:border-secondary a:hover{border-color:var(--ui-secondary)}.\[\&_a\]\:hover\:border-success a:hover{border-color:var(--ui-success)}.\[\&_a\]\:hover\:border-warning a:hover{border-color:var(--ui-warning)}}.\[\&_a\]\:focus-visible\:outline-error a:focus-visible{outline-color:var(--ui-error)}.\[\&_a\]\:focus-visible\:outline-info a:focus-visible{outline-color:var(--ui-info)}.\[\&_a\]\:focus-visible\:outline-primary a:focus-visible{outline-color:var(--ui-primary)}.\[\&_a\]\:focus-visible\:outline-secondary a:focus-visible{outline-color:var(--ui-secondary)}.\[\&_a\]\:focus-visible\:outline-success a:focus-visible{outline-color:var(--ui-success)}.\[\&_a\]\:focus-visible\:outline-warning a:focus-visible{outline-color:var(--ui-warning)}.\[\&_a\:hover\>code\]\:border-primary a:hover>code{border-color:var(--ui-primary)}.\[\&_a\:hover\>code\]\:text-primary a:hover>code{color:var(--ui-primary)}.\[\&_a\>code\]\:border-dashed a>code{--tw-border-style:dashed;border-style:dashed}.\[\&_a\>code\]\:transition-colors a>code{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.\[\&_blockquote\]\:border-s-4 blockquote{border-inline-start-style:var(--tw-border-style);border-inline-start-width:4px}.\[\&_blockquote\]\:border-accented blockquote{border-color:var(--ui-border-accented)}.\[\&_blockquote\]\:ps-4 blockquote{padding-inline-start:calc(var(--spacing)*4)}.\[\&_blockquote\]\:italic blockquote{font-style:italic}.\[\&_code\]\:inline-block code{display:inline-block}.\[\&_code\]\:rounded-md code{border-radius:calc(var(--ui-radius)*1.5)}.\[\&_code\]\:border code{border-style:var(--tw-border-style);border-width:1px}.\[\&_code\]\:border-error\/25 code{border-color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.\[\&_code\]\:border-error\/25 code{border-color:color-mix(in oklab,var(--ui-error) 25%,transparent)}}.\[\&_code\]\:border-info\/25 code{border-color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.\[\&_code\]\:border-info\/25 code{border-color:color-mix(in oklab,var(--ui-info) 25%,transparent)}}.\[\&_code\]\:border-muted code{border-color:var(--ui-border-muted)}.\[\&_code\]\:border-primary\/25 code{border-color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.\[\&_code\]\:border-primary\/25 code{border-color:color-mix(in oklab,var(--ui-primary) 25%,transparent)}}.\[\&_code\]\:border-secondary\/25 code{border-color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.\[\&_code\]\:border-secondary\/25 code{border-color:color-mix(in oklab,var(--ui-secondary) 25%,transparent)}}.\[\&_code\]\:border-success\/25 code{border-color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.\[\&_code\]\:border-success\/25 code{border-color:color-mix(in oklab,var(--ui-success) 25%,transparent)}}.\[\&_code\]\:border-warning\/25 code{border-color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.\[\&_code\]\:border-warning\/25 code{border-color:color-mix(in oklab,var(--ui-warning) 25%,transparent)}}.\[\&_code\]\:bg-default code{background-color:var(--ui-bg)}.\[\&_code\]\:bg-muted code{background-color:var(--ui-bg-muted)}.\[\&_code\]\:px-1\.5 code{padding-inline:calc(var(--spacing)*1.5)}.\[\&_code\]\:py-0\.5 code{padding-block:calc(var(--spacing)*.5)}.\[\&_code\]\:font-mono code{font-family:var(--font-mono)}.\[\&_code\]\:text-sm code{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_code\]\:text-xs\/4 code{font-size:var(--text-xs);line-height:calc(var(--spacing)*4)}.\[\&_code\]\:text-xs\/5 code{font-size:var(--text-xs);line-height:calc(var(--spacing)*5)}.\[\&_code\]\:font-medium code{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_code\]\:text-error-600 code{color:var(--ui-color-error-600)}.\[\&_code\]\:text-highlighted code{color:var(--ui-text-highlighted)}.\[\&_code\]\:text-info-600 code{color:var(--ui-color-info-600)}.\[\&_code\]\:text-primary-600 code{color:var(--ui-color-primary-600)}.\[\&_code\]\:text-secondary-600 code{color:var(--ui-color-secondary-600)}.\[\&_code\]\:text-success-600 code{color:var(--ui-color-success-600)}.\[\&_code\]\:text-warning-600 code{color:var(--ui-color-warning-600)}.dark\:\[\&_code\]\:text-error-300:where(.dark,.dark *) code{color:var(--ui-color-error-300)}.dark\:\[\&_code\]\:text-info-300:where(.dark,.dark *) code{color:var(--ui-color-info-300)}.dark\:\[\&_code\]\:text-primary-300:where(.dark,.dark *) code{color:var(--ui-color-primary-300)}.dark\:\[\&_code\]\:text-secondary-300:where(.dark,.dark *) code{color:var(--ui-color-secondary-300)}.dark\:\[\&_code\]\:text-success-300:where(.dark,.dark *) code{color:var(--ui-color-success-300)}.dark\:\[\&_code\]\:text-warning-300:where(.dark,.dark *) code{color:var(--ui-color-warning-300)}.\[\&_h1\]\:text-3xl h1{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.\[\&_h2\]\:text-2xl h2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.\[\&_h2\>code\]\:text-xl\/6 h2>code{font-size:var(--text-xl);line-height:calc(var(--spacing)*6)}.\[\&_h3\]\:text-xl h3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\[\&_h3\>code\]\:text-lg\/5 h3>code{font-size:var(--text-lg);line-height:calc(var(--spacing)*5)}.\[\&_h4\]\:text-lg h4{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.\[\&_h5\]\:text-base h5,.\[\&_h6\]\:text-base h6{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_hr\]\:border-t hr{border-top-style:var(--tw-border-style);border-top-width:1px}.\[\&_hr\]\:border-default hr{border-color:var(--ui-border)}.\[\&_img\]\:block img{display:block}.\[\&_img\]\:max-w-full img{max-width:100%}.\[\&_img\]\:rounded-md img{border-radius:calc(var(--ui-radius)*1.5)}.\[\&_img\.ProseMirror-selectednode\]\:outline-2 img.ProseMirror-selectednode{outline-style:var(--tw-outline-style);outline-width:2px}.\[\&_img\.ProseMirror-selectednode\]\:outline-primary img.ProseMirror-selectednode{outline-color:var(--ui-primary)}.\[\&_li\]\:my-0 li{margin-block:calc(var(--spacing)*0)}.\[\&_li\]\:my-0\.5 li{margin-block:calc(var(--spacing)*.5)}.\[\&_li\]\:my-1\.5 li{margin-block:calc(var(--spacing)*1.5)}.\[\&_li\]\:ps-1\.5 li{padding-inline-start:calc(var(--spacing)*1.5)}.\[\&_li\]\:leading-6 li{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.\[\&_ol\]\:my-0 ol{margin-block:calc(var(--spacing)*0)}.\[\&_ol\]\:my-2\.5 ol{margin-block:calc(var(--spacing)*2.5)}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_ol\]\:ps-4\.5 ol{padding-inline-start:calc(var(--spacing)*4.5)}.\[\&_ol\]\:marker\:text-muted ol ::marker{color:var(--ui-text-muted)}.\[\&_ol\]\:marker\:text-muted ol::marker{color:var(--ui-text-muted)}.\[\&_ol\]\:marker\:text-muted ol ::-webkit-details-marker,.\[\&_ol\]\:marker\:text-muted ol::-webkit-details-marker{color:var(--ui-text-muted)}.\[\&_p\]\:my-0 p{margin-block:calc(var(--spacing)*0)}.\[\&_p\]\:leading-6 p{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.\[\&_p\]\:leading-7 p{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.\[\&_pre\]\:h-\[200px\] pre{height:200px}.\[\&_pre\]\:h-auto pre{height:auto}.\[\&_pre\]\:max-h-\[80vh\] pre{max-height:80vh}.\[\&_pre\]\:min-h-\[200px\] pre{min-height:200px}.\[\&_pre\]\:overflow-hidden pre{overflow:hidden}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_pre\]\:rounded-md pre{border-radius:calc(var(--ui-radius)*1.5)}.\[\&_pre\]\:border pre{border-style:var(--tw-border-style);border-width:1px}.\[\&_pre\]\:border-muted pre{border-color:var(--ui-border-muted)}.\[\&_pre\]\:bg-default pre{background-color:var(--ui-bg)}.\[\&_pre\]\:bg-muted pre{background-color:var(--ui-bg-muted)}.\[\&_pre\]\:px-4 pre{padding-inline:calc(var(--spacing)*4)}.\[\&_pre\]\:py-3 pre{padding-block:calc(var(--spacing)*3)}.\[\&_pre\]\:pb-12 pre{padding-bottom:calc(var(--spacing)*12)}.\[\&_pre\]\:text-sm\/6 pre{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.\[\&_pre\]\:break-words pre{overflow-wrap:break-word}.\[\&_pre\]\:whitespace-pre-wrap pre{white-space:pre-wrap}.\[\&_pre_code\]\:inline pre code{display:inline}.\[\&_pre_code\]\:rounded-none pre code{border-radius:0}.\[\&_pre_code\]\:border-0 pre code{border-style:var(--tw-border-style);border-width:0}.\[\&_pre_code\]\:bg-transparent pre code{background-color:#0000}.\[\&_pre_code\]\:p-0 pre code{padding:calc(var(--spacing)*0)}.\[\&_pre_code\]\:text-inherit pre code{color:inherit}.\[\&_ul\]\:my-0 ul{margin-block:calc(var(--spacing)*0)}.\[\&_ul\]\:my-2\.5 ul{margin-block:calc(var(--spacing)*2.5)}.\[\&_ul\]\:list-disc ul{list-style-type:disc}.\[\&_ul\]\:ps-4\.5 ul{padding-inline-start:calc(var(--spacing)*4.5)}.\[\&_ul\]\:marker\:text-\(--ui-border-accented\) ul ::marker{color:var(--ui-border-accented)}.\[\&_ul\]\:marker\:text-\(--ui-border-accented\) ul::marker{color:var(--ui-border-accented)}.\[\&_ul\]\:marker\:text-\(--ui-border-accented\) ul ::-webkit-details-marker,.\[\&_ul\]\:marker\:text-\(--ui-border-accented\) ul::-webkit-details-marker{color:var(--ui-border-accented)}.\[\&\:first-child\>th\:first-child\]\:rounded-tl-md:first-child>th:first-child{border-top-left-radius:calc(var(--ui-radius)*1.5)}.\[\&\:first-child\>th\:last-child\]\:rounded-tr-md:first-child>th:last-child{border-top-right-radius:calc(var(--ui-radius)*1.5)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pe-0:has([role=checkbox]){padding-inline-end:calc(var(--spacing)*0)}:is(.\*\*\:\[\.line\]\:block *).line{display:block}:is(.\*\*\:\[\.line\.highlight\]\:-mx-4 *).line.highlight{margin-inline:calc(var(--spacing)*-4)}:is(.\*\*\:\[\.line\.highlight\]\:bg-accented\/50\! *).line.highlight{background-color:var(--ui-bg-accented)!important}@supports (color:color-mix(in lab,red,red)){:is(.\*\*\:\[\.line\.highlight\]\:bg-accented\/50\! *).line.highlight{background-color:color-mix(in oklab,var(--ui-bg-accented) 50%,transparent)!important}}:is(.\*\*\:\[\.line\.highlight\]\:px-4 *).line.highlight{padding-inline:calc(var(--spacing)*4)}.\[\&\:last-child\>td\:first-child\]\:rounded-bl-md:last-child>td:first-child{border-bottom-left-radius:calc(var(--ui-radius)*1.5)}.\[\&\:last-child\>td\:last-child\]\:rounded-br-md:last-child>td:last-child{border-bottom-right-radius:calc(var(--ui-radius)*1.5)}.\[\&\>\*\]\:last\:\!mb-0>:last-child{margin-bottom:calc(var(--spacing)*0)!important}.\[\&\>\*\:first-child\]\:col-start-2>:first-child{grid-column-start:2}.\[\&\>\*\:nth-child\(1\)\]\:animate-\[bounce_1s_infinite\]>:first-child{animation:bounce 1s infinite}.\[\&\>\*\:nth-child\(2\)\]\:animate-\[bounce_1s_0\.15s_infinite\]>:nth-child(2){animation:bounce 1s .15s infinite}.\[\&\>\*\:nth-child\(3\)\]\:animate-\[bounce_1s_0\.3s_infinite\]>:nth-child(3){animation:bounce 1s .3s infinite}.\[\&\>a\]\:focus-visible\:outline-primary>a:focus-visible{outline-color:var(--ui-primary)}.\[\&\>a\>code\]\:border-dashed>a>code{--tw-border-style:dashed;border-style:dashed}.\[\&\>a\>code\]\:text-lg\/6>a>code{font-size:var(--text-lg);line-height:calc(var(--spacing)*6)}.\[\&\>a\>code\]\:text-xl\/7>a>code{font-size:var(--text-xl);line-height:calc(var(--spacing)*7)}.\[\&\>a\>code\]\:font-bold>a>code{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&\>a\>code\]\:transition-colors>a>code{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}@media(hover:hover){.hover\:\[\&\>a\>code\]\:border-primary:hover>a>code{border-color:var(--ui-primary)}.hover\:\[\&\>a\>code\]\:text-primary:hover>a>code{color:var(--ui-primary)}}.\[\&\>article\]\:last-of-type\:min-h-\(--last-message-height\)>article:last-of-type{min-height:var(--last-message-height)}.\[\&\>button\]\:py-0>button{padding-block:calc(var(--spacing)*0)}.\[\&\>code\]\:border-dashed>code{--tw-border-style:dashed;border-style:dashed}.\[\&\>code\]\:transition-colors>code{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}@media(hover:hover){.hover\:\[\&\>code\]\:border-primary:hover>code{border-color:var(--ui-primary)}.hover\:\[\&\>code\]\:text-primary:hover>code{color:var(--ui-primary)}}.focus-visible\:\[\&\>code\]\:border-primary:focus-visible>code{border-color:var(--ui-primary)}.focus-visible\:\[\&\>code\]\:text-primary:focus-visible>code{color:var(--ui-primary)}@media(hover:hover){.\[\&_a\]\:hover\:\[\&\>code\]\:border-error a:hover>code{border-color:var(--ui-error)}.\[\&_a\]\:hover\:\[\&\>code\]\:border-info a:hover>code{border-color:var(--ui-info)}.\[\&_a\]\:hover\:\[\&\>code\]\:border-primary a:hover>code{border-color:var(--ui-primary)}.\[\&_a\]\:hover\:\[\&\>code\]\:border-secondary a:hover>code{border-color:var(--ui-secondary)}.\[\&_a\]\:hover\:\[\&\>code\]\:border-success a:hover>code{border-color:var(--ui-success)}.\[\&_a\]\:hover\:\[\&\>code\]\:border-warning a:hover>code{border-color:var(--ui-warning)}.\[\&_a\]\:hover\:\[\&\>code\]\:text-error a:hover>code{color:var(--ui-error)}.\[\&_a\]\:hover\:\[\&\>code\]\:text-info a:hover>code{color:var(--ui-info)}.\[\&_a\]\:hover\:\[\&\>code\]\:text-primary a:hover>code{color:var(--ui-primary)}.\[\&_a\]\:hover\:\[\&\>code\]\:text-secondary a:hover>code{color:var(--ui-secondary)}.\[\&_a\]\:hover\:\[\&\>code\]\:text-success a:hover>code{color:var(--ui-success)}.\[\&_a\]\:hover\:\[\&\>code\]\:text-warning a:hover>code{color:var(--ui-warning)}}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:border-error a:focus-visible>code{border-color:var(--ui-error)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:border-info a:focus-visible>code{border-color:var(--ui-info)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:border-primary a:focus-visible>code{border-color:var(--ui-primary)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:border-secondary a:focus-visible>code{border-color:var(--ui-secondary)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:border-success a:focus-visible>code{border-color:var(--ui-success)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:border-warning a:focus-visible>code{border-color:var(--ui-warning)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:text-error a:focus-visible>code{color:var(--ui-error)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:text-info a:focus-visible>code{color:var(--ui-info)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:text-primary a:focus-visible>code{color:var(--ui-primary)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:text-secondary a:focus-visible>code{color:var(--ui-secondary)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:text-success a:focus-visible>code{color:var(--ui-success)}.\[\&_a\]\:focus-visible\:\[\&\>code\]\:text-warning a:focus-visible>code{color:var(--ui-warning)}.\[\&\>div\]\:my-0>div{margin-block:calc(var(--spacing)*0)}.\[\&\>div\]\:my-2\.5>div{margin-block:calc(var(--spacing)*2.5)}.\[\&\>div\]\:flex>div{display:flex}.\[\&\>div\]\:min-w-0>div{min-width:calc(var(--spacing)*0)}.\[\&\>div\]\:flex-1>div{flex:1}.\[\&\>div\]\:flex-col>div{flex-direction:column}.\[\&\>div\]\:overflow-y-auto>div{overflow-y:auto}.\[\&\>div\>div\]\:border-0>div>div{border-style:var(--tw-border-style);border-width:0}.\[\&\>div\>pre\]\:flex-1>div>pre{flex:1}.\[\&\>div\>pre\]\:rounded-t-none>div>pre{border-top-left-radius:0;border-top-right-radius:0}.\[\&\>div\>pre\]\:rounded-l-none>div>pre{border-bottom-left-radius:0;border-top-left-radius:0}.\[\&\>div\>pre\]\:border-s-0>div>pre{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.\[\&\>div\>pre\]\:border-e-0>div>pre{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.\[\&\>div\>pre\]\:border-b-0>div>pre{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\>h2\]\:relative>h2{position:relative}.\[\&\>h2\]\:\[counter-increment\:step\]>h2{counter-increment:step}.\[\&\>h2\]\:before\:absolute>h2:before{content:var(--tw-content);position:absolute}.\[\&\>h2\]\:before\:-ms-\[48\.5px\]>h2:before{content:var(--tw-content);margin-inline-start:-48.5px}.\[\&\>h2\]\:before\:-mt-0>h2:before{content:var(--tw-content);margin-top:calc(var(--spacing)*0)}.\[\&\>h2\]\:before\:inline-flex>h2:before{content:var(--tw-content);display:inline-flex}.\[\&\>h2\]\:before\:size-8>h2:before{content:var(--tw-content);height:calc(var(--spacing)*8);width:calc(var(--spacing)*8)}.\[\&\>h2\]\:before\:items-center>h2:before{align-items:center;content:var(--tw-content)}.\[\&\>h2\]\:before\:justify-center>h2:before{content:var(--tw-content);justify-content:center}.\[\&\>h2\]\:before\:rounded-full>h2:before{border-radius:3.40282e+38px;content:var(--tw-content)}.\[\&\>h2\]\:before\:bg-elevated>h2:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}.\[\&\>h2\]\:before\:text-sm>h2:before{content:var(--tw-content);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&\>h2\]\:before\:font-semibold>h2:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&\>h2\]\:before\:tabular-nums>h2:before{content:var(--tw-content);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.\[\&\>h2\]\:before\:ring-4>h2:before{content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&\>h2\]\:before\:ring-bg>h2:before{content:var(--tw-content);--tw-ring-color:var(--ui-bg)}.\[\&\>h2\]\:before\:content-\[counter\(step\)\]>h2:before{--tw-content:counter(step);content:var(--tw-content)}.\[\&\>h2\>a\>span\.absolute\]\:hidden>h2>a>span.absolute{display:none}.\[\&\>h3\]\:relative>h3{position:relative}.\[\&\>h3\]\:\[counter-increment\:step\]>h3{counter-increment:step}.\[\&\>h3\]\:before\:absolute>h3:before{content:var(--tw-content);position:absolute}.\[\&\>h3\]\:before\:inset-x-0\.5>h3:before{content:var(--tw-content);inset-inline:calc(var(--spacing)*.5)}.\[\&\>h3\]\:before\:-ms-\[48\.5px\]>h3:before{content:var(--tw-content);margin-inline-start:-48.5px}.\[\&\>h3\]\:before\:inline-flex>h3:before{content:var(--tw-content);display:inline-flex}.\[\&\>h3\]\:before\:size-7>h3:before{content:var(--tw-content);height:calc(var(--spacing)*7);width:calc(var(--spacing)*7)}.\[\&\>h3\]\:before\:items-center>h3:before{align-items:center;content:var(--tw-content)}.\[\&\>h3\]\:before\:justify-center>h3:before{content:var(--tw-content);justify-content:center}.\[\&\>h3\]\:before\:rounded-full>h3:before{border-radius:3.40282e+38px;content:var(--tw-content)}.\[\&\>h3\]\:before\:bg-elevated>h3:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}.\[\&\>h3\]\:before\:text-sm>h3:before{content:var(--tw-content);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&\>h3\]\:before\:font-semibold>h3:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&\>h3\]\:before\:tabular-nums>h3:before{content:var(--tw-content);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.\[\&\>h3\]\:before\:ring-4>h3:before{content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&\>h3\]\:before\:ring-bg>h3:before{content:var(--tw-content);--tw-ring-color:var(--ui-bg)}.\[\&\>h3\]\:before\:content-\[counter\(step\)\]>h3:before{--tw-content:counter(step);content:var(--tw-content)}.\[\&\>h3\>a\>span\.absolute\]\:hidden>h3>a>span.absolute{display:none}.\[\&\>h4\]\:relative>h4{position:relative}.\[\&\>h4\]\:\[counter-increment\:step\]>h4{counter-increment:step}.\[\&\>h4\]\:before\:absolute>h4:before{content:var(--tw-content);position:absolute}.\[\&\>h4\]\:before\:inset-x-0\.5>h4:before{content:var(--tw-content);inset-inline:calc(var(--spacing)*.5)}.\[\&\>h4\]\:before\:-ms-\[48\.5px\]>h4:before{content:var(--tw-content);margin-inline-start:-48.5px}.\[\&\>h4\]\:before\:inline-flex>h4:before{content:var(--tw-content);display:inline-flex}.\[\&\>h4\]\:before\:size-7>h4:before{content:var(--tw-content);height:calc(var(--spacing)*7);width:calc(var(--spacing)*7)}.\[\&\>h4\]\:before\:items-center>h4:before{align-items:center;content:var(--tw-content)}.\[\&\>h4\]\:before\:justify-center>h4:before{content:var(--tw-content);justify-content:center}.\[\&\>h4\]\:before\:rounded-full>h4:before{border-radius:3.40282e+38px;content:var(--tw-content)}.\[\&\>h4\]\:before\:bg-elevated>h4:before{background-color:var(--ui-bg-elevated);content:var(--tw-content)}.\[\&\>h4\]\:before\:text-sm>h4:before{content:var(--tw-content);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&\>h4\]\:before\:font-semibold>h4:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&\>h4\]\:before\:tabular-nums>h4:before{content:var(--tw-content);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.\[\&\>h4\]\:before\:ring-4>h4:before{content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&\>h4\]\:before\:ring-bg>h4:before{content:var(--tw-content);--tw-ring-color:var(--ui-bg)}.\[\&\>h4\]\:before\:content-\[counter\(step\)\]>h4:before{--tw-content:counter(step);content:var(--tw-content)}.\[\&\>h4\>a\>span\.absolute\]\:hidden>h4>a>span.absolute{display:none}.\[\&\>input\]\:h-10>input{height:calc(var(--spacing)*10)}.\[\&\>input\]\:h-11>input{height:calc(var(--spacing)*11)}.\[\&\>input\]\:h-12>input{height:calc(var(--spacing)*12)}.\[\&\>input\]\:h-13>input{height:calc(var(--spacing)*13)}.\[\&\>input\]\:h-14>input{height:calc(var(--spacing)*14)}.\[\&\>mark\]\:bg-primary>mark{background-color:var(--ui-primary)}.\[\&\>mark\]\:text-inverted>mark{color:var(--ui-text-inverted)}.\[\&\>pre\]\:my-0>pre{margin-block:calc(var(--spacing)*0)}.\[\&\>pre\]\:rounded-t-none>pre{border-top-left-radius:0;border-top-right-radius:0}@media(hover:hover){.\[\&\>tr\]\:data-\[selectable\=true\]\:hover\:bg-elevated\/50>tr[data-selectable=true]:hover{background-color:var(--ui-bg-elevated)}@supports (color:color-mix(in lab,red,red)){.\[\&\>tr\]\:data-\[selectable\=true\]\:hover\:bg-elevated\/50>tr[data-selectable=true]:hover{background-color:color-mix(in oklab,var(--ui-bg-elevated) 50%,transparent)}}}.\[\&\>tr\]\:data-\[selectable\=true\]\:focus-visible\:outline-primary>tr[data-selectable=true]:focus-visible{outline-color:var(--ui-primary)}.\[\&\>ul\]\:my-0>ul{margin-block:calc(var(--spacing)*0)}.\[\&\>ul\]\:marker\:text-error\/50>ul ::marker{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-error\/50>ul ::marker{color:color-mix(in oklab,var(--ui-error) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-error\/50>ul::marker{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-error\/50>ul::marker{color:color-mix(in oklab,var(--ui-error) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-error\/50>ul ::-webkit-details-marker{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-error\/50>ul ::-webkit-details-marker{color:color-mix(in oklab,var(--ui-error) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-error\/50>ul::-webkit-details-marker{color:var(--ui-error)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-error\/50>ul::-webkit-details-marker{color:color-mix(in oklab,var(--ui-error) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-info\/50>ul ::marker{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-info\/50>ul ::marker{color:color-mix(in oklab,var(--ui-info) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-info\/50>ul::marker{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-info\/50>ul::marker{color:color-mix(in oklab,var(--ui-info) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-info\/50>ul ::-webkit-details-marker{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-info\/50>ul ::-webkit-details-marker{color:color-mix(in oklab,var(--ui-info) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-info\/50>ul::-webkit-details-marker{color:var(--ui-info)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-info\/50>ul::-webkit-details-marker{color:color-mix(in oklab,var(--ui-info) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-primary\/50>ul ::marker{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-primary\/50>ul ::marker{color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-primary\/50>ul::marker{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-primary\/50>ul::marker{color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-primary\/50>ul ::-webkit-details-marker{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-primary\/50>ul ::-webkit-details-marker{color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-primary\/50>ul::-webkit-details-marker{color:var(--ui-primary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-primary\/50>ul::-webkit-details-marker{color:color-mix(in oklab,var(--ui-primary) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-secondary\/50>ul ::marker{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-secondary\/50>ul ::marker{color:color-mix(in oklab,var(--ui-secondary) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-secondary\/50>ul::marker{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-secondary\/50>ul::marker{color:color-mix(in oklab,var(--ui-secondary) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-secondary\/50>ul ::-webkit-details-marker{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-secondary\/50>ul ::-webkit-details-marker{color:color-mix(in oklab,var(--ui-secondary) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-secondary\/50>ul::-webkit-details-marker{color:var(--ui-secondary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-secondary\/50>ul::-webkit-details-marker{color:color-mix(in oklab,var(--ui-secondary) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-success\/50>ul ::marker{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-success\/50>ul ::marker{color:color-mix(in oklab,var(--ui-success) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-success\/50>ul::marker{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-success\/50>ul::marker{color:color-mix(in oklab,var(--ui-success) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-success\/50>ul ::-webkit-details-marker{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-success\/50>ul ::-webkit-details-marker{color:color-mix(in oklab,var(--ui-success) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-success\/50>ul::-webkit-details-marker{color:var(--ui-success)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-success\/50>ul::-webkit-details-marker{color:color-mix(in oklab,var(--ui-success) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-warning\/50>ul ::marker{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-warning\/50>ul ::marker{color:color-mix(in oklab,var(--ui-warning) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-warning\/50>ul::marker{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-warning\/50>ul::marker{color:color-mix(in oklab,var(--ui-warning) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-warning\/50>ul ::-webkit-details-marker{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-warning\/50>ul ::-webkit-details-marker{color:color-mix(in oklab,var(--ui-warning) 50%,transparent)}}.\[\&\>ul\]\:marker\:text-warning\/50>ul::-webkit-details-marker{color:var(--ui-warning)}@supports (color:color-mix(in lab,red,red)){.\[\&\>ul\]\:marker\:text-warning\/50>ul::-webkit-details-marker{color:color-mix(in oklab,var(--ui-warning) 50%,transparent)}}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:focus-within\:scale-105:focus-within{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.\[\@media\(hover\:hover\)\]\:hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}@keyframes accordion-up{0%{height:var(--reka-accordion-content-height)}to{height:0}}@keyframes accordion-down{0%{height:0}to{height:var(--reka-accordion-content-height)}}@keyframes collapsible-up{0%{height:var(--reka-collapsible-content-height)}to{height:0}}@keyframes collapsible-down{0%{height:0}to{height:var(--reka-collapsible-content-height)}}@keyframes toast-slide-in-from-top{0%{transform:translateY(-100%)}to{transform:var(--transform)}}@keyframes toast-slide-in-from-bottom{0%{transform:translateY(100%)}to{transform:var(--transform)}}@keyframes toast-slide-up{0%{transform:translate(0) translateY(var(--translate))}to{transform:translate(0) translateY(calc(var(--translate) - 100%))}}@keyframes toast-slide-down{0%{transform:translate(0) translateY(var(--translate))}to{transform:translate(0) translateY(calc(var(--translate) + 100%))}}@keyframes toast-pulse-a{0%,to{scale:1}50%{scale:1.04}}@keyframes toast-pulse-b{0%,to{scale:1}50%{scale:1.04}}@keyframes toast-collapsed-closed{0%{transform:var(--transform)}to{transform:translateY(calc((var(--before) - var(--height))*var(--gap))) scale(var(--scale))}}@keyframes toast-closed{0%{transform:var(--transform)}to{transform:translateY(calc((var(--offset) - var(--height))*var(--translate-factor)))}}@keyframes toast-slide-left{0%{transform:translate(0) translateY(var(--translate))}to{transform:translate(-100%) translateY(var(--translate))}}@keyframes toast-slide-right{0%{transform:translate(0) translateY(var(--translate))}to{transform:translate(100%) translateY(var(--translate))}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes scale-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes slide-in-from-top{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slide-out-to-top{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes slide-in-from-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slide-out-to-right{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes slide-in-from-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes slide-in-from-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slide-out-to-left{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes slide-in-from-top-and-fade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-top-and-fade{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}@keyframes slide-in-from-right-and-fade{0%{opacity:0;transform:translate(4px)}to{opacity:1;transform:translate(0)}}@keyframes slide-out-to-right-and-fade{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(4px)}}@keyframes slide-in-from-bottom-and-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom-and-fade{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}@keyframes slide-in-from-left-and-fade{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}@keyframes slide-out-to-left-and-fade{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-4px)}}@keyframes enter-from-right{0%{opacity:0;transform:translate(200px)}to{opacity:1;transform:translate(0)}}@keyframes enter-from-left{0%{opacity:0;transform:translate(-200px)}to{opacity:1;transform:translate(0)}}@keyframes exit-to-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(200px)}}@keyframes exit-to-left{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-200px)}}@keyframes carousel{0%,to{width:50%}0%{transform:translate(-100%)}to{transform:translate(200%)}}@keyframes carousel-rtl{0%,to{width:50%}0%{transform:translate(100%)}to{transform:translate(-200%)}}@keyframes carousel-vertical{0%,to{height:50%}0%{transform:translateY(-100%)}to{transform:translateY(200%)}}@keyframes carousel-inverse{0%,to{width:50%}0%{transform:translate(200%)}to{transform:translate(-100%)}}@keyframes carousel-inverse-rtl{0%,to{width:50%}0%{transform:translate(-200%)}to{transform:translate(100%)}}@keyframes carousel-inverse-vertical{0%,to{height:50%}0%{transform:translateY(200%)}to{transform:translateY(-100%)}}@keyframes swing{0%,to{width:50%}0%,to{transform:translate(-25%)}50%{transform:translate(125%)}}@keyframes swing-vertical{0%,to{height:50%}0%,to{transform:translateY(-25%)}50%{transform:translateY(125%)}}@keyframes elastic{0%,to{margin-left:25%;width:50%}50%{margin-left:5%;width:90%}}@keyframes elastic-vertical{0%,to{height:50%;margin-top:25%}50%{height:90%;margin-top:5%}}@keyframes marquee{0%{transform:translateZ(0)}to{transform:translate3d(calc(-100% - var(--gap)),0,0)}}@keyframes marquee-rtl{0%{transform:translateZ(0)}to{transform:translate3d(calc(100% + var(--gap)),0,0)}}@keyframes marquee-vertical{0%{transform:translateZ(0)}to{transform:translate3d(0,calc(-100% - var(--gap)),0)}}@keyframes marquee-vertical-rtl{0%{transform:translate3d(0,calc(-100% - var(--gap)),0)}to{transform:translate3d(0,calc(-100%*var(--gap)),0)}}@keyframes shimmer{0%{background-position:100%}to{background-position:0}}@keyframes shimmer-rtl{0%{background-position:0}to{background-position:100%}}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@media(min-width:1024px){.docus-sub-header{--ui-header-height:112px}} diff --git a/docus/dist/_nuxt/jpB_SM9d.js b/docus/dist/_nuxt/jpB_SM9d.js new file mode 100644 index 0000000..989e945 --- /dev/null +++ b/docus/dist/_nuxt/jpB_SM9d.js @@ -0,0 +1,3 @@ +import{v as L,d as le,g as ie,j as oe,k as ue,l as Q,o as _,a as O,p as P,B as V,q as te,s,C as M,D,P as ae,bG as de,x as ce,c as w,z as fe,S as ve,n as pe,T as U,h as me,m as ne,L as Y,Q as ge,a0 as he,a1 as ye,a4 as be,w as F,bt as xe,e as $,af as N,ac as E,W as ke,F as J,am as X,r as Ce,ab as Z,ag as Te,f as ee}from"./B3fabVUf.js";import{f as G}from"./C5B99YjC.js";import{R as Ke}from"./B6bUjJBd.js";import Se from"./C-sCiTCq.js";function Ae(f,K){const e=L(),b=(l,g)=>{if(K.multiple&&Array.isArray(f.value))if(K.selectionBehavior==="replace")f.value=[l],e.value=l;else{const S=f.value.findIndex(p=>g(p));S!==-1?f.value=f.value.filter((p,v)=>v!==S):f.value=[...f.value,l]}else K.selectionBehavior==="replace"?f.value={...l}:!Array.isArray(f.value)&&g(f.value)?f.value=void 0:f.value={...l};return f.value};function B(l,g,S,p){if(!e?.value||!K.multiple||!Array.isArray(f.value))return;const I=S().filter(A=>A.ref.dataset.disabled!=="").find(A=>A.ref===g)?.value;if(!I)return;let x=null;switch(l){case"prev":case"next":{x=G(p,e.value,I);break}case"first":{x=G(p,e.value,p?.[0]);break}case"last":{x=G(p,e.value,p?.[p.length-1]);break}}f.value=x}return{firstValue:e,onSelectItem:b,handleMultipleReplace:B}}function W(f){return f.reduce((K,e)=>(K.push(e),e.children&&K.push(...W(e.children)),K),[])}const[Ie,Ee]=fe("TreeRoot");var _e=le({__name:"TreeRoot",props:{modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},items:{type:Array,required:!1},expanded:{type:Array,required:!1},defaultExpanded:{type:Array,required:!1},getKey:{type:Function,required:!0},getChildren:{type:Function,required:!1,default:f=>f.children},selectionBehavior:{type:String,required:!1,default:"toggle"},multiple:{type:Boolean,required:!1,skipCheck:!0},dir:{type:String,required:!1},disabled:{type:Boolean,required:!1},propagateSelect:{type:Boolean,required:!1},bubbleSelect:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"ul"}},emits:["update:modelValue","update:expanded"],setup(f,{emit:K}){const e=f,b=K,{items:B,multiple:l,disabled:g,propagateSelect:S,dir:p,bubbleSelect:v}=ie(e),{handleTypeaheadSearch:I}=oe(),x=ue(p),A=L(),R=L(!1),q=ce(),d=Q(e,"modelValue",b,{defaultValue:e.defaultValue??(l.value?[]:void 0),passive:!0,deep:!0}),C=Q(e,"expanded",b,{defaultValue:e.defaultExpanded??[],passive:e.expanded===void 0,deep:!0}),{onSelectItem:a,handleMultipleReplace:i}=Ae(d,e),c=w(()=>l.value&&Array.isArray(d.value)?d.value.map(t=>e.getKey(t)):[e.getKey(d.value??{})]);function r(t,n=1,k){return t.reduce((y,T,j)=>{const H=e.getKey(T),z=e.getChildren(T),re=C.value.includes(H),se={_id:H,value:T,index:j,level:n,parentItem:k,hasChildren:!!z,bind:{value:T,level:n,"aria-setsize":t.length,"aria-posinset":j+1}};return y.push(se),z&&re&&y.push(...r(z,n+1,T)),y},[])}const u=w(()=>{const t=e.items;return C.value.map(n=>n),r(t??[])});function o(t){if(R.value)q.trigger(t);else{const n=A.value?.getItems()??[];I(t.key,n)}}function m(t){if(R.value)return;const n=ve[t.key];pe(()=>{i(n,U(),A.value?.getItems,u.value.map(k=>k.value))})}function h(t){if(t.parentItem!=null&&Array.isArray(d.value)&&e.multiple){const n=u.value.find(k=>t.parentItem!=null&&e.getKey(k.value)===e.getKey(t.parentItem));n!=null&&(e.getChildren(n.value)?.every(y=>d.value.find(T=>e.getKey(T)===e.getKey(y)))?d.value=[...d.value,n.value]:d.value=d.value.filter(y=>e.getKey(y)!==e.getKey(n.value)),h(n))}}return Ee({modelValue:d,selectedKeys:c,onSelect:t=>{const n=y=>e.getKey(y??{})===e.getKey(t),k=e.multiple&&Array.isArray(d.value)?d.value?.findIndex(n)!==-1:void 0;if(a(t,n),e.bubbleSelect&&e.multiple&&Array.isArray(d.value)){const y=u.value.find(T=>e.getKey(T.value)===e.getKey(t));y!=null&&h(y)}if(e.propagateSelect&&e.multiple&&Array.isArray(d.value)){const y=W(e.getChildren(t)??[]);k?d.value=[...d.value].filter(T=>!y.some(j=>e.getKey(T??{})===e.getKey(j))):d.value=[...d.value,...y]}},expanded:C,onToggle(t){if(!(t?e.getChildren(t):void 0))return;const k=e.getKey(t)??t;C.value.includes(k)?C.value=C.value.filter(y=>y!==k):C.value=[...C.value,k]},getKey:e.getKey,getChildren:e.getChildren,items:B,expandedItems:u,disabled:g,multiple:l,dir:x,propagateSelect:S,bubbleSelect:v,isVirtual:R,virtualKeydownHook:q,handleMultipleReplace:i}),(t,n)=>(_(),O(s(de),{ref_key:"rovingFocusGroupRef",ref:A,"as-child":"",orientation:"vertical",dir:s(x)},{default:P(()=>[V(s(ae),{role:"tree",as:t.as,"as-child":t.asChild,"aria-multiselectable":s(l)?!0:void 0,onKeydown:[o,M(D(m,["shift"]),["up","down"])]},{default:P(()=>[te(t.$slots,"default",{flattenItems:u.value,modelValue:s(d),expanded:s(C)})]),_:3},8,["as","as-child","aria-multiselectable","onKeydown"])]),_:3},8,["dir"]))}}),qe=_e;const we="tree.select",Be="tree.toggle";var Re=le({inheritAttrs:!1,__name:"TreeItem",props:{value:{type:null,required:!0},level:{type:Number,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"li"}},emits:["select","toggle"],setup(f,{expose:K,emit:e}){const b=f,B=e,l=Ie(),{getItems:g}=me(),S=w(()=>!!l.getChildren(b.value)),p=w(()=>{const a=l.getKey(b.value);return l.expanded.value.includes(a)}),v=w(()=>{const a=l.getKey(b.value);return l.selectedKeys.value.includes(a)}),I=w(()=>{if(l.bubbleSelect.value&&S.value&&Array.isArray(l.modelValue.value)){const a=W(l.getChildren(b.value)||[]);return a.some(i=>l.modelValue.value.find(c=>l.getKey(c)===l.getKey(i)))&&!a.every(i=>l.modelValue.value.find(c=>l.getKey(c)===l.getKey(i)))}else return l.propagateSelect.value&&v.value&&S.value&&Array.isArray(l.modelValue.value)?!W(l.getChildren(b.value)||[]).every(i=>l.modelValue.value.find(c=>l.getKey(c)===l.getKey(i))):void 0});function x(a){if(S.value)if(p.value){const i=g().map(m=>m.ref),c=U(),r=i.indexOf(c),o=[...i].slice(r).find(m=>Number(m.getAttribute("data-indent"))===b.level+1);o&&o.focus()}else C(a)}function A(a){if(p.value)C(a);else{const i=g().map(m=>m.ref),c=U(),r=i.indexOf(c),o=[...i].slice(0,r).reverse().find(m=>Number(m.getAttribute("data-indent"))===b.level-1);o&&o.focus()}}async function R(a){B("select",a),!a?.defaultPrevented&&l.onSelect(b.value)}async function q(a){B("toggle",a),!a?.defaultPrevented&&l.onToggle(b.value)}async function d(a){if(!a)return;const i={originalEvent:a,value:b.value,isExpanded:p.value,isSelected:v.value};Y(we,R,i)}async function C(a){if(!a)return;const i={originalEvent:a,value:b.value,isExpanded:p.value,isSelected:v.value};Y(Be,q,i)}return K({isExpanded:p,isSelected:v,isIndeterminate:I,handleToggle:()=>l.onToggle(b.value),handleSelect:()=>l.onSelect(b.value)}),(a,i)=>(_(),O(s(Ke),{"as-child":"",value:a.value,"allow-shift-key":""},{default:P(()=>[V(s(ae),ne(a.$attrs,{role:"treeitem",as:a.as,"as-child":a.asChild,"aria-selected":v.value,"aria-expanded":S.value?p.value:void 0,"aria-level":a.level,"data-indent":a.level,"data-selected":v.value?"":void 0,"data-expanded":p.value?"":void 0,onKeydown:[M(D(d,["self","prevent"]),["enter","space"]),i[0]||(i[0]=M(D(c=>s(l).dir.value==="ltr"?x(c):A(c),["prevent"]),["right"])),i[1]||(i[1]=M(D(c=>s(l).dir.value==="ltr"?A(c):x(c),["prevent"]),["left"]))],onClick:i[2]||(i[2]=D(c=>{d(c),C(c)},["stop"]))}),{default:P(()=>[te(a.$slots,"default",{isExpanded:p.value,isSelected:v.value,isIndeterminate:I.value,handleSelect:()=>s(l).onSelect(a.value),handleToggle:()=>s(l).onToggle(a.value)})]),_:3},16,["as","as-child","aria-selected","aria-expanded","aria-level","data-indent","data-selected","data-expanded","onKeydown"])]),_:3},8,["value"]))}}),Ve=Re;const Le={slots:{root:"relative lg:h-[450px] my-5 grid lg:grid-cols-3 border border-muted rounded-md",list:"isolate relative p-2 border-b lg:border-b-0 lg:border-e border-muted overflow-y-auto",item:"",listWithChildren:"ms-4.5 border-s border-default",itemWithChildren:"ps-1.5 -ms-px",link:"relative group peer w-full px-2.5 py-1.5 before:inset-y-px before:inset-x-0 flex items-center gap-1.5 text-sm before:absolute before:z-[-1] before:rounded-md focus:outline-none focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2",linkLeadingIcon:"size-4 shrink-0",linkLabel:"truncate",linkTrailing:"ms-auto inline-flex gap-1.5 items-center",linkTrailingIcon:"size-5 transform transition-transform duration-200 shrink-0 group-data-expanded:rotate-180",content:"overflow-hidden lg:col-span-2 flex flex-col [&>div]:my-0 [&>div]:flex-1 [&>div]:flex [&>div]:flex-col [&>div>div]:border-0 [&>div>pre]:border-b-0 [&>div>pre]:border-s-0 [&>div>pre]:border-e-0 [&>div>pre]:rounded-l-none [&>div>pre]:flex-1 [&>div]:overflow-y-auto"},variants:{active:{true:{link:"text-highlighted before:bg-elevated"},false:{link:["hover:text-highlighted hover:before:bg-elevated/50","transition-colors before:transition-colors"]}}}},je=Object.assign({inheritAttrs:!1},{__name:"ProseCodeTree",props:{items:{type:Array,required:!1},modelValue:{type:String,required:!1},defaultValue:{type:String,required:!1},expandAll:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},emits:["update:modelValue"],setup(f,{emit:K}){const e=f,b=K,B=ge(),l=he(),g=ye("prose.codeTree",e),[S,p]=be(),v=w(()=>X({extend:X(Le),...l.ui?.prose?.codeTree||{}})()),I=e.modelValue??e.defaultValue,x=L(I?{path:I}:void 0),A=L();F(x,r=>{r?.path!==e.modelValue&&b("update:modelValue",r?.path)}),F(()=>e.modelValue,r=>{if(r===x.value?.path)return;x.value=r?{path:r}:void 0;const u=i(r);for(const o of u)c.value.includes(o)||c.value.push(o)});const R=L(1),q=w(()=>(R.value,e.items||B.default?.()?.flatMap(a).filter(Boolean)||[])),d=w(()=>C(q.value));function C(r){const u=new Map,o=[];r.forEach(h=>{const t=h.label.split("/");let n="";t.forEach((k,y)=>{if(n=n?`${n}/${k}`:k,!u.has(n)){const T={label:k,path:n,...yh.sort((t,n)=>!!t.children==!!n.children?t.label.localeCompare(n.label):n.children?1:-1).map(t=>({...t,children:t.children&&m(t.children)}));return m(o)}function a(r,u){return typeof r.type=="symbol"?r.children?.map(a):{label:r.props?.filename||r.props?.label||`${u}`,icon:r.props?.icon,component:r}}function i(r){if(e.expandAll){const o=new Set;return q.value.forEach(m=>{const h=m.label.split("/");for(let t=1;tu.slice(0,m+1).join("/"))}const c=L(i(x.value?.path));return F(q,(r,u)=>{if(!e.expandAll)return;const o=r.map(h=>h.label).join(` +`),m=u?.map(h=>h.label).join(` +`)??"";o!==m&&(c.value=i())}),F(x,r=>{const u=q.value.find(o=>r?.path===o.label);u?.component&&(A.value=u)},{immediate:!0}),xe(()=>R.value++),(r,u)=>(_(),$(J,null,[V(s(S),null,{default:P(({items:o,level:m})=>[(_(!0),$(J,null,Ce(o,(h,t)=>(_(),$("li",{key:`${m}-${t}`,role:"presentation",class:E(m>1?v.value.itemWithChildren({class:s(g)?.itemWithChildren}):v.value.item({class:s(g)?.item}))},[V(s(Ve),{level:m,value:h,"as-child":""},{default:P(({isExpanded:n,isSelected:k})=>[N("button",{type:"button",class:E(v.value.link({class:s(g)?.link,active:k}))},[h.children?.length?(_(),O(Z,{key:0,name:n?s(l).ui.icons.folderOpen:s(l).ui.icons.folder,class:E(v.value.linkLeadingIcon({class:s(g)?.linkLeadingIcon}))},null,8,["name","class"])):(_(),O(Se,{key:1,filename:h.label,class:E(v.value.linkLeadingIcon({class:s(g)?.linkLeadingIcon}))},null,8,["filename","class"])),N("span",{class:E(v.value.linkLabel({class:s(g)?.linkLabel}))},Te(h.label),3),h.children?.length?(_(),$("span",{key:2,class:E(v.value.linkTrailing({class:s(g)?.linkTrailing}))},[V(Z,{name:s(l).ui.icons.chevronDown,class:E(v.value.linkTrailingIcon({class:s(g)?.linkTrailingIcon}))},null,8,["name","class"])],2)):ee("",!0)],2),h.children?.length&&n?(_(),$("ul",{key:0,role:"group",class:E(v.value.listWithChildren({class:s(g)?.listWithChildren}))},[V(s(p),{items:h.children,level:m+1},null,8,["items","level"])],2)):ee("",!0)]),_:2},1032,["level","value"])],2))),128))]),_:1}),N("div",ne(r.$attrs,{class:v.value.root({class:[s(g)?.root,e.class]})}),[V(s(qe),{modelValue:x.value,"onUpdate:modelValue":u[0]||(u[0]=o=>x.value=o),expanded:c.value,"onUpdate:expanded":u[1]||(u[1]=o=>c.value=o),class:E(v.value.list({class:s(g)?.list})),items:d.value,"get-key":o=>o.path},{default:P(()=>[V(s(p),{items:d.value,level:1},null,8,["items"])]),_:1},8,["modelValue","expanded","class","items","get-key"]),N("div",{class:E(v.value.content({class:s(g)?.content}))},[(_(),O(ke(A.value?.component)))],2)],16)],64))}});export{je as default}; diff --git a/docus/dist/_nuxt/n8vERajx.js b/docus/dist/_nuxt/n8vERajx.js new file mode 100644 index 0000000..22b8dcc --- /dev/null +++ b/docus/dist/_nuxt/n8vERajx.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./B3fabVUf.js","./entry.B0IIbxeE.css","./D2PgxUb5.js","./BecbEIqG.js","./CdNQ_JKz.js","./C8-Mg-oX.js","./G6op-Gdf.js"])))=>i.map(i=>d[i]); +import{d as Cn,bc as G,bd as Sn,w as kn,be as xn,c as b,bf as ln,bg as on,bh as L,bi as F,bj as j,bk as wn,b7 as tn,bl as On,bm as R,aQ as Tn,a as Dn,s as J,ac as Ln,q as Mn,bn as _n,o as Rn,aO as En,bo as Un,aS as An,bp as Z,bq as Q,t as D,br as I,bs as In}from"./B3fabVUf.js";import{f as rn,n as Bn}from"./BN_7HF1G.js";const V=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]);class B{constructor(l,e,r){this.normal=e,this.property=l,r&&(this.space=r)}}B.prototype.normal={};B.prototype.property={};B.prototype.space=void 0;function an(n,l){const e={},r={};for(const t of n)Object.assign(e,t.property),Object.assign(r,t.normal);return new B(e,r,l)}function N(n){return n.toLowerCase()}class x{constructor(l,e){this.attribute=e,this.property=l}}x.prototype.attribute="";x.prototype.booleanish=!1;x.prototype.boolean=!1;x.prototype.commaOrSpaceSeparated=!1;x.prototype.commaSeparated=!1;x.prototype.defined=!1;x.prototype.mustUseProperty=!1;x.prototype.number=!1;x.prototype.overloadedBoolean=!1;x.prototype.property="";x.prototype.spaceSeparated=!1;x.prototype.space=void 0;let jn=0;const i=M(),y=M(),q=M(),o=M(),v=M(),U=M(),w=M();function M(){return 2**++jn}const W=Object.freeze(Object.defineProperty({__proto__:null,boolean:i,booleanish:y,commaOrSpaceSeparated:w,commaSeparated:U,number:o,overloadedBoolean:q,spaceSeparated:v},Symbol.toStringTag,{value:"Module"})),z=Object.keys(W);class X extends x{constructor(l,e,r,t){let a=-1;if(super(l,e),nn(this,"space",t),typeof r=="number")for(;++a4&&e.slice(0,4)==="data"&&Vn.test(l)){if(l.charAt(4)==="-"){const a=l.slice(5).replace(en,Wn);r="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{const a=l.slice(4);if(!en.test(a)){let c=a.replace(Fn,qn);c.charAt(0)!=="-"&&(c="-"+c),l="data"+c}}t=X}return new t(r,l)}function qn(n){return"-"+n.toLowerCase()}function Wn(n){return n.charAt(1).toUpperCase()}const $n=an([un,Hn,pn,dn,gn],"html");an([un,zn,pn,dn,gn],"svg");function Kn(n,l){return l.reduce((e,r)=>{const t=Xn(n,r);return t!==void 0&&(e[r]=t),e},{})}function Xn(n,l){return l.split(".").reduce((e,r)=>e&&e[r],n)}const $="default",mn=/^@|^v-on:/,fn=/^:|^v-bind:/,Yn=/^v-model/,Gn=["select","textarea","input"],Jn=new Set(["math","svg"]),hn=new Set,Zn=Object.fromEntries(["p","a","blockquote","code","pre","code","em","h1","h2","h3","h4","h5","h6","hr","img","ul","ol","li","strong","table","thead","tbody","td","th","tr","script"].map(n=>[n,`prose-${n}`])),Qn=["script","base"],ne=Cn({name:"MDCRenderer",props:{body:{type:Object,required:!0},data:{type:Object,default:()=>({})},class:{type:[String,Object],default:void 0},tag:{type:[String,Boolean],default:void 0},prose:{type:Boolean,default:void 0},components:{type:Object,default:()=>({})},unwrap:{type:[Boolean,String],default:!1}},async setup(n){const e=xn()?.appContext?.app?.$nuxt,r=e?.$route||e?._route,{mdc:t}=e?.$config?.public||{},a=t?.components?.customElements||t?.components?.custom;a&&a.forEach(s=>hn.add(s));const c=b(()=>({...t?.components?.prose&&n.prose!==!1?Zn:{},...t?.components?.map||{},...ln(n.data?.mdc?.components||{}),...n.components})),m=b(()=>{const s=(n.body?.children||[]).map(f=>f.tag||f.type).filter(f=>!Y(f));return Array.from(new Set(s)).sort().join(".")}),d=Sn({...n.data});kn(()=>n.data,s=>{Object.assign(d,s)}),await pe(n.body,{tags:c.value});function p(s,f){const k=s.split(".").length-1;return s.split(".").reduce((P,O,S)=>S==k&&P?(P[O]=f,P[O]):typeof P=="object"?P[O]:void 0,d)}return{tags:c,contentKey:m,route:r,runtimeData:d,updateRuntimeData:p}},render(n){const{tags:l,tag:e,body:r,data:t,contentKey:a,route:c,unwrap:m,runtimeData:d,updateRuntimeData:p}=n;if(!r)return null;const s={...t,tags:l,$route:c,runtimeData:d,updateRuntimeData:p},f=e!==!1?K(e||s.component?.name||s.component||"div"):void 0;return f?G(f,{...s.component?.props,class:n.class,...this.$attrs,key:a},{default:k}):k?.();function k(){const P=vn(r,G,{documentMeta:s,parentScope:s,resolveComponent:K});return P?.default?m?rn(P.default(),typeof m=="string"?m.split(" "):["*"]):P.default():null}}});function ee(n,l,e,r){const{documentMeta:t,parentScope:a,resolveComponent:c}=e;if(n.type==="text")return l(j,n.value);if(n.type==="comment")return l(wn,null,n.value);const m=n.tag,d=bn(n,t.tags);if(n.tag==="binding")return le(n,l,t,a);const p=yn(d)?k=>k:c;if(Qn.includes(L(d).toLowerCase()))return l("pre",{class:"mdc-renderer-dangerous-tag"},"<"+d+">"+Bn(n)+"");const s=p(d);typeof s=="object"&&(s.tag=m);const f=oe(n,t);return r&&(f.key=r),l(s,f,vn(n,l,{documentMeta:t,parentScope:{...a,...f},resolveComponent:p}))}function vn(n,l,e){const{documentMeta:r,parentScope:t,resolveComponent:a}=e,m=(n.children||[]).reduce((p,s)=>{if(!se(s))return p[$].children.push(s),p;const f=ie(s);return p[f]=p[f]||{props:{},children:[]},s.type==="element"&&(p[f].props=s.props,p[f].children.push(...s.children||[])),p},{[$]:{props:{},children:[]}});return Object.entries(m).reduce((p,[s,{props:f,children:k}])=>(k.length&&(p[s]=(P={})=>{const O=Kn(P,Object.keys(f||{}));let S=k.map((u,h)=>ee(u,l,{documentMeta:r,parentScope:{...t,...O},resolveComponent:a},String(u.props?.key||h)));return f?.unwrap&&(S=rn(S,f.unwrap)),ce(S)}),p),{})}function le(n,l,e,r={}){const t={...e.runtimeData,...r,$document:e,$doc:e},a=/\.|\[(\d+)\]/,m=(n.props?.value.trim().split(a).filter(Boolean)).reduce((p,s)=>{if(p&&s in p)return typeof p[s]=="function"?p[s]():p[s]},t),d=n.props?.defaultValue;return l(j,m??d??"")}function oe(n,l){const{tag:e="",props:r={}}=n;return Object.keys(r).reduce(function(t,a){if(a==="__ignoreMap")return t;const c=r[a];if(Yn.test(a))return te(a,c,t,l,{native:Gn.includes(e)});if(a==="v-bind")return re(a,c,t,l);if(mn.test(a))return ae(a,c,t,l);if(fn.test(a))return ue(a,c,t,l);const{attribute:m}=Nn($n,a);return Array.isArray(c)&&c.every(d=>typeof d=="string")?(t[m]=c.join(" "),t):(t[m]=c,t)},{})}function te(n,l,e,r,{native:t}){const a=n.match(/^v-model:([^=]+)/)?.[1]||"modelValue",c=t?"value":a,m=t?"onInput":`onUpdate:${a}`;return e[c]=H(l,r.runtimeData),e[m]=d=>{r.updateRuntimeData(l,t?d.target?.value:d)},e}function re(n,l,e,r){const t=H(l,r);return e=Object.assign(e,t),e}function ae(n,l,e,r){return n=n.replace(mn,""),e.on=e.on||{},e.on[n]=()=>H(l,r),e}function ue(n,l,e,r){return n=n.replace(fn,""),e[n]=H(l,r),e}const K=n=>{if(typeof n=="string"){if(Y(n))return n;const l=on(L(n),!1);return!n||l?.name==="AsyncComponentWrapper"||typeof l=="string"?l:"setup"in l?F(()=>new Promise(e=>e(l))):l}return n};function H(n,l){const e=n.split(".").reduce((r,t)=>typeof r=="object"?r[t]:void 0,l);return typeof e>"u"?On(n):e}function ie(n){let l="";for(const e of Object.keys(n.props||{}))if(!(!e.startsWith("#")&&!e.startsWith("v-slot:"))){l=e.split(/[:#]/,2)[1];break}return l||$}function se(n){return n.tag==="template"}function yn(n){return Jn.has(n)}function ce(n){const l=[];for(const e of n){const r=l[l.length-1];e.type===j&&r?.type===j?r.children=r.children+e.children:l.push(e)}return l}async function pe(n,l){if(!n)return;const e=Array.from(new Set(r(n,l)));await Promise.all(e.map(async t=>{if(t?.render||t?.ssrRender||t?.__ssrInlineRender)return;const a=K(t);a?.__asyncLoader&&!a.__asyncResolved&&await a.__asyncLoader()}));function r(t,a){const c=t.tag;if(t.type==="text"||c==="binding"||t.type==="comment")return[];const m=bn(t,a.tags);if(yn(m))return[];const d=[];t.type!=="root"&&!Y(m)&&d.push(m);for(const p of t.children||[])d.push(...r(p,a));return d}}function bn(n,l){const e=n.tag;return!e||typeof n.props?.__ignoreMap<"u"?e:l[e]||l[L(e)]||l[tn(n.tag)]||e}function Y(n){return(typeof n=="string"?hn.has(n):!1)||V.has(n)}const de=Object.assign(ne,{__name:"MDCRenderer"}),E=(n,l,e,r)=>{const t=l==="default"?n?.default:n?.[l];if(!t)throw new Error(`[nuxt-content] Missing export "${l}" for component "${e}" in "${r}".`);return t},ge={UButton:()=>R(()=>import("./B3fabVUf.js").then(n=>n.c5),__vite__mapDeps([0,1]),import.meta.url).then(n=>E(n,"default","UButton","./../../../../docus/node_modules/@nuxt/ui/dist/runtime/components/Button.vue")),UPageCard:()=>R(()=>import("./D2PgxUb5.js"),__vite__mapDeps([2,0,1]),import.meta.url).then(n=>E(n,"default","UPageCard","./../../../../docus/node_modules/@nuxt/ui/dist/runtime/components/PageCard.vue")),UPageFeature:()=>R(()=>import("./BecbEIqG.js"),__vite__mapDeps([3,0,1]),import.meta.url).then(n=>E(n,"default","UPageFeature","./../../../../docus/node_modules/@nuxt/ui/dist/runtime/components/PageFeature.vue")),UPageGrid:()=>R(()=>import("./CdNQ_JKz.js"),__vite__mapDeps([4,0,1]),import.meta.url).then(n=>E(n,"default","UPageGrid","./../../../../docus/node_modules/@nuxt/ui/dist/runtime/components/PageGrid.vue")),UPageHero:()=>R(()=>import("./C8-Mg-oX.js"),__vite__mapDeps([5,0,1]),import.meta.url).then(n=>E(n,"default","UPageHero","./../../../../docus/node_modules/@nuxt/ui/dist/runtime/components/PageHero.vue")),UPageSection:()=>R(()=>import("./G6op-Gdf.js"),__vite__mapDeps([6,0,1,3]),import.meta.url).then(n=>E(n,"default","UPageSection","./../../../../docus/node_modules/@nuxt/ui/dist/runtime/components/PageSection.vue"))},me=["ProseA","ProseAccordion","ProseAccordionItem","ProseBadge","ProseBlockquote","ProseCallout","ProseCard","ProseCardGroup","ProseCode","ProseCodeCollapse","ProseCodeGroup","ProseCodeIcon","ProseCodePreview","ProseCodeTree","ProseCollapsible","ProseEm","ProseField","ProseFieldGroup","ProseH1","ProseH2","ProseH3","ProseH4","ProseHr","ProseIcon","ProseImg","ProseKbd","ProseLi","ProseOl","ProseP","ProsePre","ProseScript","ProseSteps","ProseStrong","ProseTable","ProseTabs","ProseTabsItem","ProseTbody","ProseTd","ProseTh","ProseThead","ProseTr","ProseUl","ProseCaution","ProseNote","ProseTip","ProseWarning","ProseH5","ProseH6","Icon"],fe=["UButton","UPageCard","UPageFeature","UPageGrid","UPageHero","UPageSection"],he={__name:"ContentRenderer",props:{value:{type:Object,required:!0},excerpt:{type:Boolean,default:!1},tag:{type:String,default:"div"},components:{type:Object,default:()=>({})},data:{type:Object,default:()=>({})},prose:{type:Boolean,default:void 0},class:{type:[String,Object],default:void 0},unwrap:{type:[Boolean,String],default:!1}},setup(n){const l=["render","ssrRender","__ssrInlineRender"],e=n,r=import.meta.preview,t=b(()=>{let u=e.value.body||e.value;return e.excerpt&&e.value.excerpt&&(u=e.value.excerpt),u.type==="minimal"||u.type==="minimark"?_n({value:u.value}):u}),a=b(()=>!t.value?.children?.length),c=b(()=>{const{body:u,excerpt:h,...g}=e.value;return{...g,...e.data}}),m=Object.fromEntries(["p","a","blockquote","code","pre","code","em","h1","h2","h3","h4","h5","h6","hr","img","ul","ol","li","strong","table","thead","tbody","td","th","tr","script"].map(u=>[u,`prose-${u}`])),{mdc:d}=Tn().public||{},p=b(()=>e.data.mdc),s=b(()=>({...d?.components?.prose&&e.prose!==!1?m:{},...d?.components?.map||{},...ln(p.value?.components||{}),...e.components})),f=b(()=>t.value?P(t.value,{tags:s.value}):{});function k(u){let h=u;if(typeof u=="string"){if(V.has(u))return u;if(me.includes(L(u)))h=on(u,!1);else if(fe.includes(L(u))){const C=ge[L(u)];h=C?F(C):void 0}if(typeof h=="string")return h}if(!h)return h;const g=h;return"__asyncLoader"in g?g:"setup"in g?F(()=>Promise.resolve(g)):g}function P(u,h){if(!u)return;const g=Array.from(new Set(O(u,h))),C={};for(const[T,_]of g)if(!C[T]){if(typeof _=="object"&&l.some(Pn=>Object.hasOwnProperty.call(_,Pn))){C[T]=_;continue}C[T]=k(_)}return C}function O(u,h){const g=u.tag;if(u.type==="text"||g==="binding"||u.type==="comment")return[];const C=S(u,h.tags),T=[];u.type!=="root"&&!V.has(C)&&T.push([g,C]);for(const _ of u.children||[])T.push(...O(_,h));return T}function S(u,h){const g=u.tag;return!g||typeof u.props?.__ignoreMap<"u"?g:h[g]||h[L(g)]||h[tn(u.tag)]||g}return(u,h)=>a.value?Mn(u.$slots,"empty",{key:1,body:t.value,data:c.value,dataContentId:J(r)?n.value.id:void 0}):(Rn(),Dn(de,{key:0,body:t.value,data:c.value,class:Ln(e.class),tag:e.tag,prose:e.prose,unwrap:e.unwrap,components:f.value,"data-content-id":J(r)?n.value.id:void 0},null,8,["body","data","class","tag","prose","unwrap","components","data-content-id"]))}},be=Object.assign(he,{__name:"ContentRenderer"});function Pe(n){const l=En(),e=Un(),{locale:r,locales:t,isEnabled:a,switchLocalePath:c}=An(),m=b(()=>D(n.title)),d=b(()=>D(n.description)),p=b(()=>D(n.type)||"article"),s=b(()=>D(n.ogImage)),f=b(()=>D(n.publishedAt)),k=b(()=>D(n.modifiedAt)),P=b(()=>D(n.breadcrumbs)),O=b(()=>{if(e.url)return I(e.url,l.path)}),S=b(()=>e.url?In(e.url):"");Z({title:m,description:d,ogTitle:m,ogDescription:d,ogType:p,ogUrl:O,ogLocale:b(()=>a.value?r.value:void 0)}),Q({link:b(()=>{const u=[];if(O.value&&u.push({rel:"canonical",href:O.value}),a.value&&S.value){for(const g of t){const C=c(g.code);C&&u.push({rel:"alternate",hreflang:g.code,href:I(S.value,C)})}const h=c(t[0]?.code||"en");h&&u.push({rel:"alternate",hreflang:"x-default",href:I(S.value,h)})}return u})}),s.value&&Z({ogImage:s.value,twitterImage:s.value}),Q({script:b(()=>{const u=[];if(!S.value||!m.value)return u;const h=I(S.value,l.path);if(p.value==="article"){const g={"@context":"https://schema.org","@type":"Article",headline:m.value,description:d.value,url:h,mainEntityOfPage:{"@type":"WebPage","@id":h}};f.value&&(g.datePublished=f.value),k.value&&(g.dateModified=k.value),e.name&&(g.publisher={"@type":"Organization",name:e.name}),u.push({type:"application/ld+json",innerHTML:JSON.stringify(g)})}if(p.value==="website"){const g={"@context":"https://schema.org","@type":"WebSite",name:e.name||m.value,description:d.value,url:S.value};u.push({type:"application/ld+json",innerHTML:JSON.stringify(g)})}if(P.value&&P.value.length>0){const g={"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:P.value.map((C,T)=>({"@type":"ListItem",position:T+1,name:C.title,item:I(S.value,C.path)}))};u.push({type:"application/ld+json",innerHTML:JSON.stringify(g)})}return u})})}export{be as _,Pe as u}; diff --git a/docus/dist/_nuxt/p9GVdgbx.js b/docus/dist/_nuxt/p9GVdgbx.js new file mode 100644 index 0000000..00b2329 --- /dev/null +++ b/docus/dist/_nuxt/p9GVdgbx.js @@ -0,0 +1 @@ +import{a0 as g,a1 as f,aQ as b,e as r,ac as t,s as e,af as v,B as x,ab as y,q as d,c as u,am as p,o as h}from"./B3fabVUf.js";const k={slots:{base:["relative text-2xl text-highlighted font-bold mt-12 mb-6 scroll-mt-[calc(48px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(48px+var(--ui-header-height))] [&>a]:focus-visible:outline-primary [&>a>code]:border-dashed hover:[&>a>code]:border-primary hover:[&>a>code]:text-primary [&>a>code]:text-xl/7 [&>a>code]:font-bold","[&>a>code]:transition-colors"],leading:["absolute -ms-8 top-1 opacity-0 group-hover:opacity-100 group-focus:opacity-100 p-1 bg-elevated hover:text-primary rounded-md hidden lg:flex text-muted","transition"],leadingIcon:"size-4 shrink-0",link:"group lg:ps-2 lg:-ms-2"}},C=["id"],q=["href"],_={__name:"ProseH2",props:{id:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const l=a,i=g(),s=f("prose.h2",l),{headings:n}=b().public?.mdc||{},o=u(()=>p({extend:p(k),...i.ui?.prose?.h2||{}})()),m=u(()=>l.id&&typeof n?.anchorLinks=="object"&&n.anchorLinks.h2);return(c,B)=>(h(),r("h2",{id:a.id,class:t(o.value.base({class:[e(s)?.base,l.class]}))},[a.id&&m.value?(h(),r("a",{key:0,href:`#${a.id}`,class:t(o.value.link({class:e(s)?.link}))},[v("span",{class:t(o.value.leading({class:e(s)?.leading}))},[x(y,{name:e(i).ui.icons.hash,class:t(o.value.leadingIcon({class:e(s)?.leadingIcon}))},null,8,["name","class"])],2),d(c.$slots,"default")],10,q)):d(c.$slots,"default",{key:1})],10,C))}};export{_ as default}; diff --git a/docus/dist/_nuxt/qDOTQ2yj.js b/docus/dist/_nuxt/qDOTQ2yj.js new file mode 100644 index 0000000..64eb9fe --- /dev/null +++ b/docus/dist/_nuxt/qDOTQ2yj.js @@ -0,0 +1 @@ +import{a0 as c,a1 as p,e as l,q as u,ac as i,s as m,c as f,am as e,o as d}from"./B3fabVUf.js";const g={base:""},b={__name:"ProseStrong",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const s=a,o=c(),t=p("prose.strong",s),r=f(()=>e({extend:e(g),...o.ui?.prose?.strong||{}}));return(n,_)=>(d(),l("strong",{class:i(r.value({class:[m(t)?.base,s.class]}))},[u(n.$slots,"default")],2))}};export{b as default}; diff --git a/docus/dist/_nuxt/sqlite3-DBpDb1lf.wasm b/docus/dist/_nuxt/sqlite3-DBpDb1lf.wasm new file mode 100644 index 0000000..f001d7a Binary files /dev/null and b/docus/dist/_nuxt/sqlite3-DBpDb1lf.wasm differ diff --git a/docus/dist/_nuxt/sqlite3-opfs-async-proxy-C_otN2ZJ.js b/docus/dist/_nuxt/sqlite3-opfs-async-proxy-C_otN2ZJ.js new file mode 100644 index 0000000..d21c5e4 --- /dev/null +++ b/docus/dist/_nuxt/sqlite3-opfs-async-proxy-C_otN2ZJ.js @@ -0,0 +1 @@ +(function(){"use strict";const O=(w,...t)=>postMessage({type:w,payload:t}),v=function(){const w=function(...e){throw new Error(e.join(" "))};globalThis.window===globalThis?w("This code cannot run from the main thread.","Load it as a Worker from a separate Worker."):navigator?.storage?.getDirectory||w("This API requires navigator.storage.getDirectory.");const t=Object.create(null);t.verbose=1;const D={0:console.error.bind(console),1:console.warn.bind(console),2:console.log.bind(console)},A=(e,...s)=>{t.verbose>e&&D[e]("OPFS asyncer:",...s)},g=(...e)=>A(2,...e),S=(...e)=>A(1,...e),h=(...e)=>A(0,...e),E=Object.create(null),I=new Set,k=function(e,s){const n=new URL(e,"file://irrelevant").pathname;return s?n.split("/").filter(o=>!!o):n},x=async function(s,n=!1){const o=k(s,!0),a=o.pop();let i=t.rootDir;for(const r of o)r&&(i=await i.getDirectoryHandle(r,{create:!!n}));return[i,a]},R=async e=>{if(e.syncHandle){g("Closing sync handle for",e.filenameAbs);const s=e.syncHandle;return delete e.syncHandle,delete e.xLock,I.delete(e.fid),s.close()}},F=async e=>{try{await R(e)}catch(s){S("closeSyncHandleNoThrow() ignoring:",s,e)}},z=async()=>{if(I.size)for(const e of I){const s=E[e];await F(s),g("Auto-unlocked",e,s.filenameAbs)}},T=async e=>{if(e.releaseImplicitLocks&&I.has(e.fid))return F(e)};class b extends Error{constructor(s,...n){super([...n,": "+s.name+":",s.message].join(" "),{cause:s}),this.name="GetSyncHandleError"}}b.convertRc=(e,s)=>{if(e instanceof b){if(e.cause.name==="NoModificationAllowedError"||e.cause.name==="DOMException"&&e.cause.message.indexOf("Access Handles cannot")===0)return t.sq3Codes.SQLITE_BUSY;if(e.cause.name==="NotFoundError")return t.sq3Codes.SQLITE_CANTOPEN}else if(e?.name==="NotFoundError")return t.sq3Codes.SQLITE_CANTOPEN;return s};const m=async(e,s)=>{if(!e.syncHandle){const n=performance.now();g("Acquiring sync handle for",e.filenameAbs);const o=6,a=t.asyncIdleWaitTime*2;let i=1,r=a;for(;;r=a*++i)try{e.syncHandle=await e.fileHandle.createSyncAccessHandle();break}catch(c){if(i===o)throw new b(c,"Error getting sync handle for",s+"().",o,"attempts failed.",e.filenameAbs);S("Error getting sync handle for",s+"(). Waiting",r,"ms and trying again.",e.filenameAbs,c),Atomics.wait(t.sabOPView,t.opIds.retry,0,r)}g("Got",s+"() sync handle for",e.filenameAbs,"in",performance.now()-n,"ms"),e.xLock||(I.add(e.fid),g("Acquired implicit lock for",s+"()",e.fid,e.filenameAbs))}return e.syncHandle},d=(e,s)=>{g(e+"() => notify(",s,")"),Atomics.store(t.sabOPView,t.opIds.rc,s),Atomics.notify(t.sabOPView,t.opIds.rc)},H=function(e,s){s.readOnly&&w(e+"(): File is read-only: "+s.filenameAbs)};let L=!1;const _={"opfs-async-shutdown":async()=>{L=!0,d("opfs-async-shutdown",0)},mkdir:async e=>{let s=0;try{await x(e+"/filepart",!0)}catch(n){t.s11n.storeException(2,n),s=t.sq3Codes.SQLITE_IOERR}d("mkdir",s)},xAccess:async e=>{let s=0;try{const[n,o]=await x(e);await n.getFileHandle(o)}catch(n){t.s11n.storeException(2,n),s=t.sq3Codes.SQLITE_IOERR}d("xAccess",s)},xClose:async function(e){const s="xClose";I.delete(e);const n=E[e];let o=0;if(n){if(delete E[e],await R(n),n.deleteOnClose)try{await n.dirHandle.removeEntry(n.filenamePart)}catch(a){S("Ignoring dirHandle.removeEntry() failure of",n,a)}}else t.s11n.serialize(),o=t.sq3Codes.SQLITE_NOTFOUND;d(s,o)},xDelete:async function(...e){const s=await _.xDeleteNoWait(...e);d("xDelete",s)},xDeleteNoWait:async function(e,s=0,n=!1){let o=0;try{for(;e;){const[a,i]=await x(e,!1);if(!i||(await a.removeEntry(i,{recursive:n}),s!==4660))break;n=!1,e=k(e,!0),e.pop(),e=e.join("/")}}catch(a){t.s11n.storeException(2,a),o=t.sq3Codes.SQLITE_IOERR_DELETE}return o},xFileSize:async function(e){const s=E[e];let n=0;try{const o=await(await m(s,"xFileSize")).getSize();t.s11n.serialize(Number(o))}catch(o){t.s11n.storeException(1,o),n=b.convertRc(o,t.sq3Codes.SQLITE_IOERR)}await T(s),d("xFileSize",n)},xLock:async function(e,s){const n=E[e];let o=0;const a=n.xLock;if(n.xLock=s,!n.syncHandle)try{await m(n,"xLock"),I.delete(e)}catch(i){t.s11n.storeException(1,i),o=b.convertRc(i,t.sq3Codes.SQLITE_IOERR_LOCK),n.xLock=a}d("xLock",o)},xOpen:async function(e,s,n,o){const a="xOpen",i=t.sq3Codes.SQLITE_OPEN_CREATE&n;try{let r,c;try{[r,c]=await x(s,!!i)}catch(f){t.s11n.storeException(1,f),d(a,t.sq3Codes.SQLITE_NOTFOUND);return}if(t.opfsFlags.OPFS_UNLINK_BEFORE_OPEN&o)try{await r.removeEntry(c)}catch{}const y=await r.getFileHandle(c,{create:i}),l=Object.assign(Object.create(null),{fid:e,filenameAbs:s,filenamePart:c,dirHandle:r,fileHandle:y,sabView:t.sabFileBufView,readOnly:!i&&!!(t.sq3Codes.SQLITE_OPEN_READONLY&n),deleteOnClose:!!(t.sq3Codes.SQLITE_OPEN_DELETEONCLOSE&n)});l.releaseImplicitLocks=o&t.opfsFlags.OPFS_UNLOCK_ASAP||t.opfsFlags.defaultUnlockAsap,E[e]=l,d(a,0)}catch(r){h(a,r),t.s11n.storeException(1,r),d(a,t.sq3Codes.SQLITE_IOERR)}},xRead:async function(e,s,n){let o=0,a;const i=E[e];try{a=(await m(i,"xRead")).read(i.sabView.subarray(0,s),{at:Number(n)}),a{if(t.s11n)return t.s11n;const e=new TextDecoder,s=new TextEncoder("utf-8"),n=new Uint8Array(t.sabIO,t.sabS11nOffset,t.sabS11nSize),o=new DataView(t.sabIO,t.sabS11nOffset,t.sabS11nSize);t.s11n=Object.create(null);const a=Object.create(null);a.number={id:1,size:8,getter:"getFloat64",setter:"setFloat64"},a.bigint={id:2,size:8,getter:"getBigInt64",setter:"setBigInt64"},a.boolean={id:3,size:4,getter:"getInt32",setter:"setInt32"},a.string={id:4};const i=c=>a[typeof c]||w("Maintenance required: this value type cannot be serialized.",c),r=c=>{switch(c){case a.number.id:return a.number;case a.bigint.id:return a.bigint;case a.boolean.id:return a.boolean;case a.string.id:return a.string;default:w("Invalid type ID:",c)}};return t.s11n.deserialize=function(c=!1){const y=n[0],l=y?[]:null;if(y){const f=[];let u=1,p,C,N;for(p=0;p{c<=t.asyncS11nExceptions&&t.s11n.serialize([y.name,": ",y.message].join(""))}:()=>{},t.s11n},q=async function(){const s=Object.create(null);for(let n of Object.keys(t.opIds)){const o=_[n];if(!o)continue;const a=Object.create(null);s[t.opIds[n]]=a,a.key=n,a.f=o}for(;!L;)try{if(Atomics.wait(t.sabOPView,t.opIds.whichOp,0,t.asyncIdleWaitTime)!=="not-equal"){await z();continue}const n=Atomics.load(t.sabOPView,t.opIds.whichOp);Atomics.store(t.sabOPView,t.opIds.whichOp,0);const o=s[n]??w("No waitLoop handler for whichOp #",n),a=t.s11n.deserialize(!0)||[];o.f?await o.f(...a):h("Missing callback for opId",n)}catch(n){h("in waitLoop():",n)}};navigator.storage.getDirectory().then(function(e){t.rootDir=e,globalThis.onmessage=function({data:s}){switch(s.type){case"opfs-async-init":{const n=s.args;for(const o in n)t[o]=n[o];t.verbose=n.verbose??1,t.sabOPView=new Int32Array(t.sabOP),t.sabFileBufView=new Uint8Array(t.sabIO,0,t.fileBufferSize),t.sabS11nView=new Uint8Array(t.sabIO,t.sabS11nOffset,t.sabS11nSize),Object.keys(_).forEach(o=>{Number.isFinite(t.opIds[o])||w("Maintenance required: missing state.opIds[",o,"]")}),Q(),g("init state",t),O("opfs-async-inited"),q();break}case"opfs-async-restart":L&&(S("Restarting after opfs-async-shutdown. Might or might not work."),L=!1,q());break}},O("opfs-async-loaded")}).catch(e=>h("error initializing OPFS asyncer:",e))};globalThis.SharedArrayBuffer?globalThis.Atomics?!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle||!globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle||!navigator?.storage?.getDirectory?O("opfs-unavailable","Missing required OPFS APIs."):v():O("opfs-unavailable","Missing Atomics API.","The server must emit the COOP/COEP response headers to enable that."):O("opfs-unavailable","Missing SharedArrayBuffer API.","The server must emit the COOP/COEP response headers to enable that.")})(); diff --git a/docus/dist/_nuxt/sqlite3-worker1-bundler-friendly-Bv6ABw9v.js b/docus/dist/_nuxt/sqlite3-worker1-bundler-friendly-Bv6ABw9v.js new file mode 100644 index 0000000..0c984f8 --- /dev/null +++ b/docus/dist/_nuxt/sqlite3-worker1-bundler-friendly-Bv6ABw9v.js @@ -0,0 +1,3 @@ +(function(){"use strict";var $e=(()=>{var Ie=self.location.href;return function(qe={}){var be,i=qe,ve,Ee,Ke=new Promise((e,t)=>{ve=e,Ee=t}),lt=typeof window=="object",Ue=typeof importScripts=="function";typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";const Ft=globalThis.sqlite3InitModuleState||Object.assign(Object.create(null),{debugModule:()=>{}});delete globalThis.sqlite3InitModuleState,Ft.debugModule("globalThis.location =",globalThis.location);var at=Object.assign({},i),ct="./this.program",ye="";function Ot(e){return i.locateFile?i.locateFile(e,ye):ye+e}var Je,ze;(lt||Ue)&&(Ue?ye=self.location.href:typeof document<"u"&&document.currentScript&&(ye=document.currentScript.src),Ie&&(ye=Ie),ye.startsWith("blob:")?ye="":ye=ye.substr(0,ye.replace(/[?#].*/,"").lastIndexOf("/")+1),Ue&&(ze=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),Je=e=>fetch(e,{credentials:"same-origin"}).then(t=>t.ok?t.arrayBuffer():Promise.reject(new Error(t.status+" : "+t.url))));var Xe=i.print||console.log.bind(console),ke=i.printErr||console.error.bind(console);Object.assign(i,at),at=null,i.arguments&&i.arguments,i.thisProgram&&(ct=i.thisProgram);var Qe=i.wasmBinary,Te,_t=!1,ge,Pe,Ne,ce,he,xe;function ut(){var e=Te.buffer;i.HEAP8=ge=new Int8Array(e),i.HEAP16=Ne=new Int16Array(e),i.HEAPU8=Pe=new Uint8Array(e),i.HEAPU16=new Uint16Array(e),i.HEAP32=ce=new Int32Array(e),i.HEAPU32=he=new Uint32Array(e),i.HEAPF32=new Float32Array(e),i.HEAPF64=new Float64Array(e),i.HEAP64=xe=new BigInt64Array(e),i.HEAPU64=new BigUint64Array(e)}if(i.wasmMemory)Te=i.wasmMemory;else{var Pt=i.INITIAL_MEMORY||16777216;Te=new WebAssembly.Memory({initial:Pt/65536,maximum:32768})}ut();var ft=[],dt=[],pt=[];function Lt(){var e=i.preRun;e&&(typeof e=="function"&&(e=[e]),e.forEach(Rt)),tt(ft)}function Ct(){!i.noFSInit&&!a.initialized&&a.init(),a.ignorePermissions=!1,tt(dt)}function Dt(){var e=i.postRun;e&&(typeof e=="function"&&(e=[e]),e.forEach(Mt)),tt(pt)}function Rt(e){ft.unshift(e)}function Nt(e){dt.unshift(e)}function Mt(e){pt.unshift(e)}var Fe=0,Me=null;function Zn(e){return e}function Ye(e){Fe++,i.monitorRunDependencies?.(Fe)}function We(e){if(Fe--,i.monitorRunDependencies?.(Fe),Fe==0&&Me){var t=Me;Me=null,t()}}function Ze(e){i.onAbort?.(e),e="Aborted("+e+")",ke(e),_t=!0,e+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(e);throw Ee(t),t}var jt="data:application/octet-stream;base64,",ht=e=>e.startsWith(jt);function Bt(){if(i.locateFile){var e="sqlite3.wasm";return ht(e)?e:Ot(e)}return new URL(""+new URL("sqlite3-DBpDb1lf.wasm",self.location.href).href,self.location.href).href}var et;function mt(e){if(e==et&&Qe)return new Uint8Array(Qe);if(ze)return ze(e);throw"both async and sync fetching of the wasm failed"}function Ut(e){return Qe?Promise.resolve().then(()=>mt(e)):Je(e).then(t=>new Uint8Array(t),()=>mt(e))}function gt(e,t,n){return Ut(e).then(r=>WebAssembly.instantiate(r,t)).then(n,r=>{ke(`failed to asynchronously prepare wasm: ${r}`),Ze(r)})}function zt(e,t,n,r){return!e&&typeof WebAssembly.instantiateStreaming=="function"&&!ht(t)&&typeof fetch=="function"?fetch(t,{credentials:"same-origin"}).then(s=>{var o=WebAssembly.instantiateStreaming(s,n);return o.then(r,function(p){return ke(`wasm streaming compile failed: ${p}`),ke("falling back to ArrayBuffer instantiation"),gt(t,n,r)})}):gt(t,n,r)}function Qt(){return{env:xt,wasi_snapshot_preview1:xt}}function Wt(){var e=Qt();function t(r,s){return h=r.exports,Nt(h.__wasm_call_ctors),We(),h}Ye();function n(r){t(r.instance)}if(i.instantiateWasm)try{return i.instantiateWasm(e,t)}catch(r){ke(`Module.instantiateWasm callback failed with error: ${r}`),Ee(r)}return et??=Bt(),zt(Qe,et,e,n).catch(Ee),{}}var tt=e=>{e.forEach(t=>t(i))};i.noExitRuntime;var _e={isAbs:e=>e.charAt(0)==="/",splitPath:e=>{var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return t.exec(e).slice(1)},normalizeArray:(e,t)=>{for(var n=0,r=e.length-1;r>=0;r--){var s=e[r];s==="."?e.splice(r,1):s===".."?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n;n--)e.unshift("..");return e},normalize:e=>{var t=_e.isAbs(e),n=e.substr(-1)==="/";return e=_e.normalizeArray(e.split("/").filter(r=>!!r),!t).join("/"),!e&&!t&&(e="."),e&&n&&(e+="/"),(t?"/":"")+e},dirname:e=>{var t=_e.splitPath(e),n=t[0],r=t[1];return!n&&!r?".":(r&&(r=r.substr(0,r.length-1)),n+r)},basename:e=>{if(e==="/")return"/";e=_e.normalize(e),e=e.replace(/\/$/,"");var t=e.lastIndexOf("/");return t===-1?e:e.substr(t+1)},join:(...e)=>_e.normalize(e.join("/")),join2:(e,t)=>_e.normalize(e+"/"+t)},Ht=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return e=>crypto.getRandomValues(e);Ze("initRandomDevice")},qt=e=>(qt=Ht())(e),Se={resolve:(...e)=>{for(var t="",n=!1,r=e.length-1;r>=-1&&!n;r--){var s=r>=0?e[r]:a.cwd();if(typeof s!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!s)return"";t=s+"/"+t,n=_e.isAbs(s)}return t=_e.normalizeArray(t.split("/").filter(o=>!!o),!n).join("/"),(n?"/":"")+t||"."},relative:(e,t)=>{e=Se.resolve(e).substr(1),t=Se.resolve(t).substr(1);function n(R){for(var z=0;z=0&&R[W]==="";W--);return z>W?[]:R.slice(z,W-z+1)}for(var r=n(e.split("/")),s=n(t.split("/")),o=Math.min(r.length,s.length),p=o,g=0;g{for(var r=t+n,s=t;e[s]&&!(s>=r);)++s;if(s-t>16&&e.buffer&&bt)return bt.decode(e.subarray(t,s));for(var o="";t>10,56320|R&1023)}}return o},nt=[],He=e=>{for(var t=0,n=0;n=55296&&r<=57343?(t+=4,++n):t+=3}return t},rt=(e,t,n,r)=>{if(!(r>0))return 0;for(var s=n,o=n+r-1,p=0;p=55296&&g<=57343){var O=e.charCodeAt(++p);g=65536+((g&1023)<<10)|O&1023}if(g<=127){if(n>=o)break;t[n++]=g}else if(g<=2047){if(n+1>=o)break;t[n++]=192|g>>6,t[n++]=128|g&63}else if(g<=65535){if(n+2>=o)break;t[n++]=224|g>>12,t[n++]=128|g>>6&63,t[n++]=128|g&63}else{if(n+3>=o)break;t[n++]=240|g>>18,t[n++]=128|g>>12&63,t[n++]=128|g>>6&63,t[n++]=128|g&63}}return t[n]=0,n-s};function yt(e,t,n){var r=He(e)+1,s=new Array(r),o=rt(e,s,0,s.length);return s.length=o,s}var Vt=()=>{if(!nt.length){var e=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(e=window.prompt("Input: "),e!==null&&(e+=` +`)),!e)return null;nt=yt(e)}return nt.shift()},Oe={ttys:[],init(){},shutdown(){},register(e,t){Oe.ttys[e]={input:[],output:[],ops:t},a.registerDevice(e,Oe.stream_ops)},stream_ops:{open(e){var t=Oe.ttys[e.node.rdev];if(!t)throw new a.ErrnoError(43);e.tty=t,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,t,n,r,s){if(!e.tty||!e.tty.ops.get_char)throw new a.ErrnoError(60);for(var o=0,p=0;p0&&(Xe(Le(e.output)),e.output=[])},ioctl_tcgets(e){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(e,t,n){return 0},ioctl_tiocgwinsz(e){return[24,80]}},default_tty1_ops:{put_char(e,t){t===null||t===10?(ke(Le(e.output)),e.output=[]):t!=0&&e.output.push(t)},fsync(e){e.output&&e.output.length>0&&(ke(Le(e.output)),e.output=[])}}},Gt=(e,t)=>{Pe.fill(0,e,e+t)},wt=(e,t)=>Math.ceil(e/t)*t,vt=e=>{e=wt(e,65536);var t=St(65536,e);return t&&Gt(t,e),t},ie={ops_table:null,mount(e){return ie.createNode(null,"/",16895,0)},createNode(e,t,n,r){if(a.isBlkdev(n)||a.isFIFO(n))throw new a.ErrnoError(63);ie.ops_table||={dir:{node:{getattr:ie.node_ops.getattr,setattr:ie.node_ops.setattr,lookup:ie.node_ops.lookup,mknod:ie.node_ops.mknod,rename:ie.node_ops.rename,unlink:ie.node_ops.unlink,rmdir:ie.node_ops.rmdir,readdir:ie.node_ops.readdir,symlink:ie.node_ops.symlink},stream:{llseek:ie.stream_ops.llseek}},file:{node:{getattr:ie.node_ops.getattr,setattr:ie.node_ops.setattr},stream:{llseek:ie.stream_ops.llseek,read:ie.stream_ops.read,write:ie.stream_ops.write,allocate:ie.stream_ops.allocate,mmap:ie.stream_ops.mmap,msync:ie.stream_ops.msync}},link:{node:{getattr:ie.node_ops.getattr,setattr:ie.node_ops.setattr,readlink:ie.node_ops.readlink},stream:{}},chrdev:{node:{getattr:ie.node_ops.getattr,setattr:ie.node_ops.setattr},stream:a.chrdev_stream_ops}};var s=a.createNode(e,t,n,r);return a.isDir(s.mode)?(s.node_ops=ie.ops_table.dir.node,s.stream_ops=ie.ops_table.dir.stream,s.contents={}):a.isFile(s.mode)?(s.node_ops=ie.ops_table.file.node,s.stream_ops=ie.ops_table.file.stream,s.usedBytes=0,s.contents=null):a.isLink(s.mode)?(s.node_ops=ie.ops_table.link.node,s.stream_ops=ie.ops_table.link.stream):a.isChrdev(s.mode)&&(s.node_ops=ie.ops_table.chrdev.node,s.stream_ops=ie.ops_table.chrdev.stream),s.timestamp=Date.now(),e&&(e.contents[t]=s,e.timestamp=s.timestamp),s},getFileDataAsTypedArray(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage(e,t){var n=e.contents?e.contents.length:0;if(!(n>=t)){var r=1024*1024;t=Math.max(t,n*(n>>0),n!=0&&(t=Math.max(t,256));var s=e.contents;e.contents=new Uint8Array(t),e.usedBytes>0&&e.contents.set(s.subarray(0,e.usedBytes),0)}},resizeFileStorage(e,t){if(e.usedBytes!=t)if(t==0)e.contents=null,e.usedBytes=0;else{var n=e.contents;e.contents=new Uint8Array(t),n&&e.contents.set(n.subarray(0,Math.min(t,e.usedBytes))),e.usedBytes=t}},node_ops:{getattr(e){var t={};return t.dev=a.isChrdev(e.mode)?e.id:1,t.ino=e.id,t.mode=e.mode,t.nlink=1,t.uid=0,t.gid=0,t.rdev=e.rdev,a.isDir(e.mode)?t.size=4096:a.isFile(e.mode)?t.size=e.usedBytes:a.isLink(e.mode)?t.size=e.link.length:t.size=0,t.atime=new Date(e.timestamp),t.mtime=new Date(e.timestamp),t.ctime=new Date(e.timestamp),t.blksize=4096,t.blocks=Math.ceil(t.size/t.blksize),t},setattr(e,t){t.mode!==void 0&&(e.mode=t.mode),t.timestamp!==void 0&&(e.timestamp=t.timestamp),t.size!==void 0&&ie.resizeFileStorage(e,t.size)},lookup(e,t){throw a.genericErrors[44]},mknod(e,t,n,r){return ie.createNode(e,t,n,r)},rename(e,t,n){if(a.isDir(e.mode)){var r;try{r=a.lookupNode(t,n)}catch{}if(r)for(var s in r.contents)throw new a.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=n,t.contents[n]=e,t.timestamp=e.parent.timestamp},unlink(e,t){delete e.contents[t],e.timestamp=Date.now()},rmdir(e,t){var n=a.lookupNode(e,t);for(var r in n.contents)throw new a.ErrnoError(55);delete e.contents[t],e.timestamp=Date.now()},readdir(e){var t=[".",".."];for(var n of Object.keys(e.contents))t.push(n);return t},symlink(e,t,n){var r=ie.createNode(e,t,41471,0);return r.link=n,r},readlink(e){if(!a.isLink(e.mode))throw new a.ErrnoError(28);return e.link}},stream_ops:{read(e,t,n,r,s){var o=e.node.contents;if(s>=e.node.usedBytes)return 0;var p=Math.min(e.node.usedBytes-s,r);if(p>8&&o.subarray)t.set(o.subarray(s,s+p),n);else for(var g=0;g0||n+t{var s=`al ${e}`;Je(e).then(o=>{t(new Uint8Array(o)),s&&We()},o=>{if(n)n();else throw`Loading data file "${e}" failed.`}),s&&Ye()},Kt=(e,t,n,r,s,o)=>{a.createDataFile(e,t,n,r,s,o)},Jt=i.preloadPlugins||[],Xt=(e,t,n,r)=>{typeof Browser<"u"&&Browser.init();var s=!1;return Jt.forEach(o=>{s||o.canHandle(t)&&(o.handle(e,t,n,r),s=!0)}),s},Yt=(e,t,n,r,s,o,p,g,O,R)=>{var z=t?Se.resolve(_e.join2(e,t)):e;function W(T){function A(D){R?.(),g||Kt(e,t,D,r,s,O),o?.(),We()}Xt(T,z,A,()=>{p?.(),We()})||A(T)}Ye(),typeof n=="string"?$t(n,W,p):W(n)},Zt=e=>{var t={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},n=t[e];if(typeof n>"u")throw new Error(`Unknown file open mode: ${e}`);return n},st=(e,t)=>{var n=0;return e&&(n|=365),t&&(n|=146),n},a={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(e){this.name="ErrnoError",this.errno=e}},genericErrors:{},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(e){this.node=e}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(e){this.shared.flags=e}get position(){return this.shared.position}set position(e){this.shared.position=e}},FSNode:class{constructor(e,t,n,r){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=a.nextInode++,this.name=t,this.mode=n,this.node_ops={},this.stream_ops={},this.rdev=r,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(e){e?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(e){e?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return a.isDir(this.mode)}get isDevice(){return a.isChrdev(this.mode)}},lookupPath(e,t={}){if(e=Se.resolve(e),!e)return{path:"",node:null};var n={follow_mount:!0,recurse_count:0};if(t=Object.assign(n,t),t.recurse_count>8)throw new a.ErrnoError(32);for(var r=e.split("/").filter(W=>!!W),s=a.root,o="/",p=0;p40)throw new a.ErrnoError(32)}}return{path:o,node:s}},getPath(e){for(var t;;){if(a.isRoot(e)){var n=e.mount.mountpoint;return t?n[n.length-1]!=="/"?`${n}/${t}`:n+t:n}t=t?`${e.name}/${t}`:e.name,e=e.parent}},hashName(e,t){for(var n=0,r=0;r>>0)%a.nameTable.length},hashAddNode(e){var t=a.hashName(e.parent.id,e.name);e.name_next=a.nameTable[t],a.nameTable[t]=e},hashRemoveNode(e){var t=a.hashName(e.parent.id,e.name);if(a.nameTable[t]===e)a.nameTable[t]=e.name_next;else for(var n=a.nameTable[t];n;){if(n.name_next===e){n.name_next=e.name_next;break}n=n.name_next}},lookupNode(e,t){var n=a.mayLookup(e);if(n)throw new a.ErrnoError(n);for(var r=a.hashName(e.id,t),s=a.nameTable[r];s;s=s.name_next){var o=s.name;if(s.parent.id===e.id&&o===t)return s}return a.lookup(e,t)},createNode(e,t,n,r){var s=new a.FSNode(e,t,n,r);return a.hashAddNode(s),s},destroyNode(e){a.hashRemoveNode(e)},isRoot(e){return e===e.parent},isMountpoint(e){return!!e.mounted},isFile(e){return(e&61440)===32768},isDir(e){return(e&61440)===16384},isLink(e){return(e&61440)===40960},isChrdev(e){return(e&61440)===8192},isBlkdev(e){return(e&61440)===24576},isFIFO(e){return(e&61440)===4096},isSocket(e){return(e&49152)===49152},flagsToPermissionString(e){var t=["r","w","rw"][e&3];return e&512&&(t+="w"),t},nodePermissions(e,t){return a.ignorePermissions?0:t.includes("r")&&!(e.mode&292)||t.includes("w")&&!(e.mode&146)||t.includes("x")&&!(e.mode&73)?2:0},mayLookup(e){if(!a.isDir(e.mode))return 54;var t=a.nodePermissions(e,"x");return t||(e.node_ops.lookup?0:2)},mayCreate(e,t){try{var n=a.lookupNode(e,t);return 20}catch{}return a.nodePermissions(e,"wx")},mayDelete(e,t,n){var r;try{r=a.lookupNode(e,t)}catch(o){return o.errno}var s=a.nodePermissions(e,"wx");if(s)return s;if(n){if(!a.isDir(r.mode))return 54;if(a.isRoot(r)||a.getPath(r)===a.cwd())return 10}else if(a.isDir(r.mode))return 31;return 0},mayOpen(e,t){return e?a.isLink(e.mode)?32:a.isDir(e.mode)&&(a.flagsToPermissionString(t)!=="r"||t&512)?31:a.nodePermissions(e,a.flagsToPermissionString(t)):44},MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=a.MAX_OPEN_FDS;e++)if(!a.streams[e])return e;throw new a.ErrnoError(33)},getStreamChecked(e){var t=a.getStream(e);if(!t)throw new a.ErrnoError(8);return t},getStream:e=>a.streams[e],createStream(e,t=-1){return e=Object.assign(new a.FSStream,e),t==-1&&(t=a.nextfd()),e.fd=t,a.streams[t]=e,e},closeStream(e){a.streams[e]=null},dupStream(e,t=-1){var n=a.createStream(e,t);return n.stream_ops?.dup?.(n),n},chrdev_stream_ops:{open(e){var t=a.getDevice(e.node.rdev);e.stream_ops=t.stream_ops,e.stream_ops.open?.(e)},llseek(){throw new a.ErrnoError(70)}},major:e=>e>>8,minor:e=>e&255,makedev:(e,t)=>e<<8|t,registerDevice(e,t){a.devices[e]={stream_ops:t}},getDevice:e=>a.devices[e],getMounts(e){for(var t=[],n=[e];n.length;){var r=n.pop();t.push(r),n.push(...r.mounts)}return t},syncfs(e,t){typeof e=="function"&&(t=e,e=!1),a.syncFSRequests++,a.syncFSRequests>1&&ke(`warning: ${a.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var n=a.getMounts(a.root.mount),r=0;function s(p){return a.syncFSRequests--,t(p)}function o(p){if(p)return o.errored?void 0:(o.errored=!0,s(p));++r>=n.length&&s(null)}n.forEach(p=>{if(!p.type.syncfs)return o(null);p.type.syncfs(p,e,o)})},mount(e,t,n){var r=n==="/",s=!n,o;if(r&&a.root)throw new a.ErrnoError(10);if(!r&&!s){var p=a.lookupPath(n,{follow_mount:!1});if(n=p.path,o=p.node,a.isMountpoint(o))throw new a.ErrnoError(10);if(!a.isDir(o.mode))throw new a.ErrnoError(54)}var g={type:e,opts:t,mountpoint:n,mounts:[]},O=e.mount(g);return O.mount=g,g.root=O,r?a.root=O:o&&(o.mounted=g,o.mount&&o.mount.mounts.push(g)),O},unmount(e){var t=a.lookupPath(e,{follow_mount:!1});if(!a.isMountpoint(t.node))throw new a.ErrnoError(28);var n=t.node,r=n.mounted,s=a.getMounts(r);Object.keys(a.nameTable).forEach(p=>{for(var g=a.nameTable[p];g;){var O=g.name_next;s.includes(g.mount)&&a.destroyNode(g),g=O}}),n.mounted=null;var o=n.mount.mounts.indexOf(r);n.mount.mounts.splice(o,1)},lookup(e,t){return e.node_ops.lookup(e,t)},mknod(e,t,n){var r=a.lookupPath(e,{parent:!0}),s=r.node,o=_e.basename(e);if(!o||o==="."||o==="..")throw new a.ErrnoError(28);var p=a.mayCreate(s,o);if(p)throw new a.ErrnoError(p);if(!s.node_ops.mknod)throw new a.ErrnoError(63);return s.node_ops.mknod(s,o,t,n)},create(e,t){return t=t!==void 0?t:438,t&=4095,t|=32768,a.mknod(e,t,0)},mkdir(e,t){return t=t!==void 0?t:511,t&=1023,t|=16384,a.mknod(e,t,0)},mkdirTree(e,t){for(var n=e.split("/"),r="",s=0;s"u"&&(n=t,t=438),t|=8192,a.mknod(e,t,n)},symlink(e,t){if(!Se.resolve(e))throw new a.ErrnoError(44);var n=a.lookupPath(t,{parent:!0}),r=n.node;if(!r)throw new a.ErrnoError(44);var s=_e.basename(t),o=a.mayCreate(r,s);if(o)throw new a.ErrnoError(o);if(!r.node_ops.symlink)throw new a.ErrnoError(63);return r.node_ops.symlink(r,s,e)},rename(e,t){var n=_e.dirname(e),r=_e.dirname(t),s=_e.basename(e),o=_e.basename(t),p,g,O;if(p=a.lookupPath(e,{parent:!0}),g=p.node,p=a.lookupPath(t,{parent:!0}),O=p.node,!g||!O)throw new a.ErrnoError(44);if(g.mount!==O.mount)throw new a.ErrnoError(75);var R=a.lookupNode(g,s),z=Se.relative(e,r);if(z.charAt(0)!==".")throw new a.ErrnoError(28);if(z=Se.relative(t,n),z.charAt(0)!==".")throw new a.ErrnoError(55);var W;try{W=a.lookupNode(O,o)}catch{}if(R!==W){var T=a.isDir(R.mode),A=a.mayDelete(g,s,T);if(A)throw new a.ErrnoError(A);if(A=W?a.mayDelete(O,o,T):a.mayCreate(O,o),A)throw new a.ErrnoError(A);if(!g.node_ops.rename)throw new a.ErrnoError(63);if(a.isMountpoint(R)||W&&a.isMountpoint(W))throw new a.ErrnoError(10);if(O!==g&&(A=a.nodePermissions(g,"w"),A))throw new a.ErrnoError(A);a.hashRemoveNode(R);try{g.node_ops.rename(R,O,o),R.parent=O}catch(D){throw D}finally{a.hashAddNode(R)}}},rmdir(e){var t=a.lookupPath(e,{parent:!0}),n=t.node,r=_e.basename(e),s=a.lookupNode(n,r),o=a.mayDelete(n,r,!0);if(o)throw new a.ErrnoError(o);if(!n.node_ops.rmdir)throw new a.ErrnoError(63);if(a.isMountpoint(s))throw new a.ErrnoError(10);n.node_ops.rmdir(n,r),a.destroyNode(s)},readdir(e){var t=a.lookupPath(e,{follow:!0}),n=t.node;if(!n.node_ops.readdir)throw new a.ErrnoError(54);return n.node_ops.readdir(n)},unlink(e){var t=a.lookupPath(e,{parent:!0}),n=t.node;if(!n)throw new a.ErrnoError(44);var r=_e.basename(e),s=a.lookupNode(n,r),o=a.mayDelete(n,r,!1);if(o)throw new a.ErrnoError(o);if(!n.node_ops.unlink)throw new a.ErrnoError(63);if(a.isMountpoint(s))throw new a.ErrnoError(10);n.node_ops.unlink(n,r),a.destroyNode(s)},readlink(e){var t=a.lookupPath(e),n=t.node;if(!n)throw new a.ErrnoError(44);if(!n.node_ops.readlink)throw new a.ErrnoError(28);return Se.resolve(a.getPath(n.parent),n.node_ops.readlink(n))},stat(e,t){var n=a.lookupPath(e,{follow:!t}),r=n.node;if(!r)throw new a.ErrnoError(44);if(!r.node_ops.getattr)throw new a.ErrnoError(63);return r.node_ops.getattr(r)},lstat(e){return a.stat(e,!0)},chmod(e,t,n){var r;if(typeof e=="string"){var s=a.lookupPath(e,{follow:!n});r=s.node}else r=e;if(!r.node_ops.setattr)throw new a.ErrnoError(63);r.node_ops.setattr(r,{mode:t&4095|r.mode&-4096,timestamp:Date.now()})},lchmod(e,t){a.chmod(e,t,!0)},fchmod(e,t){var n=a.getStreamChecked(e);a.chmod(n.node,t)},chown(e,t,n,r){var s;if(typeof e=="string"){var o=a.lookupPath(e,{follow:!r});s=o.node}else s=e;if(!s.node_ops.setattr)throw new a.ErrnoError(63);s.node_ops.setattr(s,{timestamp:Date.now()})},lchown(e,t,n){a.chown(e,t,n,!0)},fchown(e,t,n){var r=a.getStreamChecked(e);a.chown(r.node,t,n)},truncate(e,t){if(t<0)throw new a.ErrnoError(28);var n;if(typeof e=="string"){var r=a.lookupPath(e,{follow:!0});n=r.node}else n=e;if(!n.node_ops.setattr)throw new a.ErrnoError(63);if(a.isDir(n.mode))throw new a.ErrnoError(31);if(!a.isFile(n.mode))throw new a.ErrnoError(28);var s=a.nodePermissions(n,"w");if(s)throw new a.ErrnoError(s);n.node_ops.setattr(n,{size:t,timestamp:Date.now()})},ftruncate(e,t){var n=a.getStreamChecked(e);if((n.flags&2097155)===0)throw new a.ErrnoError(28);a.truncate(n.node,t)},utime(e,t,n){var r=a.lookupPath(e,{follow:!0}),s=r.node;s.node_ops.setattr(s,{timestamp:Math.max(t,n)})},open(e,t,n){if(e==="")throw new a.ErrnoError(44);t=typeof t=="string"?Zt(t):t,t&64?(n=typeof n>"u"?438:n,n=n&4095|32768):n=0;var r;if(typeof e=="object")r=e;else{e=_e.normalize(e);try{var s=a.lookupPath(e,{follow:!(t&131072)});r=s.node}catch{}}var o=!1;if(t&64)if(r){if(t&128)throw new a.ErrnoError(20)}else r=a.mknod(e,n,0),o=!0;if(!r)throw new a.ErrnoError(44);if(a.isChrdev(r.mode)&&(t&=-513),t&65536&&!a.isDir(r.mode))throw new a.ErrnoError(54);if(!o){var p=a.mayOpen(r,t);if(p)throw new a.ErrnoError(p)}t&512&&!o&&a.truncate(r,0),t&=-131713;var g=a.createStream({node:r,path:a.getPath(r),flags:t,seekable:!0,position:0,stream_ops:r.stream_ops,ungotten:[],error:!1});return g.stream_ops.open&&g.stream_ops.open(g),i.logReadFiles&&!(t&1)&&(e in a.readFiles||(a.readFiles[e]=1)),g},close(e){if(a.isClosed(e))throw new a.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(t){throw t}finally{a.closeStream(e.fd)}e.fd=null},isClosed(e){return e.fd===null},llseek(e,t,n){if(a.isClosed(e))throw new a.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new a.ErrnoError(70);if(n!=0&&n!=1&&n!=2)throw new a.ErrnoError(28);return e.position=e.stream_ops.llseek(e,t,n),e.ungotten=[],e.position},read(e,t,n,r,s){if(r<0||s<0)throw new a.ErrnoError(28);if(a.isClosed(e))throw new a.ErrnoError(8);if((e.flags&2097155)===1)throw new a.ErrnoError(8);if(a.isDir(e.node.mode))throw new a.ErrnoError(31);if(!e.stream_ops.read)throw new a.ErrnoError(28);var o=typeof s<"u";if(!o)s=e.position;else if(!e.seekable)throw new a.ErrnoError(70);var p=e.stream_ops.read(e,t,n,r,s);return o||(e.position+=p),p},write(e,t,n,r,s,o){if(r<0||s<0)throw new a.ErrnoError(28);if(a.isClosed(e))throw new a.ErrnoError(8);if((e.flags&2097155)===0)throw new a.ErrnoError(8);if(a.isDir(e.node.mode))throw new a.ErrnoError(31);if(!e.stream_ops.write)throw new a.ErrnoError(28);e.seekable&&e.flags&1024&&a.llseek(e,0,2);var p=typeof s<"u";if(!p)s=e.position;else if(!e.seekable)throw new a.ErrnoError(70);var g=e.stream_ops.write(e,t,n,r,s,o);return p||(e.position+=g),g},allocate(e,t,n){if(a.isClosed(e))throw new a.ErrnoError(8);if(t<0||n<=0)throw new a.ErrnoError(28);if((e.flags&2097155)===0)throw new a.ErrnoError(8);if(!a.isFile(e.node.mode)&&!a.isDir(e.node.mode))throw new a.ErrnoError(43);if(!e.stream_ops.allocate)throw new a.ErrnoError(138);e.stream_ops.allocate(e,t,n)},mmap(e,t,n,r,s){if((r&2)!==0&&(s&2)===0&&(e.flags&2097155)!==2)throw new a.ErrnoError(2);if((e.flags&2097155)===1)throw new a.ErrnoError(2);if(!e.stream_ops.mmap)throw new a.ErrnoError(43);if(!t)throw new a.ErrnoError(28);return e.stream_ops.mmap(e,t,n,r,s)},msync(e,t,n,r,s){return e.stream_ops.msync?e.stream_ops.msync(e,t,n,r,s):0},ioctl(e,t,n){if(!e.stream_ops.ioctl)throw new a.ErrnoError(59);return e.stream_ops.ioctl(e,t,n)},readFile(e,t={}){if(t.flags=t.flags||0,t.encoding=t.encoding||"binary",t.encoding!=="utf8"&&t.encoding!=="binary")throw new Error(`Invalid encoding type "${t.encoding}"`);var n,r=a.open(e,t.flags),s=a.stat(e),o=s.size,p=new Uint8Array(o);return a.read(r,p,0,o,0),t.encoding==="utf8"?n=Le(p):t.encoding==="binary"&&(n=p),a.close(r),n},writeFile(e,t,n={}){n.flags=n.flags||577;var r=a.open(e,n.flags,n.mode);if(typeof t=="string"){var s=new Uint8Array(He(t)+1),o=rt(t,s,0,s.length);a.write(r,s,0,o,void 0,n.canOwn)}else if(ArrayBuffer.isView(t))a.write(r,t,0,t.byteLength,void 0,n.canOwn);else throw new Error("Unsupported data type");a.close(r)},cwd:()=>a.currentPath,chdir(e){var t=a.lookupPath(e,{follow:!0});if(t.node===null)throw new a.ErrnoError(44);if(!a.isDir(t.node.mode))throw new a.ErrnoError(54);var n=a.nodePermissions(t.node,"x");if(n)throw new a.ErrnoError(n);a.currentPath=t.path},createDefaultDirectories(){a.mkdir("/tmp"),a.mkdir("/home"),a.mkdir("/home/web_user")},createDefaultDevices(){a.mkdir("/dev"),a.registerDevice(a.makedev(1,3),{read:()=>0,write:(r,s,o,p,g)=>p}),a.mkdev("/dev/null",a.makedev(1,3)),Oe.register(a.makedev(5,0),Oe.default_tty_ops),Oe.register(a.makedev(6,0),Oe.default_tty1_ops),a.mkdev("/dev/tty",a.makedev(5,0)),a.mkdev("/dev/tty1",a.makedev(6,0));var e=new Uint8Array(1024),t=0,n=()=>(t===0&&(t=qt(e).byteLength),e[--t]);a.createDevice("/dev","random",n),a.createDevice("/dev","urandom",n),a.mkdir("/dev/shm"),a.mkdir("/dev/shm/tmp")},createSpecialDirectories(){a.mkdir("/proc");var e=a.mkdir("/proc/self");a.mkdir("/proc/self/fd"),a.mount({mount(){var t=a.createNode(e,"fd",16895,73);return t.node_ops={lookup(n,r){var s=+r,o=a.getStreamChecked(s),p={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>o.path}};return p.parent=p,p}},t}},{},"/proc/self/fd")},createStandardStreams(e,t,n){e?a.createDevice("/dev","stdin",e):a.symlink("/dev/tty","/dev/stdin"),t?a.createDevice("/dev","stdout",null,t):a.symlink("/dev/tty","/dev/stdout"),n?a.createDevice("/dev","stderr",null,n):a.symlink("/dev/tty1","/dev/stderr"),a.open("/dev/stdin",0),a.open("/dev/stdout",1),a.open("/dev/stderr",1)},staticInit(){[44].forEach(e=>{a.genericErrors[e]=new a.ErrnoError(e),a.genericErrors[e].stack=""}),a.nameTable=new Array(4096),a.mount(ie,{},"/"),a.createDefaultDirectories(),a.createDefaultDevices(),a.createSpecialDirectories(),a.filesystems={MEMFS:ie}},init(e,t,n){a.initialized=!0,e??=i.stdin,t??=i.stdout,n??=i.stderr,a.createStandardStreams(e,t,n)},quit(){a.initialized=!1;for(var e=0;ethis.length-1||A<0)){var D=A%this.chunkSize,q=A/this.chunkSize|0;return this.getter(q)[D]}}setDataGetter(A){this.getter=A}cacheLength(){var A=new XMLHttpRequest;if(A.open("HEAD",n,!1),A.send(null),!(A.status>=200&&A.status<300||A.status===304))throw new Error("Couldn't load "+n+". Status: "+A.status);var D=Number(A.getResponseHeader("Content-length")),q,w=(q=A.getResponseHeader("Accept-Ranges"))&&q==="bytes",x=(q=A.getResponseHeader("Content-Encoding"))&&q==="gzip",N=1024*1024;w||(N=D);var P=(L,$)=>{if(L>$)throw new Error("invalid range ("+L+", "+$+") or no bytes requested!");if($>D-1)throw new Error("only "+D+" bytes available! programmer error!");var c=new XMLHttpRequest;if(c.open("GET",n,!1),D!==N&&c.setRequestHeader("Range","bytes="+L+"-"+$),c.responseType="arraybuffer",c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined"),c.send(null),!(c.status>=200&&c.status<300||c.status===304))throw new Error("Couldn't load "+n+". Status: "+c.status);return c.response!==void 0?new Uint8Array(c.response||[]):yt(c.responseText||"")},S=this;S.setDataGetter(L=>{var $=L*N,c=(L+1)*N-1;if(c=Math.min(c,D-1),typeof S.chunks[L]>"u"&&(S.chunks[L]=P($,c)),typeof S.chunks[L]>"u")throw new Error("doXHR failed!");return S.chunks[L]}),(x||!D)&&(N=D=1,D=this.getter(0).length,N=D,Xe("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=D,this._chunkSize=N,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){if(!Ue)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var p=new o,g={isDevice:!1,contents:p}}else var g={isDevice:!1,url:n};var O=a.createFile(e,t,g,r,s);g.contents?O.contents=g.contents:g.url&&(O.contents=null,O.url=g.url),Object.defineProperties(O,{usedBytes:{get:function(){return this.contents.length}}});var R={},z=Object.keys(O.stream_ops);z.forEach(T=>{var A=O.stream_ops[T];R[T]=(...D)=>(a.forceLoadFile(O),A(...D))});function W(T,A,D,q,w){var x=T.node.contents;if(w>=x.length)return 0;var N=Math.min(x.length-w,q);if(x.slice)for(var P=0;P(a.forceLoadFile(O),W(T,A,D,q,w)),R.mmap=(T,A,D,q,w)=>{a.forceLoadFile(O);var x=vt(A);if(!x)throw new a.ErrnoError(48);return W(T,ge,x,A,D),{ptr:x,allocated:!0}},O.stream_ops=R,O}},en=(e,t)=>e?Le(Pe,e,t):"",le={DEFAULT_POLLMASK:5,calculateAt(e,t,n){if(_e.isAbs(t))return t;var r;if(e===-100)r=a.cwd();else{var s=le.getStreamFromFD(e);r=s.path}if(t.length==0){if(!n)throw new a.ErrnoError(44);return r}return _e.join2(r,t)},doStat(e,t,n){var r=e(t);ce[n>>2]=r.dev,ce[n+4>>2]=r.mode,he[n+8>>2]=r.nlink,ce[n+12>>2]=r.uid,ce[n+16>>2]=r.gid,ce[n+20>>2]=r.rdev,xe[n+24>>3]=BigInt(r.size),ce[n+32>>2]=4096,ce[n+36>>2]=r.blocks;var s=r.atime.getTime(),o=r.mtime.getTime(),p=r.ctime.getTime();return xe[n+40>>3]=BigInt(Math.floor(s/1e3)),he[n+48>>2]=s%1e3*1e3*1e3,xe[n+56>>3]=BigInt(Math.floor(o/1e3)),he[n+64>>2]=o%1e3*1e3*1e3,xe[n+72>>3]=BigInt(Math.floor(p/1e3)),he[n+80>>2]=p%1e3*1e3*1e3,xe[n+88>>3]=BigInt(r.ino),0},doMsync(e,t,n,r,s){if(!a.isFile(t.node.mode))throw new a.ErrnoError(43);if(r&2)return 0;var o=Pe.slice(e,e+n);a.msync(t,o,s,n,r)},getStreamFromFD(e){var t=a.getStreamChecked(e);return t},varargs:void 0,getStr(e){var t=en(e);return t}};function tn(e,t){try{return e=le.getStr(e),a.chmod(e,t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function nn(e,t,n,r){try{if(t=le.getStr(t),t=le.calculateAt(e,t),n&-8)return-28;var s=a.lookupPath(t,{follow:!0}),o=s.node;if(!o)return-44;var p="";return n&4&&(p+="r"),n&2&&(p+="w"),n&1&&(p+="x"),p&&a.nodePermissions(o,p)?-2:0}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function rn(e,t){try{return a.fchmod(e,t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function sn(e,t,n){try{return a.fchown(e,t,n),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}function Ve(){var e=ce[+le.varargs>>2];return le.varargs+=4,e}var Ce=Ve;function on(e,t,n){le.varargs=n;try{var r=le.getStreamFromFD(e);switch(t){case 0:{var s=Ve();if(s<0)return-28;for(;a.streams[s];)s++;var o;return o=a.dupStream(r,s),o.fd}case 1:case 2:return 0;case 3:return r.flags;case 4:{var s=Ve();return r.flags|=s,0}case 12:{var s=Ce(),p=0;return Ne[s+p>>1]=2,0}case 13:case 14:return 0}return-28}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function ln(e,t){try{var n=le.getStreamFromFD(e);return le.doStat(a.stat,n.path,t)}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}var an=9007199254740992,cn=-9007199254740992,je=e=>ean?NaN:Number(e);function _n(e,t){t=je(t);try{return isNaN(t)?61:(a.ftruncate(e,t),0)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}var De=(e,t,n)=>rt(e,Pe,t,n);function un(e,t){try{if(t===0)return-28;var n=a.cwd(),r=He(n)+1;return t"u"||s.name!=="ErrnoError")throw s;return-s.errno}}function fn(e,t,n){le.varargs=n;try{var r=le.getStreamFromFD(e);switch(t){case 21509:return r.tty?0:-59;case 21505:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tcgets){var s=r.tty.ops.ioctl_tcgets(r),o=Ce();ce[o>>2]=s.c_iflag||0,ce[o+4>>2]=s.c_oflag||0,ce[o+8>>2]=s.c_cflag||0,ce[o+12>>2]=s.c_lflag||0;for(var p=0;p<32;p++)ge[o+p+17]=s.c_cc[p]||0;return 0}return 0}case 21510:case 21511:case 21512:return r.tty?0:-59;case 21506:case 21507:case 21508:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tcsets){for(var o=Ce(),g=ce[o>>2],O=ce[o+4>>2],R=ce[o+8>>2],z=ce[o+12>>2],W=[],p=0;p<32;p++)W.push(ge[o+p+17]);return r.tty.ops.ioctl_tcsets(r.tty,t,{c_iflag:g,c_oflag:O,c_cflag:R,c_lflag:z,c_cc:W})}return 0}case 21519:{if(!r.tty)return-59;var o=Ce();return ce[o>>2]=0,0}case 21520:return r.tty?-28:-59;case 21531:{var o=Ce();return a.ioctl(r,t,o)}case 21523:{if(!r.tty)return-59;if(r.tty.ops.ioctl_tiocgwinsz){var T=r.tty.ops.ioctl_tiocgwinsz(r.tty),o=Ce();Ne[o>>1]=T[0],Ne[o+2>>1]=T[1]}return 0}case 21524:return r.tty?0:-59;case 21515:return r.tty?0:-59;default:return-28}}catch(A){if(typeof a>"u"||A.name!=="ErrnoError")throw A;return-A.errno}}function dn(e,t){try{return e=le.getStr(e),le.doStat(a.lstat,e,t)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function pn(e,t,n){try{return t=le.getStr(t),t=le.calculateAt(e,t),t=_e.normalize(t),t[t.length-1]==="/"&&(t=t.substr(0,t.length-1)),a.mkdir(t,n,0),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}function hn(e,t,n,r){try{t=le.getStr(t);var s=r&256,o=r&4096;return r=r&-6401,t=le.calculateAt(e,t,o),le.doStat(s?a.lstat:a.stat,t,n)}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}function mn(e,t,n,r){le.varargs=r;try{t=le.getStr(t),t=le.calculateAt(e,t);var s=r?Ve():0;return a.open(t,n,s).fd}catch(o){if(typeof a>"u"||o.name!=="ErrnoError")throw o;return-o.errno}}function gn(e,t,n,r){try{if(t=le.getStr(t),t=le.calculateAt(e,t),r<=0)return-28;var s=a.readlink(t),o=Math.min(r,He(s)),p=ge[n+o];return De(s,n,r+1),ge[n+o]=p,o}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}function qn(e){try{return e=le.getStr(e),a.rmdir(e),0}catch(t){if(typeof a>"u"||t.name!=="ErrnoError")throw t;return-t.errno}}function bn(e,t){try{return e=le.getStr(e),le.doStat(a.stat,e,t)}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return-n.errno}}function yn(e,t,n){try{return t=le.getStr(t),t=le.calculateAt(e,t),n===0?a.unlink(t):n===512?a.rmdir(t):Ze("Invalid flags passed to unlinkat"),0}catch(r){if(typeof a>"u"||r.name!=="ErrnoError")throw r;return-r.errno}}var Et=e=>he[e>>2]+ce[e+4>>2]*4294967296;function wn(e,t,n,r){try{t=le.getStr(t),t=le.calculateAt(e,t,!0);var s=Date.now(),o,p;if(!n)o=s,p=s;else{var g=Et(n),O=ce[n+8>>2];O==1073741823?o=s:O==1073741822?o=-1:o=g*1e3+O/1e6,n+=16,g=Et(n),O=ce[n+8>>2],O==1073741823?p=s:O==1073741822?p=-1:p=g*1e3+O/1e6}return(p!=-1||o!=-1)&&a.utime(t,o,p),0}catch(R){if(typeof a>"u"||R.name!=="ErrnoError")throw R;return-R.errno}}var vn=1,En=()=>vn,xn=e=>e%4===0&&(e%100!==0||e%400===0),Sn=[0,31,60,91,121,152,182,213,244,274,305,335],An=[0,31,59,90,120,151,181,212,243,273,304,334],In=e=>{var t=xn(e.getFullYear()),n=t?Sn:An,r=n[e.getMonth()]+e.getDate()-1;return r};function kn(e,t){e=je(e);var n=new Date(e*1e3);ce[t>>2]=n.getSeconds(),ce[t+4>>2]=n.getMinutes(),ce[t+8>>2]=n.getHours(),ce[t+12>>2]=n.getDate(),ce[t+16>>2]=n.getMonth(),ce[t+20>>2]=n.getFullYear()-1900,ce[t+24>>2]=n.getDay();var r=In(n)|0;ce[t+28>>2]=r,ce[t+36>>2]=-(n.getTimezoneOffset()*60);var s=new Date(n.getFullYear(),0,1),o=new Date(n.getFullYear(),6,1).getTimezoneOffset(),p=s.getTimezoneOffset(),g=(o!=p&&n.getTimezoneOffset()==Math.min(p,o))|0;ce[t+32>>2]=g}function Tn(e,t,n,r,s,o,p){s=je(s);try{if(isNaN(s))return 61;var g=le.getStreamFromFD(r),O=a.mmap(g,e,s,t,n),R=O.ptr;return ce[o>>2]=O.allocated,he[p>>2]=R,0}catch(z){if(typeof a>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function Fn(e,t,n,r,s,o){o=je(o);try{var p=le.getStreamFromFD(s);n&2&&le.doMsync(e,p,t,r,o)}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}var On=(e,t,n,r)=>{var s=new Date().getFullYear(),o=new Date(s,0,1),p=new Date(s,6,1),g=o.getTimezoneOffset(),O=p.getTimezoneOffset(),R=Math.max(g,O);he[e>>2]=R*60,ce[t>>2]=+(g!=O);var z=A=>{var D=A>=0?"-":"+",q=Math.abs(A),w=String(Math.floor(q/60)).padStart(2,"0"),x=String(q%60).padStart(2,"0");return`UTC${D}${w}${x}`},W=z(g),T=z(O);ODate.now(),Ln=()=>performance.now(),Cn=()=>2147483648,Dn=e=>{var t=Te.buffer,n=(e-t.byteLength+65535)/65536|0;try{return Te.grow(n),ut(),1}catch{}},Rn=e=>{var t=Pe.length;e>>>=0;var n=Cn();if(e>n)return!1;for(var r=1;r<=4;r*=2){var s=t*(1+.2/r);s=Math.min(s,e+100663296);var o=Math.min(n,wt(Math.max(e,s),65536)),p=Dn(o);if(p)return!0}return!1},it={},Nn=()=>ct||"./this.program",Be=()=>{if(!Be.strings){var e=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:e,_:Nn()};for(var n in it)it[n]===void 0?delete t[n]:t[n]=it[n];var r=[];for(var n in t)r.push(`${n}=${t[n]}`);Be.strings=r}return Be.strings},Mn=(e,t)=>{for(var n=0;n{var n=0;return Be().forEach((r,s)=>{var o=t+n;he[e+s*4>>2]=o,Mn(r,o),n+=r.length+1}),0},Bn=(e,t)=>{var n=Be();he[e>>2]=n.length;var r=0;return n.forEach(s=>r+=s.length+1),he[t>>2]=r,0};function Un(e){try{var t=le.getStreamFromFD(e);return a.close(t),0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return n.errno}}function zn(e,t){try{var n=0,r=0,s=0,o=le.getStreamFromFD(e),p=o.tty?2:a.isDir(o.mode)?3:a.isLink(o.mode)?7:4;return ge[t]=p,Ne[t+2>>1]=s,xe[t+8>>3]=BigInt(n),xe[t+16>>3]=BigInt(r),0}catch(g){if(typeof a>"u"||g.name!=="ErrnoError")throw g;return g.errno}}var Qn=(e,t,n,r)=>{for(var s=0,o=0;o>2],g=he[t+4>>2];t+=8;var O=a.read(e,ge,p,g,r);if(O<0)return-1;if(s+=O,O>2]=o,0}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return p.errno}}function Hn(e,t,n,r){t=je(t);try{if(isNaN(t))return 61;var s=le.getStreamFromFD(e);return a.llseek(s,t,n),xe[r>>3]=BigInt(s.position),s.getdents&&t===0&&n===0&&(s.getdents=null),0}catch(o){if(typeof a>"u"||o.name!=="ErrnoError")throw o;return o.errno}}function Vn(e){try{var t=le.getStreamFromFD(e);return t.stream_ops?.fsync?t.stream_ops.fsync(t):0}catch(n){if(typeof a>"u"||n.name!=="ErrnoError")throw n;return n.errno}}var Gn=(e,t,n,r)=>{for(var s=0,o=0;o>2],g=he[t+4>>2];t+=8;var O=a.write(e,ge,p,g,r);if(O<0)return-1;if(s+=O,O>2]=o,0}catch(p){if(typeof a>"u"||p.name!=="ErrnoError")throw p;return p.errno}}a.createPreloadedFile=Yt,a.staticInit();var xt={__syscall_chmod:tn,__syscall_faccessat:nn,__syscall_fchmod:rn,__syscall_fchown32:sn,__syscall_fcntl64:on,__syscall_fstat64:ln,__syscall_ftruncate64:_n,__syscall_getcwd:un,__syscall_ioctl:fn,__syscall_lstat64:dn,__syscall_mkdirat:pn,__syscall_newfstatat:hn,__syscall_openat:mn,__syscall_readlinkat:gn,__syscall_rmdir:qn,__syscall_stat64:bn,__syscall_unlinkat:yn,__syscall_utimensat:wn,_emscripten_get_now_is_monotonic:En,_localtime_js:kn,_mmap_js:Tn,_munmap_js:Fn,_tzset_js:On,emscripten_date_now:Pn,emscripten_get_now:Ln,emscripten_resize_heap:Rn,environ_get:jn,environ_sizes_get:Bn,fd_close:Un,fd_fdstat_get:zn,fd_read:Wn,fd_seek:Hn,fd_sync:Vn,fd_write:$n,memory:Te},h=Wt();i._sqlite3_status64=(e,t,n,r)=>(i._sqlite3_status64=h.sqlite3_status64)(e,t,n,r),i._sqlite3_status=(e,t,n,r)=>(i._sqlite3_status=h.sqlite3_status)(e,t,n,r),i._sqlite3_db_status=(e,t,n,r,s)=>(i._sqlite3_db_status=h.sqlite3_db_status)(e,t,n,r,s),i._sqlite3_msize=e=>(i._sqlite3_msize=h.sqlite3_msize)(e),i._sqlite3_vfs_find=e=>(i._sqlite3_vfs_find=h.sqlite3_vfs_find)(e),i._sqlite3_initialize=()=>(i._sqlite3_initialize=h.sqlite3_initialize)(),i._sqlite3_malloc=e=>(i._sqlite3_malloc=h.sqlite3_malloc)(e),i._sqlite3_free=e=>(i._sqlite3_free=h.sqlite3_free)(e),i._sqlite3_vfs_register=(e,t)=>(i._sqlite3_vfs_register=h.sqlite3_vfs_register)(e,t),i._sqlite3_vfs_unregister=e=>(i._sqlite3_vfs_unregister=h.sqlite3_vfs_unregister)(e),i._sqlite3_malloc64=e=>(i._sqlite3_malloc64=h.sqlite3_malloc64)(e),i._sqlite3_realloc=(e,t)=>(i._sqlite3_realloc=h.sqlite3_realloc)(e,t),i._sqlite3_realloc64=(e,t)=>(i._sqlite3_realloc64=h.sqlite3_realloc64)(e,t),i._sqlite3_value_text=e=>(i._sqlite3_value_text=h.sqlite3_value_text)(e),i._sqlite3_randomness=(e,t)=>(i._sqlite3_randomness=h.sqlite3_randomness)(e,t),i._sqlite3_stricmp=(e,t)=>(i._sqlite3_stricmp=h.sqlite3_stricmp)(e,t),i._sqlite3_strnicmp=(e,t,n)=>(i._sqlite3_strnicmp=h.sqlite3_strnicmp)(e,t,n),i._sqlite3_uri_parameter=(e,t)=>(i._sqlite3_uri_parameter=h.sqlite3_uri_parameter)(e,t),i._sqlite3_uri_boolean=(e,t,n)=>(i._sqlite3_uri_boolean=h.sqlite3_uri_boolean)(e,t,n),i._sqlite3_serialize=(e,t,n,r)=>(i._sqlite3_serialize=h.sqlite3_serialize)(e,t,n,r),i._sqlite3_prepare_v2=(e,t,n,r,s)=>(i._sqlite3_prepare_v2=h.sqlite3_prepare_v2)(e,t,n,r,s),i._sqlite3_step=e=>(i._sqlite3_step=h.sqlite3_step)(e),i._sqlite3_column_int64=(e,t)=>(i._sqlite3_column_int64=h.sqlite3_column_int64)(e,t),i._sqlite3_reset=e=>(i._sqlite3_reset=h.sqlite3_reset)(e),i._sqlite3_exec=(e,t,n,r,s)=>(i._sqlite3_exec=h.sqlite3_exec)(e,t,n,r,s),i._sqlite3_column_int=(e,t)=>(i._sqlite3_column_int=h.sqlite3_column_int)(e,t),i._sqlite3_finalize=e=>(i._sqlite3_finalize=h.sqlite3_finalize)(e),i._sqlite3_file_control=(e,t,n,r)=>(i._sqlite3_file_control=h.sqlite3_file_control)(e,t,n,r),i._sqlite3_column_name=(e,t)=>(i._sqlite3_column_name=h.sqlite3_column_name)(e,t),i._sqlite3_column_text=(e,t)=>(i._sqlite3_column_text=h.sqlite3_column_text)(e,t),i._sqlite3_column_type=(e,t)=>(i._sqlite3_column_type=h.sqlite3_column_type)(e,t),i._sqlite3_errmsg=e=>(i._sqlite3_errmsg=h.sqlite3_errmsg)(e),i._sqlite3_deserialize=(e,t,n,r,s,o)=>(i._sqlite3_deserialize=h.sqlite3_deserialize)(e,t,n,r,s,o),i._sqlite3_clear_bindings=e=>(i._sqlite3_clear_bindings=h.sqlite3_clear_bindings)(e),i._sqlite3_value_blob=e=>(i._sqlite3_value_blob=h.sqlite3_value_blob)(e),i._sqlite3_value_bytes=e=>(i._sqlite3_value_bytes=h.sqlite3_value_bytes)(e),i._sqlite3_value_double=e=>(i._sqlite3_value_double=h.sqlite3_value_double)(e),i._sqlite3_value_int=e=>(i._sqlite3_value_int=h.sqlite3_value_int)(e),i._sqlite3_value_int64=e=>(i._sqlite3_value_int64=h.sqlite3_value_int64)(e),i._sqlite3_value_subtype=e=>(i._sqlite3_value_subtype=h.sqlite3_value_subtype)(e),i._sqlite3_value_pointer=(e,t)=>(i._sqlite3_value_pointer=h.sqlite3_value_pointer)(e,t),i._sqlite3_value_type=e=>(i._sqlite3_value_type=h.sqlite3_value_type)(e),i._sqlite3_value_nochange=e=>(i._sqlite3_value_nochange=h.sqlite3_value_nochange)(e),i._sqlite3_value_frombind=e=>(i._sqlite3_value_frombind=h.sqlite3_value_frombind)(e),i._sqlite3_value_dup=e=>(i._sqlite3_value_dup=h.sqlite3_value_dup)(e),i._sqlite3_value_free=e=>(i._sqlite3_value_free=h.sqlite3_value_free)(e),i._sqlite3_result_blob=(e,t,n,r)=>(i._sqlite3_result_blob=h.sqlite3_result_blob)(e,t,n,r),i._sqlite3_result_error_toobig=e=>(i._sqlite3_result_error_toobig=h.sqlite3_result_error_toobig)(e),i._sqlite3_result_error_nomem=e=>(i._sqlite3_result_error_nomem=h.sqlite3_result_error_nomem)(e),i._sqlite3_result_double=(e,t)=>(i._sqlite3_result_double=h.sqlite3_result_double)(e,t),i._sqlite3_result_error=(e,t,n)=>(i._sqlite3_result_error=h.sqlite3_result_error)(e,t,n),i._sqlite3_result_int=(e,t)=>(i._sqlite3_result_int=h.sqlite3_result_int)(e,t),i._sqlite3_result_int64=(e,t)=>(i._sqlite3_result_int64=h.sqlite3_result_int64)(e,t),i._sqlite3_result_null=e=>(i._sqlite3_result_null=h.sqlite3_result_null)(e),i._sqlite3_result_pointer=(e,t,n,r)=>(i._sqlite3_result_pointer=h.sqlite3_result_pointer)(e,t,n,r),i._sqlite3_result_subtype=(e,t)=>(i._sqlite3_result_subtype=h.sqlite3_result_subtype)(e,t),i._sqlite3_result_text=(e,t,n,r)=>(i._sqlite3_result_text=h.sqlite3_result_text)(e,t,n,r),i._sqlite3_result_zeroblob=(e,t)=>(i._sqlite3_result_zeroblob=h.sqlite3_result_zeroblob)(e,t),i._sqlite3_result_zeroblob64=(e,t)=>(i._sqlite3_result_zeroblob64=h.sqlite3_result_zeroblob64)(e,t),i._sqlite3_result_error_code=(e,t)=>(i._sqlite3_result_error_code=h.sqlite3_result_error_code)(e,t),i._sqlite3_user_data=e=>(i._sqlite3_user_data=h.sqlite3_user_data)(e),i._sqlite3_context_db_handle=e=>(i._sqlite3_context_db_handle=h.sqlite3_context_db_handle)(e),i._sqlite3_vtab_nochange=e=>(i._sqlite3_vtab_nochange=h.sqlite3_vtab_nochange)(e),i._sqlite3_vtab_in_first=(e,t)=>(i._sqlite3_vtab_in_first=h.sqlite3_vtab_in_first)(e,t),i._sqlite3_vtab_in_next=(e,t)=>(i._sqlite3_vtab_in_next=h.sqlite3_vtab_in_next)(e,t),i._sqlite3_aggregate_context=(e,t)=>(i._sqlite3_aggregate_context=h.sqlite3_aggregate_context)(e,t),i._sqlite3_get_auxdata=(e,t)=>(i._sqlite3_get_auxdata=h.sqlite3_get_auxdata)(e,t),i._sqlite3_set_auxdata=(e,t,n,r)=>(i._sqlite3_set_auxdata=h.sqlite3_set_auxdata)(e,t,n,r),i._sqlite3_column_count=e=>(i._sqlite3_column_count=h.sqlite3_column_count)(e),i._sqlite3_data_count=e=>(i._sqlite3_data_count=h.sqlite3_data_count)(e),i._sqlite3_column_blob=(e,t)=>(i._sqlite3_column_blob=h.sqlite3_column_blob)(e,t),i._sqlite3_column_bytes=(e,t)=>(i._sqlite3_column_bytes=h.sqlite3_column_bytes)(e,t),i._sqlite3_column_double=(e,t)=>(i._sqlite3_column_double=h.sqlite3_column_double)(e,t),i._sqlite3_column_value=(e,t)=>(i._sqlite3_column_value=h.sqlite3_column_value)(e,t),i._sqlite3_column_decltype=(e,t)=>(i._sqlite3_column_decltype=h.sqlite3_column_decltype)(e,t),i._sqlite3_bind_blob=(e,t,n,r,s)=>(i._sqlite3_bind_blob=h.sqlite3_bind_blob)(e,t,n,r,s),i._sqlite3_bind_double=(e,t,n)=>(i._sqlite3_bind_double=h.sqlite3_bind_double)(e,t,n),i._sqlite3_bind_int=(e,t,n)=>(i._sqlite3_bind_int=h.sqlite3_bind_int)(e,t,n),i._sqlite3_bind_int64=(e,t,n)=>(i._sqlite3_bind_int64=h.sqlite3_bind_int64)(e,t,n),i._sqlite3_bind_null=(e,t)=>(i._sqlite3_bind_null=h.sqlite3_bind_null)(e,t),i._sqlite3_bind_pointer=(e,t,n,r,s)=>(i._sqlite3_bind_pointer=h.sqlite3_bind_pointer)(e,t,n,r,s),i._sqlite3_bind_text=(e,t,n,r,s)=>(i._sqlite3_bind_text=h.sqlite3_bind_text)(e,t,n,r,s),i._sqlite3_bind_parameter_count=e=>(i._sqlite3_bind_parameter_count=h.sqlite3_bind_parameter_count)(e),i._sqlite3_bind_parameter_name=(e,t)=>(i._sqlite3_bind_parameter_name=h.sqlite3_bind_parameter_name)(e,t),i._sqlite3_bind_parameter_index=(e,t)=>(i._sqlite3_bind_parameter_index=h.sqlite3_bind_parameter_index)(e,t),i._sqlite3_db_handle=e=>(i._sqlite3_db_handle=h.sqlite3_db_handle)(e),i._sqlite3_stmt_readonly=e=>(i._sqlite3_stmt_readonly=h.sqlite3_stmt_readonly)(e),i._sqlite3_stmt_isexplain=e=>(i._sqlite3_stmt_isexplain=h.sqlite3_stmt_isexplain)(e),i._sqlite3_stmt_explain=(e,t)=>(i._sqlite3_stmt_explain=h.sqlite3_stmt_explain)(e,t),i._sqlite3_stmt_busy=e=>(i._sqlite3_stmt_busy=h.sqlite3_stmt_busy)(e),i._sqlite3_stmt_status=(e,t,n)=>(i._sqlite3_stmt_status=h.sqlite3_stmt_status)(e,t,n),i._sqlite3_sql=e=>(i._sqlite3_sql=h.sqlite3_sql)(e),i._sqlite3_expanded_sql=e=>(i._sqlite3_expanded_sql=h.sqlite3_expanded_sql)(e),i._sqlite3_preupdate_old=(e,t,n)=>(i._sqlite3_preupdate_old=h.sqlite3_preupdate_old)(e,t,n),i._sqlite3_preupdate_count=e=>(i._sqlite3_preupdate_count=h.sqlite3_preupdate_count)(e),i._sqlite3_preupdate_depth=e=>(i._sqlite3_preupdate_depth=h.sqlite3_preupdate_depth)(e),i._sqlite3_preupdate_blobwrite=e=>(i._sqlite3_preupdate_blobwrite=h.sqlite3_preupdate_blobwrite)(e),i._sqlite3_preupdate_new=(e,t,n)=>(i._sqlite3_preupdate_new=h.sqlite3_preupdate_new)(e,t,n),i._sqlite3_value_numeric_type=e=>(i._sqlite3_value_numeric_type=h.sqlite3_value_numeric_type)(e),i._sqlite3_set_authorizer=(e,t,n)=>(i._sqlite3_set_authorizer=h.sqlite3_set_authorizer)(e,t,n),i._sqlite3_strglob=(e,t)=>(i._sqlite3_strglob=h.sqlite3_strglob)(e,t),i._sqlite3_strlike=(e,t,n)=>(i._sqlite3_strlike=h.sqlite3_strlike)(e,t,n),i._sqlite3_auto_extension=e=>(i._sqlite3_auto_extension=h.sqlite3_auto_extension)(e),i._sqlite3_cancel_auto_extension=e=>(i._sqlite3_cancel_auto_extension=h.sqlite3_cancel_auto_extension)(e),i._sqlite3_reset_auto_extension=()=>(i._sqlite3_reset_auto_extension=h.sqlite3_reset_auto_extension)(),i._sqlite3_prepare_v3=(e,t,n,r,s,o)=>(i._sqlite3_prepare_v3=h.sqlite3_prepare_v3)(e,t,n,r,s,o),i._sqlite3_create_module=(e,t,n,r)=>(i._sqlite3_create_module=h.sqlite3_create_module)(e,t,n,r),i._sqlite3_create_module_v2=(e,t,n,r,s)=>(i._sqlite3_create_module_v2=h.sqlite3_create_module_v2)(e,t,n,r,s),i._sqlite3_drop_modules=(e,t)=>(i._sqlite3_drop_modules=h.sqlite3_drop_modules)(e,t),i._sqlite3_declare_vtab=(e,t)=>(i._sqlite3_declare_vtab=h.sqlite3_declare_vtab)(e,t),i._sqlite3_vtab_on_conflict=e=>(i._sqlite3_vtab_on_conflict=h.sqlite3_vtab_on_conflict)(e),i._sqlite3_vtab_collation=(e,t)=>(i._sqlite3_vtab_collation=h.sqlite3_vtab_collation)(e,t),i._sqlite3_vtab_in=(e,t,n)=>(i._sqlite3_vtab_in=h.sqlite3_vtab_in)(e,t,n),i._sqlite3_vtab_rhs_value=(e,t,n)=>(i._sqlite3_vtab_rhs_value=h.sqlite3_vtab_rhs_value)(e,t,n),i._sqlite3_vtab_distinct=e=>(i._sqlite3_vtab_distinct=h.sqlite3_vtab_distinct)(e),i._sqlite3_keyword_name=(e,t,n)=>(i._sqlite3_keyword_name=h.sqlite3_keyword_name)(e,t,n),i._sqlite3_keyword_count=()=>(i._sqlite3_keyword_count=h.sqlite3_keyword_count)(),i._sqlite3_keyword_check=(e,t)=>(i._sqlite3_keyword_check=h.sqlite3_keyword_check)(e,t),i._sqlite3_complete=e=>(i._sqlite3_complete=h.sqlite3_complete)(e),i._sqlite3_libversion=()=>(i._sqlite3_libversion=h.sqlite3_libversion)(),i._sqlite3_libversion_number=()=>(i._sqlite3_libversion_number=h.sqlite3_libversion_number)(),i._sqlite3_shutdown=()=>(i._sqlite3_shutdown=h.sqlite3_shutdown)(),i._sqlite3_last_insert_rowid=e=>(i._sqlite3_last_insert_rowid=h.sqlite3_last_insert_rowid)(e),i._sqlite3_set_last_insert_rowid=(e,t)=>(i._sqlite3_set_last_insert_rowid=h.sqlite3_set_last_insert_rowid)(e,t),i._sqlite3_changes64=e=>(i._sqlite3_changes64=h.sqlite3_changes64)(e),i._sqlite3_changes=e=>(i._sqlite3_changes=h.sqlite3_changes)(e),i._sqlite3_total_changes64=e=>(i._sqlite3_total_changes64=h.sqlite3_total_changes64)(e),i._sqlite3_total_changes=e=>(i._sqlite3_total_changes=h.sqlite3_total_changes)(e),i._sqlite3_txn_state=(e,t)=>(i._sqlite3_txn_state=h.sqlite3_txn_state)(e,t),i._sqlite3_close_v2=e=>(i._sqlite3_close_v2=h.sqlite3_close_v2)(e),i._sqlite3_busy_handler=(e,t,n)=>(i._sqlite3_busy_handler=h.sqlite3_busy_handler)(e,t,n),i._sqlite3_progress_handler=(e,t,n,r)=>(i._sqlite3_progress_handler=h.sqlite3_progress_handler)(e,t,n,r),i._sqlite3_busy_timeout=(e,t)=>(i._sqlite3_busy_timeout=h.sqlite3_busy_timeout)(e,t),i._sqlite3_interrupt=e=>(i._sqlite3_interrupt=h.sqlite3_interrupt)(e),i._sqlite3_is_interrupted=e=>(i._sqlite3_is_interrupted=h.sqlite3_is_interrupted)(e),i._sqlite3_create_function=(e,t,n,r,s,o,p,g)=>(i._sqlite3_create_function=h.sqlite3_create_function)(e,t,n,r,s,o,p,g),i._sqlite3_create_function_v2=(e,t,n,r,s,o,p,g,O)=>(i._sqlite3_create_function_v2=h.sqlite3_create_function_v2)(e,t,n,r,s,o,p,g,O),i._sqlite3_create_window_function=(e,t,n,r,s,o,p,g,O,R)=>(i._sqlite3_create_window_function=h.sqlite3_create_window_function)(e,t,n,r,s,o,p,g,O,R),i._sqlite3_overload_function=(e,t,n)=>(i._sqlite3_overload_function=h.sqlite3_overload_function)(e,t,n),i._sqlite3_trace_v2=(e,t,n,r)=>(i._sqlite3_trace_v2=h.sqlite3_trace_v2)(e,t,n,r),i._sqlite3_commit_hook=(e,t,n)=>(i._sqlite3_commit_hook=h.sqlite3_commit_hook)(e,t,n),i._sqlite3_update_hook=(e,t,n)=>(i._sqlite3_update_hook=h.sqlite3_update_hook)(e,t,n),i._sqlite3_rollback_hook=(e,t,n)=>(i._sqlite3_rollback_hook=h.sqlite3_rollback_hook)(e,t,n),i._sqlite3_preupdate_hook=(e,t,n)=>(i._sqlite3_preupdate_hook=h.sqlite3_preupdate_hook)(e,t,n),i._sqlite3_error_offset=e=>(i._sqlite3_error_offset=h.sqlite3_error_offset)(e),i._sqlite3_errcode=e=>(i._sqlite3_errcode=h.sqlite3_errcode)(e),i._sqlite3_extended_errcode=e=>(i._sqlite3_extended_errcode=h.sqlite3_extended_errcode)(e),i._sqlite3_errstr=e=>(i._sqlite3_errstr=h.sqlite3_errstr)(e),i._sqlite3_limit=(e,t,n)=>(i._sqlite3_limit=h.sqlite3_limit)(e,t,n),i._sqlite3_open=(e,t)=>(i._sqlite3_open=h.sqlite3_open)(e,t),i._sqlite3_open_v2=(e,t,n,r)=>(i._sqlite3_open_v2=h.sqlite3_open_v2)(e,t,n,r),i._sqlite3_create_collation=(e,t,n,r,s)=>(i._sqlite3_create_collation=h.sqlite3_create_collation)(e,t,n,r,s),i._sqlite3_create_collation_v2=(e,t,n,r,s,o)=>(i._sqlite3_create_collation_v2=h.sqlite3_create_collation_v2)(e,t,n,r,s,o),i._sqlite3_collation_needed=(e,t,n)=>(i._sqlite3_collation_needed=h.sqlite3_collation_needed)(e,t,n),i._sqlite3_get_autocommit=e=>(i._sqlite3_get_autocommit=h.sqlite3_get_autocommit)(e),i._sqlite3_table_column_metadata=(e,t,n,r,s,o,p,g,O)=>(i._sqlite3_table_column_metadata=h.sqlite3_table_column_metadata)(e,t,n,r,s,o,p,g,O),i._sqlite3_extended_result_codes=(e,t)=>(i._sqlite3_extended_result_codes=h.sqlite3_extended_result_codes)(e,t),i._sqlite3_uri_key=(e,t)=>(i._sqlite3_uri_key=h.sqlite3_uri_key)(e,t),i._sqlite3_uri_int64=(e,t,n)=>(i._sqlite3_uri_int64=h.sqlite3_uri_int64)(e,t,n),i._sqlite3_db_name=(e,t)=>(i._sqlite3_db_name=h.sqlite3_db_name)(e,t),i._sqlite3_db_filename=(e,t)=>(i._sqlite3_db_filename=h.sqlite3_db_filename)(e,t),i._sqlite3_db_readonly=(e,t)=>(i._sqlite3_db_readonly=h.sqlite3_db_readonly)(e,t),i._sqlite3_compileoption_used=e=>(i._sqlite3_compileoption_used=h.sqlite3_compileoption_used)(e),i._sqlite3_compileoption_get=e=>(i._sqlite3_compileoption_get=h.sqlite3_compileoption_get)(e),i._sqlite3session_diff=(e,t,n,r)=>(i._sqlite3session_diff=h.sqlite3session_diff)(e,t,n,r),i._sqlite3session_attach=(e,t)=>(i._sqlite3session_attach=h.sqlite3session_attach)(e,t),i._sqlite3session_create=(e,t,n)=>(i._sqlite3session_create=h.sqlite3session_create)(e,t,n),i._sqlite3session_delete=e=>(i._sqlite3session_delete=h.sqlite3session_delete)(e),i._sqlite3session_table_filter=(e,t,n)=>(i._sqlite3session_table_filter=h.sqlite3session_table_filter)(e,t,n),i._sqlite3session_changeset=(e,t,n)=>(i._sqlite3session_changeset=h.sqlite3session_changeset)(e,t,n),i._sqlite3session_changeset_strm=(e,t,n)=>(i._sqlite3session_changeset_strm=h.sqlite3session_changeset_strm)(e,t,n),i._sqlite3session_patchset_strm=(e,t,n)=>(i._sqlite3session_patchset_strm=h.sqlite3session_patchset_strm)(e,t,n),i._sqlite3session_patchset=(e,t,n)=>(i._sqlite3session_patchset=h.sqlite3session_patchset)(e,t,n),i._sqlite3session_enable=(e,t)=>(i._sqlite3session_enable=h.sqlite3session_enable)(e,t),i._sqlite3session_indirect=(e,t)=>(i._sqlite3session_indirect=h.sqlite3session_indirect)(e,t),i._sqlite3session_isempty=e=>(i._sqlite3session_isempty=h.sqlite3session_isempty)(e),i._sqlite3session_memory_used=e=>(i._sqlite3session_memory_used=h.sqlite3session_memory_used)(e),i._sqlite3session_object_config=(e,t,n)=>(i._sqlite3session_object_config=h.sqlite3session_object_config)(e,t,n),i._sqlite3session_changeset_size=e=>(i._sqlite3session_changeset_size=h.sqlite3session_changeset_size)(e),i._sqlite3changeset_start=(e,t,n)=>(i._sqlite3changeset_start=h.sqlite3changeset_start)(e,t,n),i._sqlite3changeset_start_v2=(e,t,n,r)=>(i._sqlite3changeset_start_v2=h.sqlite3changeset_start_v2)(e,t,n,r),i._sqlite3changeset_start_strm=(e,t,n)=>(i._sqlite3changeset_start_strm=h.sqlite3changeset_start_strm)(e,t,n),i._sqlite3changeset_start_v2_strm=(e,t,n,r)=>(i._sqlite3changeset_start_v2_strm=h.sqlite3changeset_start_v2_strm)(e,t,n,r),i._sqlite3changeset_next=e=>(i._sqlite3changeset_next=h.sqlite3changeset_next)(e),i._sqlite3changeset_op=(e,t,n,r,s)=>(i._sqlite3changeset_op=h.sqlite3changeset_op)(e,t,n,r,s),i._sqlite3changeset_pk=(e,t,n)=>(i._sqlite3changeset_pk=h.sqlite3changeset_pk)(e,t,n),i._sqlite3changeset_old=(e,t,n)=>(i._sqlite3changeset_old=h.sqlite3changeset_old)(e,t,n),i._sqlite3changeset_new=(e,t,n)=>(i._sqlite3changeset_new=h.sqlite3changeset_new)(e,t,n),i._sqlite3changeset_conflict=(e,t,n)=>(i._sqlite3changeset_conflict=h.sqlite3changeset_conflict)(e,t,n),i._sqlite3changeset_fk_conflicts=(e,t)=>(i._sqlite3changeset_fk_conflicts=h.sqlite3changeset_fk_conflicts)(e,t),i._sqlite3changeset_finalize=e=>(i._sqlite3changeset_finalize=h.sqlite3changeset_finalize)(e),i._sqlite3changeset_invert=(e,t,n,r)=>(i._sqlite3changeset_invert=h.sqlite3changeset_invert)(e,t,n,r),i._sqlite3changeset_invert_strm=(e,t,n,r)=>(i._sqlite3changeset_invert_strm=h.sqlite3changeset_invert_strm)(e,t,n,r),i._sqlite3changeset_apply_v2=(e,t,n,r,s,o,p,g,O)=>(i._sqlite3changeset_apply_v2=h.sqlite3changeset_apply_v2)(e,t,n,r,s,o,p,g,O),i._sqlite3changeset_apply=(e,t,n,r,s,o)=>(i._sqlite3changeset_apply=h.sqlite3changeset_apply)(e,t,n,r,s,o),i._sqlite3changeset_apply_v2_strm=(e,t,n,r,s,o,p,g,O)=>(i._sqlite3changeset_apply_v2_strm=h.sqlite3changeset_apply_v2_strm)(e,t,n,r,s,o,p,g,O),i._sqlite3changeset_apply_strm=(e,t,n,r,s,o)=>(i._sqlite3changeset_apply_strm=h.sqlite3changeset_apply_strm)(e,t,n,r,s,o),i._sqlite3changegroup_new=e=>(i._sqlite3changegroup_new=h.sqlite3changegroup_new)(e),i._sqlite3changegroup_add=(e,t,n)=>(i._sqlite3changegroup_add=h.sqlite3changegroup_add)(e,t,n),i._sqlite3changegroup_output=(e,t,n)=>(i._sqlite3changegroup_output=h.sqlite3changegroup_output)(e,t,n),i._sqlite3changegroup_add_strm=(e,t,n)=>(i._sqlite3changegroup_add_strm=h.sqlite3changegroup_add_strm)(e,t,n),i._sqlite3changegroup_output_strm=(e,t,n)=>(i._sqlite3changegroup_output_strm=h.sqlite3changegroup_output_strm)(e,t,n),i._sqlite3changegroup_delete=e=>(i._sqlite3changegroup_delete=h.sqlite3changegroup_delete)(e),i._sqlite3changeset_concat=(e,t,n,r,s,o)=>(i._sqlite3changeset_concat=h.sqlite3changeset_concat)(e,t,n,r,s,o),i._sqlite3changeset_concat_strm=(e,t,n,r,s,o)=>(i._sqlite3changeset_concat_strm=h.sqlite3changeset_concat_strm)(e,t,n,r,s,o),i._sqlite3session_config=(e,t)=>(i._sqlite3session_config=h.sqlite3session_config)(e,t),i._sqlite3_sourceid=()=>(i._sqlite3_sourceid=h.sqlite3_sourceid)(),i._sqlite3__wasm_pstack_ptr=()=>(i._sqlite3__wasm_pstack_ptr=h.sqlite3__wasm_pstack_ptr)(),i._sqlite3__wasm_pstack_restore=e=>(i._sqlite3__wasm_pstack_restore=h.sqlite3__wasm_pstack_restore)(e),i._sqlite3__wasm_pstack_alloc=e=>(i._sqlite3__wasm_pstack_alloc=h.sqlite3__wasm_pstack_alloc)(e),i._sqlite3__wasm_pstack_remaining=()=>(i._sqlite3__wasm_pstack_remaining=h.sqlite3__wasm_pstack_remaining)(),i._sqlite3__wasm_pstack_quota=()=>(i._sqlite3__wasm_pstack_quota=h.sqlite3__wasm_pstack_quota)(),i._sqlite3__wasm_db_error=(e,t,n)=>(i._sqlite3__wasm_db_error=h.sqlite3__wasm_db_error)(e,t,n),i._sqlite3__wasm_test_struct=e=>(i._sqlite3__wasm_test_struct=h.sqlite3__wasm_test_struct)(e),i._sqlite3__wasm_enum_json=()=>(i._sqlite3__wasm_enum_json=h.sqlite3__wasm_enum_json)(),i._sqlite3__wasm_vfs_unlink=(e,t)=>(i._sqlite3__wasm_vfs_unlink=h.sqlite3__wasm_vfs_unlink)(e,t),i._sqlite3__wasm_db_vfs=(e,t)=>(i._sqlite3__wasm_db_vfs=h.sqlite3__wasm_db_vfs)(e,t),i._sqlite3__wasm_db_reset=e=>(i._sqlite3__wasm_db_reset=h.sqlite3__wasm_db_reset)(e),i._sqlite3__wasm_db_export_chunked=(e,t)=>(i._sqlite3__wasm_db_export_chunked=h.sqlite3__wasm_db_export_chunked)(e,t),i._sqlite3__wasm_db_serialize=(e,t,n,r,s)=>(i._sqlite3__wasm_db_serialize=h.sqlite3__wasm_db_serialize)(e,t,n,r,s),i._sqlite3__wasm_vfs_create_file=(e,t,n,r)=>(i._sqlite3__wasm_vfs_create_file=h.sqlite3__wasm_vfs_create_file)(e,t,n,r),i._sqlite3__wasm_posix_create_file=(e,t,n)=>(i._sqlite3__wasm_posix_create_file=h.sqlite3__wasm_posix_create_file)(e,t,n),i._sqlite3__wasm_kvvfsMakeKeyOnPstack=(e,t)=>(i._sqlite3__wasm_kvvfsMakeKeyOnPstack=h.sqlite3__wasm_kvvfsMakeKeyOnPstack)(e,t),i._sqlite3__wasm_kvvfs_methods=()=>(i._sqlite3__wasm_kvvfs_methods=h.sqlite3__wasm_kvvfs_methods)(),i._sqlite3__wasm_vtab_config=(e,t,n)=>(i._sqlite3__wasm_vtab_config=h.sqlite3__wasm_vtab_config)(e,t,n),i._sqlite3__wasm_db_config_ip=(e,t,n,r)=>(i._sqlite3__wasm_db_config_ip=h.sqlite3__wasm_db_config_ip)(e,t,n,r),i._sqlite3__wasm_db_config_pii=(e,t,n,r,s)=>(i._sqlite3__wasm_db_config_pii=h.sqlite3__wasm_db_config_pii)(e,t,n,r,s),i._sqlite3__wasm_db_config_s=(e,t,n)=>(i._sqlite3__wasm_db_config_s=h.sqlite3__wasm_db_config_s)(e,t,n),i._sqlite3__wasm_config_i=(e,t)=>(i._sqlite3__wasm_config_i=h.sqlite3__wasm_config_i)(e,t),i._sqlite3__wasm_config_ii=(e,t,n)=>(i._sqlite3__wasm_config_ii=h.sqlite3__wasm_config_ii)(e,t,n),i._sqlite3__wasm_config_j=(e,t)=>(i._sqlite3__wasm_config_j=h.sqlite3__wasm_config_j)(e,t),i._sqlite3__wasm_qfmt_token=(e,t)=>(i._sqlite3__wasm_qfmt_token=h.sqlite3__wasm_qfmt_token)(e,t),i._sqlite3__wasm_init_wasmfs=e=>(i._sqlite3__wasm_init_wasmfs=h.sqlite3__wasm_init_wasmfs)(e),i._sqlite3__wasm_test_intptr=e=>(i._sqlite3__wasm_test_intptr=h.sqlite3__wasm_test_intptr)(e),i._sqlite3__wasm_test_voidptr=e=>(i._sqlite3__wasm_test_voidptr=h.sqlite3__wasm_test_voidptr)(e),i._sqlite3__wasm_test_int64_max=()=>(i._sqlite3__wasm_test_int64_max=h.sqlite3__wasm_test_int64_max)(),i._sqlite3__wasm_test_int64_min=()=>(i._sqlite3__wasm_test_int64_min=h.sqlite3__wasm_test_int64_min)(),i._sqlite3__wasm_test_int64_times2=e=>(i._sqlite3__wasm_test_int64_times2=h.sqlite3__wasm_test_int64_times2)(e),i._sqlite3__wasm_test_int64_minmax=(e,t)=>(i._sqlite3__wasm_test_int64_minmax=h.sqlite3__wasm_test_int64_minmax)(e,t),i._sqlite3__wasm_test_int64ptr=e=>(i._sqlite3__wasm_test_int64ptr=h.sqlite3__wasm_test_int64ptr)(e),i._sqlite3__wasm_test_stack_overflow=e=>(i._sqlite3__wasm_test_stack_overflow=h.sqlite3__wasm_test_stack_overflow)(e),i._sqlite3__wasm_test_str_hello=e=>(i._sqlite3__wasm_test_str_hello=h.sqlite3__wasm_test_str_hello)(e),i._sqlite3__wasm_SQLTester_strglob=(e,t)=>(i._sqlite3__wasm_SQLTester_strglob=h.sqlite3__wasm_SQLTester_strglob)(e,t),i._malloc=e=>(i._malloc=h.malloc)(e),i._free=e=>(i._free=h.free)(e),i._realloc=(e,t)=>(i._realloc=h.realloc)(e,t);var St=(e,t)=>(St=h.emscripten_builtin_memalign)(e,t);i.wasmMemory=Te;var Ge,At;Me=function e(){Ge||It(),Ge||(Me=e)};function It(){if(Fe>0||!At&&(At=1,Lt(),Fe>0))return;function e(){Ge||(Ge=1,i.calledRun=1,!_t&&(Ct(),ve(i),i.onRuntimeInitialized?.(),Dt()))}i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),e()},1)):e()}if(i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return It(),i.runSQLite3PostLoadInit=function(e){if(globalThis.sqlite3ApiBootstrap=function t(n=globalThis.sqlite3ApiConfig||t.defaultConfig){if(t.sqlite3)return(t.sqlite3.config||console).warn("sqlite3ApiBootstrap() called multiple times.","Config and external initializers are ignored on calls after the first."),t.sqlite3;const r=Object.assign(Object.create(null),{exports:void 0,memory:void 0,bigIntEnabled:typeof i<"u"&&i.HEAPU64?!0:!!globalThis.BigInt64Array,debug:console.debug.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),log:console.log.bind(console),wasmfsOpfsDir:"/opfs",useStdAlloc:!1},n||{});Object.assign(r,{allocExportName:r.useStdAlloc?"malloc":"sqlite3_malloc",deallocExportName:r.useStdAlloc?"free":"sqlite3_free",reallocExportName:r.useStdAlloc?"realloc":"sqlite3_realloc"},r),["exports","memory","wasmfsOpfsDir"].forEach(l=>{typeof r[l]=="function"&&(r[l]=r[l]())}),delete globalThis.sqlite3ApiConfig,delete t.defaultConfig;const s=Object.create(null),o=Object.create(null),p=l=>s.sqlite3_js_rc_str&&s.sqlite3_js_rc_str(l)||"Unknown result code #"+l,g=l=>typeof l=="number"&&l===(l|0);class O extends Error{constructor(..._){let u;if(_.length)if(g(_[0]))if(u=_[0],_.length===1)super(p(_[0]));else{const I=p(u);typeof _[1]=="object"?super(I,_[1]):(_[0]=I+":",super(_.join(" ")))}else _.length===2&&typeof _[1]=="object"?super(..._):super(_.join(" "));this.resultCode=u||s.SQLITE_ERROR,this.name="SQLite3Error"}}O.toss=(...l)=>{throw new O(...l)};const R=O.toss;r.wasmfsOpfsDir&&!/^\/[^/]+$/.test(r.wasmfsOpfsDir)&&R("config.wasmfsOpfsDir must be falsy or in the form '/dir-name'.");const z=l=>typeof l!="bigint"&&l===(l|0)&&l<=2147483647&&l>=-2147483648,W=function l(_){return l._max||(l._max=BigInt("0x7fffffffffffffff"),l._min=~l._max),_>=l._min&&_<=l._max},T=l=>l>=-0x7fffffffn-1n&&l<=0x7fffffffn,A=function l(_){return l._min||(l._min=Number.MIN_SAFE_INTEGER,l._max=Number.MAX_SAFE_INTEGER),_>=l._min&&_<=l._max},D=l=>l&&l.constructor&&z(l.constructor.BYTES_PER_ELEMENT)?l:!1,q=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,w=l=>l.buffer instanceof q,x=(l,_,u)=>w(l)?l.slice(_,u):l.subarray(_,u),N=l=>l&&(l instanceof Uint8Array||l instanceof Int8Array||l instanceof ArrayBuffer),P=l=>l&&(l instanceof Uint8Array||l instanceof Int8Array||l instanceof ArrayBuffer),S=l=>N(l)||R("Value is not of a supported TypedArray type."),L=new TextDecoder("utf-8"),$=function(l,_,u){return L.decode(x(l,_,u))},c=function(l){return P(l)?$(l instanceof ArrayBuffer?new Uint8Array(l):l):Array.isArray(l)?l.join(""):(o.isPtr(l)&&(l=o.cstrToJs(l)),l)};class d extends Error{constructor(..._){_.length===2&&typeof _[1]=="object"?super(..._):_.length?super(_.join(" ")):super("Allocation failed."),this.resultCode=s.SQLITE_NOMEM,this.name="WasmAllocError"}}d.toss=(...l)=>{throw new d(...l)},Object.assign(s,{sqlite3_bind_blob:void 0,sqlite3_bind_text:void 0,sqlite3_create_function_v2:(l,_,u,I,U,ee,ne,re,se)=>{},sqlite3_create_function:(l,_,u,I,U,ee,ne,re)=>{},sqlite3_create_window_function:(l,_,u,I,U,ee,ne,re,se,j)=>{},sqlite3_prepare_v3:(l,_,u,I,U,ee)=>{},sqlite3_prepare_v2:(l,_,u,I,U)=>{},sqlite3_exec:(l,_,u,I,U)=>{},sqlite3_randomness:(l,_)=>{}});const y={affirmBindableTypedArray:S,flexibleString:c,bigIntFits32:T,bigIntFits64:W,bigIntFitsDouble:A,isBindableTypedArray:N,isInt32:z,isSQLableTypedArray:P,isTypedArray:D,typedArrayToString:$,isUIThread:()=>globalThis.window===globalThis&&!!globalThis.document,isSharedTypedArray:w,toss:function(...l){throw new Error(l.join(" "))},toss3:R,typedArrayPart:x,affirmDbHeader:function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));const _="SQLite format 3";_.length>l.byteLength&&R("Input does not contain an SQLite3 database header.");for(let u=0;u<_.length;++u)_.charCodeAt(u)!==l[u]&&R("Input does not contain an SQLite3 database header.")},affirmIsDb:function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));const _=l.byteLength;(_<512||_%512!==0)&&R("Byte array size",_,"is invalid for an SQLite3 db."),y.affirmDbHeader(l)}};Object.assign(o,{ptrSizeof:r.wasmPtrSizeof||4,ptrIR:r.wasmPtrIR||"i32",bigIntEnabled:!!r.bigIntEnabled,exports:r.exports||R("Missing API config.exports (WASM module exports)."),memory:r.memory||r.exports.memory||R("API config object requires a WebAssembly.Memory object","in either config.exports.memory (exported)","or config.memory (imported)."),alloc:void 0,realloc:void 0,dealloc:void 0}),o.allocFromTypedArray=function(l){l instanceof ArrayBuffer&&(l=new Uint8Array(l)),S(l);const _=o.alloc(l.byteLength||1);return o.heapForSize(l.constructor).set(l.byteLength?l:[0],_),_};{const l=r.allocExportName,_=r.deallocExportName,u=r.reallocExportName;for(const I of[l,_,u])o.exports[I]instanceof Function||R("Missing required exports[",I,"] function.");o.alloc=function I(U){return I.impl(U)||d.toss("Failed to allocate",U," bytes.")},o.alloc.impl=o.exports[l],o.realloc=function I(U,ee){const ne=I.impl(U,ee);return ee?ne||d.toss("Failed to reallocate",ee," bytes."):0},o.realloc.impl=o.exports[u],o.dealloc=o.exports[_]}o.compileOptionUsed=function l(_){if(arguments.length){if(Array.isArray(_)){const u={};return _.forEach(I=>{u[I]=s.sqlite3_compileoption_used(I)}),u}else if(typeof _=="object")return Object.keys(_).forEach(u=>{_[u]=s.sqlite3_compileoption_used(u)}),_}else{if(l._result)return l._result;l._opt||(l._rx=/^([^=]+)=(.+)/,l._rxInt=/^-?\d+$/,l._opt=function(ne,re){const se=l._rx.exec(ne);re[0]=se?se[1]:ne,re[1]=se?l._rxInt.test(se[2])?+se[2]:se[2]:!0});const u={},I=[0,0];let U=0,ee;for(;ee=s.sqlite3_compileoption_get(U++);)l._opt(ee,I),u[I[0]]=I[1];return l._result=u}return typeof _=="string"?!!s.sqlite3_compileoption_used(_):!1},o.pstack=Object.assign(Object.create(null),{restore:o.exports.sqlite3__wasm_pstack_restore,alloc:function(l){return typeof l=="string"&&!(l=o.sizeofIR(l))&&d.toss("Invalid value for pstack.alloc(",arguments[0],")"),o.exports.sqlite3__wasm_pstack_alloc(l)||d.toss("Could not allocate",l,"bytes from the pstack.")},allocChunks:function(l,_){typeof _=="string"&&!(_=o.sizeofIR(_))&&d.toss("Invalid size value for allocChunks(",arguments[1],")");const u=o.pstack.alloc(l*_),I=[];let U=0,ee=0;for(;Ul===1?o.pstack.alloc(_?8:o.ptrSizeof):o.pstack.allocChunks(l,_?8:o.ptrSizeof),call:function(l){const _=o.pstack.pointer;try{return l(m)}finally{o.pstack.restore(_)}}}),Object.defineProperties(o.pstack,{pointer:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_ptr},quota:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_quota},remaining:{configurable:!1,iterable:!0,writeable:!1,get:o.exports.sqlite3__wasm_pstack_remaining}}),s.sqlite3_randomness=(...l)=>{if(l.length===1&&y.isTypedArray(l[0])&&l[0].BYTES_PER_ELEMENT===1){const _=l[0];if(_.byteLength===0)return o.exports.sqlite3_randomness(0,0),_;const u=o.pstack.pointer;try{let I=_.byteLength,U=0;const ee=o.exports.sqlite3_randomness,ne=o.heap8u(),re=I<512?I:512,se=o.pstack.alloc(re);do{const j=I>re?re:I;ee(j,se),_.set(x(ne,se,se+j),U),I-=j,U+=j}while(I>0)}catch(I){console.error("Highly unexpected (and ignored!) exception in sqlite3_randomness():",I)}finally{o.pstack.restore(u)}return _}o.exports.sqlite3_randomness(...l)};let B;if(s.sqlite3_wasmfs_opfs_dir=function(){if(B!==void 0)return B;const l=r.wasmfsOpfsDir;if(!l||!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle)return B="";try{return l&&o.xCallWrapped("sqlite3__wasm_init_wasmfs","i32",["string"],l)===0?B=l:B=""}catch{return B=""}},s.sqlite3_wasmfs_filename_is_persistent=function(l){const _=s.sqlite3_wasmfs_opfs_dir();return _&&l?l.startsWith(_+"/"):!1},s.sqlite3_js_db_uses_vfs=function(l,_,u=0){try{const I=s.sqlite3_vfs_find(_);return I?l?I===s.sqlite3_js_db_vfs(l,u)?I:!1:I===s.sqlite3_vfs_find(0)?I:!1:!1}catch{return!1}},s.sqlite3_js_vfs_list=function(){const l=[];let _=s.sqlite3_vfs_find(0);for(;_;){const u=new s.sqlite3_vfs(_);l.push(o.cstrToJs(u.$zName)),_=u.$pNext,u.dispose()}return l},s.sqlite3_js_db_export=function(l,_=0){l=o.xWrap.testConvertArg("sqlite3*",l),l||R("Invalid sqlite3* argument."),o.bigIntEnabled||R("BigInt64 support is not enabled.");const u=o.scopedAllocPush();let I;try{const U=o.scopedAlloc(8+o.ptrSizeof),ee=U+8,ne=_?o.isPtr(_)?_:o.scopedAllocCString(""+_):0;let re=o.exports.sqlite3__wasm_db_serialize(l,ne,ee,U,0);re&&R("Database serialization failed with code",m.capi.sqlite3_js_rc_str(re)),I=o.peekPtr(ee);const se=o.peek(U,"i64");return re=se?o.heap8u().slice(I,I+Number(se)):new Uint8Array,re}finally{I&&o.exports.sqlite3_free(I),o.scopedAllocPop(u)}},s.sqlite3_js_db_vfs=(l,_=0)=>y.sqlite3__wasm_db_vfs(l,_),s.sqlite3_js_aggregate_context=(l,_)=>s.sqlite3_aggregate_context(l,_)||(_?d.toss("Cannot allocate",_,"bytes for sqlite3_aggregate_context()"):0),s.sqlite3_js_posix_create_file=function(l,_,u){let I;_&&o.isPtr(_)?I=_:_ instanceof ArrayBuffer||_ instanceof Uint8Array?(I=o.allocFromTypedArray(_),(arguments.length<3||!y.isInt32(u)||u<0)&&(u=_.byteLength)):O.toss("Invalid 2nd argument for sqlite3_js_posix_create_file().");try{(!y.isInt32(u)||u<0)&&O.toss("Invalid 3rd argument for sqlite3_js_posix_create_file().");const U=y.sqlite3__wasm_posix_create_file(l,I,u);U&&O.toss("Creation of file failed with sqlite3 result code",s.sqlite3_js_rc_str(U))}finally{o.dealloc(I)}},s.sqlite3_js_vfs_create_file=function(l,_,u,I){r.warn("sqlite3_js_vfs_create_file() is deprecated and","should be avoided because it can lead to C-level crashes.","See its documentation for alternative options.");let U;u?(o.isPtr(u)?U=u:u instanceof ArrayBuffer&&(u=new Uint8Array(u)),u instanceof Uint8Array?(U=o.allocFromTypedArray(u),(arguments.length<4||!y.isInt32(I)||I<0)&&(I=u.byteLength)):O.toss("Invalid 3rd argument type for sqlite3_js_vfs_create_file().")):U=0,(!y.isInt32(I)||I<0)&&(o.dealloc(U),O.toss("Invalid 4th argument for sqlite3_js_vfs_create_file()."));try{const ee=y.sqlite3__wasm_vfs_create_file(l,_,U,I);ee&&O.toss("Creation of file failed with sqlite3 result code",s.sqlite3_js_rc_str(ee))}finally{o.dealloc(U)}},s.sqlite3_js_sql_to_string=l=>{if(typeof l=="string")return l;const _=c(v);return _===v?void 0:_},y.isUIThread()){const l=function(_){const u=Object.create(null);return u.prefix="kvvfs-"+_,u.stores=[],(_==="session"||_==="")&&u.stores.push(globalThis.sessionStorage),(_==="local"||_==="")&&u.stores.push(globalThis.localStorage),u};s.sqlite3_js_kvvfs_clear=function(_=""){let u=0;const I=l(_);return I.stores.forEach(U=>{const ee=[];let ne;for(ne=0;neU.removeItem(re)),u+=ee.length}),u},s.sqlite3_js_kvvfs_size=function(_=""){let u=0;const I=l(_);return I.stores.forEach(U=>{let ee;for(ee=0;eef(l,_,"sqlite3_preupdate_new"),s.sqlite3_preupdate_old_js=(l,_)=>f(l,_,"sqlite3_preupdate_old"),s.sqlite3changeset_new_js=(l,_)=>f(l,_,"sqlite3changeset_new"),s.sqlite3changeset_old_js=(l,_)=>f(l,_,"sqlite3changeset_old");const m={WasmAllocError:d,SQLite3Error:O,capi:s,util:y,wasm:o,config:r,version:Object.create(null),client:void 0,asyncPostInit:async function l(){if(l.isReady instanceof Promise)return l.isReady;let _=t.initializersAsync;delete t.initializersAsync;const u=async()=>(m.__isUnderTest||(delete m.util,delete m.StructBinder),m),I=ee=>{throw r.error("an async sqlite3 initializer failed:",ee),ee};if(!_||!_.length)return l.isReady=u().catch(I);_=_.map(ee=>ee instanceof Function?async ne=>ee(m):ee),_.push(u);let U=Promise.resolve(m);for(;_.length;)U=U.then(_.shift());return l.isReady=U.catch(I)},scriptInfo:void 0};try{t.initializers.forEach(l=>{l(m)})}catch(l){throw console.error("sqlite3 bootstrap initializer threw:",l),l}return delete t.initializers,t.sqlite3=m,m},globalThis.sqlite3ApiBootstrap.initializers=[],globalThis.sqlite3ApiBootstrap.initializersAsync=[],globalThis.sqlite3ApiBootstrap.defaultConfig=Object.create(null),globalThis.sqlite3ApiBootstrap.sqlite3=void 0,globalThis.WhWasmUtilInstaller=function(t){t.bigIntEnabled===void 0&&(t.bigIntEnabled=!!globalThis.BigInt64Array);const n=(...c)=>{throw new Error(c.join(" "))};t.exports||Object.defineProperty(t,"exports",{enumerable:!0,configurable:!0,get:()=>t.instance&&t.instance.exports});const r=t.pointerIR||"i32",s=t.ptrSizeof=r==="i32"?4:r==="i64"?8:n("Unhandled ptrSizeof:",r),o=Object.create(null);o.heapSize=0,o.memory=null,o.freeFuncIndexes=[],o.scopedAlloc=[],o.utf8Decoder=new TextDecoder,o.utf8Encoder=new TextEncoder("utf-8"),t.sizeofIR=c=>{switch(c){case"i8":return 1;case"i16":return 2;case"i32":case"f32":case"float":return 4;case"i64":case"f64":case"double":return 8;case"*":return s;default:return(""+c).endsWith("*")?s:void 0}};const p=function(){if(!o.memory)o.memory=t.memory instanceof WebAssembly.Memory?t.memory:t.exports.memory;else if(o.heapSize===o.memory.buffer.byteLength)return o;const c=o.memory.buffer;return o.HEAP8=new Int8Array(c),o.HEAP8U=new Uint8Array(c),o.HEAP16=new Int16Array(c),o.HEAP16U=new Uint16Array(c),o.HEAP32=new Int32Array(c),o.HEAP32U=new Uint32Array(c),t.bigIntEnabled&&(o.HEAP64=new BigInt64Array(c),o.HEAP64U=new BigUint64Array(c)),o.HEAP32F=new Float32Array(c),o.HEAP64F=new Float64Array(c),o.heapSize=c.byteLength,o};t.heap8=()=>p().HEAP8,t.heap8u=()=>p().HEAP8U,t.heap16=()=>p().HEAP16,t.heap16u=()=>p().HEAP16U,t.heap32=()=>p().HEAP32,t.heap32u=()=>p().HEAP32U,t.heapForSize=function(c,d=!0){const y=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p();switch(c){case Int8Array:return y.HEAP8;case Uint8Array:return y.HEAP8U;case Int16Array:return y.HEAP16;case Uint16Array:return y.HEAP16U;case Int32Array:return y.HEAP32;case Uint32Array:return y.HEAP32U;case 8:return d?y.HEAP8U:y.HEAP8;case 16:return d?y.HEAP16U:y.HEAP16;case 32:return d?y.HEAP32U:y.HEAP32;case 64:if(y.HEAP64)return d?y.HEAP64U:y.HEAP64;break;default:if(t.bigIntEnabled){if(c===globalThis.BigUint64Array)return y.HEAP64U;if(c===globalThis.BigInt64Array)return y.HEAP64;break}}n("Invalid heapForSize() size: expecting 8, 16, 32,","or (if BigInt is enabled) 64.")},t.functionTable=function(){return t.exports.__indirect_function_table},t.functionEntry=function(c){const d=t.functionTable();return c>7)},rxJSig:/^(\w)\((\w*)\)$/,sigParams:function(m){const l=c._.rxJSig.exec(m);return l?l[2]:m.substr(1)},letterType:m=>c._.sigTypes[m]||n("Invalid signature letter:",m),pushSigType:(m,l)=>m.push(c._.typeCodes[c._.letterType(l)])}),typeof d=="string"){const m=y;y=d,d=m}const B=c._.sigParams(y),f=[1,96];c._.uleb128Encode(f,"push",B.length);for(const m of B)c._.pushSigType(f,m);return y[0]==="v"?f.push(0):(f.push(1),c._.pushSigType(f,y[0])),c._.uleb128Encode(f,"unshift",f.length),f.unshift(0,97,115,109,1,0,0,0,1),f.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array(f)),{e:{f:d}}).exports.f};const g=function(d,y,B){if(B&&!o.scopedAlloc.length&&n("No scopedAllocPush() scope is active."),typeof d=="string"){const _=y;y=d,d=_}(typeof y!="string"||!(d instanceof Function))&&n("Invalid arguments: expecting (function,signature) or (signature,function).");const f=t.functionTable(),m=f.length;let l;for(;o.freeFuncIndexes.length&&(l=o.freeFuncIndexes.pop(),f.get(l));){l=null;continue}l||(l=m,f.grow(1));try{return f.set(l,d),B&&o.scopedAlloc[o.scopedAlloc.length-1].push(l),l}catch(_){if(!(_ instanceof TypeError))throw l===m&&o.freeFuncIndexes.push(m),_}try{const _=t.jsFuncToWasm(d,y);f.set(l,_),B&&o.scopedAlloc[o.scopedAlloc.length-1].push(l)}catch(_){throw l===m&&o.freeFuncIndexes.push(m),_}return l};t.installFunction=(c,d)=>g(c,d,!1),t.scopedInstallFunction=(c,d)=>g(c,d,!0),t.uninstallFunction=function(c){if(!c&&c!==0)return;const d=o.freeFuncIndexes,y=t.functionTable();d.push(c);const B=y.get(c);return y.set(c,null),B},t.peek=function(d,y="i8"){y.endsWith("*")&&(y=r);const B=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p(),f=Array.isArray(d)?[]:void 0;let m;do{switch(f&&(d=arguments[0].shift()),y){case"i1":case"i8":m=B.HEAP8[d>>0];break;case"i16":m=B.HEAP16[d>>1];break;case"i32":m=B.HEAP32[d>>2];break;case"float":case"f32":m=B.HEAP32F[d>>2];break;case"double":case"f64":m=Number(B.HEAP64F[d>>3]);break;case"i64":if(t.bigIntEnabled){m=BigInt(B.HEAP64[d>>3]);break}default:n("Invalid type for peek():",y)}f&&f.push(m)}while(f&&arguments[0].length);return f||m},t.poke=function(c,d,y="i8"){y.endsWith("*")&&(y=r);const B=o.memory&&o.heapSize===o.memory.buffer.byteLength?o:p();for(const f of Array.isArray(c)?c:[c])switch(y){case"i1":case"i8":B.HEAP8[f>>0]=d;continue;case"i16":B.HEAP16[f>>1]=d;continue;case"i32":B.HEAP32[f>>2]=d;continue;case"float":case"f32":B.HEAP32F[f>>2]=d;continue;case"double":case"f64":B.HEAP64F[f>>3]=d;continue;case"i64":if(B.HEAP64){B.HEAP64[f>>3]=BigInt(d);continue}default:n("Invalid type for poke(): "+y)}return this},t.peekPtr=(...c)=>t.peek(c.length===1?c[0]:c,r),t.pokePtr=(c,d=0)=>t.poke(c,d,r),t.peek8=(...c)=>t.peek(c.length===1?c[0]:c,"i8"),t.poke8=(c,d)=>t.poke(c,d,"i8"),t.peek16=(...c)=>t.peek(c.length===1?c[0]:c,"i16"),t.poke16=(c,d)=>t.poke(c,d,"i16"),t.peek32=(...c)=>t.peek(c.length===1?c[0]:c,"i32"),t.poke32=(c,d)=>t.poke(c,d,"i32"),t.peek64=(...c)=>t.peek(c.length===1?c[0]:c,"i64"),t.poke64=(c,d)=>t.poke(c,d,"i64"),t.peek32f=(...c)=>t.peek(c.length===1?c[0]:c,"f32"),t.poke32f=(c,d)=>t.poke(c,d,"f32"),t.peek64f=(...c)=>t.peek(c.length===1?c[0]:c,"f64"),t.poke64f=(c,d)=>t.poke(c,d,"f64"),t.getMemValue=t.peek,t.getPtrValue=t.peekPtr,t.setMemValue=t.poke,t.setPtrValue=t.pokePtr,t.isPtr32=c=>typeof c=="number"&&c===(c|0)&&c>=0,t.isPtr=t.isPtr32,t.cstrlen=function(c){if(!c||!t.isPtr(c))return null;const d=p().HEAP8U;let y=c;for(;d[y]!==0;++y);return y-c};const O=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,R=function(c,d,y){return o.utf8Decoder.decode(c.buffer instanceof O?c.slice(d,y):c.subarray(d,y))};t.cstrToJs=function(c){const d=t.cstrlen(c);return d?R(p().HEAP8U,c,c+d):d===null?d:""},t.jstrlen=function(c){if(typeof c!="string")return null;const d=c.length;let y=0;for(let B=0;B=55296&&f<=57343&&(f=65536+((f&1023)<<10)|c.charCodeAt(++B)&1023),f<=127?++y:f<=2047?y+=2:f<=65535?y+=3:y+=4}return y},t.jstrcpy=function(c,d,y=0,B=-1,f=!0){if((!d||!(d instanceof Int8Array)&&!(d instanceof Uint8Array))&&n("jstrcpy() target must be an Int8Array or Uint8Array."),B<0&&(B=d.length-y),!(B>0)||!(y>=0))return 0;let m=0,l=c.length;const _=y,u=y+B-(f?1:0);for(;m=55296&&I<=57343&&(I=65536+((I&1023)<<10)|c.charCodeAt(++m)&1023),I<=127){if(y>=u)break;d[y++]=I}else if(I<=2047){if(y+1>=u)break;d[y++]=192|I>>6,d[y++]=128|I&63}else if(I<=65535){if(y+2>=u)break;d[y++]=224|I>>12,d[y++]=128|I>>6&63,d[y++]=128|I&63}else{if(y+3>=u)break;d[y++]=240|I>>18,d[y++]=128|I>>12&63,d[y++]=128|I>>6&63,d[y++]=128|I&63}}return f&&(d[y++]=0),y-_},t.cstrncpy=function(c,d,y){if((!c||!d)&&n("cstrncpy() does not accept NULL strings."),y<0)y=t.cstrlen(strPtr)+1;else if(!(y>0))return 0;const B=t.heap8u();let f=0,m;for(;fo.utf8Encoder.encode(d?c+"\0":c);const z=(c,d)=>{(!(c.alloc instanceof Function)||!(c.dealloc instanceof Function))&&n("Object is missing alloc() and/or dealloc() function(s)","required by",d+"().")},W=function(c,d,y,B){if(z(t,B),typeof c!="string")return null;{const f=o.utf8Encoder.encode(c),m=y(f.length+1),l=p().HEAP8U;return l.set(f,m),l[m+f.length]=0,d?[m,f.length]:m}};t.allocCString=(c,d=!1)=>W(c,d,t.alloc,"allocCString()"),t.scopedAllocPush=function(){z(t,"scopedAllocPush");const c=[];return o.scopedAlloc.push(c),c},t.scopedAllocPop=function(c){z(t,"scopedAllocPop");const d=arguments.length?o.scopedAlloc.indexOf(c):o.scopedAlloc.length-1;d<0&&n("Invalid state object for scopedAllocPop()."),arguments.length===0&&(c=o.scopedAlloc[d]),o.scopedAlloc.splice(d,1);for(let y;y=c.pop();)t.functionEntry(y)?t.uninstallFunction(y):t.dealloc(y)},t.scopedAlloc=function(c){o.scopedAlloc.length||n("No scopedAllocPush() scope is active.");const d=t.alloc(c);return o.scopedAlloc[o.scopedAlloc.length-1].push(d),d},Object.defineProperty(t.scopedAlloc,"level",{configurable:!1,enumerable:!1,get:()=>o.scopedAlloc.length,set:()=>n("The 'active' property is read-only.")}),t.scopedAllocCString=(c,d=!1)=>W(c,d,t.scopedAlloc,"scopedAllocCString()");const T=function(c,d){const y=t[c?"scopedAlloc":"alloc"]((d.length+1)*t.ptrSizeof);let B=0;return d.forEach(f=>{t.pokePtr(y+t.ptrSizeof*B++,t[c?"scopedAllocCString":"allocCString"](""+f))}),t.pokePtr(y+t.ptrSizeof*B,0),y};t.scopedAllocMainArgv=c=>T(!0,c),t.allocMainArgv=c=>T(!1,c),t.cArgvToJs=(c,d)=>{const y=[];for(let B=0;BA(c,d,"alloc"),t.scopedAllocPtr=(c=1,d=!0)=>A(c,d,"scopedAlloc"),t.xGet=function(c){return t.exports[c]||n("Cannot find exported symbol:",c)};const D=(c,d)=>n(c+"() requires",d,"argument(s).");t.xCall=function(c,...d){const y=c instanceof Function?c:t.xGet(c);return y instanceof Function||n("Exported symbol",c,"is not a function."),y.length!==d.length&&D(y===c?y.name:c,y.length),arguments.length===2&&Array.isArray(arguments[1])?y.apply(null,arguments[1]):y.apply(null,d)},o.xWrap=Object.create(null),o.xWrap.convert=Object.create(null),o.xWrap.convert.arg=new Map,o.xWrap.convert.result=new Map;const q=o.xWrap.convert.arg,w=o.xWrap.convert.result;t.bigIntEnabled&&q.set("i64",c=>BigInt(c));const x=r==="i32"?c=>c|0:c=>BigInt(c)|BigInt(0);q.set("i32",x).set("i16",c=>(c|0)&65535).set("i8",c=>(c|0)&255).set("f32",c=>Number(c).valueOf()).set("float",q.get("f32")).set("f64",q.get("f32")).set("double",q.get("f64")).set("int",q.get("i32")).set("null",c=>c).set(null,q.get("null")).set("**",x).set("*",x),w.set("*",x).set("pointer",x).set("number",c=>Number(c)).set("void",c=>{}).set("null",c=>c).set(null,w.get("null"));{const c=["i8","i16","i32","int","f32","float","f64","double"];t.bigIntEnabled&&c.push("i64");const d=q.get(r);for(const y of c)q.set(y+"*",d),w.set(y+"*",d),w.set(y,q.get(y)||n("Missing arg converter:",y))}const N=function(c){return typeof c=="string"?t.scopedAllocCString(c):c?x(c):null};q.set("string",N).set("utf8",N).set("pointer",N),w.set("string",c=>t.cstrToJs(c)).set("utf8",w.get("string")).set("string:dealloc",c=>{try{return c?t.cstrToJs(c):null}finally{t.dealloc(c)}}).set("utf8:dealloc",w.get("string:dealloc")).set("json",c=>JSON.parse(t.cstrToJs(c))).set("json:dealloc",c=>{try{return c?JSON.parse(t.cstrToJs(c)):null}finally{t.dealloc(c)}});const P=class{constructor(c){this.name=c.name||"unnamed adapter"}convertArg(c,d,y){n("AbstractArgAdapter must be subclassed.")}};q.FuncPtrAdapter=class Ae extends P{constructor(d){super(d),q.FuncPtrAdapter.warnOnUse&&console.warn("xArg.FuncPtrAdapter is an internal-only API","and is not intended to be invoked from","client-level code. Invoked with:",d),this.name=d.name||"unnamed",this.signature=d.signature,d.contextKey instanceof Function&&(this.contextKey=d.contextKey,d.bindScope||(d.bindScope="context")),this.bindScope=d.bindScope||n("FuncPtrAdapter options requires a bindScope (explicit or implied)."),Ae.bindScopes.indexOf(d.bindScope)<0&&n("Invalid options.bindScope ("+d.bindMod+") for FuncPtrAdapter. Expecting one of: ("+Ae.bindScopes.join(", ")+")"),this.isTransient=this.bindScope==="transient",this.isContext=this.bindScope==="context",this.isPermanent=this.bindScope==="permanent",this.singleton=this.bindScope==="singleton"?[]:void 0,this.callProxy=d.callProxy instanceof Function?d.callProxy:void 0}contextKey(d,y){return this}contextMap(d){const y=this.__cmap||(this.__cmap=new Map);let B=y.get(d);return B===void 0&&y.set(d,B=[]),B}convertArg(d,y,B){let f=this.singleton;if(!f&&this.isContext&&(f=this.contextMap(this.contextKey(y,B))),f&&f[0]===d)return f[1];if(d instanceof Function){this.callProxy&&(d=this.callProxy(d));const m=g(d,this.signature,this.isTransient);if(Ae.debugFuncInstall&&Ae.debugOut("FuncPtrAdapter installed",this,this.contextKey(y,B),"@"+m,d),f){if(f[1]){Ae.debugFuncInstall&&Ae.debugOut("FuncPtrAdapter uninstalling",this,this.contextKey(y,B),"@"+f[1],d);try{o.scopedAlloc[o.scopedAlloc.length-1].push(f[1])}catch{}}f[0]=d,f[1]=m}return m}else if(t.isPtr(d)||d===null||d===void 0){if(f&&f[1]&&f[1]!==d){Ae.debugFuncInstall&&Ae.debugOut("FuncPtrAdapter uninstalling",this,this.contextKey(y,B),"@"+f[1],d);try{o.scopedAlloc[o.scopedAlloc.length-1].push(f[1])}catch{}f[0]=f[1]=d|0}return d||0}else throw new TypeError("Invalid FuncPtrAdapter argument type. Expecting a function pointer or a "+(this.name?this.name+" ":"")+"function matching signature "+this.signature+".")}},q.FuncPtrAdapter.warnOnUse=!1,q.FuncPtrAdapter.debugFuncInstall=!1,q.FuncPtrAdapter.debugOut=console.debug.bind(console),q.FuncPtrAdapter.bindScopes=["transient","context","singleton","permanent"];const S=c=>q.get(c)||n("Argument adapter not found:",c),L=c=>w.get(c)||n("Result adapter not found:",c);o.xWrap.convertArg=(c,...d)=>S(c)(...d),o.xWrap.convertArgNoCheck=(c,...d)=>q.get(c)(...d),o.xWrap.convertResult=(c,d)=>c===null?d:c?L(c)(d):void 0,o.xWrap.convertResultNoCheck=(c,d)=>c===null?d:c?w.get(c)(d):void 0,t.xWrap=function(c,d,...y){arguments.length===3&&Array.isArray(arguments[2])&&(y=arguments[2]),t.isPtr(c)&&(c=t.functionEntry(c)||n("Function pointer not found in WASM function table."));const B=c instanceof Function,f=B?c:t.xGet(c);if(B&&(c=f.name||"unnamed function"),y.length!==f.length&&D(c,f.length),d===null&&f.length===0)return f;d!=null&&L(d);for(const l of y)l instanceof P?q.set(l,(..._)=>l.convertArg(..._)):S(l);const m=o.xWrap;return f.length===0?(...l)=>l.length?D(c,f.length):m.convertResult(d,f.call(null)):function(...l){l.length!==f.length&&D(c,f.length);const _=t.scopedAllocPush();try{let u=0;for(;ufetch(t.uri,{credentials:"same-origin"}),r=this,s=function(p){if(t.wasmUtilTarget){const g=(...R)=>{throw new Error(R.join(" "))},O=t.wasmUtilTarget;if(O.module=p.module,O.instance=p.instance,O.instance.exports.memory||(O.memory=t.imports&&t.imports.env&&t.imports.env.memory||g("Missing 'memory' object!")),!O.alloc&&p.instance.exports.malloc){const R=p.instance.exports;O.alloc=function(z){return R.malloc(z)||g("Allocation of",z,"bytes failed.")},O.dealloc=function(z){R.free(z)}}r(O)}return t.onload&&t.onload(p,t),p};return WebAssembly.instantiateStreaming?function(){return WebAssembly.instantiateStreaming(n(),t.imports||{}).then(s)}:function(){return n().then(g=>g.arrayBuffer()).then(g=>WebAssembly.instantiate(g,t.imports||{})).then(s)}}).bind(globalThis.WhWasmUtilInstaller),globalThis.Jaccwabyt=function t(n){const r=(...F)=>{throw new Error(F.join(" "))};!(n.heap instanceof WebAssembly.Memory)&&!(n.heap instanceof Function)&&r("config.heap must be WebAssembly.Memory instance or a function."),["alloc","dealloc"].forEach(function(F){n[F]instanceof Function||r("Config option '"+F+"' must be a function.")});const s=t,o=n.heap instanceof Function?n.heap:()=>new Uint8Array(n.heap.buffer),p=n.alloc,g=n.dealloc,O=n.log||console.log.bind(console),R=n.memberPrefix||"",z=n.memberSuffix||"",W=n.bigIntEnabled===void 0?!!globalThis.BigInt64Array:!!n.bigIntEnabled,T=globalThis.BigInt,A=globalThis.BigInt64Array,D=n.ptrSizeof||4,q=n.ptrIR||"i32";s.debugFlags||(s.__makeDebugFlags=function(F=null){F&&F.__flags&&(F=F.__flags);const V=function K(X){return arguments.length===0?K.__flags:(X<0?(delete K.__flags.getter,delete K.__flags.setter,delete K.__flags.alloc,delete K.__flags.dealloc):(K.__flags.getter=(1&X)!==0,K.__flags.setter=(2&X)!==0,K.__flags.alloc=(4&X)!==0,K.__flags.dealloc=(8&X)!==0),K._flags)};return Object.defineProperty(V,"__flags",{iterable:!1,writable:!1,value:Object.create(F)}),F||V(0),V},s.debugFlags=s.__makeDebugFlags());const w=(function(){const F=new ArrayBuffer(2);return new DataView(F).setInt16(0,256,!0),new Int16Array(F)[0]===256})(),x=F=>F[1]==="(",N=F=>F==="P",P=F=>x(F)?"p":F[0],S=function(F){switch(P(F)){case"c":case"C":return"i8";case"i":return"i32";case"p":case"P":case"s":return q;case"j":return"i64";case"f":return"float";case"d":return"double"}r("Unhandled signature IR:",F)},L=A?()=>!0:()=>r("BigInt64Array is not available."),$=function(F){switch(P(F)){case"p":case"P":case"s":{switch(D){case 4:return"getInt32";case 8:return L()&&"getBigInt64"}break}case"i":return"getInt32";case"c":return"getInt8";case"C":return"getUint8";case"j":return L()&&"getBigInt64";case"f":return"getFloat32";case"d":return"getFloat64"}r("Unhandled DataView getter for signature:",F)},c=function(F){switch(P(F)){case"p":case"P":case"s":{switch(D){case 4:return"setInt32";case 8:return L()&&"setBigInt64"}break}case"i":return"setInt32";case"c":return"setInt8";case"C":return"setUint8";case"j":return L()&&"setBigInt64";case"f":return"setFloat32";case"d":return"setFloat64"}r("Unhandled DataView setter for signature:",F)},d=function(F){switch(P(F)){case"i":case"f":case"c":case"C":case"d":return Number;case"j":return L()&&T;case"p":case"P":case"s":switch(D){case 4:return Number;case 8:return L()&&T}break}r("Unhandled DataView set wrapper for signature:",F)},y=(F,V)=>F+"::"+V,B=function(F,V){return()=>r(y(F,V),"is read-only.")},f=new WeakMap,m="(pointer-is-external)",l=function(F,V,K){if(K||(K=f.get(V)),K){if(f.delete(V),Array.isArray(V.ondispose)){let X;for(;X=V.ondispose.shift();)try{X instanceof Function?X.call(V):X instanceof te?X.dispose():typeof X=="number"&&g(X)}catch(ae){console.warn("ondispose() for",F.structName,"@",K,"threw. NOT propagating it.",ae)}}else if(V.ondispose instanceof Function)try{V.ondispose()}catch(X){console.warn("ondispose() for",F.structName,"@",K,"threw. NOT propagating it.",X)}delete V.ondispose,F.debugFlags.__flags.dealloc&&O("debug.dealloc:",V[m]?"EXTERNAL":"",F.structName,"instance:",F.structInfo.sizeof,"bytes @"+K),V[m]||g(K)}},_=F=>({configurable:!1,writable:!1,iterable:!1,value:F}),u=function(F,V,K){let X=!K;K?Object.defineProperty(V,m,_(K)):(K=p(F.structInfo.sizeof),K||r("Allocation of",F.structName,"structure failed."));try{F.debugFlags.__flags.alloc&&O("debug.alloc:",X?"":"EXTERNAL",F.structName,"instance:",F.structInfo.sizeof,"bytes @"+K),X&&o().fill(0,K,K+F.structInfo.sizeof),f.set(V,K)}catch(ae){throw l(F,V,K),ae}},I=function(){const F=this.pointer;return F?new Uint8Array(o().slice(F,F+this.structInfo.sizeof)):null},ee=_(F=>R+F+z),ne=function(F,V,K=!0){let X=F.members[V];if(!X&&(R||z)){for(const ae of Object.values(F.members))if(ae.key===V){X=ae;break}!X&&K&&r(y(F.name,V),"is not a mapped struct member.")}return X},re=function F(V,K,X=!1){F._||(F._=de=>de.replace(/[^vipPsjrdcC]/g,"").replace(/[pPscC]/g,"i"));const ae=ne(V.structInfo,K,!0);return X?F._(ae.signature):ae.signature},se={configurable:!1,enumerable:!1,get:function(){return f.get(this)},set:()=>r("Cannot assign the 'pointer' property of a struct.")},j=_(function(){const F=[];for(const V of Object.keys(this.structInfo.members))F.push(this.memberKey(V));return F}),b=new TextDecoder("utf-8"),k=new TextEncoder,Q=typeof SharedArrayBuffer>"u"?function(){}:SharedArrayBuffer,H=function(F,V,K){return b.decode(F.buffer instanceof Q?F.slice(V,K):F.subarray(V,K))},Z=function(F,V,K=!1){const X=ne(F.structInfo,V,K);return X&&X.signature.length===1&&X.signature[0]==="s"?X:!1},E=function(F){F.signature!=="s"&&r("Invalid member type signature for C-string value:",JSON.stringify(F))},C=function(V,K){const X=ne(V.structInfo,K,!0);E(X);const ae=V[X.key];if(!ae)return null;let de=ae;const ue=o();for(;ue[de]!==0;++de);return ae===de?"":H(ue,ae,de)},M=function(F,...V){F.ondispose?Array.isArray(F.ondispose)||(F.ondispose=[F.ondispose]):F.ondispose=[],F.ondispose.push(...V)},J=function(F){const V=k.encode(F),K=p(V.length+1);K||r("Allocation error while duplicating string:",F);const X=o();return X.set(V,K),X[K+V.length]=0,K},G=function(F,V,K){const X=ne(F.structInfo,V,!0);E(X);const ae=J(K);return F[X.key]=ae,M(F,ae),F},te=function(V,K){arguments[2]!==_&&r("Do not call the StructType constructor","from client-level code."),Object.defineProperties(this,{structName:_(V),structInfo:_(K)})};te.prototype=Object.create(null,{dispose:_(function(){l(this.constructor,this)}),lookupMember:_(function(F,V=!0){return ne(this.structInfo,F,V)}),memberToJsString:_(function(F){return C(this,F)}),memberIsString:_(function(F,V=!0){return Z(this,F,V)}),memberKey:ee,memberKeys:j,memberSignature:_(function(F,V=!1){return re(this,F,V)}),memoryDump:_(I),pointer:se,setMemberCString:_(function(F,V){return G(this,F,V)})}),Object.assign(te.prototype,{addOnDispose:function(...F){return M(this,...F),this}}),Object.defineProperties(te,{allocCString:_(J),isA:_(F=>F instanceof te),hasExternalPointer:_(F=>F instanceof te&&!!F[m]),memberKey:ee});const oe=F=>Number.isFinite(F)||F instanceof(T||Number),Y=function F(V,K,X){if(!F._){F._={getters:{},setters:{},sw:{}};const me=["i","c","C","p","P","s","f","d","v()"];W&&me.push("j"),me.forEach(function(we){F._.getters[we]=$(we),F._.setters[we]=c(we),F._.sw[we]=d(we)});const Kn=/^[ipPsjfdcC]$/,Jn=/^[vipPsjfdcC]\([ipPsjfdcC]*\)$/;F.sigCheck=function(we,Xn,kt,ot){Object.prototype.hasOwnProperty.call(we,kt)&&r(we.structName,"already has a property named",kt+"."),Kn.test(ot)||Jn.test(ot)||r("Malformed signature for",y(we.structName,Xn)+":",ot)}}const ae=V.memberKey(K);F.sigCheck(V.prototype,K,ae,X.signature),X.key=ae,X.name=K;const de=P(X.signature),ue=y(V.prototype.structName,ae),fe=V.prototype.debugFlags.__flags,Re=Object.create(null);Re.configurable=!1,Re.enumerable=!1,Re.get=function(){fe.getter&&O("debug.getter:",F._.getters[de],"for",S(de),ue,"@",this.pointer,"+",X.offset,"sz",X.sizeof);let me=new DataView(o().buffer,this.pointer+X.offset,X.sizeof)[F._.getters[de]](0,w);return fe.getter&&O("debug.getter:",ue,"result =",me),me},X.readOnly?Re.set=B(V.prototype.structName,ae):Re.set=function(me){if(fe.setter&&O("debug.setter:",F._.setters[de],"for",S(de),ue,"@",this.pointer,"+",X.offset,"sz",X.sizeof,me),this.pointer||r("Cannot set struct property on disposed instance."),me===null)me=0;else for(;!oe(me);){if(N(X.signature)&&me instanceof te){me=me.pointer||0,fe.setter&&O("debug.setter:",ue,"resolved to",me);break}r("Invalid value for pointer-type",ue+".")}new DataView(o().buffer,this.pointer+X.offset,X.sizeof)[F._.setters[de]](0,F._.sw[de](me),w)},Object.defineProperty(V.prototype,ae,Re)},pe=function F(V,K){arguments.length===1?(K=V,V=K.name):K.name||(K.name=V),V||r("Struct name is required.");let X=!1;Object.keys(K.members).forEach(ue=>{const fe=K.members[ue];fe.sizeof?fe.sizeof===1?fe.signature==="c"||fe.signature==="C"||r("Unexpected sizeof==1 member",y(K.name,ue),"with signature",fe.signature):(fe.sizeof%4!==0&&(console.warn("Invalid struct member description =",fe,"from",K),r(V,"member",ue,"sizeof is not aligned. sizeof="+fe.sizeof)),fe.offset%4!==0&&(console.warn("Invalid struct member description =",fe,"from",K),r(V,"member",ue,"offset is not aligned. offset="+fe.offset))):r(V,"member",ue,"is missing sizeof."),(!X||X.offsetue instanceof de),memberKey:ee,memberKeys:j,methodInfoForKey:_(function(ue){}),structInfo:_(K),structName:_(V)}),de.prototype=new te(V,K,_),Object.defineProperties(de.prototype,{debugFlags:ae,constructor:_(de)}),Object.keys(K.members).forEach(ue=>Y(de,ue,K.members[ue])),de};return pe.StructType=te,pe.config=n,pe.allocCString=J,pe.debugFlags||(pe.debugFlags=s.__makeDebugFlags(s.debugFlags)),pe},globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=(...q)=>{throw new Error(q.join(" "))};t.SQLite3Error.toss;const r=t.capi,s=t.wasm,o=t.util;if(globalThis.WhWasmUtilInstaller(s),delete globalThis.WhWasmUtilInstaller,s.bindingSignatures=[["sqlite3_aggregate_context","void*","sqlite3_context*","int"],["sqlite3_bind_double","int","sqlite3_stmt*","int","f64"],["sqlite3_bind_int","int","sqlite3_stmt*","int","int"],["sqlite3_bind_null",void 0,"sqlite3_stmt*","int"],["sqlite3_bind_parameter_count","int","sqlite3_stmt*"],["sqlite3_bind_parameter_index","int","sqlite3_stmt*","string"],["sqlite3_bind_parameter_name","string","sqlite3_stmt*","int"],["sqlite3_bind_pointer","int","sqlite3_stmt*","int","*","string:static","*"],["sqlite3_busy_handler","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({signature:"i(pi)",contextKey:(q,w)=>q[0]}),"*"]],["sqlite3_busy_timeout","int","sqlite3*","int"],["sqlite3_changes","int","sqlite3*"],["sqlite3_clear_bindings","int","sqlite3_stmt*"],["sqlite3_collation_needed","int","sqlite3*","*","*"],["sqlite3_column_blob","*","sqlite3_stmt*","int"],["sqlite3_column_bytes","int","sqlite3_stmt*","int"],["sqlite3_column_count","int","sqlite3_stmt*"],["sqlite3_column_decltype","string","sqlite3_stmt*","int"],["sqlite3_column_double","f64","sqlite3_stmt*","int"],["sqlite3_column_int","int","sqlite3_stmt*","int"],["sqlite3_column_name","string","sqlite3_stmt*","int"],["sqlite3_column_text","string","sqlite3_stmt*","int"],["sqlite3_column_type","int","sqlite3_stmt*","int"],["sqlite3_column_value","sqlite3_value*","sqlite3_stmt*","int"],["sqlite3_commit_hook","void*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_commit_hook",signature:"i(p)",contextKey:q=>q[0]}),"*"]],["sqlite3_compileoption_get","string","int"],["sqlite3_compileoption_used","int","string"],["sqlite3_complete","int","string:flexible"],["sqlite3_context_db_handle","sqlite3*","sqlite3_context*"],["sqlite3_data_count","int","sqlite3_stmt*"],["sqlite3_db_filename","string","sqlite3*","string"],["sqlite3_db_handle","sqlite3*","sqlite3_stmt*"],["sqlite3_db_name","string","sqlite3*","int"],["sqlite3_db_readonly","int","sqlite3*","string"],["sqlite3_db_status","int","sqlite3*","int","*","*","int"],["sqlite3_errcode","int","sqlite3*"],["sqlite3_errmsg","string","sqlite3*"],["sqlite3_error_offset","int","sqlite3*"],["sqlite3_errstr","string","int"],["sqlite3_exec","int",["sqlite3*","string:flexible",new s.xWrap.FuncPtrAdapter({signature:"i(pipp)",bindScope:"transient",callProxy:q=>{let w;return(x,N,P,S)=>{try{const L=s.cArgvToJs(N,P);return w||(w=s.cArgvToJs(N,S)),q(L,w)|0}catch(L){return L.resultCode||r.SQLITE_ERROR}}}}),"*","**"]],["sqlite3_expanded_sql","string","sqlite3_stmt*"],["sqlite3_extended_errcode","int","sqlite3*"],["sqlite3_extended_result_codes","int","sqlite3*","int"],["sqlite3_file_control","int","sqlite3*","string","int","*"],["sqlite3_finalize","int","sqlite3_stmt*"],["sqlite3_free",void 0,"*"],["sqlite3_get_autocommit","int","sqlite3*"],["sqlite3_get_auxdata","*","sqlite3_context*","int"],["sqlite3_initialize",void 0],["sqlite3_interrupt",void 0,"sqlite3*"],["sqlite3_is_interrupted","int","sqlite3*"],["sqlite3_keyword_count","int"],["sqlite3_keyword_name","int",["int","**","*"]],["sqlite3_keyword_check","int",["string","int"]],["sqlite3_libversion","string"],["sqlite3_libversion_number","int"],["sqlite3_limit","int",["sqlite3*","int","int"]],["sqlite3_malloc","*","int"],["sqlite3_open","int","string","*"],["sqlite3_open_v2","int","string","*","int","string"],["sqlite3_realloc","*","*","int"],["sqlite3_reset","int","sqlite3_stmt*"],["sqlite3_result_blob",void 0,"sqlite3_context*","*","int","*"],["sqlite3_result_double",void 0,"sqlite3_context*","f64"],["sqlite3_result_error",void 0,"sqlite3_context*","string","int"],["sqlite3_result_error_code",void 0,"sqlite3_context*","int"],["sqlite3_result_error_nomem",void 0,"sqlite3_context*"],["sqlite3_result_error_toobig",void 0,"sqlite3_context*"],["sqlite3_result_int",void 0,"sqlite3_context*","int"],["sqlite3_result_null",void 0,"sqlite3_context*"],["sqlite3_result_pointer",void 0,"sqlite3_context*","*","string:static","*"],["sqlite3_result_subtype",void 0,"sqlite3_value*","int"],["sqlite3_result_text",void 0,"sqlite3_context*","string","int","*"],["sqlite3_result_zeroblob",void 0,"sqlite3_context*","int"],["sqlite3_rollback_hook","void*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_rollback_hook",signature:"v(p)",contextKey:q=>q[0]}),"*"]],["sqlite3_set_auxdata",void 0,["sqlite3_context*","int","*","*"]],["sqlite3_shutdown",void 0],["sqlite3_sourceid","string"],["sqlite3_sql","string","sqlite3_stmt*"],["sqlite3_status","int","int","*","*","int"],["sqlite3_step","int","sqlite3_stmt*"],["sqlite3_stmt_busy","int","sqlite3_stmt*"],["sqlite3_stmt_readonly","int","sqlite3_stmt*"],["sqlite3_stmt_status","int","sqlite3_stmt*","int","int"],["sqlite3_strglob","int","string","string"],["sqlite3_stricmp","int","string","string"],["sqlite3_strlike","int","string","string","int"],["sqlite3_strnicmp","int","string","string","int"],["sqlite3_table_column_metadata","int","sqlite3*","string","string","string","**","**","*","*","*"],["sqlite3_total_changes","int","sqlite3*"],["sqlite3_trace_v2","int",["sqlite3*","int",new s.xWrap.FuncPtrAdapter({name:"sqlite3_trace_v2::callback",signature:"i(ippp)",contextKey:(q,w)=>q[0]}),"*"]],["sqlite3_txn_state","int",["sqlite3*","string"]],["sqlite3_uri_boolean","int","sqlite3_filename","string","int"],["sqlite3_uri_key","string","sqlite3_filename","int"],["sqlite3_uri_parameter","string","sqlite3_filename","string"],["sqlite3_user_data","void*","sqlite3_context*"],["sqlite3_value_blob","*","sqlite3_value*"],["sqlite3_value_bytes","int","sqlite3_value*"],["sqlite3_value_double","f64","sqlite3_value*"],["sqlite3_value_dup","sqlite3_value*","sqlite3_value*"],["sqlite3_value_free",void 0,"sqlite3_value*"],["sqlite3_value_frombind","int","sqlite3_value*"],["sqlite3_value_int","int","sqlite3_value*"],["sqlite3_value_nochange","int","sqlite3_value*"],["sqlite3_value_numeric_type","int","sqlite3_value*"],["sqlite3_value_pointer","*","sqlite3_value*","string:static"],["sqlite3_value_subtype","int","sqlite3_value*"],["sqlite3_value_text","string","sqlite3_value*"],["sqlite3_value_type","int","sqlite3_value*"],["sqlite3_vfs_find","*","string"],["sqlite3_vfs_register","int","sqlite3_vfs*","int"],["sqlite3_vfs_unregister","int","sqlite3_vfs*"]],s.exports.sqlite3_progress_handler&&s.bindingSignatures.push(["sqlite3_progress_handler",void 0,["sqlite3*","int",new s.xWrap.FuncPtrAdapter({name:"xProgressHandler",signature:"i(p)",bindScope:"context",contextKey:(q,w)=>q[0]}),"*"]]),s.exports.sqlite3_stmt_explain&&s.bindingSignatures.push(["sqlite3_stmt_explain","int","sqlite3_stmt*","int"],["sqlite3_stmt_isexplain","int","sqlite3_stmt*"]),s.exports.sqlite3_set_authorizer&&s.bindingSignatures.push(["sqlite3_set_authorizer","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_set_authorizer::xAuth",signature:"i(pissss)",contextKey:(q,w)=>q[0],callProxy:q=>(w,x,N,P,S,L)=>{try{return N=N&&s.cstrToJs(N),P=P&&s.cstrToJs(P),S=S&&s.cstrToJs(S),L=L&&s.cstrToJs(L),q(w,x,N,P,S,L)||0}catch($){return $.resultCode||r.SQLITE_ERROR}}}),"*"]]),s.bindingSignatures.int64=[["sqlite3_bind_int64","int",["sqlite3_stmt*","int","i64"]],["sqlite3_changes64","i64",["sqlite3*"]],["sqlite3_column_int64","i64",["sqlite3_stmt*","int"]],["sqlite3_deserialize","int","sqlite3*","string","*","i64","i64","int"],["sqlite3_last_insert_rowid","i64",["sqlite3*"]],["sqlite3_malloc64","*","i64"],["sqlite3_msize","i64","*"],["sqlite3_overload_function","int",["sqlite3*","string","int"]],["sqlite3_realloc64","*","*","i64"],["sqlite3_result_int64",void 0,"*","i64"],["sqlite3_result_zeroblob64","int","*","i64"],["sqlite3_serialize","*","sqlite3*","string","*","int"],["sqlite3_set_last_insert_rowid",void 0,["sqlite3*","i64"]],["sqlite3_status64","int","int","*","*","int"],["sqlite3_total_changes64","i64",["sqlite3*"]],["sqlite3_update_hook","*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_update_hook",signature:"v(iippj)",contextKey:q=>q[0],callProxy:q=>(w,x,N,P,S)=>{q(w,x,s.cstrToJs(N),s.cstrToJs(P),S)}}),"*"]],["sqlite3_uri_int64","i64",["sqlite3_filename","string","i64"]],["sqlite3_value_int64","i64","sqlite3_value*"]],s.bigIntEnabled&&s.exports.sqlite3_declare_vtab&&s.bindingSignatures.int64.push(["sqlite3_create_module","int",["sqlite3*","string","sqlite3_module*","*"]],["sqlite3_create_module_v2","int",["sqlite3*","string","sqlite3_module*","*","*"]],["sqlite3_declare_vtab","int",["sqlite3*","string:flexible"]],["sqlite3_drop_modules","int",["sqlite3*","**"]],["sqlite3_vtab_collation","string","sqlite3_index_info*","int"],["sqlite3_vtab_distinct","int","sqlite3_index_info*"],["sqlite3_vtab_in","int","sqlite3_index_info*","int","int"],["sqlite3_vtab_in_first","int","sqlite3_value*","**"],["sqlite3_vtab_in_next","int","sqlite3_value*","**"],["sqlite3_vtab_nochange","int","sqlite3_context*"],["sqlite3_vtab_on_conflict","int","sqlite3*"],["sqlite3_vtab_rhs_value","int","sqlite3_index_info*","int","**"]),s.bigIntEnabled&&s.exports.sqlite3_preupdate_hook&&s.bindingSignatures.int64.push(["sqlite3_preupdate_blobwrite","int","sqlite3*"],["sqlite3_preupdate_count","int","sqlite3*"],["sqlite3_preupdate_depth","int","sqlite3*"],["sqlite3_preupdate_hook","*",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"sqlite3_preupdate_hook",signature:"v(ppippjj)",contextKey:q=>q[0],callProxy:q=>(w,x,N,P,S,L,$)=>{q(w,x,N,s.cstrToJs(P),s.cstrToJs(S),L,$)}}),"*"]],["sqlite3_preupdate_new","int",["sqlite3*","int","**"]],["sqlite3_preupdate_old","int",["sqlite3*","int","**"]]),s.bigIntEnabled&&s.exports.sqlite3changegroup_add&&s.exports.sqlite3session_create&&s.exports.sqlite3_preupdate_hook){const q={signature:"i(ps)",callProxy:w=>(x,N)=>{try{return w(x,s.cstrToJs(N))|0}catch(P){return P.resultCode||r.SQLITE_ERROR}}};s.bindingSignatures.int64.push(["sqlite3changegroup_add","int",["sqlite3_changegroup*","int","void*"]],["sqlite3changegroup_add_strm","int",["sqlite3_changegroup*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3changegroup_delete",void 0,["sqlite3_changegroup*"]],["sqlite3changegroup_new","int",["**"]],["sqlite3changegroup_output","int",["sqlite3_changegroup*","int*","**"]],["sqlite3changegroup_output_strm","int",["sqlite3_changegroup*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply","int",["sqlite3*","int","void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply_strm","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*"]],["sqlite3changeset_apply_v2","int",["sqlite3*","int","void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*","**","int*","int"]],["sqlite3changeset_apply_v2_strm","int",["sqlite3*",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xFilter",bindScope:"transient",...q}),new s.xWrap.FuncPtrAdapter({name:"xConflict",signature:"i(pip)",bindScope:"transient"}),"void*","**","int*","int"]],["sqlite3changeset_concat","int",["int","void*","int","void*","int*","**"]],["sqlite3changeset_concat_strm","int",[new s.xWrap.FuncPtrAdapter({name:"xInputA",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xInputB",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_conflict","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_finalize","int",["sqlite3_changeset_iter*"]],["sqlite3changeset_fk_conflicts","int",["sqlite3_changeset_iter*","int*"]],["sqlite3changeset_invert","int",["int","void*","int*","**"]],["sqlite3changeset_invert_strm","int",[new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppi)",bindScope:"transient"}),"void*"]],["sqlite3changeset_new","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_next","int",["sqlite3_changeset_iter*"]],["sqlite3changeset_old","int",["sqlite3_changeset_iter*","int","**"]],["sqlite3changeset_op","int",["sqlite3_changeset_iter*","**","int*","int*","int*"]],["sqlite3changeset_pk","int",["sqlite3_changeset_iter*","**","int*"]],["sqlite3changeset_start","int",["**","int","*"]],["sqlite3changeset_start_strm","int",["**",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3changeset_start_v2","int",["**","int","*","int"]],["sqlite3changeset_start_v2_strm","int",["**",new s.xWrap.FuncPtrAdapter({name:"xInput",signature:"i(ppp)",bindScope:"transient"}),"void*","int"]],["sqlite3session_attach","int",["sqlite3_session*","string"]],["sqlite3session_changeset","int",["sqlite3_session*","int*","**"]],["sqlite3session_changeset_size","i64",["sqlite3_session*"]],["sqlite3session_changeset_strm","int",["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3session_config","int",["int","void*"]],["sqlite3session_create","int",["sqlite3*","string","**"]],["sqlite3session_diff","int",["sqlite3_session*","string","string","**"]],["sqlite3session_enable","int",["sqlite3_session*","int"]],["sqlite3session_indirect","int",["sqlite3_session*","int"]],["sqlite3session_isempty","int",["sqlite3_session*"]],["sqlite3session_memory_used","i64",["sqlite3_session*"]],["sqlite3session_object_config","int",["sqlite3_session*","int","void*"]],["sqlite3session_patchset","int",["sqlite3_session*","*","**"]],["sqlite3session_patchset_strm","int",["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xOutput",signature:"i(ppp)",bindScope:"transient"}),"void*"]],["sqlite3session_table_filter",void 0,["sqlite3_session*",new s.xWrap.FuncPtrAdapter({name:"xFilter",...q,contextKey:(w,x)=>w[0]}),"*"]])}s.bindingSignatures.wasmInternal=[["sqlite3__wasm_db_reset","int","sqlite3*"],["sqlite3__wasm_db_vfs","sqlite3_vfs*","sqlite3*","string"],["sqlite3__wasm_vfs_create_file","int","sqlite3_vfs*","string","*","int"],["sqlite3__wasm_posix_create_file","int","string","*","int"],["sqlite3__wasm_vfs_unlink","int","sqlite3_vfs*","string"],["sqlite3__wasm_qfmt_token","string:dealloc","string","int"]],t.StructBinder=globalThis.Jaccwabyt({heap:s.heap8u,alloc:s.alloc,dealloc:s.dealloc,bigIntEnabled:s.bigIntEnabled,memberPrefix:"$"}),delete globalThis.Jaccwabyt;{const q=s.xWrap.argAdapter("string");s.xWrap.argAdapter("string:flexible",S=>q(o.flexibleString(S))),s.xWrap.argAdapter("string:static",(function(S){return s.isPtr(S)?S:(S=""+S,this[S]||(this[S]=s.allocCString(S)))}).bind(Object.create(null)));const w=s.xWrap.argAdapter("*"),x=function(){};s.xWrap.argAdapter("sqlite3_filename",w)("sqlite3_context*",w)("sqlite3_value*",w)("void*",w)("sqlite3_changegroup*",w)("sqlite3_changeset_iter*",w)("sqlite3_session*",w)("sqlite3_stmt*",S=>w(S instanceof(t?.oo1?.Stmt||x)?S.pointer:S))("sqlite3*",S=>w(S instanceof(t?.oo1?.DB||x)?S.pointer:S))("sqlite3_vfs*",S=>typeof S=="string"?r.sqlite3_vfs_find(S)||t.SQLite3Error.toss(r.SQLITE_NOTFOUND,"Unknown sqlite3_vfs name:",S):w(S instanceof(r.sqlite3_vfs||x)?S.pointer:S)),s.exports.sqlite3_declare_vtab&&s.xWrap.argAdapter("sqlite3_index_info*",S=>w(S instanceof(r.sqlite3_index_info||x)?S.pointer:S))("sqlite3_module*",S=>w(S instanceof(r.sqlite3_module||x)?S.pointer:S));const N=s.xWrap.resultAdapter("*");s.xWrap.resultAdapter("sqlite3*",N)("sqlite3_context*",N)("sqlite3_stmt*",N)("sqlite3_value*",N)("sqlite3_vfs*",N)("void*",N),s.exports.sqlite3_step.length===0&&(s.xWrap.doArgcCheck=!1,t.config.warn("Disabling sqlite3.wasm.xWrap.doArgcCheck due to environmental quirks."));for(const S of s.bindingSignatures)r[S[0]]=s.xWrap.apply(null,S);for(const S of s.bindingSignatures.wasmInternal)o[S[0]]=s.xWrap.apply(null,S);const P=function(S){return()=>n(S+"() is unavailable due to lack","of BigInt support in this build.")};for(const S of s.bindingSignatures.int64)r[S[0]]=s.bigIntEnabled?s.xWrap.apply(null,S):P(S[0]);if(delete s.bindingSignatures,s.exports.sqlite3__wasm_db_error){const S=s.xWrap("sqlite3__wasm_db_error","int","sqlite3*","int","string");o.sqlite3__wasm_db_error=function(L,$,c){return $ instanceof t.WasmAllocError?($=r.SQLITE_NOMEM,c=0):$ instanceof Error&&(c=c||""+$,$=$.resultCode||r.SQLITE_ERROR),L?S(L,$,c):$}}else o.sqlite3__wasm_db_error=function(S,L,$){return console.warn("sqlite3__wasm_db_error() is not exported.",arguments),L}}{const q=s.xCall("sqlite3__wasm_enum_json");q||n("Maintenance required: increase sqlite3__wasm_enum_json()'s","static buffer size!"),s.ctype=JSON.parse(s.cstrToJs(q));const w=["access","authorizer","blobFinalizers","changeset","config","dataTypes","dbConfig","dbStatus","encodings","fcntl","flock","ioCap","limits","openFlags","prepareFlags","resultCodes","sqlite3Status","stmtStatus","syncFlags","trace","txnState","udfFlags","version"];s.bigIntEnabled&&w.push("serialize","session","vtab");for(const P of w)for(const S of Object.entries(s.ctype[P]))r[S[0]]=S[1];s.functionEntry(r.SQLITE_WASM_DEALLOC)||n("Internal error: cannot resolve exported function","entry SQLITE_WASM_DEALLOC (=="+r.SQLITE_WASM_DEALLOC+").");const x=Object.create(null);for(const P of["resultCodes"])for(const S of Object.entries(s.ctype[P]))x[S[1]]=S[0];r.sqlite3_js_rc_str=P=>x[P];const N=Object.assign(Object.create(null),{WasmTestStruct:!0,sqlite3_kvvfs_methods:!o.isUIThread(),sqlite3_index_info:!s.bigIntEnabled,sqlite3_index_constraint:!s.bigIntEnabled,sqlite3_index_orderby:!s.bigIntEnabled,sqlite3_index_constraint_usage:!s.bigIntEnabled});for(const P of s.ctype.structs)N[P.name]||(r[P.name]=t.StructBinder(P));if(r.sqlite3_index_info){for(const P of["sqlite3_index_constraint","sqlite3_index_orderby","sqlite3_index_constraint_usage"])r.sqlite3_index_info[P]=r[P],delete r[P];r.sqlite3_vtab_config=s.xWrap("sqlite3__wasm_vtab_config","int",["sqlite3*","int","int"])}}const p=(q,w,x)=>o.sqlite3__wasm_db_error(q,r.SQLITE_MISUSE,w+"() requires "+x+" argument"+(x===1?"":"s")+"."),g=q=>o.sqlite3__wasm_db_error(q,r.SQLITE_FORMAT,"SQLITE_UTF8 is the only supported encoding."),O=q=>s.xWrap.argAdapter("sqlite3*")(q),R=q=>s.isPtr(q)?s.cstrToJs(q):q,z=(function(q,w){q=O(q);let x=this.dbMap.get(q);if(w)!x&&w>0&&this.dbMap.set(q,x=Object.create(null));else return this.dbMap.delete(q),x;return x}).bind(Object.assign(Object.create(null),{dbMap:new Map}));z.addCollation=function(q,w){const x=z(q,1);x.collation||(x.collation=new Set),x.collation.add(R(w).toLowerCase())},z._addUDF=function(q,w,x,N){w=R(w).toLowerCase();let P=N.get(w);P||N.set(w,P=new Set),P.add(x<0?-1:x)},z.addFunction=function(q,w,x){const N=z(q,1);N.udf||(N.udf=new Map),this._addUDF(q,w,x,N.udf)},s.exports.sqlite3_create_window_function&&(z.addWindowFunc=function(q,w,x){const N=z(q,1);N.wudf||(N.wudf=new Map),this._addUDF(q,w,x,N.wudf)}),z.cleanup=function(q){q=O(q);const w=[q];for(const P of["sqlite3_busy_handler","sqlite3_commit_hook","sqlite3_preupdate_hook","sqlite3_progress_handler","sqlite3_rollback_hook","sqlite3_set_authorizer","sqlite3_trace_v2","sqlite3_update_hook"]){const S=s.exports[P];if(S){w.length=S.length;try{r[P](...w)}catch(L){t.config.warn("close-time call of",P+"(",w,") threw:",L)}}}const x=z(q,0);if(!x)return;if(x.collation){for(const P of x.collation)try{r.sqlite3_create_collation_v2(q,P,r.SQLITE_UTF8,0,0,0)}catch{}delete x.collation}let N;for(N=0;N<2;++N){const P=N?x.wudf:x.udf;if(!P)continue;const S=N?r.sqlite3_create_window_function:r.sqlite3_create_function_v2;for(const L of P){const $=L[0],c=L[1],d=[q,$,0,r.SQLITE_UTF8,0,0,0,0,0];N&&d.push(0);for(const y of c)try{d[2]=y,S.apply(null,d)}catch{}c.clear()}P.clear()}delete x.udf,delete x.wudf};{const q=s.xWrap("sqlite3_close_v2","int","sqlite3*");r.sqlite3_close_v2=function(w){if(arguments.length!==1)return p(w,"sqlite3_close_v2",1);if(w)try{z.cleanup(w)}catch{}return q(w)}}if(r.sqlite3session_create){const q=s.xWrap("sqlite3session_delete",void 0,["sqlite3_session*"]);r.sqlite3session_delete=function(w){if(arguments.length!==1)return p(pDb,"sqlite3session_delete",1);w&&r.sqlite3session_table_filter(w,0,0),q(w)}}{const q=(x,N)=>"argv["+N+"]:"+x[0]+":"+s.cstrToJs(x[1]).toLowerCase(),w=s.xWrap("sqlite3_create_collation_v2","int",["sqlite3*","string","int","*",new s.xWrap.FuncPtrAdapter({name:"xCompare",signature:"i(pipip)",contextKey:q}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",signature:"v(p)",contextKey:q})]);r.sqlite3_create_collation_v2=function(x,N,P,S,L,$){if(arguments.length!==6)return p(x,"sqlite3_create_collation_v2",6);if((P&15)===0)P|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(P&15))return g(x);try{const c=w(x,N,P,S,L,$);return c===0&&L instanceof Function&&z.addCollation(x,N),c}catch(c){return o.sqlite3__wasm_db_error(x,c)}},r.sqlite3_create_collation=(x,N,P,S,L)=>arguments.length===5?r.sqlite3_create_collation_v2(x,N,P,S,L,0):p(x,"sqlite3_create_collation",5)}{const q=function(P,S){return P[0]+":"+(P[2]<0?-1:P[2])+":"+S+":"+s.cstrToJs(P[1]).toLowerCase()},w=Object.assign(Object.create(null),{xInverseAndStep:{signature:"v(pip)",contextKey:q,callProxy:P=>(S,L,$)=>{try{P(S,...r.sqlite3_values_to_js(L,$))}catch(c){r.sqlite3_result_error_js(S,c)}}},xFinalAndValue:{signature:"v(p)",contextKey:q,callProxy:P=>S=>{try{r.sqlite3_result_js(S,P(S))}catch(L){r.sqlite3_result_error_js(S,L)}}},xFunc:{signature:"v(pip)",contextKey:q,callProxy:P=>(S,L,$)=>{try{r.sqlite3_result_js(S,P(S,...r.sqlite3_values_to_js(L,$)))}catch(c){r.sqlite3_result_error_js(S,c)}}},xDestroy:{signature:"v(p)",contextKey:q,callProxy:P=>S=>{try{P(S)}catch(L){console.error("UDF xDestroy method threw:",L)}}}}),x=s.xWrap("sqlite3_create_function_v2","int",["sqlite3*","string","int","int","*",new s.xWrap.FuncPtrAdapter({name:"xFunc",...w.xFunc}),new s.xWrap.FuncPtrAdapter({name:"xStep",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xFinal",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",...w.xDestroy})]),N=s.exports.sqlite3_create_window_function?s.xWrap("sqlite3_create_window_function","int",["sqlite3*","string","int","int","*",new s.xWrap.FuncPtrAdapter({name:"xStep",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xFinal",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xValue",...w.xFinalAndValue}),new s.xWrap.FuncPtrAdapter({name:"xInverse",...w.xInverseAndStep}),new s.xWrap.FuncPtrAdapter({name:"xDestroy",...w.xDestroy})]):void 0;r.sqlite3_create_function_v2=function P(S,L,$,c,d,y,B,f,m){if(P.length!==arguments.length)return p(S,"sqlite3_create_function_v2",P.length);if((c&15)===0)c|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(c&15))return g(S);try{const l=x(S,L,$,c,d,y,B,f,m);return l===0&&(y instanceof Function||B instanceof Function||f instanceof Function||m instanceof Function)&&z.addFunction(S,L,$),l}catch(l){return console.error("sqlite3_create_function_v2() setup threw:",l),o.sqlite3__wasm_db_error(S,l,"Creation of UDF threw: "+l)}},r.sqlite3_create_function=function P(S,L,$,c,d,y,B,f){return P.length===arguments.length?r.sqlite3_create_function_v2(S,L,$,c,d,y,B,f,0):p(S,"sqlite3_create_function",P.length)},N?r.sqlite3_create_window_function=function P(S,L,$,c,d,y,B,f,m,l){if(P.length!==arguments.length)return p(S,"sqlite3_create_window_function",P.length);if((c&15)===0)c|=r.SQLITE_UTF8;else if(r.SQLITE_UTF8!==(c&15))return g(S);try{const _=N(S,L,$,c,d,y,B,f,m,l);return _===0&&(y instanceof Function||B instanceof Function||f instanceof Function||m instanceof Function||l instanceof Function)&&z.addWindowFunc(S,L,$),_}catch(_){return console.error("sqlite3_create_window_function() setup threw:",_),o.sqlite3__wasm_db_error(S,_,"Creation of UDF threw: "+_)}}:delete r.sqlite3_create_window_function,r.sqlite3_create_function_v2.udfSetResult=r.sqlite3_create_function.udfSetResult=r.sqlite3_result_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfSetResult=r.sqlite3_result_js),r.sqlite3_create_function_v2.udfConvertArgs=r.sqlite3_create_function.udfConvertArgs=r.sqlite3_values_to_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfConvertArgs=r.sqlite3_values_to_js),r.sqlite3_create_function_v2.udfSetError=r.sqlite3_create_function.udfSetError=r.sqlite3_result_error_js,r.sqlite3_create_window_function&&(r.sqlite3_create_window_function.udfSetError=r.sqlite3_result_error_js)}{const q=(x,N)=>(typeof x=="string"?N=-1:o.isSQLableTypedArray(x)?(N=x.byteLength,x=o.typedArrayToString(x instanceof ArrayBuffer?new Uint8Array(x):x)):Array.isArray(x)&&(x=x.join(""),N=-1),[x,N]),w={basic:s.xWrap("sqlite3_prepare_v3","int",["sqlite3*","string","int","int","**","**"]),full:s.xWrap("sqlite3_prepare_v3","int",["sqlite3*","*","int","int","**","**"])};r.sqlite3_prepare_v3=function x(N,P,S,L,$,c){if(x.length!==arguments.length)return p(N,"sqlite3_prepare_v3",x.length);const[d,y]=q(P,S);switch(typeof d){case"string":return w.basic(N,d,y,L,$,null);case"number":return w.full(N,d,y,L,$,c);default:return o.sqlite3__wasm_db_error(N,r.SQLITE_MISUSE,"Invalid SQL argument type for sqlite3_prepare_v2/v3().")}},r.sqlite3_prepare_v2=function x(N,P,S,L,$){return x.length===arguments.length?r.sqlite3_prepare_v3(N,P,S,0,L,$):p(N,"sqlite3_prepare_v2",x.length)}}{const q=s.xWrap("sqlite3_bind_text","int",["sqlite3_stmt*","int","string","int","*"]),w=s.xWrap("sqlite3_bind_blob","int",["sqlite3_stmt*","int","*","int","*"]);r.sqlite3_bind_text=function x(N,P,S,L,$){if(x.length!==arguments.length)return p(r.sqlite3_db_handle(N),"sqlite3_bind_text",x.length);if(s.isPtr(S)||S===null)return q(N,P,S,L,$);S instanceof ArrayBuffer?S=new Uint8Array(S):Array.isArray(pMem)&&(S=pMem.join(""));let c,d;try{if(o.isSQLableTypedArray(S))c=s.allocFromTypedArray(S),d=S.byteLength;else if(typeof S=="string")[c,d]=s.allocCString(S);else return o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),r.SQLITE_MISUSE,"Invalid 3rd argument type for sqlite3_bind_text().");return q(N,P,c,d,r.SQLITE_WASM_DEALLOC)}catch(y){return s.dealloc(c),o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),y)}},r.sqlite3_bind_blob=function x(N,P,S,L,$){if(x.length!==arguments.length)return p(r.sqlite3_db_handle(N),"sqlite3_bind_blob",x.length);if(s.isPtr(S)||S===null)return w(N,P,S,L,$);S instanceof ArrayBuffer?S=new Uint8Array(S):Array.isArray(S)&&(S=S.join(""));let c,d;try{if(o.isBindableTypedArray(S))c=s.allocFromTypedArray(S),d=L>=0?L:S.byteLength;else if(typeof S=="string")[c,d]=s.allocCString(S);else return o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),r.SQLITE_MISUSE,"Invalid 3rd argument type for sqlite3_bind_blob().");return w(N,P,c,d,r.SQLITE_WASM_DEALLOC)}catch(y){return s.dealloc(c),o.sqlite3__wasm_db_error(r.sqlite3_db_handle(N),y)}}}r.sqlite3_config=function(q,...w){if(arguments.length<2)return r.SQLITE_MISUSE;switch(q){case r.SQLITE_CONFIG_COVERING_INDEX_SCAN:case r.SQLITE_CONFIG_MEMSTATUS:case r.SQLITE_CONFIG_SMALL_MALLOC:case r.SQLITE_CONFIG_SORTERREF_SIZE:case r.SQLITE_CONFIG_STMTJRNL_SPILL:case r.SQLITE_CONFIG_URI:return s.exports.sqlite3__wasm_config_i(q,w[0]);case r.SQLITE_CONFIG_LOOKASIDE:return s.exports.sqlite3__wasm_config_ii(q,w[0],w[1]);case r.SQLITE_CONFIG_MEMDB_MAXSIZE:return s.exports.sqlite3__wasm_config_j(q,w[0]);case r.SQLITE_CONFIG_GETMALLOC:case r.SQLITE_CONFIG_GETMUTEX:case r.SQLITE_CONFIG_GETPCACHE2:case r.SQLITE_CONFIG_GETPCACHE:case r.SQLITE_CONFIG_HEAP:case r.SQLITE_CONFIG_LOG:case r.SQLITE_CONFIG_MALLOC:case r.SQLITE_CONFIG_MMAP_SIZE:case r.SQLITE_CONFIG_MULTITHREAD:case r.SQLITE_CONFIG_MUTEX:case r.SQLITE_CONFIG_PAGECACHE:case r.SQLITE_CONFIG_PCACHE2:case r.SQLITE_CONFIG_PCACHE:case r.SQLITE_CONFIG_PCACHE_HDRSZ:case r.SQLITE_CONFIG_PMASZ:case r.SQLITE_CONFIG_SERIALIZED:case r.SQLITE_CONFIG_SINGLETHREAD:case r.SQLITE_CONFIG_SQLLOG:case r.SQLITE_CONFIG_WIN32_HEAPSIZE:default:return r.SQLITE_NOTFOUND}};{const q=new Set;r.sqlite3_auto_extension=function(w){if(w instanceof Function)w=s.installFunction("i(ppp)",w);else if(arguments.length!==1||!s.isPtr(w))return r.SQLITE_MISUSE;const x=s.exports.sqlite3_auto_extension(w);return w!==arguments[0]&&(x===0?q.add(w):s.uninstallFunction(w)),x},r.sqlite3_cancel_auto_extension=function(w){return!w||arguments.length!==1||!s.isPtr(w)?0:s.exports.sqlite3_cancel_auto_extension(w)},r.sqlite3_reset_auto_extension=function(){s.exports.sqlite3_reset_auto_extension();for(const w of q)s.uninstallFunction(w);q.clear()}}const W=r.sqlite3_vfs_find("kvvfs");if(W)if(o.isUIThread()){const q=new r.sqlite3_kvvfs_methods(s.exports.sqlite3__wasm_kvvfs_methods());delete r.sqlite3_kvvfs_methods;const w=s.exports.sqlite3__wasm_kvvfsMakeKeyOnPstack,x=s.pstack,N=S=>s.peek(S)===115?sessionStorage:localStorage,P={xRead:(S,L,$,c)=>{const d=x.pointer,y=s.scopedAllocPush();try{const B=w(S,L);if(!B)return-3;const f=s.cstrToJs(B),m=N(S).getItem(f);if(!m)return-1;const l=m.length;if(c<=0)return l;if(c===1)return s.poke($,0),l;const _=s.scopedAllocCString(m);return c>l+1&&(c=l+1),s.heap8u().copyWithin($,_,_+c-1),s.poke($+c-1,0),c-1}catch(B){return console.error("kvstorageRead()",B),-2}finally{x.restore(d),s.scopedAllocPop(y)}},xWrite:(S,L,$)=>{const c=x.pointer;try{const d=w(S,L);if(!d)return 1;const y=s.cstrToJs(d);return N(S).setItem(y,s.cstrToJs($)),0}catch(d){return console.error("kvstorageWrite()",d),r.SQLITE_IOERR}finally{x.restore(c)}},xDelete:(S,L)=>{const $=x.pointer;try{const c=w(S,L);return c?(N(S).removeItem(s.cstrToJs(c)),0):1}catch(c){return console.error("kvstorageDelete()",c),r.SQLITE_IOERR}finally{x.restore($)}}};for(const S of Object.keys(P))q[q.memberKey(S)]=s.installFunction(q.memberSignature(S),P[S])}else r.sqlite3_vfs_unregister(W);s.xWrap.FuncPtrAdapter.warnOnUse=!0;const T=t.StructBinder,A=function q(w,x,N,P=q.installMethodArgcCheck){if(w instanceof T.StructType?!(N instanceof Function)&&!s.isPtr(N)&&n("Usage error: expecting a Function or WASM pointer to one."):n("Usage error: target object is-not-a StructType."),arguments.length===1)return(c,d)=>q(w,c,d,P);q.argcProxy||(q.argcProxy=function(c,d,y,B){return function(...f){return y.length!==arguments.length&&n("Argument mismatch for",c.structInfo.name+"::"+d+": Native signature is:",B),y.apply(this,f)}},q.removeFuncList=function(){this.ondispose.__removeFuncList&&(this.ondispose.__removeFuncList.forEach((c,d)=>{if(typeof c=="number")try{s.uninstallFunction(c)}catch{}}),delete this.ondispose.__removeFuncList)});const S=w.memberSignature(x);S.length<2&&n("Member",x,"does not have a function pointer signature:",S);const L=w.memberKey(x),$=P&&!s.isPtr(N)?q.argcProxy(w,L,N,S):N;if(s.isPtr($))$&&!s.functionEntry($)&&n("Pointer",$,"is not a WASM function table entry."),w[L]=$;else{const c=s.installFunction($,w.memberSignature(x,!0));w[L]=c,(!w.ondispose||!w.ondispose.__removeFuncList)&&(w.addOnDispose("ondispose.__removeFuncList handler",q.removeFuncList),w.ondispose.__removeFuncList=[]),w.ondispose.__removeFuncList.push(L,c)}return(c,d)=>q(w,c,d,P)};A.installMethodArgcCheck=!1;const D=function(q,w,x=A.installMethodArgcCheck){const N=new Map;for(const P of Object.keys(w)){const S=w[P],L=N.get(S);if(L){const $=q.memberKey(P);q[$]=q[q.memberKey(L)]}else A(q,P,S,x),N.set(S,P)}return q};T.StructType.prototype.installMethod=function(w,x,N=A.installMethodArgcCheck){return arguments.length<3&&w&&typeof w=="object"?D(this,...arguments):A(this,...arguments)},T.StructType.prototype.installMethods=function(q,w=A.installMethodArgcCheck){return D(this,q,w)}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){t.version={libVersion:"3.50.4",libVersionNumber:3050004,sourceId:"2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3",downloadVersion:3500400}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=(...f)=>{throw new t.SQLite3Error(...f)},r=t.capi,s=t.wasm,o=t.util,p=new WeakMap,g=new WeakMap,O=(f,m,l)=>{const _=Object.getOwnPropertyDescriptor(f,m);return _?_.value:l},R=function(f,m){return m&&(f instanceof A&&(f=f.pointer),n(m,"sqlite3 result code",m+":",f?r.sqlite3_errmsg(f):r.sqlite3_errstr(m))),arguments[0]},z=s.installFunction("i(ippp)",(function(f,m,l,_){r.SQLITE_TRACE_STMT===f&&console.log("SQL TRACE #"+ ++this.counter+" via sqlite3@"+m+":",s.cstrToJs(_))}).bind({counter:0})),W=Object.create(null),T=function f(...m){if(!f._name2vfs){f._name2vfs=Object.create(null);const j=typeof importScripts=="function"?b=>n("The VFS for",b,"is only available in the main window thread."):!1;f._name2vfs[":localStorage:"]={vfs:"kvvfs",filename:j||(()=>"local")},f._name2vfs[":sessionStorage:"]={vfs:"kvvfs",filename:j||(()=>"session")}}const l=f.normalizeArgs(...m);let _=l.filename,u=l.vfs,I=l.flags;(typeof _!="string"&&typeof _!="number"||typeof I!="string"||u&&typeof u!="string"&&typeof u!="number")&&(t.config.error("Invalid DB ctor args",l,arguments),n("Invalid arguments for DB constructor."));let U=typeof _=="number"?s.cstrToJs(_):_;const ee=f._name2vfs[U];ee&&(u=ee.vfs,_=U=ee.filename(U));let ne,re=0;I.indexOf("c")>=0&&(re|=r.SQLITE_OPEN_CREATE|r.SQLITE_OPEN_READWRITE),I.indexOf("w")>=0&&(re|=r.SQLITE_OPEN_READWRITE),re===0&&(re|=r.SQLITE_OPEN_READONLY),re|=r.SQLITE_OPEN_EXRESCODE;const se=s.pstack.pointer;try{const j=s.pstack.allocPtr();let b=r.sqlite3_open_v2(_,j,re,u||0);ne=s.peekPtr(j),R(ne,b),r.sqlite3_extended_result_codes(ne,1),I.indexOf("t")>=0&&r.sqlite3_trace_v2(ne,r.SQLITE_TRACE_STMT,z,ne)}catch(j){throw ne&&r.sqlite3_close_v2(ne),j}finally{s.pstack.restore(se)}this.filename=U,p.set(this,ne),g.set(this,Object.create(null));try{const j=r.sqlite3_js_db_vfs(ne)||n("Internal error: cannot get VFS for new db handle."),b=W[j];b&&(b instanceof Function?b(this,t):R(ne,r.sqlite3_exec(ne,b,0,0,0)))}catch(j){throw this.close(),j}};T.setVfsPostOpenCallback=function(f,m){m instanceof Function||n("dbCtorHelper.setVfsPostOpenCallback() should not be used with a non-function argument.",arguments),W[f]=m},T.normalizeArgs=function(f=":memory:",m="c",l=null){const _={};return arguments.length===1&&arguments[0]&&typeof arguments[0]=="object"?(Object.assign(_,arguments[0]),_.flags===void 0&&(_.flags="c"),_.vfs===void 0&&(_.vfs=null),_.filename===void 0&&(_.filename=":memory:")):(_.filename=f,_.flags=m,_.vfs=l),_};const A=function(...f){T.apply(this,f)};A.dbCtorHelper=T;const D={null:1,number:2,string:3,boolean:4,blob:5};D.undefined==D.null,s.bigIntEnabled&&(D.bigint=D.number);const q=function(){D!==arguments[2]&&n(r.SQLITE_MISUSE,"Do not call the Stmt constructor directly. Use DB.prepare()."),this.db=arguments[0],p.set(this,arguments[1]),this.parameterCount=r.sqlite3_bind_parameter_count(this.pointer)},w=function(f){return f.pointer||n("DB has been closed."),f},x=function(f,m){return(m!==(m|0)||m<0||m>=f.columnCount)&&n("Column index",m,"is out of range."),f},N=function(f,m){const l=Object.create(null);switch(l.opt=Object.create(null),m.length){case 1:typeof m[0]=="string"||o.isSQLableTypedArray(m[0])||Array.isArray(m[0])?l.sql=m[0]:m[0]&&typeof m[0]=="object"&&(l.opt=m[0],l.sql=l.opt.sql);break;case 2:l.sql=m[0],l.opt=m[1];break;default:n("Invalid argument count for exec().")}l.sql=o.flexibleString(l.sql),typeof l.sql!="string"&&n("Missing SQL argument or unsupported SQL value type.");const _=l.opt;switch(_.returnValue){case"resultRows":_.resultRows||(_.resultRows=[]),l.returnVal=()=>_.resultRows;break;case"saveSql":_.saveSql||(_.saveSql=[]),l.returnVal=()=>_.saveSql;break;case void 0:case"this":l.returnVal=()=>f;break;default:n("Invalid returnValue value:",_.returnValue)}if(!_.callback&&!_.returnValue&&_.rowMode!==void 0&&(_.resultRows||(_.resultRows=[]),l.returnVal=()=>_.resultRows),_.callback||_.resultRows)switch(_.rowMode===void 0?"array":_.rowMode){case"object":l.cbArg=(u,I)=>{I.columnNames||(I.columnNames=u.getColumnNames([]));const U=u.get([]),ee=Object.create(null);for(const ne in I.columnNames)ee[I.columnNames[ne]]=U[ne];return ee};break;case"array":l.cbArg=u=>u.get([]);break;case"stmt":Array.isArray(_.resultRows)&&n("exec(): invalid rowMode for a resultRows array: must","be one of 'array', 'object',","a result column number, or column name reference."),l.cbArg=u=>u;break;default:if(o.isInt32(_.rowMode)){l.cbArg=u=>u.get(_.rowMode);break}else if(typeof _.rowMode=="string"&&_.rowMode.length>1&&_.rowMode[0]==="$"){const u=_.rowMode.substr(1);l.cbArg=I=>{const U=I.get(Object.create(null))[u];return U===void 0?n(r.SQLITE_NOTFOUND,"exec(): unknown result column:",u):U};break}n("Invalid rowMode:",_.rowMode)}return l},P=(f,m,l,..._)=>{const u=f.prepare(m);try{const I=u.bind(l).step()?u.get(..._):void 0;return u.reset(),I}finally{u.finalize()}},S=(f,m,l,_)=>f.exec({sql:m,bind:l,rowMode:_,returnValue:"resultRows"});A.checkRc=(f,m)=>R(f,m),A.prototype={isOpen:function(){return!!this.pointer},affirmOpen:function(){return w(this)},close:function(){if(this.pointer){if(this.onclose&&this.onclose.before instanceof Function)try{this.onclose.before(this)}catch{}const f=this.pointer;if(Object.keys(g.get(this)).forEach((m,l)=>{if(l&&l.pointer)try{l.finalize()}catch{}}),p.delete(this),g.delete(this),r.sqlite3_close_v2(f),this.onclose&&this.onclose.after instanceof Function)try{this.onclose.after(this)}catch{}delete this.filename}},changes:function(f=!1,m=!1){const l=w(this).pointer;return f?m?r.sqlite3_total_changes64(l):r.sqlite3_total_changes(l):m?r.sqlite3_changes64(l):r.sqlite3_changes(l)},dbFilename:function(f="main"){return r.sqlite3_db_filename(w(this).pointer,f)},dbName:function(f=0){return r.sqlite3_db_name(w(this).pointer,f)},dbVfsName:function(f=0){let m;const l=r.sqlite3_js_db_vfs(w(this).pointer,f);if(l){const _=new r.sqlite3_vfs(l);try{m=s.cstrToJs(_.$zName)}finally{_.dispose()}}return m},prepare:function(f){w(this);const m=s.pstack.pointer;let l,_;try{l=s.pstack.alloc(8),A.checkRc(this,r.sqlite3_prepare_v2(this.pointer,f,-1,l,null)),_=s.peekPtr(l)}finally{s.pstack.restore(m)}_||n("Cannot prepare empty SQL.");const u=new q(this,_,D);return g.get(this)[_]=u,u},exec:function(){w(this);const f=N(this,arguments);if(!f.sql)return n("exec() requires an SQL string.");const m=f.opt,l=m.callback,_=Array.isArray(m.resultRows)?m.resultRows:void 0;let u,I=m.bind,U=!!(f.cbArg||m.columnNames||_);const ee=s.scopedAllocPush(),ne=Array.isArray(m.saveSql)?m.saveSql:void 0;try{const re=o.isSQLableTypedArray(f.sql);let se=re?f.sql.byteLength:s.jstrlen(f.sql);const j=s.scopedAlloc(2*s.ptrSizeof+(se+1)),b=j+s.ptrSizeof;let k=b+s.ptrSizeof;const Q=k+se;for(re?s.heap8().set(f.sql,k):s.jstrcpy(f.sql,s.heap8(),k,se,!1),s.poke(k+se,0);k&&s.peek(k,"i8");){s.pokePtr([j,b],0),A.checkRc(this,r.sqlite3_prepare_v3(this.pointer,k,se,0,j,b));const H=s.peekPtr(j);if(k=s.peekPtr(b),se=Q-k,!!H){if(ne&&ne.push(r.sqlite3_sql(H).trim()),u=new q(this,H,D),I&&u.parameterCount&&(u.bind(I),I=null),U&&u.columnCount){let Z=Array.isArray(m.columnNames)?0:1;if(U=!1,f.cbArg||_){const E=Object.create(null);for(;u.step();u._lockedByExec=!1){Z++===0&&u.getColumnNames(E.columnNames=m.columnNames||[]),u._lockedByExec=!0;const C=f.cbArg(u,E);if(_&&_.push(C),l&&l.call(m,C,u)===!1)break}u._lockedByExec=!1}Z===0&&u.getColumnNames(m.columnNames)}else u.step();u.reset().finalize(),u=null}}}finally{s.scopedAllocPop(ee),u&&(delete u._lockedByExec,u.finalize())}return f.returnVal()},createFunction:function(m,l,_){const u=E=>E instanceof Function;switch(arguments.length){case 1:_=m,m=_.name,l=_.xFunc||0;break;case 2:u(l)||(_=l,l=_.xFunc||0);break}_||(_={}),typeof m!="string"&&n("Invalid arguments: missing function name.");let I=_.xStep||0,U=_.xFinal||0;const ee=_.xValue||0,ne=_.xInverse||0;let re;u(l)?(re=!1,(u(I)||u(U))&&n("Ambiguous arguments: scalar or aggregate?"),I=U=null):u(I)?(u(U)||n("Missing xFinal() callback for aggregate or window UDF."),l=null):u(U)?n("Missing xStep() callback for aggregate or window UDF."):n("Missing function-type properties."),re===!1?(u(ee)||u(ne))&&n("xValue and xInverse are not permitted for non-window UDFs."):u(ee)?(u(ne)||n("xInverse must be provided if xValue is."),re=!0):u(ne)&&n("xValue must be provided if xInverse is.");const se=_.pApp;se!=null&&(typeof se!="number"||!o.isInt32(se))&&n("Invalid value for pApp property. Must be a legal WASM pointer value.");const j=_.xDestroy||0;j&&!u(j)&&n("xDestroy property must be a function.");let b=0;O(_,"deterministic")&&(b|=r.SQLITE_DETERMINISTIC),O(_,"directOnly")&&(b|=r.SQLITE_DIRECTONLY),O(_,"innocuous")&&(b|=r.SQLITE_INNOCUOUS),m=m.toLowerCase();const k=l||I,Q=O(_,"arity"),H=typeof Q=="number"?Q:k.length?k.length-1:0;let Z;return re?Z=r.sqlite3_create_window_function(this.pointer,m,H,r.SQLITE_UTF8|b,se||0,I,U,ee,ne,j):Z=r.sqlite3_create_function_v2(this.pointer,m,H,r.SQLITE_UTF8|b,se||0,l,I,U,j),A.checkRc(this,Z),this},selectValue:function(f,m,l){return P(this,f,m,0,l)},selectValues:function(f,m,l){const _=this.prepare(f),u=[];try{for(_.bind(m);_.step();)u.push(_.get(0,l));_.reset()}finally{_.finalize()}return u},selectArray:function(f,m){return P(this,f,m,[])},selectObject:function(f,m){return P(this,f,m,{})},selectArrays:function(f,m){return S(this,f,m,"array")},selectObjects:function(f,m){return S(this,f,m,"object")},openStatementCount:function(){return this.pointer?Object.keys(g.get(this)).length:0},transaction:function(f){let m="BEGIN";arguments.length>1&&(/[^a-zA-Z]/.test(arguments[0])&&n(r.SQLITE_MISUSE,"Invalid argument for BEGIN qualifier."),m+=" "+arguments[0],f=arguments[1]),w(this).exec(m);try{const l=f(this);return this.exec("COMMIT"),l}catch(l){throw this.exec("ROLLBACK"),l}},savepoint:function(f){w(this).exec("SAVEPOINT oo1");try{const m=f(this);return this.exec("RELEASE oo1"),m}catch(m){throw this.exec("ROLLBACK to SAVEPOINT oo1; RELEASE SAVEPOINT oo1"),m}},checkRc:function(f){return R(this,f)}};const L=function(f){return f.pointer||n("Stmt has been closed."),f},$=function(f){let m=D[f==null?"null":typeof f];switch(m){case D.boolean:case D.null:case D.number:case D.string:return m;case D.bigint:if(s.bigIntEnabled)return m;default:return o.isBindableTypedArray(f)?D.blob:void 0}},c=function(f){return $(f)||n("Unsupported bind() argument type:",typeof f)},d=function(f,m){const l=typeof m=="number"?m:r.sqlite3_bind_parameter_index(f.pointer,m);return l===0||!o.isInt32(l)?n("Invalid bind() parameter name: "+m):(l<1||l>f.parameterCount)&&n("Bind index",m,"is out of range."),l},y=function(f,m){return f._lockedByExec&&n("Operation is illegal when statement is locked:",m),f},B=function f(m,l,_,u){y(L(m),"bind()"),f._||(f._tooBigInt=U=>n("BigInt value is too big to store without precision loss:",U),f._={string:function(U,ee,ne,re){const[se,j]=s.allocCString(ne,!0);return(re?r.sqlite3_bind_blob:r.sqlite3_bind_text)(U.pointer,ee,se,j,r.SQLITE_WASM_DEALLOC)}}),c(u),l=d(m,l);let I=0;switch(u==null?D.null:_){case D.null:I=r.sqlite3_bind_null(m.pointer,l);break;case D.string:I=f._.string(m,l,u,!1);break;case D.number:{let U;o.isInt32(u)?U=r.sqlite3_bind_int:typeof u=="bigint"?o.bigIntFits64(u)?s.bigIntEnabled?U=r.sqlite3_bind_int64:o.bigIntFitsDouble(u)?(u=Number(u),U=r.sqlite3_bind_double):f._tooBigInt(u):f._tooBigInt(u):(u=Number(u),s.bigIntEnabled&&Number.isInteger(u)?U=r.sqlite3_bind_int64:U=r.sqlite3_bind_double),I=U(m.pointer,l,u);break}case D.boolean:I=r.sqlite3_bind_int(m.pointer,l,u?1:0);break;case D.blob:{if(typeof u=="string"){I=f._.string(m,l,u,!0);break}else u instanceof ArrayBuffer?u=new Uint8Array(u):o.isBindableTypedArray(u)||n("Binding a value as a blob requires","that it be a string, Uint8Array, Int8Array, or ArrayBuffer.");const U=s.alloc(u.byteLength||1);s.heap8().set(u.byteLength?u:[0],U),I=r.sqlite3_bind_blob(m.pointer,l,U,u.byteLength,r.SQLITE_WASM_DEALLOC);break}default:t.config.warn("Unsupported bind() argument type:",u),n("Unsupported bind() argument type: "+typeof u)}return I&&A.checkRc(m.db.pointer,I),m._mayGet=!1,m};q.prototype={finalize:function(){if(this.pointer){y(this,"finalize()");const f=r.sqlite3_finalize(this.pointer);return delete g.get(this.db)[this.pointer],p.delete(this),delete this._mayGet,delete this.parameterCount,delete this._lockedByExec,delete this.db,f}},clearBindings:function(){return y(L(this),"clearBindings()"),r.sqlite3_clear_bindings(this.pointer),this._mayGet=!1,this},reset:function(f){y(this,"reset()"),f&&this.clearBindings();const m=r.sqlite3_reset(L(this).pointer);return this._mayGet=!1,R(this.db,m),this},bind:function(){L(this);let f,m;switch(arguments.length){case 1:f=1,m=arguments[0];break;case 2:f=arguments[0],m=arguments[1];break;default:n("Invalid bind() arguments.")}return m===void 0?this:(this.parameterCount||n("This statement has no bindable parameters."),this._mayGet=!1,m===null?B(this,f,D.null,m):Array.isArray(m)?(arguments.length!==1&&n("When binding an array, an index argument is not permitted."),m.forEach((l,_)=>B(this,_+1,c(l),l)),this):(m instanceof ArrayBuffer&&(m=new Uint8Array(m)),typeof m=="object"&&!o.isBindableTypedArray(m)?(arguments.length!==1&&n("When binding an object, an index argument is not permitted."),Object.keys(m).forEach(l=>B(this,l,c(m[l]),m[l])),this):B(this,f,c(m),m)))},bindAsBlob:function(f,m){L(this),arguments.length===1&&(m=f,f=1);const l=c(m);return D.string!==l&&D.blob!==l&&D.null!==l&&n("Invalid value type for bindAsBlob()"),B(this,f,D.blob,m)},step:function(){y(this,"step()");const f=r.sqlite3_step(L(this).pointer);switch(f){case r.SQLITE_DONE:return this._mayGet=!1;case r.SQLITE_ROW:return this._mayGet=!0;default:this._mayGet=!1,t.config.warn("sqlite3_step() rc=",f,r.sqlite3_js_rc_str(f),"SQL =",r.sqlite3_sql(this.pointer)),A.checkRc(this.db.pointer,f)}},stepReset:function(){return this.step(),this.reset()},stepFinalize:function(){try{const f=this.step();return this.reset(),f}finally{try{this.finalize()}catch{}}},get:function(f,m){if(L(this)._mayGet||n("Stmt.step() has not (recently) returned true."),Array.isArray(f)){let l=0;const _=this.columnCount;for(;l<_;)f[l]=this.get(l++);return f}else if(f&&typeof f=="object"){let l=0;const _=this.columnCount;for(;l<_;)f[r.sqlite3_column_name(this.pointer,l)]=this.get(l++);return f}switch(x(this,f),m===void 0?r.sqlite3_column_type(this.pointer,f):m){case r.SQLITE_NULL:return null;case r.SQLITE_INTEGER:if(s.bigIntEnabled){const l=r.sqlite3_column_int64(this.pointer,f);return l>=Number.MIN_SAFE_INTEGER&&l<=Number.MAX_SAFE_INTEGER?Number(l).valueOf():l}else{const l=r.sqlite3_column_double(this.pointer,f);return(l>Number.MAX_SAFE_INTEGER||ln("The pointer property is read-only.")};Object.defineProperty(q.prototype,"pointer",f),Object.defineProperty(A.prototype,"pointer",f)}if(Object.defineProperty(q.prototype,"columnCount",{enumerable:!1,get:function(){return r.sqlite3_column_count(this.pointer)},set:()=>n("The columnCount property is read-only.")}),t.oo1={DB:A,Stmt:q},o.isUIThread()){t.oo1.JsStorageDb=function(m="session"){const l=T.normalizeArgs(...arguments);m=l.filename,m!=="session"&&m!=="local"&&n("JsStorageDb db name must be one of 'session' or 'local'."),l.vfs="kvvfs",T.call(this,l)};const f=t.oo1.JsStorageDb;f.prototype=Object.create(A.prototype),f.clearStorage=r.sqlite3_js_kvvfs_clear,f.prototype.clearStorage=function(){return f.clearStorage(w(this).filename)},f.storageSize=r.sqlite3_js_kvvfs_size,f.prototype.storageSize=function(){return f.storageSize(w(this).filename)}}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.util;t.initWorker1API=(function(){const r=(...T)=>{throw new Error(T.join(" "))};globalThis.WorkerGlobalScope instanceof Function||r("initWorker1API() must be run from a Worker thread.");const s=this.sqlite3||r("Missing this.sqlite3 object."),o=s.oo1.DB,p=function(T){let A=g.idMap.get(T);return A||(A="db#"+ ++g.idSeq+"@"+T.pointer,g.idMap.set(T,A),A)},g={dbList:[],idSeq:0,idMap:new WeakMap,xfer:[],open:function(T){const A=new o(T);return this.dbs[p(A)]=A,this.dbList.indexOf(A)<0&&this.dbList.push(A),A},close:function(T,A){if(T){delete this.dbs[p(T)];const D=T.filename,q=n.sqlite3__wasm_db_vfs(T.pointer,0);T.close();const w=this.dbList.indexOf(T);w>=0&&this.dbList.splice(w,1),A&&D&&q&&n.sqlite3__wasm_vfs_unlink(q,D)}},post:function(T,A){A&&A.length?(globalThis.postMessage(T,Array.from(A)),A.length=0):globalThis.postMessage(T)},dbs:Object.create(null),getDb:function(T,A=!0){return this.dbs[T]||(A?r("Unknown (or closed) DB ID:",T):void 0)}},O=function(T=g.dbList[0]){return T&&T.pointer?T:r("DB is not opened.")},R=function(T,A=!0){const D=g.getDb(T.dbId,!1)||g.dbList[0];return A?O(D):D},z=function(){return g.dbList[0]&&p(g.dbList[0])},W={open:function(T){const A=Object.create(null),D=T.args||Object.create(null);D.simulateError&&r("Throwing because of simulateError flag.");const q=Object.create(null);A.vfs=D.vfs,A.filename=D.filename||"";const w=g.open(A);return q.filename=w.filename,q.persistent=!!s.capi.sqlite3_js_db_uses_vfs(w.pointer,"opfs"),q.dbId=p(w),q.vfs=w.dbVfsName(),q},close:function(T){const A=R(T,!1),D={filename:A&&A.filename};if(A){const q=T.args&&typeof T.args=="object"?!!T.args.unlink:!1;g.close(A,q)}return D},exec:function(T){const A=typeof T.args=="string"?{sql:T.args}:T.args||Object.create(null);A.rowMode==="stmt"?r("Invalid rowMode for 'exec': stmt mode","does not work in the Worker API."):A.sql||r("'exec' requires input SQL.");const D=R(T);(A.callback||Array.isArray(A.resultRows))&&(D._blobXfer=g.xfer);const q=A.callback;let w=0;const x=!!A.columnNames;typeof q=="string"&&(x||(A.columnNames=[]),A.callback=function(N,P){g.post({type:q,columnNames:A.columnNames,rowNumber:++w,row:N},g.xfer)});try{const N=A.countChanges?D.changes(!0,A.countChanges===64):void 0;D.exec(A),N!==void 0&&(A.changeCount=D.changes(!0,A.countChanges===64)-N);const P=A.lastInsertRowId?s.capi.sqlite3_last_insert_rowid(D):void 0;P!==void 0&&(A.lastInsertRowId=P),A.callback instanceof Function&&(A.callback=q,g.post({type:q,columnNames:A.columnNames,rowNumber:null,row:void 0}))}finally{delete D._blobXfer,A.callback&&(A.callback=q)}return A},"config-get":function(){const T=Object.create(null),A=s.config;return["bigIntEnabled"].forEach(function(D){Object.getOwnPropertyDescriptor(A,D)&&(T[D]=A[D])}),T.version=s.version,T.vfsList=s.capi.sqlite3_js_vfs_list(),T},export:function(T){const A=R(T),D={byteArray:s.capi.sqlite3_js_db_export(A.pointer),filename:A.filename,mimetype:"application/x-sqlite3"};return g.xfer.push(D.byteArray.buffer),D},toss:function(T){r("Testing worker exception")}};globalThis.onmessage=async function(T){T=T.data;let A,D=T.dbId,q=T.type;const w=performance.now();try{W.hasOwnProperty(q)&&W[q]instanceof Function?A=await W[q](T):r("Unknown db worker message type:",T.type)}catch(x){q="error",A={operation:T.type,message:x.message,errorClass:x.name,input:T},x.stack&&(A.stack=typeof x.stack=="string"?x.stack.split(/\n\s*/):x.stack)}D||(D=A.dbId||z()),g.post({type:q,dbId:D,messageId:T.messageId,workerReceivedTime:w,workerRespondTime:performance.now(),departureTime:T.departureTime,result:A},g.xfer)},globalThis.postMessage({type:"sqlite3-api",result:"worker1-ready"})}).bind({sqlite3:t})}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.wasm,r=t.capi,s=t.util.toss3,o=Object.create(null);t.vfs=o,r.sqlite3_vfs.prototype.registerVfs=function(p=!1){this instanceof t.capi.sqlite3_vfs||s("Expecting a sqlite3_vfs-type argument.");const g=r.sqlite3_vfs_register(this,p?1:0);return g&&s("sqlite3_vfs_register(",this,") failed with rc",g),this.pointer!==r.sqlite3_vfs_find(this.$zName)&&s("BUG: sqlite3_vfs_find(vfs.$zName) failed for just-installed VFS",this),this},o.installVfs=function(p){let g=0;const O=["io","vfs"];for(const R of O){const z=p[R];z&&(++g,z.struct.installMethods(z.methods,!!z.applyArgcCheck),R==="vfs"&&(!z.struct.$zName&&typeof z.name=="string"&&z.struct.addOnDispose(z.struct.$zName=n.allocCString(z.name)),z.struct.registerVfs(!!z.asDefault)))}return g||s("Misuse: installVfs() options object requires at least","one of:",O),this}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){if(!t.wasm.exports.sqlite3_declare_vtab)return;const n=t.wasm,r=t.capi,s=t.util.toss3,o=Object.create(null);t.vtab=o;const p=r.sqlite3_index_info;p.prototype.nthConstraint=function(R,z=!1){if(R<0||R>=this.$nConstraint)return!1;const W=this.$aConstraint+p.sqlite3_index_constraint.structInfo.sizeof*R;return z?W:new p.sqlite3_index_constraint(W)},p.prototype.nthConstraintUsage=function(R,z=!1){if(R<0||R>=this.$nConstraint)return!1;const W=this.$aConstraintUsage+p.sqlite3_index_constraint_usage.structInfo.sizeof*R;return z?W:new p.sqlite3_index_constraint_usage(W)},p.prototype.nthOrderBy=function(R,z=!1){if(R<0||R>=this.$nOrderBy)return!1;const W=this.$aOrderBy+p.sqlite3_index_orderby.structInfo.sizeof*R;return z?W:new p.sqlite3_index_orderby(W)};const g=function(R,z){return(function(W,T=!1){if(arguments.length===0&&(W=new z),W instanceof z)return this.set(W.pointer,W),W;n.isPtr(W)||t.SQLite3Error.toss("Invalid argument to",R+"()");let A=this.get(W);return T&&this.delete(W),A}).bind(new Map)},O=function(R,z){const W=g(R,z);return Object.assign(Object.create(null),{StructType:z,create:T=>{const A=W();return n.pokePtr(T,A.pointer),A},get:T=>W(T),unget:T=>W(T,!0),dispose:T=>{const A=W(T,!0);A&&A.dispose()}})};o.xVtab=O("xVtab",r.sqlite3_vtab),o.xCursor=O("xCursor",r.sqlite3_vtab_cursor),o.xIndexInfo=R=>new r.sqlite3_index_info(R),o.xError=function R(z,W,T){if(R.errorReporter instanceof Function)try{R.errorReporter("sqlite3_module::"+z+"(): "+W.message)}catch{}let A;return W instanceof t.WasmAllocError?A=r.SQLITE_NOMEM:arguments.length>2?A=T:W instanceof t.SQLite3Error&&(A=W.resultCode),A||r.SQLITE_ERROR},o.xError.errorReporter=console.error.bind(console),o.xRowid=(R,z)=>n.poke(R,z,"i64"),o.setupModule=function(R){let z=!1;const W=this instanceof r.sqlite3_module?this:R.struct||(z=new r.sqlite3_module);try{const T=R.methods||s("Missing 'methods' object.");for(const A of Object.entries({xConnect:"xCreate",xDisconnect:"xDestroy"})){const D=A[0],q=A[1];T[D]===!0?T[D]=T[q]:T[q]===!0&&(T[q]=T[D])}if(R.catchExceptions){const A=function(w,x){return["xConnect","xCreate"].indexOf(w)>=0?function(N,P,S,L,$,c){try{return x(...arguments)||0}catch(d){return d instanceof t.WasmAllocError||(n.dealloc(n.peekPtr(c)),n.pokePtr(c,n.allocCString(d.message))),o.xError(w,d)}}:function(...N){try{return x(...N)||0}catch(P){return o.xError(w,P)}}},D=["xCreate","xConnect","xBestIndex","xDisconnect","xDestroy","xOpen","xClose","xFilter","xNext","xEof","xColumn","xRowid","xUpdate","xBegin","xSync","xCommit","xRollback","xFindFunction","xRename","xSavepoint","xRelease","xRollbackTo","xShadowName"],q=Object.create(null);for(const w of D){const x=T[w];if(x instanceof Function)w==="xConnect"&&T.xCreate===x?q[w]=T.xCreate:w==="xCreate"&&T.xConnect===x?q[w]=T.xConnect:q[w]=A(w,x);else continue}W.installMethods(q,!1)}else W.installMethods(T,!!R.applyArgcCheck);if(W.$iVersion===0){let A;typeof R.iVersion=="number"?A=R.iVersion:W.$xShadowName?A=3:W.$xSavePoint||W.$xRelease||W.$xRollbackTo?A=2:A=1,W.$iVersion=A}}catch(T){throw z&&z.dispose(),T}return W},r.sqlite3_module.prototype.setupModule=function(R){return o.setupModule.call(this,R)}}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=function r(s){if(!globalThis.SharedArrayBuffer||!globalThis.Atomics)return Promise.reject(new Error("Cannot install OPFS: Missing SharedArrayBuffer and/or Atomics. The server must emit the COOP/COEP response headers to enable those. See https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep"));if(typeof WorkerGlobalScope>"u")return Promise.reject(new Error("The OPFS sqlite3_vfs cannot run in the main thread because it requires Atomics.wait()."));if(!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle||!globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle||!navigator?.storage?.getDirectory)return Promise.reject(new Error("Missing required OPFS APIs."));(!s||typeof s!="object")&&(s=Object.create(null));const o=new URL(globalThis.location.href).searchParams;return o.has("opfs-disable")?Promise.resolve(t):(s.verbose===void 0&&(s.verbose=o.has("opfs-verbose")?+o.get("opfs-verbose")||2:1),s.sanityChecks===void 0&&(s.sanityChecks=o.has("opfs-sanity-check")),s.proxyUri===void 0&&(s.proxyUri=r.defaultProxyUri),typeof s.proxyUri=="function"&&(s.proxyUri=s.proxyUri()),new Promise(function(g,O){const R=[t.config.error,t.config.warn,t.config.log],z=(E,...C)=>{s.verbose>E&&R[E]("OPFS syncer:",...C)},W=(...E)=>z(2,...E),T=(...E)=>z(1,...E),A=(...E)=>z(0,...E),D=t.util.toss,q=t.capi,w=t.util,x=t.wasm,N=q.sqlite3_vfs,P=q.sqlite3_file,S=q.sqlite3_io_methods,L=Object.create(null),$=()=>globalThis.FileSystemHandle&&globalThis.FileSystemDirectoryHandle&&globalThis.FileSystemFileHandle&&globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle&&navigator?.storage?.getDirectory;L.metrics={dump:function(){let E,C=0,M=0,J=0;for(E in u.opIds){const G=I[E];C+=G.count,M+=G.time,J+=G.wait,G.avgTime=G.count&&G.time?G.time/G.count:0,G.avgWait=G.count&&G.wait?G.wait/G.count:0}t.config.log(globalThis.location.href,"metrics for",globalThis.location.href,":",I,` +Total of`,C,"op(s) for",M,"ms (incl. "+J+" ms of waiting on the async side)"),t.config.log("Serialization metrics:",I.s11n),m.postMessage({type:"opfs-async-metrics"})},reset:function(){let E;const C=J=>J.count=J.time=J.wait=0;for(E in u.opIds)C(I[E]=Object.create(null));let M=I.s11n=Object.create(null);M=M.serialize=Object.create(null),M.count=M.time=0,M=I.s11n.deserialize=Object.create(null),M.count=M.time=0}};const c=new S,d=new N().addOnDispose(()=>c.dispose());let y;const B=E=>(y=!0,d.dispose(),O(E)),f=()=>(y=!1,g(t)),m=new Worker(new URL(""+new URL("sqlite3-opfs-async-proxy-C_otN2ZJ.js",self.location.href).href,self.location.href));setTimeout(()=>{y===void 0&&B(new Error("Timeout while waiting for OPFS async proxy worker."))},4e3),m._originalOnError=m.onerror,m.onerror=function(E){A("Error initializing OPFS asyncer:",E),B(new Error("Loading OPFS async Worker failed for unknown reasons."))};const l=q.sqlite3_vfs_find(null),_=l?new N(l):null;c.$iVersion=1,d.$iVersion=2,d.$szOsFile=q.sqlite3_file.structInfo.sizeof,d.$mxPathname=1024,d.$zName=x.allocCString("opfs"),d.$xDlOpen=d.$xDlError=d.$xDlSym=d.$xDlClose=null,d.addOnDispose("$zName",d.$zName,"cleanup default VFS wrapper",()=>_?_.dispose():null);const u=Object.create(null);u.verbose=s.verbose,u.littleEndian=(()=>{const E=new ArrayBuffer(2);return new DataView(E).setInt16(0,256,!0),new Int16Array(E)[0]===256})(),u.asyncIdleWaitTime=150,u.asyncS11nExceptions=1,u.fileBufferSize=1024*64,u.sabS11nOffset=u.fileBufferSize,u.sabS11nSize=d.$mxPathname*2,u.sabIO=new SharedArrayBuffer(u.fileBufferSize+u.sabS11nSize),u.opIds=Object.create(null);const I=Object.create(null);{let E=0;u.opIds.whichOp=E++,u.opIds.rc=E++,u.opIds.xAccess=E++,u.opIds.xClose=E++,u.opIds.xDelete=E++,u.opIds.xDeleteNoWait=E++,u.opIds.xFileSize=E++,u.opIds.xLock=E++,u.opIds.xOpen=E++,u.opIds.xRead=E++,u.opIds.xSleep=E++,u.opIds.xSync=E++,u.opIds.xTruncate=E++,u.opIds.xUnlock=E++,u.opIds.xWrite=E++,u.opIds.mkdir=E++,u.opIds["opfs-async-metrics"]=E++,u.opIds["opfs-async-shutdown"]=E++,u.opIds.retry=E++,u.sabOP=new SharedArrayBuffer(E*4),L.metrics.reset()}u.sq3Codes=Object.create(null),["SQLITE_ACCESS_EXISTS","SQLITE_ACCESS_READWRITE","SQLITE_BUSY","SQLITE_CANTOPEN","SQLITE_ERROR","SQLITE_IOERR","SQLITE_IOERR_ACCESS","SQLITE_IOERR_CLOSE","SQLITE_IOERR_DELETE","SQLITE_IOERR_FSYNC","SQLITE_IOERR_LOCK","SQLITE_IOERR_READ","SQLITE_IOERR_SHORT_READ","SQLITE_IOERR_TRUNCATE","SQLITE_IOERR_UNLOCK","SQLITE_IOERR_WRITE","SQLITE_LOCK_EXCLUSIVE","SQLITE_LOCK_NONE","SQLITE_LOCK_PENDING","SQLITE_LOCK_RESERVED","SQLITE_LOCK_SHARED","SQLITE_LOCKED","SQLITE_MISUSE","SQLITE_NOTFOUND","SQLITE_OPEN_CREATE","SQLITE_OPEN_DELETEONCLOSE","SQLITE_OPEN_MAIN_DB","SQLITE_OPEN_READONLY"].forEach(E=>{(u.sq3Codes[E]=q[E])===void 0&&D("Maintenance required: not found:",E)}),u.opfsFlags=Object.assign(Object.create(null),{OPFS_UNLOCK_ASAP:1,OPFS_UNLINK_BEFORE_OPEN:2,defaultUnlockAsap:!1});const U=(E,...C)=>{const M=u.opIds[E]||D("Invalid op ID:",E);u.s11n.serialize(...C),Atomics.store(u.sabOPView,u.opIds.rc,-1),Atomics.store(u.sabOPView,u.opIds.whichOp,M),Atomics.notify(u.sabOPView,u.opIds.whichOp);const J=performance.now();for(;Atomics.wait(u.sabOPView,u.opIds.rc,-1)!=="not-equal";);const G=Atomics.load(u.sabOPView,u.opIds.rc);if(I[E].wait+=performance.now()-J,G&&u.asyncS11nExceptions){const te=u.s11n.deserialize();te&&A(E+"() async error:",...te)}return G};L.debug={asyncShutdown:()=>{T("Shutting down OPFS async listener. The OPFS VFS will no longer work."),U("opfs-async-shutdown")},asyncRestart:()=>{T("Attempting to restart OPFS VFS async listener. Might work, might not."),m.postMessage({type:"opfs-async-restart"})}};const ee=()=>{if(u.s11n)return u.s11n;const E=new TextDecoder,C=new TextEncoder("utf-8"),M=new Uint8Array(u.sabIO,u.sabS11nOffset,u.sabS11nSize),J=new DataView(u.sabIO,u.sabS11nOffset,u.sabS11nSize);u.s11n=Object.create(null);const G=Object.create(null);G.number={id:1,size:8,getter:"getFloat64",setter:"setFloat64"},G.bigint={id:2,size:8,getter:"getBigInt64",setter:"setBigInt64"},G.boolean={id:3,size:4,getter:"getInt32",setter:"setInt32"},G.string={id:4};const te=Y=>G[typeof Y]||D("Maintenance required: this value type cannot be serialized.",Y),oe=Y=>{switch(Y){case G.number.id:return G.number;case G.bigint.id:return G.bigint;case G.boolean.id:return G.boolean;case G.string.id:return G.string;default:D("Invalid type ID:",Y)}};return u.s11n.deserialize=function(Y=!1){++I.s11n.deserialize.count;const pe=performance.now(),F=M[0],V=F?[]:null;if(F){const K=[];let X=1,ae,de,ue;for(ae=0;ae{se.start=performance.now(),se.op=E,++I[E].count},b=()=>I[se.op].time+=performance.now()-se.start,k={xCheckReservedLock:function(E,C){return x.poke(C,0,"i32"),0},xClose:function(E){j("xClose");let C=0;const M=re[E];return M&&(delete re[E],C=U("xClose",E),M.sq3File&&M.sq3File.dispose()),b(),C},xDeviceCharacteristics:function(E){return q.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN},xFileControl:function(E,C,M){return q.SQLITE_NOTFOUND},xFileSize:function(E,C){j("xFileSize");let M=U("xFileSize",E);if(M==0)try{const J=u.s11n.deserialize()[0];x.poke(C,J,"i64")}catch(J){A("Unexpected error reading xFileSize() result:",J),M=u.sq3Codes.SQLITE_IOERR}return b(),M},xLock:function(E,C){j("xLock");const M=re[E];let J=0;return M.lockType?M.lockType=C:(J=U("xLock",E,C),J===0&&(M.lockType=C)),b(),J},xRead:function(E,C,M,J){j("xRead");const G=re[E];let te;try{te=U("xRead",E,M,Number(J)),(te===0||q.SQLITE_IOERR_SHORT_READ===te)&&x.heap8u().set(G.sabView.subarray(0,M),C)}catch(oe){A("xRead(",arguments,") failed:",oe,G),te=q.SQLITE_IOERR_READ}return b(),te},xSync:function(E,C){j("xSync"),++I.xSync.count;const M=U("xSync",E,C);return b(),M},xTruncate:function(E,C){j("xTruncate");const M=U("xTruncate",E,Number(C));return b(),M},xUnlock:function(E,C){j("xUnlock");const M=re[E];let J=0;return q.SQLITE_LOCK_NONE===C&&M.lockType&&(J=U("xUnlock",E,C)),J===0&&(M.lockType=C),b(),J},xWrite:function(E,C,M,J){j("xWrite");const G=re[E];let te;try{G.sabView.set(x.heap8u().subarray(C,C+M)),te=U("xWrite",E,M,Number(J))}catch(oe){A("xWrite(",arguments,") failed:",oe,G),te=q.SQLITE_IOERR_WRITE}return b(),te}},Q={xAccess:function(E,C,M,J){j("xAccess");const G=U("xAccess",x.cstrToJs(C));return x.poke(J,G?0:1,"i32"),b(),0},xCurrentTime:function(E,C){return x.poke(C,24405875e-1+new Date().getTime()/864e5,"double"),0},xCurrentTimeInt64:function(E,C){return x.poke(C,24405875e-1*864e5+new Date().getTime(),"i64"),0},xDelete:function(E,C,M){j("xDelete");const J=U("xDelete",x.cstrToJs(C),M,!1);return b(),J},xFullPathname:function(E,C,M,J){return x.cstrncpy(J,C,M)!!J):M},L.getDirForFilename=async function(C,M=!1){const J=L.getResolvedPath(C,!0),G=J.pop();let te=L.rootDirectory;for(const oe of J)oe&&(te=await te.getDirectoryHandle(oe,{create:!!M}));return[te,G]},L.mkdir=async function(E){try{return await L.getDirForFilename(E+"/filepart",!0),!0}catch{return!1}},L.entryExists=async function(E){try{const[C,M]=await L.getDirForFilename(E);return await C.getFileHandle(M),!0}catch{return!1}},L.randomFilename=ne,L.treeList=async function(){const E=async function M(J,G){G.name=J.name,G.dirs=[],G.files=[];for await(const te of J.values())if(te.kind==="directory"){const oe=Object.create(null);G.dirs.push(oe),await M(te,oe)}else G.files.push(te.name)},C=Object.create(null);return await E(L.rootDirectory,C),C},L.rmfr=async function(){const E=L.rootDirectory,C={recurse:!0};for await(const M of E.values())E.removeEntry(M.name,C)},L.unlink=async function(E,C=!1,M=!1){try{const[J,G]=await L.getDirForFilename(E,!1);return await J.removeEntry(G,{recursive:C}),!0}catch(J){if(M)throw new Error("unlink(",arguments[0],") failed: "+J.message,{cause:J});return!1}},L.traverse=async function(E){const C={recursive:!0,directory:L.rootDirectory};typeof E=="function"&&(E={callback:E}),E=Object.assign(C,E||{}),async function J(G,te){for await(const oe of G.values()){if(E.callback(oe,G,te)===!1)return!1;if(E.recursive&&oe.kind==="directory"&&await J(oe,te+1)===!1)break}}(E.directory,0)};const H=async function(E,C){const[M,J]=await L.getDirForFilename(E,!0);let te=await(await M.getFileHandle(J,{create:!0})).createSyncAccessHandle(),oe=0,Y,pe=!1;try{for(te.truncate(0);(Y=await C())!==void 0;)Y instanceof ArrayBuffer&&(Y=new Uint8Array(Y)),oe===0&&Y.byteLength>=15&&(w.affirmDbHeader(Y),pe=!0),te.write(Y,{at:oe}),oe+=Y.byteLength;if((oe<512||oe%512!==0)&&D("Input size",oe,"is not correct for an SQLite database."),!pe){const F=new Uint8Array(20);te.read(F,{at:0}),w.affirmDbHeader(F)}return te.write(new Uint8Array([1,1]),{at:18}),oe}catch(F){throw await te.close(),te=void 0,await M.removeEntry(J).catch(()=>{}),F}finally{te&&await te.close()}};if(L.importDb=async function(E,C){if(C instanceof Function)return H(E,C);C instanceof ArrayBuffer&&(C=new Uint8Array(C)),w.affirmIsDb(C);const M=C.byteLength,[J,G]=await L.getDirForFilename(E,!0);let te,oe=0;try{return te=await(await J.getFileHandle(G,{create:!0})).createSyncAccessHandle(),te.truncate(0),oe=te.write(C,{at:0}),oe!=M&&D("Expected to write "+M+" bytes but wrote "+oe+"."),te.write(new Uint8Array([1,1]),{at:18}),oe}catch(Y){throw te&&(await te.close(),te=void 0),await J.removeEntry(G).catch(()=>{}),Y}finally{te&&await te.close()}},t.oo1){const E=function(...C){const M=t.oo1.DB.dbCtorHelper.normalizeArgs(...C);M.vfs=d.$zName,t.oo1.DB.dbCtorHelper.call(this,M)};E.prototype=Object.create(t.oo1.DB.prototype),t.oo1.OpfsDb=E,E.importDb=L.importDb,t.oo1.DB.dbCtorHelper.setVfsPostOpenCallback(d.pointer,function(C,M){M.capi.sqlite3_busy_timeout(C,1e4)})}const Z=function(){const E=x.scopedAllocPush(),C=new P;try{const M=C.pointer,J=q.SQLITE_OPEN_CREATE|q.SQLITE_OPEN_READWRITE|q.SQLITE_OPEN_MAIN_DB,G=x.scopedAlloc(8),te="/sanity/check/file"+ne(8),oe=x.scopedAllocCString(te);let Y;if(u.s11n.serialize("This is ä string."),Y=u.s11n.deserialize(),W("deserialize() says:",Y),Y[0]!=="This is ä string."&&D("String d13n error."),Q.xAccess(d.pointer,oe,0,G),Y=x.peek(G,"i32"),W("xAccess(",te,") exists ?=",Y),Y=Q.xOpen(d.pointer,oe,M,J,G),W("open rc =",Y,"state.sabOPView[xOpen] =",u.sabOPView[u.opIds.xOpen]),Y!==0){A("open failed with code",Y);return}Q.xAccess(d.pointer,oe,0,G),Y=x.peek(G,"i32"),Y||D("xAccess() failed to detect file."),Y=k.xSync(C.pointer,0),Y&&D("sync failed w/ rc",Y),Y=k.xTruncate(C.pointer,1024),Y&&D("truncate failed w/ rc",Y),x.poke(G,0,"i64"),Y=k.xFileSize(C.pointer,G),Y&&D("xFileSize failed w/ rc",Y),W("xFileSize says:",x.peek(G,"i64")),Y=k.xWrite(C.pointer,oe,10,1),Y&&D("xWrite() failed!");const pe=x.scopedAlloc(16);Y=k.xRead(C.pointer,pe,6,2),x.poke(pe+6,0);let F=x.cstrToJs(pe);W("xRead() got:",F),F!=="sanity"&&D("Unexpected xRead() value."),Q.xSleep&&(W("xSleep()ing before close()ing..."),Q.xSleep(d.pointer,2e3),W("waking up from xSleep()")),Y=k.xClose(M),W("xClose rc =",Y,"sabOPView =",u.sabOPView),W("Deleting file:",te),Q.xDelete(d.pointer,oe,4660),Q.xAccess(d.pointer,oe,0,G),Y=x.peek(G,"i32"),Y&&D("Expecting 0 from xAccess(",te,") after xDelete()."),T("End of OPFS sanity checks.")}finally{C.dispose(),x.scopedAllocPop(E)}};m.onmessage=function({data:E}){switch(E.type){case"opfs-unavailable":B(new Error(E.payload.join(" ")));break;case"opfs-async-loaded":m.postMessage({type:"opfs-async-init",args:u});break;case"opfs-async-inited":{if(y===!0)break;try{t.vfs.installVfs({io:{struct:c,methods:k},vfs:{struct:d,methods:Q}}),u.sabOPView=new Int32Array(u.sabOP),u.sabFileBufView=new Uint8Array(u.sabIO,0,u.fileBufferSize),u.sabS11nView=new Uint8Array(u.sabIO,u.sabS11nOffset,u.sabS11nSize),ee(),s.sanityChecks&&(T("Running sanity checks because of opfs-sanity-check URL arg..."),Z()),$()?navigator.storage.getDirectory().then(C=>{m.onerror=m._originalOnError,delete m._originalOnError,t.opfs=L,L.rootDirectory=C,W("End of OPFS sqlite3_vfs setup.",d),f()}).catch(B):f()}catch(C){A(C),B(C)}break}default:{const C="Unexpected message from the OPFS async worker: "+JSON.stringify(E);A(C),B(new Error(C));break}}}}))};n.defaultProxyUri="sqlite3-opfs-async-proxy.js",globalThis.sqlite3ApiBootstrap.initializersAsync.push(async r=>{try{let s=n.defaultProxyUri;return r.scriptInfo.sqlite3Dir&&(n.defaultProxyUri=r.scriptInfo.sqlite3Dir+s),n().catch(o=>{r.config.warn("Ignoring inability to install OPFS sqlite3_vfs:",o.message)})}catch(s){return r.config.error("installOpfsVfs() exception:",s),Promise.reject(s)}})}),globalThis.sqlite3ApiBootstrap.initializers.push(function(t){const n=t.util.toss,r=t.util.toss3,s=Object.create(null),o=t.capi,p=t.util,g=t.wasm,O=4096,R=512,z=4,W=8,T=R+z,A=R,D=T,q=O,w=o.SQLITE_OPEN_MAIN_DB|o.SQLITE_OPEN_MAIN_JOURNAL|o.SQLITE_OPEN_SUPER_JOURNAL|o.SQLITE_OPEN_WAL,x=o.SQLITE_OPEN_MEMORY,N=".opaque",P=()=>Math.random().toString(36).slice(2),S=new TextDecoder,L=new TextEncoder,$=Object.assign(Object.create(null),{name:"opfs-sahpool",directory:void 0,initialCapacity:6,clearOnInit:!1,verbosity:2,forceReinitIfPreviouslyFailed:!1}),c=[t.config.error,t.config.warn,t.config.log];t.config.log;const d=t.config.warn;t.config.error;const y=new Map,B=j=>y.get(j),f=(j,b)=>{b?y.set(j,b):y.delete(j)},m=new Map,l=j=>m.get(j),_=(j,b)=>{b?m.set(j,b):m.delete(j)},u={xCheckReservedLock:function(j,b){const k=l(j);return k.log("xCheckReservedLock"),k.storeErr(),g.poke32(b,1),0},xClose:function(j){const b=l(j);b.storeErr();const k=b.getOFileForS3File(j);if(k)try{b.log(`xClose ${k.path}`),b.mapS3FileToOFile(j,!1),k.sah.flush(),k.flags&o.SQLITE_OPEN_DELETEONCLOSE&&b.deletePath(k.path)}catch(Q){return b.storeErr(Q,o.SQLITE_IOERR)}return 0},xDeviceCharacteristics:function(j){return o.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN},xFileControl:function(j,b,k){return o.SQLITE_NOTFOUND},xFileSize:function(j,b){const k=l(j);k.log("xFileSize");const H=k.getOFileForS3File(j).sah.getSize()-q;return g.poke64(b,BigInt(H)),0},xLock:function(j,b){const k=l(j);k.log(`xLock ${b}`),k.storeErr();const Q=k.getOFileForS3File(j);return Q.lockType=b,0},xRead:function(j,b,k,Q){const H=l(j);H.storeErr();const Z=H.getOFileForS3File(j);H.log(`xRead ${Z.path} ${k} @ ${Q}`);try{const E=Z.sah.read(g.heap8u().subarray(b,b+k),{at:q+Number(Q)});return Eb&&g.poke8(k+b-1,0)}catch{return o.SQLITE_NOMEM}finally{g.scopedAllocPop(Z)}}return H?H.sqlite3Rc||o.SQLITE_IOERR:0},xOpen:function(b,k,Q,H,Z){const E=B(b);try{H&=~x,E.log(`xOpen ${g.cstrToJs(k)} ${H}`);const C=k&&g.peek8(k)?E.getPath(k):P();let M=E.getSAHForPath(C);!M&&H&o.SQLITE_OPEN_CREATE&&(E.getFileCount()f(b.pointer,0)),Q&&(b.$xRandomness=Q.$xRandomness,b.$xSleep=Q.$xSleep,Q.dispose()),!b.$xRandomness&&!U.xRandomness&&(U.xRandomness=function(H,Z,E){const C=g.heap8u();let M=0;for(;M0),t.vfs.installVfs({vfs:{struct:b,methods:U}}),b};class ne{vfsDir;#e;#o;#a;#r=new Map;#t=new Map;#s=new Set;#l=new Map;#n=new Uint8Array(T);#c;#i;#u;constructor(b=Object.create(null)){this.#u=b.verbosity??$.verbosity,this.vfsName=b.name||$.name,this.#i=ee(this.vfsName),f(this.#i.pointer,this),this.vfsDir=b.directory||"."+this.vfsName,this.#c=new DataView(this.#n.buffer,this.#n.byteOffset),this.isReady=this.reset(!!(b.clearOnInit??$.clearOnInit)).then(()=>{if(this.$error)throw this.$error;return this.getCapacity()?Promise.resolve(void 0):this.addCapacity(b.initialCapacity||$.initialCapacity)})}#_(b,...k){this.#u>b&&c[b](this.vfsName+":",...k)}log(...b){this.#_(2,...b)}warn(...b){this.#_(1,...b)}error(...b){this.#_(0,...b)}getVfs(){return this.#i}getCapacity(){return this.#r.size}getFileCount(){return this.#t.size}getFileNames(){const b=[];for(const k of this.#t.keys())b.push(k);return b}async addCapacity(b){for(let k=0;k{try{const Z=await H.createSyncAccessHandle();if(this.#r.set(Z,Q),b)Z.truncate(q),this.setAssociatedPath(Z,"",0);else{const E=this.getAssociatedPath(Z);E?this.#t.set(E,Z):this.#s.add(Z)}}catch(Z){throw this.storeErr(Z),this.releaseAccessHandles(),Z}}))}getAssociatedPath(b){b.read(this.#n,{at:0});const k=this.#c.getUint32(A);if(this.#n[0]&&(k&o.SQLITE_OPEN_DELETEONCLOSE||(k&w)===0))return d(`Removing file with unexpected flags ${k.toString(16)}`,this.#n),this.setAssociatedPath(b,"",0),"";const Q=new Uint32Array(W/4);b.read(Q,{at:D});const H=this.computeDigest(this.#n,k);if(Q.every((Z,E)=>Z===H[E])){const Z=this.#n.findIndex(E=>E===0);return Z===0&&b.truncate(q),Z?S.decode(this.#n.subarray(0,Z)):""}else return d("Disassociating file with bad digest."),this.setAssociatedPath(b,"",0),""}setAssociatedPath(b,k,Q){const H=L.encodeInto(k,this.#n);R<=H.written+1&&n("Path too long:",k),k&&Q&&(Q|=x),this.#n.fill(0,H.written,R),this.#c.setUint32(A,Q);const Z=this.computeDigest(this.#n,Q);b.write(this.#n,{at:0}),b.write(Z,{at:D}),b.flush(),k?(this.#t.set(k,b),this.#s.delete(b)):(b.truncate(q),this.#s.add(b))}computeDigest(b,k){if(k&x){let Q=3735928559,H=1103547991;for(const Z of b)Q=Math.imul(Q^Z,2654435761),H=Math.imul(H^Z,104729);return new Uint32Array([Q>>>0,H>>>0])}else return new Uint32Array([0,0])}async reset(b){await this.isReady;let k=await navigator.storage.getDirectory(),Q;for(const H of this.vfsDir.split("/"))H&&(Q=k,k=await k.getDirectoryHandle(H,{create:!0}));return this.#e=k,this.#a=Q,this.#o=await this.#e.getDirectoryHandle(N,{create:!0}),this.releaseAccessHandles(),this.acquireAccessHandles(b)}getPath(b){return g.isPtr(b)&&(b=g.cstrToJs(b)),(b instanceof URL?b:new URL(b,"file://localhost/")).pathname}deletePath(b){const k=this.#t.get(b);return k&&(this.#t.delete(b),this.setAssociatedPath(k,"",0)),!!k}storeErr(b,k){return b&&(b.sqlite3Rc=k||o.SQLITE_IOERR,this.error(b)),this.$error=b,k}popErr(){const b=this.$error;return this.$error=void 0,b}nextAvailableSAH(){const[b]=this.#s.keys();return b}getOFileForS3File(b){return this.#l.get(b)}mapS3FileToOFile(b,k){k?(this.#l.set(b,k),_(b,this)):(this.#l.delete(b),_(b,!1))}hasFilename(b){return this.#t.has(b)}getSAHForPath(b){return this.#t.get(b)}async removeVfs(){if(!this.#i.pointer||!this.#o)return!1;o.sqlite3_vfs_unregister(this.#i.pointer),this.#i.dispose(),delete s[this.vfsName];try{this.releaseAccessHandles(),await this.#e.removeEntry(N,{recursive:!0}),this.#o=void 0,await this.#a.removeEntry(this.#e.name,{recursive:!0}),this.#e=this.#a=void 0}catch(b){t.config.error(this.vfsName,"removeVfs() failed with no recovery strategy:",b)}return!0}pauseVfs(){return this.#l.size>0&&t.SQLite3Error.toss(o.SQLITE_MISUSE,"Cannot pause VFS",this.vfsName,"because it has opened files."),this.#r.size>0&&(o.sqlite3_vfs_unregister(this.vfsName),this.releaseAccessHandles()),this}isPaused(){return this.#r.size===0}async unpauseVfs(){return this.#r.size===0?this.acquireAccessHandles(!1).then(()=>o.sqlite3_vfs_register(this.#i,0),this):this}exportFile(b){const k=this.#t.get(b)||n("File not found:",b),Q=k.getSize()-q,H=new Uint8Array(Q>0?Q:0);if(Q>0){const Z=k.read(H,{at:q});Z!=Q&&n("Expected to read "+Q+" bytes but read "+Z+".")}return H}async importDbChunked(b,k){const Q=this.#t.get(b)||this.nextAvailableSAH()||n("No available handles to import to.");Q.truncate(0);let H=0,Z,E=!1;try{for(;(Z=await k())!==void 0;)Z instanceof ArrayBuffer&&(Z=new Uint8Array(Z)),H===0&&Z.byteLength>=15&&(p.affirmDbHeader(Z),E=!0),Q.write(Z,{at:q+H}),H+=Z.byteLength;if((H<512||H%512!==0)&&n("Input size",H,"is not correct for an SQLite database."),!E){const C=new Uint8Array(20);Q.read(C,{at:0}),p.affirmDbHeader(C)}Q.write(new Uint8Array([1,1]),{at:q+18})}catch(C){throw this.setAssociatedPath(Q,"",0),C}return this.setAssociatedPath(Q,b,o.SQLITE_OPEN_MAIN_DB),H}importDb(b,k){if(k instanceof ArrayBuffer)k=new Uint8Array(k);else if(k instanceof Function)return this.importDbChunked(b,k);const Q=this.#t.get(b)||this.nextAvailableSAH()||n("No available handles to import to."),H=k.byteLength;(H<512||H%512!=0)&&n("Byte array size is invalid for an SQLite db.");const Z="SQLite format 3";for(let C=0;Cthis)}isPaused(){return this.#e.isPaused()}}const se=async()=>{const j=await navigator.storage.getDirectory(),b=".opfs-sahpool-sync-check-"+P(),H=(await(await j.getFileHandle(b,{create:!0})).createSyncAccessHandle()).close();return await H,await j.removeEntry(b),H?.then&&n("The local OPFS API is too old for opfs-sahpool:","it has an async FileSystemSyncAccessHandle.close() method."),!0};t.installOpfsSAHPoolVfs=async function(j=Object.create(null)){j=Object.assign(Object.create(null),$,j||{});const b=j.name;if(j.$testThrowPhase1)throw j.$testThrowPhase1;if(s[b])try{return await s[b]}catch(k){if(j.forceReinitIfPreviouslyFailed)delete s[b];else throw k}return!globalThis.FileSystemHandle||!globalThis.FileSystemDirectoryHandle||!globalThis.FileSystemFileHandle||!globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle||!navigator?.storage?.getDirectory?s[b]=Promise.reject(new Error("Missing required OPFS APIs.")):s[b]=se().then(async function(){if(j.$testThrowPhase2)throw j.$testThrowPhase2;const k=new ne(j);return k.isReady.then(async()=>{const Q=new re(k);if(t.oo1){const H=t.oo1,Z=k.getVfs(),E=function(...C){const M=H.DB.dbCtorHelper.normalizeArgs(...C);M.vfs=Z.$zName,H.DB.dbCtorHelper.call(this,M)};E.prototype=Object.create(H.DB.prototype),Q.OpfsSAHPoolDb=E}return k.log("VFS initialized."),Q}).catch(async Q=>{throw await k.removeVfs().catch(()=>{}),Q})}).catch(k=>s[b]=Promise.reject(k))}}),typeof i<"u"){const t=Object.assign(Object.create(null),{exports:typeof h>"u"?i.asm:h,memory:i.wasmMemory},globalThis.sqlite3ApiConfig||{});globalThis.sqlite3ApiConfig=t;let n;try{n=globalThis.sqlite3ApiBootstrap()}catch(r){throw console.error("sqlite3ApiBootstrap() error:",r),r}finally{delete globalThis.sqlite3ApiBootstrap,delete globalThis.sqlite3ApiConfig}i.sqlite3=n}else console.warn("This is not running in an Emscripten module context, so","globalThis.sqlite3ApiBootstrap() is _not_ being called due to lack","of config info for the WASM environment.","It must be called manually.")},be=Ke,be}})();$e=(function(){const Ie=$e;if(!Ie)throw new Error("Expecting globalThis.sqlite3InitModule to be defined by the Emscripten build.");const qe=globalThis.sqlite3InitModuleState=Object.assign(Object.create(null),{moduleScript:globalThis?.document?.currentScript,isWorker:typeof WorkerGlobalScope<"u",location:globalThis.location,urlParams:globalThis?.location?.href?new URL(globalThis.location.href).searchParams:new URLSearchParams});if(qe.debugModule=qe.urlParams.has("sqlite3.debugModule")?(...be)=>console.warn("sqlite3.debugModule:",...be):()=>{},qe.urlParams.has("sqlite3.dir"))qe.sqlite3Dir=qe.urlParams.get("sqlite3.dir")+"/";else if(qe.moduleScript){const be=qe.moduleScript.src.split("/");be.pop(),qe.sqlite3Dir=be.join("/")+"/"}if(globalThis.sqlite3InitModule=function be(...i){return Ie(...i).then(ve=>{ve.runSQLite3PostLoadInit(ve);const Ee=ve.sqlite3;Ee.scriptInfo=qe,be.__isUnderTest&&(Ee.__isUnderTest=!0);const Ke=Ee.asyncPostInit;return delete Ee.asyncPostInit,Ke()}).catch(ve=>{throw console.error("Exception loading sqlite3 module:",ve),ve})},globalThis.sqlite3InitModule.ready=Ie.ready,globalThis.sqlite3InitModuleState.moduleScript){const be=globalThis.sqlite3InitModuleState;let i=be.moduleScript.src.split("/");i.pop(),be.scriptDir=i.join("/")+"/"}return qe.debugModule("sqlite3InitModuleState =",qe),globalThis.sqlite3InitModule})();var Tt=$e;Tt().then(Ie=>Ie.initWorker1API())})(); diff --git a/docus/dist/_nuxt/sqlite3.DBpDb1lf.wasm b/docus/dist/_nuxt/sqlite3.DBpDb1lf.wasm new file mode 100644 index 0000000..f001d7a Binary files /dev/null and b/docus/dist/_nuxt/sqlite3.DBpDb1lf.wasm differ diff --git a/docus/dist/_nuxt/uN6OGCoe.js b/docus/dist/_nuxt/uN6OGCoe.js new file mode 100644 index 0000000..1a4ee87 --- /dev/null +++ b/docus/dist/_nuxt/uN6OGCoe.js @@ -0,0 +1 @@ +const o={or:"または",error:{title:"ページが見つかりません",description:"申し訳ございませんが、お探しのページは見つかりませんでした。"}},a={copy:{page:"ページをコピー",link:"Markdownページをコピー",view:"Markdownとして表示",gpt:"ChatGPTで開く",claude:"Claudeで開く"},links:"コミュニティ",toc:"このページの内容",menu:"メニュー",report:"問題を報告",edit:"このページを編集"},e={copyLogo:"ロゴをコピー",copyWordmark:"ワードマークをコピー",downloadLogo:"ロゴをダウンロード",downloadWordmark:"ワードマークをダウンロード",brandAssets:"ブランドアセット",logoCopied:"ロゴをコピーしました",wordmarkCopied:"ワードマークをコピーしました",logoDownloaded:"ロゴをダウンロードしました",wordmarkDownloaded:"ワードマークをダウンロードしました",copyLogoFailed:"ロゴのコピーに失敗しました",copyWordmarkFailed:"ワードマークのコピーに失敗しました"},n={title:"AIに聞く",placeholder:"質問してください...",tooltip:"AIに質問する",tryAsking:"質問してみてください",askAnything:"何でも聞いてください...",clearChat:"チャットをクリア",close:"閉じる",expand:"展開",collapse:"折りたたむ",thinking:"考えています...",askMeAnything:"何でも聞いてみよう",askMeAnythingDescription:"ドキュメンテーションの閲覧、概念の理解、および回答の検索に関するヘルプを入手してください。",faq:"よくある質問",chatCleared:"チャットは更新時にクリアされます",lineBreak:"改行",explainWithAi:"AIで説明する",toolListPages:"一覧表示されたドキュメントページ",toolReadPage:"読む",loading:{searching:"ドキュメントを検索中",reading:"ドキュメントを読む",analyzing:"コンテンツの分析",finding:"最適な回答を見つける",finished:"使用したソース"}},i={common:o,docs:a,logo:e,assistant:n};export{n as assistant,o as common,i as default,a as docs,e as logo}; diff --git a/docus/dist/_nuxt/vaS8Rkl_.js b/docus/dist/_nuxt/vaS8Rkl_.js new file mode 100644 index 0000000..c53c79e --- /dev/null +++ b/docus/dist/_nuxt/vaS8Rkl_.js @@ -0,0 +1 @@ +import{r as c}from"./Cf5i2Hk_.js";import{a0 as n,a1 as l,a as u,p as i,ac as m,s as d,bB as f,c as _,am as a,o as b}from"./B3fabVUf.js";import"./BN_7HF1G.js";const g={base:"rounded-full"},x={__name:"ProseBadge",props:{class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const s=e,o=n(),r=l("prose.badge",s),t=_(()=>a({extend:a(g),...o.ui?.prose?.badge||{}}));return(p,C)=>(b(),u(f,{color:"primary",variant:"subtle",class:m(t.value({class:[d(r)?.base,s.class]}))},{default:i(()=>[c(p.$slots,"default",{mdcUnwrap:"p"})]),_:3},8,["class"]))}};export{x as default}; diff --git a/docus/dist/_nuxt/zNu3OsYz.js b/docus/dist/_nuxt/zNu3OsYz.js new file mode 100644 index 0000000..86ec4aa --- /dev/null +++ b/docus/dist/_nuxt/zNu3OsYz.js @@ -0,0 +1 @@ +const a={or:"o",error:{title:"Pàgina no trobada",description:"Ho sentim, però la pàgina que cerques no existeix."}},e={copy:{page:"Copiar pàgina",link:"Copiar pàgina Markdown",view:"Veure com a Markdown",gpt:"Obrir a ChatGPT",claude:"Obrir a Claude"},links:"Comunitat",toc:"En aquesta pàgina",menu:"Menú",report:"Informar d'un problema",edit:"Editar aquesta pàgina"},o={copyLogo:"Copiar el logotip",copyWordmark:"Copiar el wordmark",downloadLogo:"Descarregar el logotip",downloadWordmark:"Descarregar el wordmark",brandAssets:"Recursos de marca",logoCopied:"Logotip copiat",wordmarkCopied:"Wordmark copiat",logoDownloaded:"Logotip descarregat",wordmarkDownloaded:"Wordmark descarregat",copyLogoFailed:"No s'ha pogut copiar el logotip",copyWordmarkFailed:"No s'ha pogut copiar el wordmark"},r={title:"Pregunta a la IA",placeholder:"Fes una pregunta...",tooltip:"Fes una pregunta a l'IA",tryAsking:"Prova de fer una pregunta",askAnything:"Pregunta qualsevol cosa...",clearChat:"Esborra el xat",close:"Tanca",expand:"Amplia",collapse:"Contraure",thinking:"Pensant...",askMeAnything:"Pregunta el que vulguis",askMeAnythingDescription:"Rep ajuda per navegar per la documentació, entendre els conceptes i trobar respostes.",faq:"Preguntes freqüents",chatCleared:"El xat s'esborra quan s'actualitza",lineBreak:"Salt de línia",explainWithAi:"Explica-ho amb IA",toolListPages:"Pàgines de documentació llistades",toolReadPage:"Llegir",loading:{searching:"Cerca a la documentació",reading:"Llegir els documents",analyzing:"Analitzar el contingut",finding:"Trobar la millor resposta",finished:"Fonts utilitzades"}},t={common:a,docs:e,logo:o,assistant:r};export{r as assistant,a as common,t as default,e as docs,o as logo}; diff --git a/docus/dist/_og-static-fonts/inter-400-latin.ttf b/docus/dist/_og-static-fonts/inter-400-latin.ttf new file mode 100644 index 0000000..6cc4fc5 Binary files /dev/null and b/docus/dist/_og-static-fonts/inter-400-latin.ttf differ diff --git a/docus/dist/_og-static-fonts/inter-700-latin.ttf b/docus/dist/_og-static-fonts/inter-700-latin.ttf new file mode 100644 index 0000000..7eebe9c Binary files /dev/null and b/docus/dist/_og-static-fonts/inter-700-latin.ttf differ diff --git a/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Development+Guide,description_This+guide+covers+the+usual+path+for+adding+or+changing+a+Forge+module.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvZGV2ZWxvcG1lbnQi.png b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Development+Guide,description_This+guide+covers+the+usual+path+for+adding+or+changing+a+Forge+module.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvZGV2ZWxvcG1lbnQi.png new file mode 100644 index 0000000..efa5874 Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Development+Guide,description_This+guide+covers+the+usual+path+for+adding+or+changing+a+Forge+module.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvZGV2ZWxvcG1lbnQi.png differ diff --git a/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Framework+Architecture,description_Forge+is+organized+around+domain+modules.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvYXJjaGl0ZWN0dXJlIg.png b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Framework+Architecture,description_Forge+is+organized+around+domain+modules.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvYXJjaGl0ZWN0dXJlIg.png new file mode 100644 index 0000000..d1f6275 Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Framework+Architecture,description_Forge+is+organized+around+domain+modules.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvYXJjaGl0ZWN0dXJlIg.png differ diff --git a/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Getting+Started,description_Use+this+section+as+the+main+entry+point+for+the+Forge+framework.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQi.png b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Getting+Started,description_Use+this+section+as+the+main+entry+point+for+the+Forge+framework.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQi.png new file mode 100644 index 0000000..50ccaf7 Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Getting+Started,description_Use+this+section+as+the+main+entry+point+for+the+Forge+framework.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQi.png differ diff --git a/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Module+Reference,description_This+reference+lists+the+main+Forge+modules+and+where+each+layer+lives.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvbW9kdWxlLXJlZmVyZW5jZSI.png b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Module+Reference,description_This+reference+lists+the+main+Forge+modules+and+where+each+layer+lives.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvbW9kdWxlLXJlZmVyZW5jZSI.png new file mode 100644 index 0000000..c91ce3f Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_Module+Reference,description_This+reference+lists+the+main+Forge+modules+and+where+each+layer+lives.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvbW9kdWxlLXJlZmVyZW5jZSI.png differ diff --git a/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_SurrealDB+Setup,description_Forge+uses+SurrealDB+for+durable+storage.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvc3VycmVhbGRiLXNldHVwIg.png b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_SurrealDB+Setup,description_Forge+uses+SurrealDB+for+durable+storage.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvc3VycmVhbGRiLXNldHVwIg.png new file mode 100644 index 0000000..83544a9 Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Getting+Started,title_SurrealDB+Setup,description_Forge+uses+SurrealDB+for+durable+storage.,p_Ii9nZXR0aW5nLXN0YXJ0ZWQvc3VycmVhbGRiLXNldHVwIg.png differ diff --git a/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Garage+Usage+Guide,description_The+garage+module+stores+physical+player+vehicles.,p_Ii9zZXJ2ZXItbW9kdWxlcy9nYXJhZ2Ui.png b/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Garage+Usage+Guide,description_The+garage+module+stores+physical+player+vehicles.,p_Ii9zZXJ2ZXItbW9kdWxlcy9nYXJhZ2Ui.png new file mode 100644 index 0000000..8067b3b Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Garage+Usage+Guide,description_The+garage+module+stores+physical+player+vehicles.,p_Ii9zZXJ2ZXItbW9kdWxlcy9nYXJhZ2Ui.png differ diff --git a/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Locker+Usage+Guide,description_The+locker+module+stores+physical+player+inventory+items+by+classname.,p_Ii9zZXJ2ZXItbW9kdWxlcy9sb2NrZXIi.png b/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Locker+Usage+Guide,description_The+locker+module+stores+physical+player+inventory+items+by+classname.,p_Ii9zZXJ2ZXItbW9kdWxlcy9sb2NrZXIi.png new file mode 100644 index 0000000..f19b26a Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Locker+Usage+Guide,description_The+locker+module+stores+physical+player+inventory+items+by+classname.,p_Ii9zZXJ2ZXItbW9kdWxlcy9sb2NrZXIi.png differ diff --git a/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Server+Module+Guides,description_These+pages+document+the+authoritative+server-side+workflows+in+Forge.,p_Ii9zZXJ2ZXItbW9kdWxlcyI.png b/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Server+Module+Guides,description_These+pages+document+the+authoritative+server-side+workflows+in+Forge.,p_Ii9zZXJ2ZXItbW9kdWxlcyI.png new file mode 100644 index 0000000..d0ca5af Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Server+Module+Guides,description_These+pages+document+the+authoritative+server-side+workflows+in+Forge.,p_Ii9zZXJ2ZXItbW9kdWxlcyI.png differ diff --git a/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Store+Usage+Guide,description_The+store+module+processes+checkout+requests.,p_Ii9zZXJ2ZXItbW9kdWxlcy9zdG9yZSI.png b/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Store+Usage+Guide,description_The+store+module+processes+checkout+requests.,p_Ii9zZXJ2ZXItbW9kdWxlcy9zdG9yZSI.png new file mode 100644 index 0000000..341cb60 Binary files /dev/null and b/docus/dist/_og/s/c_Docs,headline_Server+Modules,title_Store+Usage+Guide,description_The+store+module+processes+checkout+requests.,p_Ii9zZXJ2ZXItbW9kdWxlcy9zdG9yZSI.png differ diff --git a/docus/dist/_og/s/c_Landing,title_Forge+Framework+Documentation,description_Documentation+for+the+Forge+Arma+3+framework+covering+architecture+persistence+extension+APIs+gameplay+modules+and+client.png b/docus/dist/_og/s/c_Landing,title_Forge+Framework+Documentation,description_Documentation+for+the+Forge+Arma+3+framework+covering+architecture+persistence+extension+APIs+gameplay+modules+and+client.png new file mode 100644 index 0000000..398cc2e Binary files /dev/null and b/docus/dist/_og/s/c_Landing,title_Forge+Framework+Documentation,description_Documentation+for+the+Forge+Arma+3+framework+covering+architecture+persistence+extension+APIs+gameplay+modules+and+client.png differ diff --git a/docus/dist/_og/s/o_2b32zu.png b/docus/dist/_og/s/o_2b32zu.png new file mode 100644 index 0000000..8deb4da Binary files /dev/null and b/docus/dist/_og/s/o_2b32zu.png differ diff --git a/docus/dist/_og/s/o_31ssr7.png b/docus/dist/_og/s/o_31ssr7.png new file mode 100644 index 0000000..4bea997 Binary files /dev/null and b/docus/dist/_og/s/o_31ssr7.png differ diff --git a/docus/dist/_og/s/o_3chrpw.png b/docus/dist/_og/s/o_3chrpw.png new file mode 100644 index 0000000..44f066b Binary files /dev/null and b/docus/dist/_og/s/o_3chrpw.png differ diff --git a/docus/dist/_og/s/o_5t9xk5.png b/docus/dist/_og/s/o_5t9xk5.png new file mode 100644 index 0000000..ef998ab Binary files /dev/null and b/docus/dist/_og/s/o_5t9xk5.png differ diff --git a/docus/dist/_og/s/o_77cueh.png b/docus/dist/_og/s/o_77cueh.png new file mode 100644 index 0000000..799bb4f Binary files /dev/null and b/docus/dist/_og/s/o_77cueh.png differ diff --git a/docus/dist/_og/s/o_8x0y18.png b/docus/dist/_og/s/o_8x0y18.png new file mode 100644 index 0000000..4a5380e Binary files /dev/null and b/docus/dist/_og/s/o_8x0y18.png differ diff --git a/docus/dist/_og/s/o_b0sm59.png b/docus/dist/_og/s/o_b0sm59.png new file mode 100644 index 0000000..0ce3626 Binary files /dev/null and b/docus/dist/_og/s/o_b0sm59.png differ diff --git a/docus/dist/_og/s/o_b2v64z.png b/docus/dist/_og/s/o_b2v64z.png new file mode 100644 index 0000000..b95ca78 Binary files /dev/null and b/docus/dist/_og/s/o_b2v64z.png differ diff --git a/docus/dist/_og/s/o_bcy052.png b/docus/dist/_og/s/o_bcy052.png new file mode 100644 index 0000000..6bbc1d8 Binary files /dev/null and b/docus/dist/_og/s/o_bcy052.png differ diff --git a/docus/dist/_og/s/o_bddkx.png b/docus/dist/_og/s/o_bddkx.png new file mode 100644 index 0000000..590c558 Binary files /dev/null and b/docus/dist/_og/s/o_bddkx.png differ diff --git a/docus/dist/_og/s/o_c87zr.png b/docus/dist/_og/s/o_c87zr.png new file mode 100644 index 0000000..6e5bb7b Binary files /dev/null and b/docus/dist/_og/s/o_c87zr.png differ diff --git a/docus/dist/_og/s/o_dkjpur.png b/docus/dist/_og/s/o_dkjpur.png new file mode 100644 index 0000000..92af079 Binary files /dev/null and b/docus/dist/_og/s/o_dkjpur.png differ diff --git a/docus/dist/_og/s/o_ixzngg.png b/docus/dist/_og/s/o_ixzngg.png new file mode 100644 index 0000000..29cb59a Binary files /dev/null and b/docus/dist/_og/s/o_ixzngg.png differ diff --git a/docus/dist/_og/s/o_jscb4s.png b/docus/dist/_og/s/o_jscb4s.png new file mode 100644 index 0000000..433205c Binary files /dev/null and b/docus/dist/_og/s/o_jscb4s.png differ diff --git a/docus/dist/_og/s/o_l2pl5s.png b/docus/dist/_og/s/o_l2pl5s.png new file mode 100644 index 0000000..ba94e83 Binary files /dev/null and b/docus/dist/_og/s/o_l2pl5s.png differ diff --git a/docus/dist/_og/s/o_mjfbqk.png b/docus/dist/_og/s/o_mjfbqk.png new file mode 100644 index 0000000..0948645 Binary files /dev/null and b/docus/dist/_og/s/o_mjfbqk.png differ diff --git a/docus/dist/_og/s/o_msqvkp.png b/docus/dist/_og/s/o_msqvkp.png new file mode 100644 index 0000000..d4a38a2 Binary files /dev/null and b/docus/dist/_og/s/o_msqvkp.png differ diff --git a/docus/dist/_og/s/o_qq03xq.png b/docus/dist/_og/s/o_qq03xq.png new file mode 100644 index 0000000..2a99c25 Binary files /dev/null and b/docus/dist/_og/s/o_qq03xq.png differ diff --git a/docus/dist/_og/s/o_rzljaw.png b/docus/dist/_og/s/o_rzljaw.png new file mode 100644 index 0000000..500da10 Binary files /dev/null and b/docus/dist/_og/s/o_rzljaw.png differ diff --git a/docus/dist/_og/s/o_uedqew.png b/docus/dist/_og/s/o_uedqew.png new file mode 100644 index 0000000..8e3fc39 Binary files /dev/null and b/docus/dist/_og/s/o_uedqew.png differ diff --git a/docus/dist/_og/s/o_vueek3.png b/docus/dist/_og/s/o_vueek3.png new file mode 100644 index 0000000..c29cd8f Binary files /dev/null and b/docus/dist/_og/s/o_vueek3.png differ diff --git a/docus/dist/_og/s/o_wgoy24.png b/docus/dist/_og/s/o_wgoy24.png new file mode 100644 index 0000000..5673be9 Binary files /dev/null and b/docus/dist/_og/s/o_wgoy24.png differ diff --git a/docus/dist/_og/s/o_yln960.png b/docus/dist/_og/s/o_yln960.png new file mode 100644 index 0000000..9642b7a Binary files /dev/null and b/docus/dist/_og/s/o_yln960.png differ diff --git a/docus/dist/_payload.json b/docus/dist/_payload.json new file mode 100644 index 0000000..988f672 --- /dev/null +++ b/docus/dist/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":342},["ShallowReactive",2],{"navigation_docs":3,"landing":145},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":147,"body":148,"description":147,"extension":334,"meta":335,"navigation":336,"path":337,"seo":338,"stem":340,"__hash__":341},"landing\u002Findex.md","",{"type":149,"value":150,"toc":331},"minimark",[151,188,280],[152,153,154,158,172],"u-page-hero",{},[155,156,157],"template",{"v-slot:title":147},"Forge Framework Documentation",[155,159,160,169],{"v-slot:description":147},[161,162,163,164,168],"p",{},"Forge is a persistent Arma 3 framework that combines SQF addons, a Rust\n",[165,166,167],"code",{},"arma-rs"," extension, SurrealDB persistence, shared domain crates, and\nbrowser-backed player interfaces.",[161,170,171],{},"Use these docs to understand the runtime architecture, extension API surface,\nserver gameplay modules, and client addon integration patterns.",[155,173,174,181],{"v-slot:links":147},[175,176,180],"u-button",{"color":177,"size":178,"to":6,"trailing-icon":179},"primary","xl","i-lucide-arrow-right","Start here",[175,182,187],{"color":183,"size":178,"to":184,"icon":185,"variant":186},"neutral","https:\u002F\u002Fgithub.com\u002FInnovativeDevSolutions\u002Fforge","simple-icons-github","outline","View source",[189,190,191,194],"u-page-section",{},[155,192,193],{"v-slot:title":147},"What Forge Covers",[155,195,196,212,225,238,250,267],{"v-slot:features":147},[197,198,200,209],"u-page-feature",{"icon":199},"i-lucide-boxes",[155,201,202,203],{"v-slot:title":147},"Domain ",[204,205,208],"span",{"className":206},[207],"text-primary","Modules",[155,210,211],{"v-slot:description":147},"Actor, bank, CAD, garage, locker, organization, phone, store, task, and\nowned-storage workflows share a consistent service and extension model.",[197,213,215,222],{"icon":214},"i-lucide-server",[155,216,217,218],{"v-slot:title":147},"Rust ",[204,219,221],{"className":220},[207],"Extension",[155,223,224],{"v-slot:description":147},"The server extension keeps command parsing thin, routes domain requests into\nservices, and persists durable state through SurrealDB.",[197,226,228,235],{"icon":227},"i-lucide-database-zap",[155,229,230,231],{"v-slot:title":147},"Durable ",[204,232,234],{"className":233},[207],"Persistence",[155,236,237],{"v-slot:description":147},"Repository traits stay storage-agnostic while concrete adapters in the\nextension handle schema and database mapping.",[197,239,240,247],{"icon":144},[155,241,242,243],{"v-slot:title":147},"Browser ",[204,244,246],{"className":245},[207],"UIs",[155,248,249],{"v-slot:description":147},"Client addons host web-based interfaces inside Arma displays and synchronize\nstate through namespaced browser bridge events.",[197,251,253,260],{"icon":252},"i-lucide-arrow-left-right",[155,254,255,256],{"v-slot:title":147},"Transport ",[204,257,259],{"className":258},[207],"Layer",[155,261,262,263,266],{"v-slot:description":147},"Large payloads move through chunked request and response transport while\nsmaller commands still use direct ",[165,264,265],{},"callExtension"," paths.",[197,268,270,277],{"icon":269},"i-lucide-wrench",[155,271,272,273],{"v-slot:title":147},"Development ",[204,274,276],{"className":275},[207],"Workflow",[155,278,279],{"v-slot:description":147},"The docs cover module boundaries, local validation checks, and where new\ndomain logic belongs across Rust, SQF, and web UI layers.",[189,281,282,285],{},[155,283,284],{"v-slot:title":147},"Documentation Areas",[155,286,287,297,309,319],{"v-slot:features":147},[197,288,289,294],{"icon":26,"to":6},[155,290,291],{"v-slot:title":147},[204,292,5],{"className":293},[207],[155,295,296],{"v-slot:description":147},"Framework overview, architecture, module reference, and development rules.",[197,298,300,306],{"icon":299,"to":29},"i-lucide-server-cog",[155,301,302,303],{"v-slot:title":147},"Server ",[204,304,221],{"className":305},[207],[155,307,308],{"v-slot:description":147},"Extension architecture, command surface, and SQF usage examples.",[197,310,311,316],{"icon":92,"to":43},[155,312,302,313],{"v-slot:title":147},[204,314,208],{"className":315},[207],[155,317,318],{"v-slot:description":147},"Gameplay-domain usage guides for persistence, hot state, and command flows.",[197,320,321,328],{"icon":144,"to":95},[155,322,323,324],{"v-slot:title":147},"Client ",[204,325,327],{"className":326},[207],"Addons",[155,329,330],{"v-slot:description":147},"Browser bridge, client UX entry points, and addon-specific event contracts.",{"title":147,"searchDepth":332,"depth":332,"links":333},2,[],"md",{},true,"\u002F",{"title":157,"description":339},"Documentation for the Forge Arma 3 framework, covering architecture, persistence, extension APIs, gameplay modules, and client UIs.","index","z56nrU81noeKPhRmw6SAhUXnhI6zxbOa-u-8PzIaH0c",1776806625126] \ No newline at end of file diff --git a/docus/dist/client-addons.html b/docus/dist/client-addons.html new file mode 100644 index 0000000..98a9705 --- /dev/null +++ b/docus/dist/client-addons.html @@ -0,0 +1,128 @@ +Client Usage Guide - forge-docus
Client Addons

Client Usage Guide

Forge Client contains the Arma client-side addons that open player interfaces, +handle browser events, cache client-visible state, and forward authoritative +requests to the server addons.

Client Usage Guide

Forge Client contains the Arma client-side addons that open player interfaces, +handle browser events, cache client-visible state, and forward authoritative +requests to the server addons.

Use this guide as the entry point for client-side integration. Domain data, +validation, persistence, rewards, ownership, and checkout behavior remain +server-side responsibilities.

Client Responsibilities

  • Open Arma displays and CT_WEBBROWSER controls.
  • Load browser UI assets from each addon's ui/_site folder.
  • Receive browser alerts through JSDialog handlers.
  • Translate browser events into local actions or CBA server events.
  • Cache display state in client repositories.
  • Push server responses back into browser UIs with ExecJS.
  • Provide local-only utility state where the feature is intentionally local.

Authoritative Boundaries

Client repositories are view state. They are useful for rendering, local UI +decisions, and short-lived session behavior, but they should not be treated as +durable state.

Authoritative state lives in:

  • server SQF addons for mission and player workflow ownership
  • the forge_server extension for durable and hot-state domain logic
  • SurrealDB where the extension persists durable domain records

Common Runtime Flow

Most browser-backed client addons follow this shape:

  1. The addon creates a display, finds a browser control, and registers a +JSDialog event handler.
  2. The browser loads an HTML entrypoint from ui/_site.
  3. The browser sends JSON alerts with an event name and data payload.
  4. fnc_handleUIEvents.sqf parses the alert and routes the event.
  5. A bridge object or repository sends a CBA server event when server data is +needed.
  6. Server responses are caught in XEH_postInitClient.sqf.
  7. The bridge sends browser update events back through ExecJS.

Browser alert payload:

{
+  "event": "module::action",
+  "data": {}
+}
+

Open UI Entry Points

UIEntry point
Actor menucall forge_client_actor_fnc_openUI;
Bankcall forge_client_bank_fnc_openUI;
ATM[true] call forge_client_bank_fnc_openUI;
CADcall forge_client_cad_fnc_openUI;
Garagecall forge_client_garage_fnc_openUI;
Virtual garagecall forge_client_garage_fnc_openVG;
Organization portalcall forge_client_org_fnc_openUI;
Phonecall forge_client_phone_fnc_openUI;
Storecall forge_client_store_fnc_openUI;

Notifications are normally opened during client initialization and then updated +through the notification event/service.

Addon Guides

Extension Calls

Client addons should usually call server SQF events, not the forge_server +extension directly. The server addon owns validation context and converts the +request into extension commands.

Example:

[SRPC(bank,requestDeposit), [getPlayerUID player, 100]] call CFUNC(serverEvent);
+

Direct extension calls from client code bypass server authorization boundaries +and should be avoided.

Browser Bridge Notes

forge_client_common_fnc_initWebUIBridge provides reusable bridge and screen +objects for newer browser UIs. It queues outbound events until a browser screen +is ready, then delivers payloads through:

_control ctrlWebBrowserAction ["ExecJS", format ["ForgeBridge.receive(%1)", _json]];
+

Feature addons still own their event names, request payloads, and response +mapping.

Development Checklist

  • Keep feature-specific behavior in the owning addon.
  • Send authoritative changes to the server addon.
  • Use namespaced browser events such as bank::deposit::request.
  • Treat profileNamespace as local player preference or utility state only.
  • Make browser-ready events request the current server state before rendering +stale data.
  • Queue or ignore bridge responses when the display is closed.
  • Keep mission object setup on the mission/server side and client display logic +on the client side.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/_payload.json b/docus/dist/client-addons/_payload.json new file mode 100644 index 0000000..2b30bad --- /dev/null +++ b/docus/dist/client-addons/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":629},["ShallowReactive",2],{"navigation_docs":3,"-client-addons":145,"-client-addons-surround":624},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":99,"body":147,"description":157,"extension":618,"links":619,"meta":620,"navigation":621,"path":95,"seo":622,"stem":96,"__hash__":623},"docs\u002F4.client-addons\u002F0.index.md",{"type":148,"value":149,"toc":608},"minimark",[150,154,158,161,166,208,212,215,218,233,237,240,285,288,353,357,467,470,474,521,525,531,534,545,548,552,558,567,570,574,604],[151,152,99],"h1",{"id":153},"client-usage-guide",[155,156,157],"p",{},"Forge Client contains the Arma client-side addons that open player interfaces,\nhandle browser events, cache client-visible state, and forward authoritative\nrequests to the server addons.",[155,159,160],{},"Use this guide as the entry point for client-side integration. Domain data,\nvalidation, persistence, rewards, ownership, and checkout behavior remain\nserver-side responsibilities.",[162,163,165],"h2",{"id":164},"client-responsibilities","Client Responsibilities",[167,168,169,178,185,192,195,198,205],"ul",{},[170,171,172,173,177],"li",{},"Open Arma displays and ",[174,175,176],"code",{},"CT_WEBBROWSER"," controls.",[170,179,180,181,184],{},"Load browser UI assets from each addon's ",[174,182,183],{},"ui\u002F_site"," folder.",[170,186,187,188,191],{},"Receive browser alerts through ",[174,189,190],{},"JSDialog"," handlers.",[170,193,194],{},"Translate browser events into local actions or CBA server events.",[170,196,197],{},"Cache display state in client repositories.",[170,199,200,201,204],{},"Push server responses back into browser UIs with ",[174,202,203],{},"ExecJS",".",[170,206,207],{},"Provide local-only utility state where the feature is intentionally local.",[162,209,211],{"id":210},"authoritative-boundaries","Authoritative Boundaries",[155,213,214],{},"Client repositories are view state. They are useful for rendering, local UI\ndecisions, and short-lived session behavior, but they should not be treated as\ndurable state.",[155,216,217],{},"Authoritative state lives in:",[167,219,220,223,230],{},[170,221,222],{},"server SQF addons for mission and player workflow ownership",[170,224,225,226,229],{},"the ",[174,227,228],{},"forge_server"," extension for durable and hot-state domain logic",[170,231,232],{},"SurrealDB where the extension persists durable domain records",[162,234,236],{"id":235},"common-runtime-flow","Common Runtime Flow",[155,238,239],{},"Most browser-backed client addons follow this shape:",[241,242,243,249,254,265,271,274,280],"ol",{},[170,244,245,246,248],{},"The addon creates a display, finds a browser control, and registers a\n",[174,247,190],{}," event handler.",[170,250,251,252,204],{},"The browser loads an HTML entrypoint from ",[174,253,183],{},[170,255,256,257,260,261,264],{},"The browser sends JSON alerts with an ",[174,258,259],{},"event"," name and ",[174,262,263],{},"data"," payload.",[170,266,267,270],{},[174,268,269],{},"fnc_handleUIEvents.sqf"," parses the alert and routes the event.",[170,272,273],{},"A bridge object or repository sends a CBA server event when server data is\nneeded.",[170,275,276,277,204],{},"Server responses are caught in ",[174,278,279],{},"XEH_postInitClient.sqf",[170,281,282,283,204],{},"The bridge sends browser update events back through ",[174,284,203],{},[155,286,287],{},"Browser alert payload:",[289,290,295],"pre",{"className":291,"code":292,"language":293,"meta":294,"style":294},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"event\": \"module::action\",\n \"data\": {}\n}\n","json","",[174,296,297,306,333,347],{"__ignoreMap":294},[298,299,302],"span",{"class":300,"line":301},"line",1,[298,303,305],{"class":304},"sMK4o","{\n",[298,307,309,312,315,318,321,324,328,330],{"class":300,"line":308},2,[298,310,311],{"class":304}," \"",[298,313,259],{"class":314},"spNyl",[298,316,317],{"class":304},"\"",[298,319,320],{"class":304},":",[298,322,323],{"class":304}," \"",[298,325,327],{"class":326},"sfazB","module::action",[298,329,317],{"class":304},[298,331,332],{"class":304},",\n",[298,334,336,338,340,342,344],{"class":300,"line":335},3,[298,337,311],{"class":304},[298,339,263],{"class":314},[298,341,317],{"class":304},[298,343,320],{"class":304},[298,345,346],{"class":304}," {}\n",[298,348,350],{"class":300,"line":349},4,[298,351,352],{"class":304},"}\n",[162,354,356],{"id":355},"open-ui-entry-points","Open UI Entry Points",[358,359,360,373],"table",{},[361,362,363],"thead",{},[364,365,366,370],"tr",{},[367,368,369],"th",{},"UI",[367,371,372],{},"Entry point",[374,375,376,387,397,407,417,427,437,447,457],"tbody",{},[364,377,378,382],{},[379,380,381],"td",{},"Actor menu",[379,383,384],{},[174,385,386],{},"call forge_client_actor_fnc_openUI;",[364,388,389,392],{},[379,390,391],{},"Bank",[379,393,394],{},[174,395,396],{},"call forge_client_bank_fnc_openUI;",[364,398,399,402],{},[379,400,401],{},"ATM",[379,403,404],{},[174,405,406],{},"[true] call forge_client_bank_fnc_openUI;",[364,408,409,412],{},[379,410,411],{},"CAD",[379,413,414],{},[174,415,416],{},"call forge_client_cad_fnc_openUI;",[364,418,419,422],{},[379,420,421],{},"Garage",[379,423,424],{},[174,425,426],{},"call forge_client_garage_fnc_openUI;",[364,428,429,432],{},[379,430,431],{},"Virtual garage",[379,433,434],{},[174,435,436],{},"call forge_client_garage_fnc_openVG;",[364,438,439,442],{},[379,440,441],{},"Organization portal",[379,443,444],{},[174,445,446],{},"call forge_client_org_fnc_openUI;",[364,448,449,452],{},[379,450,451],{},"Phone",[379,453,454],{},[174,455,456],{},"call forge_client_phone_fnc_openUI;",[364,458,459,462],{},[379,460,461],{},"Store",[379,463,464],{},[174,465,466],{},"call forge_client_store_fnc_openUI;",[155,468,469],{},"Notifications are normally opened during client initialization and then updated\nthrough the notification event\u002Fservice.",[162,471,473],{"id":472},"addon-guides","Addon Guides",[167,475,476,481,485,489,493,497,501,505,509,513,517],{},[170,477,478],{},[479,480,101],"a",{"href":102},[170,482,483],{},[479,484,113],{"href":114},[170,486,487],{},[479,488,117],{"href":118},[170,490,491],{},[479,492,121],{"href":122},[170,494,495],{},[479,496,125],{"href":126},[170,498,499],{},[479,500,129],{"href":130},[170,502,503],{},[479,504,133],{"href":134},[170,506,507],{},[479,508,137],{"href":138},[170,510,511],{},[479,512,141],{"href":142},[170,514,515],{},[479,516,105],{"href":106},[170,518,519],{},[479,520,109],{"href":110},[162,522,524],{"id":523},"extension-calls","Extension Calls",[155,526,527,528,530],{},"Client addons should usually call server SQF events, not the ",[174,529,228],{},"\nextension directly. The server addon owns validation context and converts the\nrequest into extension commands.",[155,532,533],{},"Example:",[289,535,539],{"className":536,"code":537,"language":538,"meta":294,"style":294},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[SRPC(bank,requestDeposit), [getPlayerUID player, 100]] call CFUNC(serverEvent);\n","sqf",[174,540,541],{"__ignoreMap":294},[298,542,543],{"class":300,"line":301},[298,544,537],{},[155,546,547],{},"Direct extension calls from client code bypass server authorization boundaries\nand should be avoided.",[162,549,551],{"id":550},"browser-bridge-notes","Browser Bridge Notes",[155,553,554,557],{},[174,555,556],{},"forge_client_common_fnc_initWebUIBridge"," provides reusable bridge and screen\nobjects for newer browser UIs. It queues outbound events until a browser screen\nis ready, then delivers payloads through:",[289,559,561],{"className":536,"code":560,"language":538,"meta":294,"style":294},"_control ctrlWebBrowserAction [\"ExecJS\", format [\"ForgeBridge.receive(%1)\", _json]];\n",[174,562,563],{"__ignoreMap":294},[298,564,565],{"class":300,"line":301},[298,566,560],{},[155,568,569],{},"Feature addons still own their event names, request payloads, and response\nmapping.",[162,571,573],{"id":572},"development-checklist","Development Checklist",[167,575,576,579,582,588,595,598,601],{},[170,577,578],{},"Keep feature-specific behavior in the owning addon.",[170,580,581],{},"Send authoritative changes to the server addon.",[170,583,584,585,204],{},"Use namespaced browser events such as ",[174,586,587],{},"bank::deposit::request",[170,589,590,591,594],{},"Treat ",[174,592,593],{},"profileNamespace"," as local player preference or utility state only.",[170,596,597],{},"Make browser-ready events request the current server state before rendering\nstale data.",[170,599,600],{},"Queue or ignore bridge responses when the display is closed.",[170,602,603],{},"Keep mission object setup on the mission\u002Fserver side and client display logic\non the client side.",[605,606,607],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":294,"searchDepth":308,"depth":308,"links":609},[610,611,612,613,614,615,616,617],{"id":164,"depth":308,"text":165},{"id":210,"depth":308,"text":211},{"id":235,"depth":308,"text":236},{"id":355,"depth":308,"text":356},{"id":472,"depth":308,"text":473},{"id":523,"depth":308,"text":524},{"id":550,"depth":308,"text":551},{"id":572,"depth":308,"text":573},"md",null,{},true,{"title":99,"description":157},"JTkXjG_St8xEkLNECfj9fYzon1OZmDe7brlAXBnT7d8",[625,627],{"title":89,"path":90,"stem":91,"description":626,"children":-1},"The phone module stores contacts, messages, and emails for each UID. It is a\nserver-extension state module backed by SurrealDB.",{"title":101,"path":102,"stem":103,"description":628,"children":-1},"The client main addon provides the shared mod identity, version metadata,\nCBA settings, and macro foundation used by the Forge client addons.",1776806627034] \ No newline at end of file diff --git a/docus/dist/client-addons/actor.html b/docus/dist/client-addons/actor.html new file mode 100644 index 0000000..913df9b --- /dev/null +++ b/docus/dist/client-addons/actor.html @@ -0,0 +1,117 @@ +Client Actor Usage Guide - forge-docus
Client Addons

Client Actor Usage Guide

The client actor addon owns the player interaction menu and client-side actor +repository. It is the main launcher for nearby player actions and other Forge +client UIs.

Client Actor Usage Guide

The client actor addon owns the player interaction menu and client-side actor +repository. It is the main launcher for nearby player actions and other Forge +client UIs.

Open the Actor Menu

call forge_client_actor_fnc_openUI;
+

The actor menu opens RscActorMenu, loads ui/_site/index.html, and routes +browser alerts through forge_client_actor_fnc_handleUIEvents.

Repository

forge_client_actor_fnc_initRepository creates GVAR(ActorRepository).

The repository:

  • requests actor initialization from the server
  • saves actor state through the server actor addon
  • caches client-visible actor fields
  • applies position, direction, stance, rank, and loadout on JIP sync when the +relevant settings allow it
  • provides nearby interaction actions to the browser UI

Initialize actor state through the repository:

GVAR(ActorRepository) call ["init", []];
+

Save actor state through the server:

GVAR(ActorRepository) call ["save", [true]];
+

Nearby Actions

The menu asks for nearby actions with:

actor::get::actions
+

The repository scans objects within 5 meters and returns actions based on +mission object variables:

VariableAction
storeTypestore
isAtmATM
isBankbank
isGaragegarage
garageTypegarage subtype
isLockervirtual arsenal action when VA is enabled
deviceTypedevice action placeholder
nearby player unitplayer interaction placeholder

The response is pushed into the browser with updateAvailableActions(...).

Browser Events

EventClient behavior
actor::get::actionsRefresh nearby actions.
actor::close::menuClose actor menu.
actor::open::atmOpen bank UI in ATM mode.
actor::open::bankOpen bank UI in bank mode.
actor::open::cadOpen CAD UI.
actor::open::garageOpen garage UI.
actor::open::vgarageOpen virtual garage.
actor::open::orgOpen organization UI.
actor::open::vlockerOpen ACE arsenal on FORGE_Locker_Box.
actor::open::phoneOpen phone UI.
actor::open::storeOpen store UI.

Device and player interaction events currently display placeholder feedback.

Authoritative State

Actor persistence is server-owned. The client repository requests and displays +actor data, but actor creation, durable updates, and hot-state behavior are +handled by the server actor addon and extension.

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/actor/_payload.json b/docus/dist/client-addons/actor/_payload.json new file mode 100644 index 0000000..b7f0303 --- /dev/null +++ b/docus/dist/client-addons/actor/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":580},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-actor":145,"-client-addons-actor-surround":575},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":117,"body":147,"description":157,"extension":569,"links":570,"meta":571,"navigation":572,"path":118,"seo":573,"stem":119,"__hash__":574},"docs\u002F4.client-addons\u002F3.actor.md",{"type":148,"value":149,"toc":560},"minimark",[150,154,158,163,180,195,199,208,211,230,233,242,245,254,258,261,269,272,370,376,380,507,510,514,517,521,556],[151,152,117],"h1",{"id":153},"client-actor-usage-guide",[155,156,157],"p",{},"The client actor addon owns the player interaction menu and client-side actor\nrepository. It is the main launcher for nearby player actions and other Forge\nclient UIs.",[159,160,162],"h2",{"id":161},"open-the-actor-menu","Open the Actor Menu",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_actor_fnc_openUI;\n","sqf","",[171,172,173],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,167],{},[155,181,182,183,186,187,190,191,194],{},"The actor menu opens ",[171,184,185],{},"RscActorMenu",", loads ",[171,188,189],{},"ui\u002F_site\u002Findex.html",", and routes\nbrowser alerts through ",[171,192,193],{},"forge_client_actor_fnc_handleUIEvents",".",[159,196,198],{"id":197},"repository","Repository",[155,200,201,204,205,194],{},[171,202,203],{},"forge_client_actor_fnc_initRepository"," creates ",[171,206,207],{},"GVAR(ActorRepository)",[155,209,210],{},"The repository:",[212,213,214,218,221,224,227],"ul",{},[215,216,217],"li",{},"requests actor initialization from the server",[215,219,220],{},"saves actor state through the server actor addon",[215,222,223],{},"caches client-visible actor fields",[215,225,226],{},"applies position, direction, stance, rank, and loadout on JIP sync when the\nrelevant settings allow it",[215,228,229],{},"provides nearby interaction actions to the browser UI",[155,231,232],{},"Initialize actor state through the repository:",[164,234,236],{"className":166,"code":235,"language":168,"meta":169,"style":169},"GVAR(ActorRepository) call [\"init\", []];\n",[171,237,238],{"__ignoreMap":169},[174,239,240],{"class":176,"line":177},[174,241,235],{},[155,243,244],{},"Save actor state through the server:",[164,246,248],{"className":166,"code":247,"language":168,"meta":169,"style":169},"GVAR(ActorRepository) call [\"save\", [true]];\n",[171,249,250],{"__ignoreMap":169},[174,251,252],{"class":176,"line":177},[174,253,247],{},[159,255,257],{"id":256},"nearby-actions","Nearby Actions",[155,259,260],{},"The menu asks for nearby actions with:",[164,262,267],{"className":263,"code":265,"language":266,"meta":169},[264],"language-text","actor::get::actions\n","text",[171,268,265],{"__ignoreMap":169},[155,270,271],{},"The repository scans objects within 5 meters and returns actions based on\nmission object variables:",[273,274,275,288],"table",{},[276,277,278],"thead",{},[279,280,281,285],"tr",{},[282,283,284],"th",{},"Variable",[282,286,287],{},"Action",[289,290,291,302,312,322,332,342,352,362],"tbody",{},[279,292,293,299],{},[294,295,296],"td",{},[171,297,298],{},"storeType",[294,300,301],{},"store",[279,303,304,309],{},[294,305,306],{},[171,307,308],{},"isAtm",[294,310,311],{},"ATM",[279,313,314,319],{},[294,315,316],{},[171,317,318],{},"isBank",[294,320,321],{},"bank",[279,323,324,329],{},[294,325,326],{},[171,327,328],{},"isGarage",[294,330,331],{},"garage",[279,333,334,339],{},[294,335,336],{},[171,337,338],{},"garageType",[294,340,341],{},"garage subtype",[279,343,344,349],{},[294,345,346],{},[171,347,348],{},"isLocker",[294,350,351],{},"virtual arsenal action when VA is enabled",[279,353,354,359],{},[294,355,356],{},[171,357,358],{},"deviceType",[294,360,361],{},"device action placeholder",[279,363,364,367],{},[294,365,366],{},"nearby player unit",[294,368,369],{},"player interaction placeholder",[155,371,372,373,194],{},"The response is pushed into the browser with ",[171,374,375],{},"updateAvailableActions(...)",[159,377,379],{"id":378},"browser-events","Browser Events",[273,381,382,392],{},[276,383,384],{},[279,385,386,389],{},[282,387,388],{},"Event",[282,390,391],{},"Client behavior",[289,393,394,404,414,424,434,444,454,464,474,487,497],{},[279,395,396,401],{},[294,397,398],{},[171,399,400],{},"actor::get::actions",[294,402,403],{},"Refresh nearby actions.",[279,405,406,411],{},[294,407,408],{},[171,409,410],{},"actor::close::menu",[294,412,413],{},"Close actor menu.",[279,415,416,421],{},[294,417,418],{},[171,419,420],{},"actor::open::atm",[294,422,423],{},"Open bank UI in ATM mode.",[279,425,426,431],{},[294,427,428],{},[171,429,430],{},"actor::open::bank",[294,432,433],{},"Open bank UI in bank mode.",[279,435,436,441],{},[294,437,438],{},[171,439,440],{},"actor::open::cad",[294,442,443],{},"Open CAD UI.",[279,445,446,451],{},[294,447,448],{},[171,449,450],{},"actor::open::garage",[294,452,453],{},"Open garage UI.",[279,455,456,461],{},[294,457,458],{},[171,459,460],{},"actor::open::vgarage",[294,462,463],{},"Open virtual garage.",[279,465,466,471],{},[294,467,468],{},[171,469,470],{},"actor::open::org",[294,472,473],{},"Open organization UI.",[279,475,476,481],{},[294,477,478],{},[171,479,480],{},"actor::open::vlocker",[294,482,483,484,194],{},"Open ACE arsenal on ",[171,485,486],{},"FORGE_Locker_Box",[279,488,489,494],{},[294,490,491],{},[171,492,493],{},"actor::open::phone",[294,495,496],{},"Open phone UI.",[279,498,499,504],{},[294,500,501],{},[171,502,503],{},"actor::open::store",[294,505,506],{},"Open store UI.",[155,508,509],{},"Device and player interaction events currently display placeholder feedback.",[159,511,513],{"id":512},"authoritative-state","Authoritative State",[155,515,516],{},"Actor persistence is server-owned. The client repository requests and displays\nactor data, but actor creation, durable updates, and hot-state behavior are\nhandled by the server actor addon and extension.",[159,518,520],{"id":519},"related-guides","Related Guides",[212,522,523,528,532,536,540,544,548,552],{},[215,524,525],{},[526,527,49],"a",{"href":50},[215,529,530],{},[526,531,121],{"href":122},[215,533,534],{},[526,535,125],{"href":126},[215,537,538],{},[526,539,129],{"href":130},[215,541,542],{},[526,543,133],{"href":134},[215,545,546],{},[526,547,141],{"href":142},[215,549,550],{},[526,551,105],{"href":106},[215,553,554],{},[526,555,109],{"href":110},[557,558,559],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":169,"searchDepth":561,"depth":561,"links":562},2,[563,564,565,566,567,568],{"id":161,"depth":561,"text":162},{"id":197,"depth":561,"text":198},{"id":256,"depth":561,"text":257},{"id":378,"depth":561,"text":379},{"id":512,"depth":561,"text":513},{"id":519,"depth":561,"text":520},"md",null,{},true,{"title":117,"description":157},"CeusWIDeAc6KDGfoUngW1_lAMAWRX8g6N17xG10V1Tc",[576,578],{"title":113,"path":114,"stem":115,"description":577,"children":-1},"The client common addon contains shared browser UI bridge declarations and\ncommon client-side browser integration patterns.",{"title":121,"path":122,"stem":123,"description":579,"children":-1},"The client bank addon opens the bank and ATM browser UI, forwards banking\nrequests to the server bank addon, and pushes account updates back into the\nbrowser.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/bank.html b/docus/dist/client-addons/bank.html new file mode 100644 index 0000000..8e6268b --- /dev/null +++ b/docus/dist/client-addons/bank.html @@ -0,0 +1,117 @@ +Client Bank Usage Guide - forge-docus
Client Addons

Client Bank Usage Guide

The client bank addon opens the bank and ATM browser UI, forwards banking +requests to the server bank addon, and pushes account updates back into the +browser.

Client Bank Usage Guide

The client bank addon opens the bank and ATM browser UI, forwards banking +requests to the server bank addon, and pushes account updates back into the +browser.

Open Bank UI

Open full bank mode:

call forge_client_bank_fnc_openUI;
+

Open ATM mode:

[true] call forge_client_bank_fnc_openUI;
+

The open function creates RscBank, sets the bridge mode to bank or atm, +loads ui/_site/index.html, and routes browser events through +forge_client_bank_fnc_handleUIEvents.

Bridge and Repository

forge_client_bank_fnc_initRepository tracks account load and cached account +state.

forge_client_bank_fnc_initUIBridge owns:

  • active browser control tracking
  • bank/ATM mode
  • browser ready handling
  • account hydrate and sync responses
  • deposit, withdrawal, transfer, earnings deposit, credit repayment, and PIN +requests
  • browser notice delivery

Browser Events

EventClient behavior
bank::readyMark browser ready and request hydrate from the server.
bank::refreshRequest fresh bank hydrate data.
bank::deposit::requestForward deposit amount to the server.
bank::withdraw::requestForward withdrawal amount to the server.
bank::transfer::requestForward target, source field, and amount.
bank::depositEarnings::requestRequest earnings deposit.
bank::repayCreditLine::requestRequest credit-line repayment.
bank::pin::requestForward PIN validation request.
bank::closeDispose bridge screen state and close the display.

Browser Response Events

The bridge sends:

EventPurpose
bank::hydrateFull session/account payload.
bank::syncAccount patch or sync data.
bank::noticeUI-visible notice payload.

Request Flow

Example deposit flow:

  1. Browser sends bank::deposit::request with an amount.
  2. Client bridge calls the server bank request event.
  3. Server bank addon validates the request and calls bank hot-state logic.
  4. Server response is caught by the client post-init event handlers.
  5. Client bridge sends bank::sync or bank::notice back to the browser.

Authoritative State

Balances, PIN authorization, transfers, checkout charges, credit lines, and +persistence are server-owned. The client should only display account data and +request mutations through server events.

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/bank/_payload.json b/docus/dist/client-addons/bank/_payload.json new file mode 100644 index 0000000..6abbb63 --- /dev/null +++ b/docus/dist/client-addons/bank/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":507},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-bank":145,"-client-addons-bank-surround":502},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":121,"body":147,"description":157,"extension":496,"links":497,"meta":498,"navigation":499,"path":122,"seo":500,"stem":123,"__hash__":501},"docs\u002F4.client-addons\u002F4.bank.md",{"type":148,"value":149,"toc":486},"minimark",[150,154,158,163,166,183,186,195,218,222,228,234,256,260,370,374,377,420,424,427,456,460,463,467,482],[151,152,121],"h1",{"id":153},"client-bank-usage-guide",[155,156,157],"p",{},"The client bank addon opens the bank and ATM browser UI, forwards banking\nrequests to the server bank addon, and pushes account updates back into the\nbrowser.",[159,160,162],"h2",{"id":161},"open-bank-ui","Open Bank UI",[155,164,165],{},"Open full bank mode:",[167,168,173],"pre",{"className":169,"code":170,"language":171,"meta":172,"style":172},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_bank_fnc_openUI;\n","sqf","",[174,175,176],"code",{"__ignoreMap":172},[177,178,181],"span",{"class":179,"line":180},"line",1,[177,182,170],{},[155,184,185],{},"Open ATM mode:",[167,187,189],{"className":169,"code":188,"language":171,"meta":172,"style":172},"[true] call forge_client_bank_fnc_openUI;\n",[174,190,191],{"__ignoreMap":172},[177,192,193],{"class":179,"line":180},[177,194,188],{},[155,196,197,198,201,202,205,206,209,210,213,214,217],{},"The open function creates ",[174,199,200],{},"RscBank",", sets the bridge mode to ",[174,203,204],{},"bank"," or ",[174,207,208],{},"atm",",\nloads ",[174,211,212],{},"ui\u002F_site\u002Findex.html",", and routes browser events through\n",[174,215,216],{},"forge_client_bank_fnc_handleUIEvents",".",[159,219,221],{"id":220},"bridge-and-repository","Bridge and Repository",[155,223,224,227],{},[174,225,226],{},"forge_client_bank_fnc_initRepository"," tracks account load and cached account\nstate.",[155,229,230,233],{},[174,231,232],{},"forge_client_bank_fnc_initUIBridge"," owns:",[235,236,237,241,244,247,250,253],"ul",{},[238,239,240],"li",{},"active browser control tracking",[238,242,243],{},"bank\u002FATM mode",[238,245,246],{},"browser ready handling",[238,248,249],{},"account hydrate and sync responses",[238,251,252],{},"deposit, withdrawal, transfer, earnings deposit, credit repayment, and PIN\nrequests",[238,254,255],{},"browser notice delivery",[159,257,259],{"id":258},"browser-events","Browser Events",[261,262,263,276],"table",{},[264,265,266],"thead",{},[267,268,269,273],"tr",{},[270,271,272],"th",{},"Event",[270,274,275],{},"Client behavior",[277,278,279,290,300,310,320,330,340,350,360],"tbody",{},[267,280,281,287],{},[282,283,284],"td",{},[174,285,286],{},"bank::ready",[282,288,289],{},"Mark browser ready and request hydrate from the server.",[267,291,292,297],{},[282,293,294],{},[174,295,296],{},"bank::refresh",[282,298,299],{},"Request fresh bank hydrate data.",[267,301,302,307],{},[282,303,304],{},[174,305,306],{},"bank::deposit::request",[282,308,309],{},"Forward deposit amount to the server.",[267,311,312,317],{},[282,313,314],{},[174,315,316],{},"bank::withdraw::request",[282,318,319],{},"Forward withdrawal amount to the server.",[267,321,322,327],{},[282,323,324],{},[174,325,326],{},"bank::transfer::request",[282,328,329],{},"Forward target, source field, and amount.",[267,331,332,337],{},[282,333,334],{},[174,335,336],{},"bank::depositEarnings::request",[282,338,339],{},"Request earnings deposit.",[267,341,342,347],{},[282,343,344],{},[174,345,346],{},"bank::repayCreditLine::request",[282,348,349],{},"Request credit-line repayment.",[267,351,352,357],{},[282,353,354],{},[174,355,356],{},"bank::pin::request",[282,358,359],{},"Forward PIN validation request.",[267,361,362,367],{},[282,363,364],{},[174,365,366],{},"bank::close",[282,368,369],{},"Dispose bridge screen state and close the display.",[159,371,373],{"id":372},"browser-response-events","Browser Response Events",[155,375,376],{},"The bridge sends:",[261,378,379,388],{},[264,380,381],{},[267,382,383,385],{},[270,384,272],{},[270,386,387],{},"Purpose",[277,389,390,400,410],{},[267,391,392,397],{},[282,393,394],{},[174,395,396],{},"bank::hydrate",[282,398,399],{},"Full session\u002Faccount payload.",[267,401,402,407],{},[282,403,404],{},[174,405,406],{},"bank::sync",[282,408,409],{},"Account patch or sync data.",[267,411,412,417],{},[282,413,414],{},[174,415,416],{},"bank::notice",[282,418,419],{},"UI-visible notice payload.",[159,421,423],{"id":422},"request-flow","Request Flow",[155,425,426],{},"Example deposit flow:",[428,429,430,439,442,445,448],"ol",{},[238,431,432,433,435,436,217],{},"Browser sends ",[174,434,306],{}," with an ",[174,437,438],{},"amount",[238,440,441],{},"Client bridge calls the server bank request event.",[238,443,444],{},"Server bank addon validates the request and calls bank hot-state logic.",[238,446,447],{},"Server response is caught by the client post-init event handlers.",[238,449,450,451,205,453,455],{},"Client bridge sends ",[174,452,406],{},[174,454,416],{}," back to the browser.",[159,457,459],{"id":458},"authoritative-state","Authoritative State",[155,461,462],{},"Balances, PIN authorization, transfers, checkout charges, credit lines, and\npersistence are server-owned. The client should only display account data and\nrequest mutations through server events.",[159,464,466],{"id":465},"related-guides","Related Guides",[235,468,469,474,478],{},[238,470,471],{},[472,473,61],"a",{"href":62},[238,475,476],{},[472,477,113],{"href":114},[238,479,480],{},[472,481,109],{"href":110},[483,484,485],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":172,"searchDepth":487,"depth":487,"links":488},2,[489,490,491,492,493,494,495],{"id":161,"depth":487,"text":162},{"id":220,"depth":487,"text":221},{"id":258,"depth":487,"text":259},{"id":372,"depth":487,"text":373},{"id":422,"depth":487,"text":423},{"id":458,"depth":487,"text":459},{"id":465,"depth":487,"text":466},"md",null,{},true,{"title":121,"description":157},"9tSr_28NEzJ4LE8au9-O-2Asw_3deKU9B74cukr6ppU",[503,505],{"title":117,"path":118,"stem":119,"description":504,"children":-1},"The client actor addon owns the player interaction menu and client-side actor\nrepository. It is the main launcher for nearby player actions and other Forge\nclient UIs.",{"title":125,"path":126,"stem":127,"description":506,"children":-1},"The client CAD addon provides the map and dispatch UI for groups, active\ntasks, task assignment, dispatch orders, support requests, and task\nacknowledge\u002Fdecline workflows.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/cad.html b/docus/dist/client-addons/cad.html new file mode 100644 index 0000000..1cdbe29 --- /dev/null +++ b/docus/dist/client-addons/cad.html @@ -0,0 +1,117 @@ +Client CAD Usage Guide - forge-docus
Client Addons

Client CAD Usage Guide

The client CAD addon provides the map and dispatch UI for groups, active +tasks, task assignment, dispatch orders, support requests, and task +acknowledge/decline workflows.

Client CAD Usage Guide

The client CAD addon provides the map and dispatch UI for groups, active +tasks, task assignment, dispatch orders, support requests, and task +acknowledge/decline workflows.

Open CAD UI

call forge_client_cad_fnc_openUI;
+

The CAD UI opens RscMapUI and loads separate browser controls for:

  • top bar
  • bottom bar
  • side panel
  • dispatcher board

The native Arma map remains part of the same display.

Repository and Bridge

forge_client_cad_fnc_initRepository caches the hydrated CAD payload, +selected mode, dispatch view, session data, groups, tasks, requests, and +assignments.

forge_client_cad_fnc_initUIBridge owns:

  • ready state for side panel, top bar, and dispatcher board
  • operations vs dispatch mode
  • board vs map dispatch view
  • hydrate requests
  • task assignment, acknowledge, and decline requests
  • dispatch order create/close requests
  • support request submit/close requests
  • group status, role, and profile requests
  • map focus actions

Browser Events

EventClient behavior
cad::topbar::readyMark top bar ready and push top bar state.
cad::readyMark side panel ready and request hydrate.
cad::dispatcher::readyMark dispatcher board ready and push hydrate data.
cad::mode::setSwitch between operations and dispatch mode.
cad::dispatchView::setSwitch dispatch board/map view.
cad::refreshRequest fresh CAD hydrate data.
cad::tasks::assignAssign a task to a group.
cad::tasks::acknowledgeAcknowledge assigned task.
cad::tasks::declineDecline assigned task.
cad::dispatchOrder::createCreate dispatch order.
cad::dispatchOrder::closeClose dispatch order.
cad::supportRequest::submitSubmit support request.
cad::supportRequest::closeClose support request.
cad::groups::statusUpdate group status.
cad::groups::roleUpdate group role.
cad::groups::profileUpdate status and role together.
cad::groups::focusCenter map on a group.
cad::tasks::focusCenter map on a task.
cad::requests::focusCenter map on a support request.
map::zoomInZoom native map in.
map::zoomOutZoom native map out.
map::searchPlaceholder status update.
map::closeDispose bridge state and close the display.

Response Events

The bridge pushes:

EventPurpose
cad::hydrateFull hydrated CAD payload to the side panel.
cad::assignment::responseTask assignment/acknowledge/decline result.
cad::group::responseGroup status/role/profile result.
cad::request::responseSupport request result.

Dispatcher board controls also receive direct ExecJS status and hydrate +calls.

Task Compatibility

CAD task visibility depends on server-side task catalog entries. Tasks created +through Eden Forge task modules or forge_server_task_fnc_startTask are the +normal CAD-compatible task sources because they register task catalog data.

Direct handler or task-function calls only work with CAD when the task catalog +entry already exists.

Authorization Notes

Only dispatcher sessions can enter dispatch mode. If the hydrated session is +not a dispatcher, the bridge forces the UI back to operations mode.

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/cad/_payload.json b/docus/dist/client-addons/cad/_payload.json new file mode 100644 index 0000000..3280bfe --- /dev/null +++ b/docus/dist/client-addons/cad/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":637},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-cad":145,"-client-addons-cad-surround":632},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":125,"body":147,"description":157,"extension":626,"links":627,"meta":628,"navigation":629,"path":126,"seo":630,"stem":127,"__hash__":631},"docs\u002F4.client-addons\u002F5.cad.md",{"type":148,"value":149,"toc":616},"minimark",[150,154,158,163,180,187,203,206,210,216,222,251,255,505,509,512,565,572,576,583,586,590,593,597,612],[151,152,125],"h1",{"id":153},"client-cad-usage-guide",[155,156,157],"p",{},"The client CAD addon provides the map and dispatch UI for groups, active\ntasks, task assignment, dispatch orders, support requests, and task\nacknowledge\u002Fdecline workflows.",[159,160,162],"h2",{"id":161},"open-cad-ui","Open CAD UI",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_cad_fnc_openUI;\n","sqf","",[171,172,173],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,167],{},[155,181,182,183,186],{},"The CAD UI opens ",[171,184,185],{},"RscMapUI"," and loads separate browser controls for:",[188,189,190,194,197,200],"ul",{},[191,192,193],"li",{},"top bar",[191,195,196],{},"bottom bar",[191,198,199],{},"side panel",[191,201,202],{},"dispatcher board",[155,204,205],{},"The native Arma map remains part of the same display.",[159,207,209],{"id":208},"repository-and-bridge","Repository and Bridge",[155,211,212,215],{},[171,213,214],{},"forge_client_cad_fnc_initRepository"," caches the hydrated CAD payload,\nselected mode, dispatch view, session data, groups, tasks, requests, and\nassignments.",[155,217,218,221],{},[171,219,220],{},"forge_client_cad_fnc_initUIBridge"," owns:",[188,223,224,227,230,233,236,239,242,245,248],{},[191,225,226],{},"ready state for side panel, top bar, and dispatcher board",[191,228,229],{},"operations vs dispatch mode",[191,231,232],{},"board vs map dispatch view",[191,234,235],{},"hydrate requests",[191,237,238],{},"task assignment, acknowledge, and decline requests",[191,240,241],{},"dispatch order create\u002Fclose requests",[191,243,244],{},"support request submit\u002Fclose requests",[191,246,247],{},"group status, role, and profile requests",[191,249,250],{},"map focus actions",[159,252,254],{"id":253},"browser-events","Browser Events",[256,257,258,271],"table",{},[259,260,261],"thead",{},[262,263,264,268],"tr",{},[265,266,267],"th",{},"Event",[265,269,270],{},"Client behavior",[272,273,274,285,295,305,315,325,335,345,355,365,375,385,395,405,415,425,435,445,455,465,475,485,495],"tbody",{},[262,275,276,282],{},[277,278,279],"td",{},[171,280,281],{},"cad::topbar::ready",[277,283,284],{},"Mark top bar ready and push top bar state.",[262,286,287,292],{},[277,288,289],{},[171,290,291],{},"cad::ready",[277,293,294],{},"Mark side panel ready and request hydrate.",[262,296,297,302],{},[277,298,299],{},[171,300,301],{},"cad::dispatcher::ready",[277,303,304],{},"Mark dispatcher board ready and push hydrate data.",[262,306,307,312],{},[277,308,309],{},[171,310,311],{},"cad::mode::set",[277,313,314],{},"Switch between operations and dispatch mode.",[262,316,317,322],{},[277,318,319],{},[171,320,321],{},"cad::dispatchView::set",[277,323,324],{},"Switch dispatch board\u002Fmap view.",[262,326,327,332],{},[277,328,329],{},[171,330,331],{},"cad::refresh",[277,333,334],{},"Request fresh CAD hydrate data.",[262,336,337,342],{},[277,338,339],{},[171,340,341],{},"cad::tasks::assign",[277,343,344],{},"Assign a task to a group.",[262,346,347,352],{},[277,348,349],{},[171,350,351],{},"cad::tasks::acknowledge",[277,353,354],{},"Acknowledge assigned task.",[262,356,357,362],{},[277,358,359],{},[171,360,361],{},"cad::tasks::decline",[277,363,364],{},"Decline assigned task.",[262,366,367,372],{},[277,368,369],{},[171,370,371],{},"cad::dispatchOrder::create",[277,373,374],{},"Create dispatch order.",[262,376,377,382],{},[277,378,379],{},[171,380,381],{},"cad::dispatchOrder::close",[277,383,384],{},"Close dispatch order.",[262,386,387,392],{},[277,388,389],{},[171,390,391],{},"cad::supportRequest::submit",[277,393,394],{},"Submit support request.",[262,396,397,402],{},[277,398,399],{},[171,400,401],{},"cad::supportRequest::close",[277,403,404],{},"Close support request.",[262,406,407,412],{},[277,408,409],{},[171,410,411],{},"cad::groups::status",[277,413,414],{},"Update group status.",[262,416,417,422],{},[277,418,419],{},[171,420,421],{},"cad::groups::role",[277,423,424],{},"Update group role.",[262,426,427,432],{},[277,428,429],{},[171,430,431],{},"cad::groups::profile",[277,433,434],{},"Update status and role together.",[262,436,437,442],{},[277,438,439],{},[171,440,441],{},"cad::groups::focus",[277,443,444],{},"Center map on a group.",[262,446,447,452],{},[277,448,449],{},[171,450,451],{},"cad::tasks::focus",[277,453,454],{},"Center map on a task.",[262,456,457,462],{},[277,458,459],{},[171,460,461],{},"cad::requests::focus",[277,463,464],{},"Center map on a support request.",[262,466,467,472],{},[277,468,469],{},[171,470,471],{},"map::zoomIn",[277,473,474],{},"Zoom native map in.",[262,476,477,482],{},[277,478,479],{},[171,480,481],{},"map::zoomOut",[277,483,484],{},"Zoom native map out.",[262,486,487,492],{},[277,488,489],{},[171,490,491],{},"map::search",[277,493,494],{},"Placeholder status update.",[262,496,497,502],{},[277,498,499],{},[171,500,501],{},"map::close",[277,503,504],{},"Dispose bridge state and close the display.",[159,506,508],{"id":507},"response-events","Response Events",[155,510,511],{},"The bridge pushes:",[256,513,514,523],{},[259,515,516],{},[262,517,518,520],{},[265,519,267],{},[265,521,522],{},"Purpose",[272,524,525,535,545,555],{},[262,526,527,532],{},[277,528,529],{},[171,530,531],{},"cad::hydrate",[277,533,534],{},"Full hydrated CAD payload to the side panel.",[262,536,537,542],{},[277,538,539],{},[171,540,541],{},"cad::assignment::response",[277,543,544],{},"Task assignment\u002Facknowledge\u002Fdecline result.",[262,546,547,552],{},[277,548,549],{},[171,550,551],{},"cad::group::response",[277,553,554],{},"Group status\u002Frole\u002Fprofile result.",[262,556,557,562],{},[277,558,559],{},[171,560,561],{},"cad::request::response",[277,563,564],{},"Support request result.",[155,566,567,568,571],{},"Dispatcher board controls also receive direct ",[171,569,570],{},"ExecJS"," status and hydrate\ncalls.",[159,573,575],{"id":574},"task-compatibility","Task Compatibility",[155,577,578,579,582],{},"CAD task visibility depends on server-side task catalog entries. Tasks created\nthrough Eden Forge task modules or ",[171,580,581],{},"forge_server_task_fnc_startTask"," are the\nnormal CAD-compatible task sources because they register task catalog data.",[155,584,585],{},"Direct handler or task-function calls only work with CAD when the task catalog\nentry already exists.",[159,587,589],{"id":588},"authorization-notes","Authorization Notes",[155,591,592],{},"Only dispatcher sessions can enter dispatch mode. If the hydrated session is\nnot a dispatcher, the bridge forces the UI back to operations mode.",[159,594,596],{"id":595},"related-guides","Related Guides",[188,598,599,604,608],{},[191,600,601],{},[602,603,65],"a",{"href":66},[191,605,606],{},[602,607,57],{"href":58},[191,609,610],{},[602,611,113],{"href":114},[613,614,615],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":169,"searchDepth":617,"depth":617,"links":618},2,[619,620,621,622,623,624,625],{"id":161,"depth":617,"text":162},{"id":208,"depth":617,"text":209},{"id":253,"depth":617,"text":254},{"id":507,"depth":617,"text":508},{"id":574,"depth":617,"text":575},{"id":588,"depth":617,"text":589},{"id":595,"depth":617,"text":596},"md",null,{},true,{"title":125,"description":157},"PkqhI_PomRiB_5NhoA0fI40iHaGK26pYqhDGm9sj2iA",[633,635],{"title":121,"path":122,"stem":123,"description":634,"children":-1},"The client bank addon opens the bank and ATM browser UI, forwards banking\nrequests to the server bank addon, and pushes account updates back into the\nbrowser.",{"title":129,"path":130,"stem":131,"description":636,"children":-1},"The client garage addon provides player vehicle storage UI, vehicle\nstore\u002Fretrieve actions, selected nearby vehicle service requests, vehicle\ncontext building, and the virtual garage view.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/common.html b/docus/dist/client-addons/common.html new file mode 100644 index 0000000..240e778 --- /dev/null +++ b/docus/dist/client-addons/common.html @@ -0,0 +1,128 @@ +Client Common Usage Guide - forge-docus
Client Addons

Client Common Usage Guide

The client common addon contains shared browser UI bridge declarations and +common client-side browser integration patterns.

Client Common Usage Guide

The client common addon contains shared browser UI bridge declarations and +common client-side browser integration patterns.

Purpose

Use forge_client_common when a browser-backed feature UI needs reusable +screen lifecycle behavior:

  • active browser control tracking
  • browser ready state
  • pending event queues
  • ExecJS payload delivery
  • shared bridge object inheritance through createHashMapObject

Feature addons still own their app-specific events and server RPC mapping.

Shared Bridge

Initialize the bridge declarations with:

private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge;
+private _bridgeDeclaration = _webUIDeclarations get "bridgeDeclaration";
+

Feature bridges can inherit from the shared declaration:

GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [
+    ["#base", _bridgeDeclaration],
+    ["#type", "MyUIBridgeBaseClass"],
+    ["handleReady", compileFinal {
+        params [["_control", controlNull, [controlNull]]];
+
+        _self call ["setActiveBrowserControl", [_control]];
+        _self call ["sendEvent", ["myAddon::hydrate", createHashMap, _control]];
+    }]
+];
+

Event Delivery

sendEvent builds this payload:

{
+  "event": "myAddon::event",
+  "data": {}
+}
+

If the browser control is missing or not ready, the payload is queued on the +screen object. When the screen marks ready, flushPendingEvents delivers the +queue.

Screen Lifecycle

The shared screen object tracks:

FieldPurpose
controlActive browser control.
readyStateWhether the browser app has sent its ready event.
pendingEventsOutbound events waiting for a ready browser.

Call handleClose or dispose when a display closes so stale controls and +queued events are cleared.

Current Consumers

The common bridge pattern is used by the newer bank, CAD, garage, and +organization client bridges. Store currently keeps its own bridge object and +browser bridge function names.

Usage Rules

  • Keep bridge inheritance in feature addons thin and explicit.
  • Keep shared code generic; do not add bank, CAD, org, or store-specific logic +to common.
  • Prefer namespaced events such as garage::sync.
  • Send hash maps or arrays that can be safely serialized with toJSON.
  • Avoid direct extension calls from the client bridge; send CBA server events.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/common/_payload.json b/docus/dist/client-addons/common/_payload.json new file mode 100644 index 0000000..c7351d5 --- /dev/null +++ b/docus/dist/client-addons/common/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":531},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-common":145,"-client-addons-common-surround":526},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":113,"body":147,"description":520,"extension":521,"links":522,"meta":523,"navigation":274,"path":114,"seo":524,"stem":115,"__hash__":525},"docs\u002F4.client-addons\u002F2.common.md",{"type":148,"value":149,"toc":511},"minimark",[150,154,163,168,175,200,203,207,210,233,236,300,304,310,369,376,380,383,432,443,447,450,454,480,484,507],[151,152,113],"h1",{"id":153},"client-common-usage-guide",[155,156,157,158,162],"p",{},"The client ",[159,160,161],"code",{},"common"," addon contains shared browser UI bridge declarations and\ncommon client-side browser integration patterns.",[164,165,167],"h2",{"id":166},"purpose","Purpose",[155,169,170,171,174],{},"Use ",[159,172,173],{},"forge_client_common"," when a browser-backed feature UI needs reusable\nscreen lifecycle behavior:",[176,177,178,182,185,188,194],"ul",{},[179,180,181],"li",{},"active browser control tracking",[179,183,184],{},"browser ready state",[179,186,187],{},"pending event queues",[179,189,190,193],{},[159,191,192],{},"ExecJS"," payload delivery",[179,195,196,197],{},"shared bridge object inheritance through ",[159,198,199],{},"createHashMapObject",[155,201,202],{},"Feature addons still own their app-specific events and server RPC mapping.",[164,204,206],{"id":205},"shared-bridge","Shared Bridge",[155,208,209],{},"Initialize the bridge declarations with:",[211,212,217],"pre",{"className":213,"code":214,"language":215,"meta":216,"style":216},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge;\nprivate _bridgeDeclaration = _webUIDeclarations get \"bridgeDeclaration\";\n","sqf","",[159,218,219,227],{"__ignoreMap":216},[220,221,224],"span",{"class":222,"line":223},"line",1,[220,225,226],{},"private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge;\n",[220,228,230],{"class":222,"line":229},2,[220,231,232],{},"private _bridgeDeclaration = _webUIDeclarations get \"bridgeDeclaration\";\n",[155,234,235],{},"Feature bridges can inherit from the shared declaration:",[211,237,239],{"className":213,"code":238,"language":215,"meta":216,"style":216},"GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [\n [\"#base\", _bridgeDeclaration],\n [\"#type\", \"MyUIBridgeBaseClass\"],\n [\"handleReady\", compileFinal {\n params [[\"_control\", controlNull, [controlNull]]];\n\n _self call [\"setActiveBrowserControl\", [_control]];\n _self call [\"sendEvent\", [\"myAddon::hydrate\", createHashMap, _control]];\n }]\n];\n",[159,240,241,246,251,257,263,269,276,282,288,294],{"__ignoreMap":216},[220,242,243],{"class":222,"line":223},[220,244,245],{},"GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [\n",[220,247,248],{"class":222,"line":229},[220,249,250],{}," [\"#base\", _bridgeDeclaration],\n",[220,252,254],{"class":222,"line":253},3,[220,255,256],{}," [\"#type\", \"MyUIBridgeBaseClass\"],\n",[220,258,260],{"class":222,"line":259},4,[220,261,262],{}," [\"handleReady\", compileFinal {\n",[220,264,266],{"class":222,"line":265},5,[220,267,268],{}," params [[\"_control\", controlNull, [controlNull]]];\n",[220,270,272],{"class":222,"line":271},6,[220,273,275],{"emptyLinePlaceholder":274},true,"\n",[220,277,279],{"class":222,"line":278},7,[220,280,281],{}," _self call [\"setActiveBrowserControl\", [_control]];\n",[220,283,285],{"class":222,"line":284},8,[220,286,287],{}," _self call [\"sendEvent\", [\"myAddon::hydrate\", createHashMap, _control]];\n",[220,289,291],{"class":222,"line":290},9,[220,292,293],{}," }]\n",[220,295,297],{"class":222,"line":296},10,[220,298,299],{},"];\n",[164,301,303],{"id":302},"event-delivery","Event Delivery",[155,305,306,309],{},[159,307,308],{},"sendEvent"," builds this payload:",[211,311,315],{"className":312,"code":313,"language":314,"meta":216,"style":216},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"event\": \"myAddon::event\",\n \"data\": {}\n}\n","json",[159,316,317,323,350,364],{"__ignoreMap":216},[220,318,319],{"class":222,"line":223},[220,320,322],{"class":321},"sMK4o","{\n",[220,324,325,328,332,335,338,341,345,347],{"class":222,"line":229},[220,326,327],{"class":321}," \"",[220,329,331],{"class":330},"spNyl","event",[220,333,334],{"class":321},"\"",[220,336,337],{"class":321},":",[220,339,340],{"class":321}," \"",[220,342,344],{"class":343},"sfazB","myAddon::event",[220,346,334],{"class":321},[220,348,349],{"class":321},",\n",[220,351,352,354,357,359,361],{"class":222,"line":253},[220,353,327],{"class":321},[220,355,356],{"class":330},"data",[220,358,334],{"class":321},[220,360,337],{"class":321},[220,362,363],{"class":321}," {}\n",[220,365,366],{"class":222,"line":259},[220,367,368],{"class":321},"}\n",[155,370,371,372,375],{},"If the browser control is missing or not ready, the payload is queued on the\nscreen object. When the screen marks ready, ",[159,373,374],{},"flushPendingEvents"," delivers the\nqueue.",[164,377,379],{"id":378},"screen-lifecycle","Screen Lifecycle",[155,381,382],{},"The shared screen object tracks:",[384,385,386,398],"table",{},[387,388,389],"thead",{},[390,391,392,396],"tr",{},[393,394,395],"th",{},"Field",[393,397,167],{},[399,400,401,412,422],"tbody",{},[390,402,403,409],{},[404,405,406],"td",{},[159,407,408],{},"control",[404,410,411],{},"Active browser control.",[390,413,414,419],{},[404,415,416],{},[159,417,418],{},"readyState",[404,420,421],{},"Whether the browser app has sent its ready event.",[390,423,424,429],{},[404,425,426],{},[159,427,428],{},"pendingEvents",[404,430,431],{},"Outbound events waiting for a ready browser.",[155,433,434,435,438,439,442],{},"Call ",[159,436,437],{},"handleClose"," or ",[159,440,441],{},"dispose"," when a display closes so stale controls and\nqueued events are cleared.",[164,444,446],{"id":445},"current-consumers","Current Consumers",[155,448,449],{},"The common bridge pattern is used by the newer bank, CAD, garage, and\norganization client bridges. Store currently keeps its own bridge object and\nbrowser bridge function names.",[164,451,453],{"id":452},"usage-rules","Usage Rules",[176,455,456,459,465,471,477],{},[179,457,458],{},"Keep bridge inheritance in feature addons thin and explicit.",[179,460,461,462,464],{},"Keep shared code generic; do not add bank, CAD, org, or store-specific logic\nto ",[159,463,161],{},".",[179,466,467,468,464],{},"Prefer namespaced events such as ",[159,469,470],{},"garage::sync",[179,472,473,474,464],{},"Send hash maps or arrays that can be safely serialized with ",[159,475,476],{},"toJSON",[179,478,479],{},"Avoid direct extension calls from the client bridge; send CBA server events.",[164,481,483],{"id":482},"related-guides","Related Guides",[176,485,486,491,495,499,503],{},[179,487,488],{},[489,490,99],"a",{"href":95},[179,492,493],{},[489,494,121],{"href":122},[179,496,497],{},[489,498,125],{"href":126},[179,500,501],{},[489,502,129],{"href":130},[179,504,505],{},[489,506,141],{"href":142},[508,509,510],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":216,"searchDepth":229,"depth":229,"links":512},[513,514,515,516,517,518,519],{"id":166,"depth":229,"text":167},{"id":205,"depth":229,"text":206},{"id":302,"depth":229,"text":303},{"id":378,"depth":229,"text":379},{"id":445,"depth":229,"text":446},{"id":452,"depth":229,"text":453},{"id":482,"depth":229,"text":483},"The client common addon contains shared browser UI bridge declarations and\ncommon client-side browser integration patterns.","md",null,{},{"title":113,"description":520},"y19oU7ALKU_ma2WFUqXb_vdzt_Y7Yt4fw-1V7_galCk",[527,529],{"title":109,"path":110,"stem":111,"description":528,"children":-1},"The client store addon provides the storefront browser UI for catalog browsing,\ncategory hydration, payment source display, cart handling, and checkout\nrequests.",{"title":117,"path":118,"stem":119,"description":530,"children":-1},"The client actor addon owns the player interaction menu and client-side actor\nrepository. It is the main launcher for nearby player actions and other Forge\nclient UIs.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/garage.html b/docus/dist/client-addons/garage.html new file mode 100644 index 0000000..582e0a0 --- /dev/null +++ b/docus/dist/client-addons/garage.html @@ -0,0 +1,124 @@ +Client Garage Usage Guide - forge-docus
Client Addons

Client Garage Usage Guide

The client garage addon provides player vehicle storage UI, vehicle +store/retrieve actions, selected nearby vehicle service requests, vehicle +context building, and the virtual garage view.

Client Garage Usage Guide

The client garage addon provides player vehicle storage UI, vehicle +store/retrieve actions, selected nearby vehicle service requests, vehicle +context building, and the virtual garage view.

Open Garage UI

call forge_client_garage_fnc_openUI;
+

The garage UI opens RscGarage, loads ui/_site/index.html, and routes +browser events through forge_client_garage_fnc_handleUIEvents.

Open Virtual Garage

call forge_client_garage_fnc_openVG;
+

The virtual garage uses mission-configured FORGE_CfgGarages locations to set +the spawn/preview position, opens the BIS garage interface, and restricts the +available vehicle lists from the virtual garage repository.

Client Services

ServicePurpose
GarageRepositoryPlayer garage view state.
VGRepositoryVirtual garage unlock view state.
GarageHelperServiceVehicle names, hit points, and payload helpers.
GarageContextServiceNearby/current vehicle context.
GaragePayloadServiceBrowser hydrate payload construction.
GarageActionServiceStore/retrieve request handling and selected nearby vehicle refuel/repair request forwarding.
GarageUIBridgeBrowser ready, hydrate, and sync delivery.

Browser Events

EventClient behavior
garage::readyMark browser ready and send garage::hydrate.
garage::refreshSend current garage payload as garage::sync.
garage::vehicle::retrieve::requestForward retrieve request through the action service.
garage::vehicle::store::requestForward store request through the action service.
garage::vehicle::refuel::requestForward selected nearby vehicle refuel request to the server economy service.
garage::vehicle::repair::requestForward selected nearby vehicle repair request to the server economy service.
garage::closeDispose bridge screen state and close the display.

Browser Response Events

EventPurpose
garage::hydrateInitial vehicle and session payload.
garage::syncRefreshed vehicle payload.
garage::service::successBrowser notice for accepted refuel/repair requests.
garage::service::failureBrowser notice for rejected refuel/repair requests.

Server action responses are handled by the action service and notification +flow.

Vehicle Service

The selected vehicle detail panel includes refuel and repair actions for nearby +world vehicles. Stored records must be retrieved first because server economy +services operate on live vehicle objects, not stored garage records.

Refuel requests use the server economy RefuelService event. Repair requests +use the server economy RepairService event. Both services are billed by the +server economy addon through organization funds.

Mission Setup

Garage interactions are normally surfaced through the actor menu when nearby +objects have garage variables such as:

_object setVariable ["isGarage", true, true];
+_object setVariable ["garageType", "cars", true];
+

Virtual garage access also requires configured garage locations in mission +config so the preview/spawn position can be resolved.

Authoritative State

The client gathers vehicle context and sends store/retrieve requests. Stored +vehicle state, validation, spawning, removal, and persistence are owned by the +server garage addon and extension.

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/garage/_payload.json b/docus/dist/client-addons/garage/_payload.json new file mode 100644 index 0000000..527852e --- /dev/null +++ b/docus/dist/client-addons/garage/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":558},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-garage":145,"-client-addons-garage-surround":553},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":129,"body":147,"description":157,"extension":547,"links":548,"meta":549,"navigation":550,"path":130,"seo":551,"stem":131,"__hash__":552},"docs\u002F4.client-addons\u002F6.garage.md",{"type":148,"value":149,"toc":536},"minimark",[150,154,158,163,180,195,199,208,215,219,309,313,403,407,457,460,464,467,478,482,485,501,504,508,511,515,532],[151,152,129],"h1",{"id":153},"client-garage-usage-guide",[155,156,157],"p",{},"The client garage addon provides player vehicle storage UI, vehicle\nstore\u002Fretrieve actions, selected nearby vehicle service requests, vehicle\ncontext building, and the virtual garage view.",[159,160,162],"h2",{"id":161},"open-garage-ui","Open Garage UI",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_garage_fnc_openUI;\n","sqf","",[171,172,173],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,167],{},[155,181,182,183,186,187,190,191,194],{},"The garage UI opens ",[171,184,185],{},"RscGarage",", loads ",[171,188,189],{},"ui\u002F_site\u002Findex.html",", and routes\nbrowser events through ",[171,192,193],{},"forge_client_garage_fnc_handleUIEvents",".",[159,196,198],{"id":197},"open-virtual-garage","Open Virtual Garage",[164,200,202],{"className":166,"code":201,"language":168,"meta":169,"style":169},"call forge_client_garage_fnc_openVG;\n",[171,203,204],{"__ignoreMap":169},[174,205,206],{"class":176,"line":177},[174,207,201],{},[155,209,210,211,214],{},"The virtual garage uses mission-configured ",[171,212,213],{},"FORGE_CfgGarages"," locations to set\nthe spawn\u002Fpreview position, opens the BIS garage interface, and restricts the\navailable vehicle lists from the virtual garage repository.",[159,216,218],{"id":217},"client-services","Client Services",[220,221,222,235],"table",{},[223,224,225],"thead",{},[226,227,228,232],"tr",{},[229,230,231],"th",{},"Service",[229,233,234],{},"Purpose",[236,237,238,249,259,269,279,289,299],"tbody",{},[226,239,240,246],{},[241,242,243],"td",{},[171,244,245],{},"GarageRepository",[241,247,248],{},"Player garage view state.",[226,250,251,256],{},[241,252,253],{},[171,254,255],{},"VGRepository",[241,257,258],{},"Virtual garage unlock view state.",[226,260,261,266],{},[241,262,263],{},[171,264,265],{},"GarageHelperService",[241,267,268],{},"Vehicle names, hit points, and payload helpers.",[226,270,271,276],{},[241,272,273],{},[171,274,275],{},"GarageContextService",[241,277,278],{},"Nearby\u002Fcurrent vehicle context.",[226,280,281,286],{},[241,282,283],{},[171,284,285],{},"GaragePayloadService",[241,287,288],{},"Browser hydrate payload construction.",[226,290,291,296],{},[241,292,293],{},[171,294,295],{},"GarageActionService",[241,297,298],{},"Store\u002Fretrieve request handling and selected nearby vehicle refuel\u002Frepair request forwarding.",[226,300,301,306],{},[241,302,303],{},[171,304,305],{},"GarageUIBridge",[241,307,308],{},"Browser ready, hydrate, and sync delivery.",[159,310,312],{"id":311},"browser-events","Browser Events",[220,314,315,325],{},[223,316,317],{},[226,318,319,322],{},[229,320,321],{},"Event",[229,323,324],{},"Client behavior",[236,326,327,340,353,363,373,383,393],{},[226,328,329,334],{},[241,330,331],{},[171,332,333],{},"garage::ready",[241,335,336,337,194],{},"Mark browser ready and send ",[171,338,339],{},"garage::hydrate",[226,341,342,347],{},[241,343,344],{},[171,345,346],{},"garage::refresh",[241,348,349,350,194],{},"Send current garage payload as ",[171,351,352],{},"garage::sync",[226,354,355,360],{},[241,356,357],{},[171,358,359],{},"garage::vehicle::retrieve::request",[241,361,362],{},"Forward retrieve request through the action service.",[226,364,365,370],{},[241,366,367],{},[171,368,369],{},"garage::vehicle::store::request",[241,371,372],{},"Forward store request through the action service.",[226,374,375,380],{},[241,376,377],{},[171,378,379],{},"garage::vehicle::refuel::request",[241,381,382],{},"Forward selected nearby vehicle refuel request to the server economy service.",[226,384,385,390],{},[241,386,387],{},[171,388,389],{},"garage::vehicle::repair::request",[241,391,392],{},"Forward selected nearby vehicle repair request to the server economy service.",[226,394,395,400],{},[241,396,397],{},[171,398,399],{},"garage::close",[241,401,402],{},"Dispose bridge screen state and close the display.",[159,404,406],{"id":405},"browser-response-events","Browser Response Events",[220,408,409,417],{},[223,410,411],{},[226,412,413,415],{},[229,414,321],{},[229,416,234],{},[236,418,419,428,437,447],{},[226,420,421,425],{},[241,422,423],{},[171,424,339],{},[241,426,427],{},"Initial vehicle and session payload.",[226,429,430,434],{},[241,431,432],{},[171,433,352],{},[241,435,436],{},"Refreshed vehicle payload.",[226,438,439,444],{},[241,440,441],{},[171,442,443],{},"garage::service::success",[241,445,446],{},"Browser notice for accepted refuel\u002Frepair requests.",[226,448,449,454],{},[241,450,451],{},[171,452,453],{},"garage::service::failure",[241,455,456],{},"Browser notice for rejected refuel\u002Frepair requests.",[155,458,459],{},"Server action responses are handled by the action service and notification\nflow.",[159,461,463],{"id":462},"vehicle-service","Vehicle Service",[155,465,466],{},"The selected vehicle detail panel includes refuel and repair actions for nearby\nworld vehicles. Stored records must be retrieved first because server economy\nservices operate on live vehicle objects, not stored garage records.",[155,468,469,470,473,474,477],{},"Refuel requests use the server economy ",[171,471,472],{},"RefuelService"," event. Repair requests\nuse the server economy ",[171,475,476],{},"RepairService"," event. Both services are billed by the\nserver economy addon through organization funds.",[159,479,481],{"id":480},"mission-setup","Mission Setup",[155,483,484],{},"Garage interactions are normally surfaced through the actor menu when nearby\nobjects have garage variables such as:",[164,486,488],{"className":166,"code":487,"language":168,"meta":169,"style":169},"_object setVariable [\"isGarage\", true, true];\n_object setVariable [\"garageType\", \"cars\", true];\n",[171,489,490,495],{"__ignoreMap":169},[174,491,492],{"class":176,"line":177},[174,493,494],{},"_object setVariable [\"isGarage\", true, true];\n",[174,496,498],{"class":176,"line":497},2,[174,499,500],{},"_object setVariable [\"garageType\", \"cars\", true];\n",[155,502,503],{},"Virtual garage access also requires configured garage locations in mission\nconfig so the preview\u002Fspawn position can be resolved.",[159,505,507],{"id":506},"authoritative-state","Authoritative State",[155,509,510],{},"The client gathers vehicle context and sends store\u002Fretrieve requests. Stored\nvehicle state, validation, spawning, removal, and persistence are owned by the\nserver garage addon and extension.",[159,512,514],{"id":513},"related-guides","Related Guides",[516,517,518,524,528],"ul",{},[519,520,521],"li",{},[522,523,73],"a",{"href":74},[519,525,526],{},[522,527,117],{"href":118},[519,529,530],{},[522,531,137],{"href":138},[533,534,535],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":169,"searchDepth":497,"depth":497,"links":537},[538,539,540,541,542,543,544,545,546],{"id":161,"depth":497,"text":162},{"id":197,"depth":497,"text":198},{"id":217,"depth":497,"text":218},{"id":311,"depth":497,"text":312},{"id":405,"depth":497,"text":406},{"id":462,"depth":497,"text":463},{"id":480,"depth":497,"text":481},{"id":506,"depth":497,"text":507},{"id":513,"depth":497,"text":514},"md",null,{},true,{"title":129,"description":157},"FjY4rI8r7pbcqenAYzqgitXP9qYdvwrTtKlyd4O8aw8",[554,556],{"title":125,"path":126,"stem":127,"description":555,"children":-1},"The client CAD addon provides the map and dispatch UI for groups, active\ntasks, task assignment, dispatch orders, support requests, and task\nacknowledge\u002Fdecline workflows.",{"title":133,"path":134,"stem":135,"description":557,"children":-1},"The client locker addon manages personal locker display state, local locker\ncontainer behavior, and virtual arsenal unlock state.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/locker.html b/docus/dist/client-addons/locker.html new file mode 100644 index 0000000..9a25a5f --- /dev/null +++ b/docus/dist/client-addons/locker.html @@ -0,0 +1,115 @@ +Client Locker Usage Guide - forge-docus
Client Addons

Client Locker Usage Guide

The client locker addon manages personal locker display state, local locker +container behavior, and virtual arsenal unlock state.

Client Locker Usage Guide

The client locker addon manages personal locker display state, local locker +container behavior, and virtual arsenal unlock state.

Repositories

forge_client_locker_fnc_initRepository creates GVAR(LockerRepository).

forge_client_locker_fnc_initVARepository creates GVAR(VARepository).

Initialize locker state:

GVAR(LockerRepository) call ["init", []];
+GVAR(VARepository) call ["init", []];
+

Locker Container Flow

The repository searches mission namespace variables whose names contain +locker and refer to objects. For each server/mission locker object, it creates +a local Box_NATO_Equip_F at the same position and attaches container event +handlers.

On container open:

  • the local container is cleared
  • cached locker items are inserted into the container
  • over-capacity warnings are emitted when the item count is above 25

On container close:

  • cargo, nested container items, and weapon attachments are read back
  • the new locker map is sent to the server with the override request
  • the local repository cache is updated

Virtual Arsenal Flow

The virtual arsenal repository creates a local FORGE_Locker_Box and requests +virtual arsenal unlocks from the server.

As sync data arrives, it applies unlocks through ACE Arsenal:

Data keyClient behavior
itemsAdd virtual items.
weaponsAdd virtual weapons.
magazinesAdd virtual magazines.
backpacksAdd virtual backpacks.

The actor menu opens the virtual locker with:

[FORGE_Locker_Box, player, false] spawn ace_arsenal_fnc_openBox;
+

Server Events

The client repository sends requests for:

  • locker initialization
  • locker save
  • locker override after container close
  • virtual arsenal initialization
  • virtual arsenal save

The server locker addon and extension own the saved locker and virtual arsenal +state.

Mission Setup

Mission locker objects must be placed into missionNamespace with a variable +name containing locker. The client creates local interactive containers from +those authoritative mission objects.

Example:

missionNamespace setVariable ["forge_locker_alpha", _lockerObject, true];
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/locker/_payload.json b/docus/dist/client-addons/locker/_payload.json new file mode 100644 index 0000000..2e42412 --- /dev/null +++ b/docus/dist/client-addons/locker/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":434},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-locker":145,"-client-addons-locker-surround":429},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":133,"body":147,"description":157,"extension":423,"links":424,"meta":425,"navigation":426,"path":134,"seo":427,"stem":135,"__hash__":428},"docs\u002F4.client-addons\u002F7.locker.md",{"type":148,"value":149,"toc":415},"minimark",[150,154,158,163,174,182,185,208,212,223,226,239,242,253,257,264,267,327,330,339,343,346,363,366,370,380,383,392,396,411],[151,152,133],"h1",{"id":153},"client-locker-usage-guide",[155,156,157],"p",{},"The client locker addon manages personal locker display state, local locker\ncontainer behavior, and virtual arsenal unlock state.",[159,160,162],"h2",{"id":161},"repositories","Repositories",[155,164,165,169,170,173],{},[166,167,168],"code",{},"forge_client_locker_fnc_initRepository"," creates ",[166,171,172],{},"GVAR(LockerRepository)",".",[155,175,176,169,179,173],{},[166,177,178],{},"forge_client_locker_fnc_initVARepository",[166,180,181],{},"GVAR(VARepository)",[155,183,184],{},"Initialize locker state:",[186,187,192],"pre",{"className":188,"code":189,"language":190,"meta":191,"style":191},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","GVAR(LockerRepository) call [\"init\", []];\nGVAR(VARepository) call [\"init\", []];\n","sqf","",[166,193,194,202],{"__ignoreMap":191},[195,196,199],"span",{"class":197,"line":198},"line",1,[195,200,201],{},"GVAR(LockerRepository) call [\"init\", []];\n",[195,203,205],{"class":197,"line":204},2,[195,206,207],{},"GVAR(VARepository) call [\"init\", []];\n",[159,209,211],{"id":210},"locker-container-flow","Locker Container Flow",[155,213,214,215,218,219,222],{},"The repository searches mission namespace variables whose names contain\n",[166,216,217],{},"locker"," and refer to objects. For each server\u002Fmission locker object, it creates\na local ",[166,220,221],{},"Box_NATO_Equip_F"," at the same position and attaches container event\nhandlers.",[155,224,225],{},"On container open:",[227,228,229,233,236],"ul",{},[230,231,232],"li",{},"the local container is cleared",[230,234,235],{},"cached locker items are inserted into the container",[230,237,238],{},"over-capacity warnings are emitted when the item count is above 25",[155,240,241],{},"On container close:",[227,243,244,247,250],{},[230,245,246],{},"cargo, nested container items, and weapon attachments are read back",[230,248,249],{},"the new locker map is sent to the server with the override request",[230,251,252],{},"the local repository cache is updated",[159,254,256],{"id":255},"virtual-arsenal-flow","Virtual Arsenal Flow",[155,258,259,260,263],{},"The virtual arsenal repository creates a local ",[166,261,262],{},"FORGE_Locker_Box"," and requests\nvirtual arsenal unlocks from the server.",[155,265,266],{},"As sync data arrives, it applies unlocks through ACE Arsenal:",[268,269,270,283],"table",{},[271,272,273],"thead",{},[274,275,276,280],"tr",{},[277,278,279],"th",{},"Data key",[277,281,282],{},"Client behavior",[284,285,286,297,307,317],"tbody",{},[274,287,288,294],{},[289,290,291],"td",{},[166,292,293],{},"items",[289,295,296],{},"Add virtual items.",[274,298,299,304],{},[289,300,301],{},[166,302,303],{},"weapons",[289,305,306],{},"Add virtual weapons.",[274,308,309,314],{},[289,310,311],{},[166,312,313],{},"magazines",[289,315,316],{},"Add virtual magazines.",[274,318,319,324],{},[289,320,321],{},[166,322,323],{},"backpacks",[289,325,326],{},"Add virtual backpacks.",[155,328,329],{},"The actor menu opens the virtual locker with:",[186,331,333],{"className":188,"code":332,"language":190,"meta":191,"style":191},"[FORGE_Locker_Box, player, false] spawn ace_arsenal_fnc_openBox;\n",[166,334,335],{"__ignoreMap":191},[195,336,337],{"class":197,"line":198},[195,338,332],{},[159,340,342],{"id":341},"server-events","Server Events",[155,344,345],{},"The client repository sends requests for:",[227,347,348,351,354,357,360],{},[230,349,350],{},"locker initialization",[230,352,353],{},"locker save",[230,355,356],{},"locker override after container close",[230,358,359],{},"virtual arsenal initialization",[230,361,362],{},"virtual arsenal save",[155,364,365],{},"The server locker addon and extension own the saved locker and virtual arsenal\nstate.",[159,367,369],{"id":368},"mission-setup","Mission Setup",[155,371,372,373,376,377,379],{},"Mission locker objects must be placed into ",[166,374,375],{},"missionNamespace"," with a variable\nname containing ",[166,378,217],{},". The client creates local interactive containers from\nthose authoritative mission objects.",[155,381,382],{},"Example:",[186,384,386],{"className":188,"code":385,"language":190,"meta":191,"style":191},"missionNamespace setVariable [\"forge_locker_alpha\", _lockerObject, true];\n",[166,387,388],{"__ignoreMap":191},[195,389,390],{"class":197,"line":198},[195,391,385],{},[159,393,395],{"id":394},"related-guides","Related Guides",[227,397,398,403,407],{},[230,399,400],{},[401,402,77],"a",{"href":78},[230,404,405],{},[401,406,85],{"href":86},[230,408,409],{},[401,410,117],{"href":118},[412,413,414],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":191,"searchDepth":204,"depth":204,"links":416},[417,418,419,420,421,422],{"id":161,"depth":204,"text":162},{"id":210,"depth":204,"text":211},{"id":255,"depth":204,"text":256},{"id":341,"depth":204,"text":342},{"id":368,"depth":204,"text":369},{"id":394,"depth":204,"text":395},"md",null,{},true,{"title":133,"description":157},"Xg6JIHaku-KiLc15y67lo3EujW_Zj6YTuSIMClw5vsM",[430,432],{"title":129,"path":130,"stem":131,"description":431,"children":-1},"The client garage addon provides player vehicle storage UI, vehicle\nstore\u002Fretrieve actions, selected nearby vehicle service requests, vehicle\ncontext building, and the virtual garage view.",{"title":137,"path":138,"stem":139,"description":433,"children":-1},"The client notifications addon owns the notification HUD, notification sound,\nand local notification service used by Forge client and server modules.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/main.html b/docus/dist/client-addons/main.html new file mode 100644 index 0000000..b530044 --- /dev/null +++ b/docus/dist/client-addons/main.html @@ -0,0 +1,113 @@ +Client Main Usage Guide - forge-docus
Client Addons

Client Main Usage Guide

The client main addon provides the shared mod identity, version metadata, +CBA settings, and macro foundation used by the Forge client addons.

Client Main Usage Guide

The client main addon provides the shared mod identity, version metadata, +CBA settings, and macro foundation used by the Forge client addons.

Purpose

Use forge_client_main as the foundation dependency for client addons that +need Forge macros, function naming, settings, or mod-level configuration.

Feature logic should stay in the owning addon. main should remain limited to +shared client configuration and compile infrastructure.

Key Files

FilePurpose
script_mod.hppClient mod identity.
script_version.hppClient mod version values.
script_macros.hppShared client macros.
CfgSettings.hppClient CBA settings.
config.cppAddon config and mod wiring.

Dependency Pattern

Feature addons normally depend on forge_client_main in their config.cpp.

class forge_client_example {
+    requiredAddons[] = {
+        "forge_client_main"
+    };
+};
+

Usage Notes

  • Put domain UI, repositories, and event handling in feature addons.
  • Put reusable browser bridge behavior in forge_client_common.
  • Put server-only behavior in arma/server/addons.
  • Keep settings in CfgSettings.hpp when they apply to the client mod as a +whole or to a client feature toggle.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/main/_payload.json b/docus/dist/client-addons/main/_payload.json new file mode 100644 index 0000000..ad778af --- /dev/null +++ b/docus/dist/client-addons/main/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":379},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-main":145,"-client-addons-main-surround":374},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":101,"body":147,"description":367,"extension":368,"links":369,"meta":370,"navigation":371,"path":102,"seo":372,"stem":103,"__hash__":373},"docs\u002F4.client-addons\u002F1.main.md",{"type":148,"value":149,"toc":360},"minimark",[150,154,163,168,175,181,185,254,258,267,308,312,337,341,356],[151,152,101],"h1",{"id":153},"client-main-usage-guide",[155,156,157,158,162],"p",{},"The client ",[159,160,161],"code",{},"main"," addon provides the shared mod identity, version metadata,\nCBA settings, and macro foundation used by the Forge client addons.",[164,165,167],"h2",{"id":166},"purpose","Purpose",[155,169,170,171,174],{},"Use ",[159,172,173],{},"forge_client_main"," as the foundation dependency for client addons that\nneed Forge macros, function naming, settings, or mod-level configuration.",[155,176,177,178,180],{},"Feature logic should stay in the owning addon. ",[159,179,161],{}," should remain limited to\nshared client configuration and compile infrastructure.",[164,182,184],{"id":183},"key-files","Key Files",[186,187,188,200],"table",{},[189,190,191],"thead",{},[192,193,194,198],"tr",{},[195,196,197],"th",{},"File",[195,199,167],{},[201,202,203,214,224,234,244],"tbody",{},[192,204,205,211],{},[206,207,208],"td",{},[159,209,210],{},"script_mod.hpp",[206,212,213],{},"Client mod identity.",[192,215,216,221],{},[206,217,218],{},[159,219,220],{},"script_version.hpp",[206,222,223],{},"Client mod version values.",[192,225,226,231],{},[206,227,228],{},[159,229,230],{},"script_macros.hpp",[206,232,233],{},"Shared client macros.",[192,235,236,241],{},[206,237,238],{},[159,239,240],{},"CfgSettings.hpp",[206,242,243],{},"Client CBA settings.",[192,245,246,251],{},[206,247,248],{},[159,249,250],{},"config.cpp",[206,252,253],{},"Addon config and mod wiring.",[164,255,257],{"id":256},"dependency-pattern","Dependency Pattern",[155,259,260,261,263,264,266],{},"Feature addons normally depend on ",[159,262,173],{}," in their ",[159,265,250],{},".",[268,269,274],"pre",{"className":270,"code":271,"language":272,"meta":273,"style":273},"language-cpp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","class forge_client_example {\n requiredAddons[] = {\n \"forge_client_main\"\n };\n};\n","cpp","",[159,275,276,284,290,296,302],{"__ignoreMap":273},[277,278,281],"span",{"class":279,"line":280},"line",1,[277,282,283],{},"class forge_client_example {\n",[277,285,287],{"class":279,"line":286},2,[277,288,289],{}," requiredAddons[] = {\n",[277,291,293],{"class":279,"line":292},3,[277,294,295],{}," \"forge_client_main\"\n",[277,297,299],{"class":279,"line":298},4,[277,300,301],{}," };\n",[277,303,305],{"class":279,"line":304},5,[277,306,307],{},"};\n",[164,309,311],{"id":310},"usage-notes","Usage Notes",[313,314,315,319,325,331],"ul",{},[316,317,318],"li",{},"Put domain UI, repositories, and event handling in feature addons.",[316,320,321,322,266],{},"Put reusable browser bridge behavior in ",[159,323,324],{},"forge_client_common",[316,326,327,328,266],{},"Put server-only behavior in ",[159,329,330],{},"arma\u002Fserver\u002Faddons",[316,332,333,334,336],{},"Keep settings in ",[159,335,240],{}," when they apply to the client mod as a\nwhole or to a client feature toggle.",[164,338,340],{"id":339},"related-guides","Related Guides",[313,342,343,348,352],{},[316,344,345],{},[346,347,99],"a",{"href":95},[316,349,350],{},[346,351,113],{"href":114},[316,353,354],{},[346,355,19],{"href":20},[357,358,359],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":273,"searchDepth":286,"depth":286,"links":361},[362,363,364,365,366],{"id":166,"depth":286,"text":167},{"id":183,"depth":286,"text":184},{"id":256,"depth":286,"text":257},{"id":310,"depth":286,"text":311},{"id":339,"depth":286,"text":340},"The client main addon provides the shared mod identity, version metadata,\nCBA settings, and macro foundation used by the Forge client addons.","md",null,{},true,{"title":101,"description":367},"Th6geljS-Lc2R7P9vy5TF75LdSxHFKrOUt7Rwds7sgM",[375,377],{"title":99,"path":95,"stem":96,"description":376,"children":-1},"Forge Client contains the Arma client-side addons that open player interfaces,\nhandle browser events, cache client-visible state, and forward authoritative\nrequests to the server addons.",{"title":105,"path":106,"stem":107,"description":378,"children":-1},"The client phone addon provides the in-game phone UI for contacts, SMS\nmessages, email, and local utility apps such as notes, calendar events, world\nclocks, and alarms.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/notifications.html b/docus/dist/client-addons/notifications.html new file mode 100644 index 0000000..29d2790 --- /dev/null +++ b/docus/dist/client-addons/notifications.html @@ -0,0 +1,121 @@ +Client Notifications Usage Guide - forge-docus
Client Addons

Client Notifications Usage Guide

The client notifications addon owns the notification HUD, notification sound, +and local notification service used by Forge client and server modules.

Client Notifications Usage Guide

The client notifications addon owns the notification HUD, notification sound, +and local notification service used by Forge client and server modules.

Runtime Behavior

The notification display is created during client initialization. The browser +HUD sends:

notifications::ready
+

When that event is received, NotificationService initializes and sends a +startup notification.

Create a Notification

Use the notification service when available:

GVAR(NotificationService) call ["create", [
+    "success",
+    "Title",
+    "Notification text.",
+    4000
+]];
+

Arguments:

ArgumentPurpose
_typeNotification type, such as success, info, warning, or error.
_titleNotification title.
_contentNotification body text.
_durationDisplay duration in milliseconds.

The service dispatches a browser forge:notify custom event.

CBA Event Surface

Other addons can use the client notification event:

["forge_client_notifications_recieveNotification", [
+    "warning",
+    "Garage",
+    "Vehicle spawn position is blocked.",
+    3000
+]] call CBA_fnc_localEvent;
+

The event payload is:

[_type, _title, _content, _duration]
+

Usage Rules

  • Use the shared notification service instead of opening separate transient +browser UIs.
  • Keep server-driven player feedback short and actionable.
  • Treat notification state as transient client UI state.
  • Do not use notifications as the only record of durable domain changes.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/notifications/_payload.json b/docus/dist/client-addons/notifications/_payload.json new file mode 100644 index 0000000..7d41ccb --- /dev/null +++ b/docus/dist/client-addons/notifications/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":440},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-notifications":145,"-client-addons-notifications-surround":435},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":137,"body":147,"description":157,"extension":429,"links":430,"meta":431,"navigation":432,"path":138,"seo":433,"stem":139,"__hash__":434},"docs\u002F4.client-addons\u002F8.notifications.md",{"type":148,"value":149,"toc":422},"minimark",[150,154,158,163,166,177,184,188,191,236,239,314,321,325,328,363,366,375,379,395,399,418],[151,152,137],"h1",{"id":153},"client-notifications-usage-guide",[155,156,157],"p",{},"The client notifications addon owns the notification HUD, notification sound,\nand local notification service used by Forge client and server modules.",[159,160,162],"h2",{"id":161},"runtime-behavior","Runtime Behavior",[155,164,165],{},"The notification display is created during client initialization. The browser\nHUD sends:",[167,168,174],"pre",{"className":169,"code":171,"language":172,"meta":173},[170],"language-text","notifications::ready\n","text","",[175,176,171],"code",{"__ignoreMap":173},[155,178,179,180,183],{},"When that event is received, ",[175,181,182],{},"NotificationService"," initializes and sends a\nstartup notification.",[159,185,187],{"id":186},"create-a-notification","Create a Notification",[155,189,190],{},"Use the notification service when available:",[167,192,196],{"className":193,"code":194,"language":195,"meta":173,"style":173},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","GVAR(NotificationService) call [\"create\", [\n \"success\",\n \"Title\",\n \"Notification text.\",\n 4000\n]];\n","sqf",[175,197,198,206,212,218,224,230],{"__ignoreMap":173},[199,200,203],"span",{"class":201,"line":202},"line",1,[199,204,205],{},"GVAR(NotificationService) call [\"create\", [\n",[199,207,209],{"class":201,"line":208},2,[199,210,211],{}," \"success\",\n",[199,213,215],{"class":201,"line":214},3,[199,216,217],{}," \"Title\",\n",[199,219,221],{"class":201,"line":220},4,[199,222,223],{}," \"Notification text.\",\n",[199,225,227],{"class":201,"line":226},5,[199,228,229],{}," 4000\n",[199,231,233],{"class":201,"line":232},6,[199,234,235],{},"]];\n",[155,237,238],{},"Arguments:",[240,241,242,255],"table",{},[243,244,245],"thead",{},[246,247,248,252],"tr",{},[249,250,251],"th",{},"Argument",[249,253,254],{},"Purpose",[256,257,258,284,294,304],"tbody",{},[246,259,260,266],{},[261,262,263],"td",{},[175,264,265],{},"_type",[261,267,268,269,272,273,272,276,279,280,283],{},"Notification type, such as ",[175,270,271],{},"success",", ",[175,274,275],{},"info",[175,277,278],{},"warning",", or ",[175,281,282],{},"error",".",[246,285,286,291],{},[261,287,288],{},[175,289,290],{},"_title",[261,292,293],{},"Notification title.",[246,295,296,301],{},[261,297,298],{},[175,299,300],{},"_content",[261,302,303],{},"Notification body text.",[246,305,306,311],{},[261,307,308],{},[175,309,310],{},"_duration",[261,312,313],{},"Display duration in milliseconds.",[155,315,316,317,320],{},"The service dispatches a browser ",[175,318,319],{},"forge:notify"," custom event.",[159,322,324],{"id":323},"cba-event-surface","CBA Event Surface",[155,326,327],{},"Other addons can use the client notification event:",[167,329,331],{"className":193,"code":330,"language":195,"meta":173,"style":173},"[\"forge_client_notifications_recieveNotification\", [\n \"warning\",\n \"Garage\",\n \"Vehicle spawn position is blocked.\",\n 3000\n]] call CBA_fnc_localEvent;\n",[175,332,333,338,343,348,353,358],{"__ignoreMap":173},[199,334,335],{"class":201,"line":202},[199,336,337],{},"[\"forge_client_notifications_recieveNotification\", [\n",[199,339,340],{"class":201,"line":208},[199,341,342],{}," \"warning\",\n",[199,344,345],{"class":201,"line":214},[199,346,347],{}," \"Garage\",\n",[199,349,350],{"class":201,"line":220},[199,351,352],{}," \"Vehicle spawn position is blocked.\",\n",[199,354,355],{"class":201,"line":226},[199,356,357],{}," 3000\n",[199,359,360],{"class":201,"line":232},[199,361,362],{},"]] call CBA_fnc_localEvent;\n",[155,364,365],{},"The event payload is:",[167,367,369],{"className":193,"code":368,"language":195,"meta":173,"style":173},"[_type, _title, _content, _duration]\n",[175,370,371],{"__ignoreMap":173},[199,372,373],{"class":201,"line":202},[199,374,368],{},[159,376,378],{"id":377},"usage-rules","Usage Rules",[380,381,382,386,389,392],"ul",{},[383,384,385],"li",{},"Use the shared notification service instead of opening separate transient\nbrowser UIs.",[383,387,388],{},"Keep server-driven player feedback short and actionable.",[383,390,391],{},"Treat notification state as transient client UI state.",[383,393,394],{},"Do not use notifications as the only record of durable domain changes.",[159,396,398],{"id":397},"related-guides","Related Guides",[380,400,401,406,410,414],{},[383,402,403],{},[404,405,99],"a",{"href":95},[383,407,408],{},[404,409,129],{"href":130},[383,411,412],{},[404,413,121],{"href":122},[383,415,416],{},[404,417,109],{"href":110},[419,420,421],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":173,"searchDepth":208,"depth":208,"links":423},[424,425,426,427,428],{"id":161,"depth":208,"text":162},{"id":186,"depth":208,"text":187},{"id":323,"depth":208,"text":324},{"id":377,"depth":208,"text":378},{"id":397,"depth":208,"text":398},"md",null,{},true,{"title":137,"description":157},"P5hLsZEtZ07GJaZAEGp85RqGAXcXTLDP_pi2pwHR08o",[436,438],{"title":133,"path":134,"stem":135,"description":437,"children":-1},"The client locker addon manages personal locker display state, local locker\ncontainer behavior, and virtual arsenal unlock state.",{"title":141,"path":142,"stem":143,"description":439,"children":-1},"The client organization addon provides the organization portal UI and browser\nbridge for login, registration, membership, invites, credit lines, leave and\ndisband flows, assets, fleet, and treasury display.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/organization.html b/docus/dist/client-addons/organization.html new file mode 100644 index 0000000..0eb7724 --- /dev/null +++ b/docus/dist/client-addons/organization.html @@ -0,0 +1,122 @@ +Client Organization Usage Guide - forge-docus
Client Addons

Client Organization Usage Guide

The client organization addon provides the organization portal UI and browser +bridge for login, registration, membership, invites, credit lines, leave and +disband flows, assets, fleet, and treasury display.

Client Organization Usage Guide

The client organization addon provides the organization portal UI and browser +bridge for login, registration, membership, invites, credit lines, leave and +disband flows, assets, fleet, and treasury display.

Open Organization UI

call forge_client_org_fnc_openUI;
+

The UI opens RscOrg, loads ui/_site/index.html, and routes browser alerts +through forge_client_org_fnc_handleUIEvents.

Repository and Bridge

forge_client_org_fnc_initRepository caches organization portal state.

forge_client_org_fnc_initUIBridge owns:

  • active browser control tracking
  • portal hydrate requests
  • create/login response routing
  • leave and disband requests
  • credit-line assignment requests
  • invite, accept invite, and decline invite requests
  • targeted browser response events

Browser Events

EventClient behavior
org::readyMark browser ready and request org::sync.
org::login::requestRequest portal hydrate as org::login::success.
org::create::requestValidate org name and request creation on server.
org::disband::requestRequest disband on server.
org::leave::requestRequest leave on server.
org::credit::requestRequest credit-line assignment.
org::invite::requestRequest member invite.
org::invite::acceptAccept invite by org ID.
org::invite::declineDecline invite by org ID.
org::closeClose the display.

Browser Response Events

EventPurpose
org::syncFull portal sync payload.
org::login::successLogin hydrate payload.
org::create::successCreation hydrate payload.
org::create::failureCreation validation or server failure.
org::disband::successRequester disband success.
org::disband::failureDisband failure.
org::portal::revokedPortal state revoked by someone else's disband action.
org::leave::successLeave success.
org::leave::failureLeave failure.
org::credit::successCredit-line request success.
org::credit::failureCredit-line request failure.
org::member::creditUpdatedTargeted member credit-line patch.
org::invite::successInvite success.
org::invite::failureInvite failure.
org::invite::decision::successInvite accept/decline success.
org::invite::decision::failureInvite accept/decline failure.

Request Examples

Create organization request payload:

{
+  "orgName": "Example Logistics"
+}
+

Credit-line request payload:

{
+  "memberUid": "76561198000000000",
+  "memberName": "Player Name",
+  "amount": 2500
+}
+

Invite request payload:

{
+  "targetUid": "76561198000000000",
+  "targetName": "Player Name"
+}
+

Authoritative State

Organization funds, reputation, membership, invites, credit lines, assets, +fleet, and persistence are server-owned. The client portal only displays and +requests changes.

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/organization/_payload.json b/docus/dist/client-addons/organization/_payload.json new file mode 100644 index 0000000..d98a673 --- /dev/null +++ b/docus/dist/client-addons/organization/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":771},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-organization":145,"-client-addons-organization-surround":768},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":141,"body":147,"description":157,"extension":762,"links":763,"meta":764,"navigation":765,"path":142,"seo":766,"stem":143,"__hash__":767},"docs\u002F4.client-addons\u002F9.organization.md",{"type":148,"value":149,"toc":753},"minimark",[150,154,158,163,180,195,199,205,211,236,240,366,370,541,545,548,593,596,667,670,719,723,726,730,749],[151,152,141],"h1",{"id":153},"client-organization-usage-guide",[155,156,157],"p",{},"The client organization addon provides the organization portal UI and browser\nbridge for login, registration, membership, invites, credit lines, leave and\ndisband flows, assets, fleet, and treasury display.",[159,160,162],"h2",{"id":161},"open-organization-ui","Open Organization UI",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_org_fnc_openUI;\n","sqf","",[171,172,173],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,167],{},[155,181,182,183,186,187,190,191,194],{},"The UI opens ",[171,184,185],{},"RscOrg",", loads ",[171,188,189],{},"ui\u002F_site\u002Findex.html",", and routes browser alerts\nthrough ",[171,192,193],{},"forge_client_org_fnc_handleUIEvents",".",[159,196,198],{"id":197},"repository-and-bridge","Repository and Bridge",[155,200,201,204],{},[171,202,203],{},"forge_client_org_fnc_initRepository"," caches organization portal state.",[155,206,207,210],{},[171,208,209],{},"forge_client_org_fnc_initUIBridge"," owns:",[212,213,214,218,221,224,227,230,233],"ul",{},[215,216,217],"li",{},"active browser control tracking",[215,219,220],{},"portal hydrate requests",[215,222,223],{},"create\u002Flogin response routing",[215,225,226],{},"leave and disband requests",[215,228,229],{},"credit-line assignment requests",[215,231,232],{},"invite, accept invite, and decline invite requests",[215,234,235],{},"targeted browser response events",[159,237,239],{"id":238},"browser-events","Browser Events",[241,242,243,256],"table",{},[244,245,246],"thead",{},[247,248,249,253],"tr",{},[250,251,252],"th",{},"Event",[250,254,255],{},"Client behavior",[257,258,259,273,286,296,306,316,326,336,346,356],"tbody",{},[247,260,261,267],{},[262,263,264],"td",{},[171,265,266],{},"org::ready",[262,268,269,270,194],{},"Mark browser ready and request ",[171,271,272],{},"org::sync",[247,274,275,280],{},[262,276,277],{},[171,278,279],{},"org::login::request",[262,281,282,283,194],{},"Request portal hydrate as ",[171,284,285],{},"org::login::success",[247,287,288,293],{},[262,289,290],{},[171,291,292],{},"org::create::request",[262,294,295],{},"Validate org name and request creation on server.",[247,297,298,303],{},[262,299,300],{},[171,301,302],{},"org::disband::request",[262,304,305],{},"Request disband on server.",[247,307,308,313],{},[262,309,310],{},[171,311,312],{},"org::leave::request",[262,314,315],{},"Request leave on server.",[247,317,318,323],{},[262,319,320],{},[171,321,322],{},"org::credit::request",[262,324,325],{},"Request credit-line assignment.",[247,327,328,333],{},[262,329,330],{},[171,331,332],{},"org::invite::request",[262,334,335],{},"Request member invite.",[247,337,338,343],{},[262,339,340],{},[171,341,342],{},"org::invite::accept",[262,344,345],{},"Accept invite by org ID.",[247,347,348,353],{},[262,349,350],{},[171,351,352],{},"org::invite::decline",[262,354,355],{},"Decline invite by org ID.",[247,357,358,363],{},[262,359,360],{},[171,361,362],{},"org::close",[262,364,365],{},"Close the display.",[159,367,369],{"id":368},"browser-response-events","Browser Response Events",[241,371,372,381],{},[244,373,374],{},[247,375,376,378],{},[250,377,252],{},[250,379,380],{},"Purpose",[257,382,383,392,401,411,421,431,441,451,461,471,481,491,501,511,521,531],{},[247,384,385,389],{},[262,386,387],{},[171,388,272],{},[262,390,391],{},"Full portal sync payload.",[247,393,394,398],{},[262,395,396],{},[171,397,285],{},[262,399,400],{},"Login hydrate payload.",[247,402,403,408],{},[262,404,405],{},[171,406,407],{},"org::create::success",[262,409,410],{},"Creation hydrate payload.",[247,412,413,418],{},[262,414,415],{},[171,416,417],{},"org::create::failure",[262,419,420],{},"Creation validation or server failure.",[247,422,423,428],{},[262,424,425],{},[171,426,427],{},"org::disband::success",[262,429,430],{},"Requester disband success.",[247,432,433,438],{},[262,434,435],{},[171,436,437],{},"org::disband::failure",[262,439,440],{},"Disband failure.",[247,442,443,448],{},[262,444,445],{},[171,446,447],{},"org::portal::revoked",[262,449,450],{},"Portal state revoked by someone else's disband action.",[247,452,453,458],{},[262,454,455],{},[171,456,457],{},"org::leave::success",[262,459,460],{},"Leave success.",[247,462,463,468],{},[262,464,465],{},[171,466,467],{},"org::leave::failure",[262,469,470],{},"Leave failure.",[247,472,473,478],{},[262,474,475],{},[171,476,477],{},"org::credit::success",[262,479,480],{},"Credit-line request success.",[247,482,483,488],{},[262,484,485],{},[171,486,487],{},"org::credit::failure",[262,489,490],{},"Credit-line request failure.",[247,492,493,498],{},[262,494,495],{},[171,496,497],{},"org::member::creditUpdated",[262,499,500],{},"Targeted member credit-line patch.",[247,502,503,508],{},[262,504,505],{},[171,506,507],{},"org::invite::success",[262,509,510],{},"Invite success.",[247,512,513,518],{},[262,514,515],{},[171,516,517],{},"org::invite::failure",[262,519,520],{},"Invite failure.",[247,522,523,528],{},[262,524,525],{},[171,526,527],{},"org::invite::decision::success",[262,529,530],{},"Invite accept\u002Fdecline success.",[247,532,533,538],{},[262,534,535],{},[171,536,537],{},"org::invite::decision::failure",[262,539,540],{},"Invite accept\u002Fdecline failure.",[159,542,544],{"id":543},"request-examples","Request Examples",[155,546,547],{},"Create organization request payload:",[164,549,553],{"className":550,"code":551,"language":552,"meta":169,"style":169},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"orgName\": \"Example Logistics\"\n}\n","json",[171,554,555,561,587],{"__ignoreMap":169},[174,556,557],{"class":176,"line":177},[174,558,560],{"class":559},"sMK4o","{\n",[174,562,564,567,571,574,577,580,584],{"class":176,"line":563},2,[174,565,566],{"class":559}," \"",[174,568,570],{"class":569},"spNyl","orgName",[174,572,573],{"class":559},"\"",[174,575,576],{"class":559},":",[174,578,579],{"class":559}," \"",[174,581,583],{"class":582},"sfazB","Example Logistics",[174,585,586],{"class":559},"\"\n",[174,588,590],{"class":176,"line":589},3,[174,591,592],{"class":559},"}\n",[155,594,595],{},"Credit-line request payload:",[164,597,599],{"className":550,"code":598,"language":552,"meta":169,"style":169},"{\n \"memberUid\": \"76561198000000000\",\n \"memberName\": \"Player Name\",\n \"amount\": 2500\n}\n",[171,600,601,605,626,646,662],{"__ignoreMap":169},[174,602,603],{"class":176,"line":177},[174,604,560],{"class":559},[174,606,607,609,612,614,616,618,621,623],{"class":176,"line":563},[174,608,566],{"class":559},[174,610,611],{"class":569},"memberUid",[174,613,573],{"class":559},[174,615,576],{"class":559},[174,617,579],{"class":559},[174,619,620],{"class":582},"76561198000000000",[174,622,573],{"class":559},[174,624,625],{"class":559},",\n",[174,627,628,630,633,635,637,639,642,644],{"class":176,"line":589},[174,629,566],{"class":559},[174,631,632],{"class":569},"memberName",[174,634,573],{"class":559},[174,636,576],{"class":559},[174,638,579],{"class":559},[174,640,641],{"class":582},"Player Name",[174,643,573],{"class":559},[174,645,625],{"class":559},[174,647,649,651,654,656,658],{"class":176,"line":648},4,[174,650,566],{"class":559},[174,652,653],{"class":569},"amount",[174,655,573],{"class":559},[174,657,576],{"class":559},[174,659,661],{"class":660},"sbssI"," 2500\n",[174,663,665],{"class":176,"line":664},5,[174,666,592],{"class":559},[155,668,669],{},"Invite request payload:",[164,671,673],{"className":550,"code":672,"language":552,"meta":169,"style":169},"{\n \"targetUid\": \"76561198000000000\",\n \"targetName\": \"Player Name\"\n}\n",[171,674,675,679,698,715],{"__ignoreMap":169},[174,676,677],{"class":176,"line":177},[174,678,560],{"class":559},[174,680,681,683,686,688,690,692,694,696],{"class":176,"line":563},[174,682,566],{"class":559},[174,684,685],{"class":569},"targetUid",[174,687,573],{"class":559},[174,689,576],{"class":559},[174,691,579],{"class":559},[174,693,620],{"class":582},[174,695,573],{"class":559},[174,697,625],{"class":559},[174,699,700,702,705,707,709,711,713],{"class":176,"line":589},[174,701,566],{"class":559},[174,703,704],{"class":569},"targetName",[174,706,573],{"class":559},[174,708,576],{"class":559},[174,710,579],{"class":559},[174,712,641],{"class":582},[174,714,586],{"class":559},[174,716,717],{"class":176,"line":648},[174,718,592],{"class":559},[159,720,722],{"id":721},"authoritative-state","Authoritative State",[155,724,725],{},"Organization funds, reputation, membership, invites, credit lines, assets,\nfleet, and persistence are server-owned. The client portal only displays and\nrequests changes.",[159,727,729],{"id":728},"related-guides","Related Guides",[212,731,732,737,741,745],{},[215,733,734],{},[735,736,81],"a",{"href":82},[215,738,739],{},[735,740,113],{"href":114},[215,742,743],{},[735,744,121],{"href":122},[215,746,747],{},[735,748,109],{"href":110},[750,751,752],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":169,"searchDepth":563,"depth":563,"links":754},[755,756,757,758,759,760,761],{"id":161,"depth":563,"text":162},{"id":197,"depth":563,"text":198},{"id":238,"depth":563,"text":239},{"id":368,"depth":563,"text":369},{"id":543,"depth":563,"text":544},{"id":721,"depth":563,"text":722},{"id":728,"depth":563,"text":729},"md",null,{},true,{"title":141,"description":157},"55er24PBmMaI2LQjtirzxJhMPRLdoX0WEvJjQx-Ptgc",[769,763],{"title":137,"path":138,"stem":139,"description":770,"children":-1},"The client notifications addon owns the notification HUD, notification sound,\nand local notification service used by Forge client and server modules.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/phone.html b/docus/dist/client-addons/phone.html new file mode 100644 index 0000000..cdfe2c8 --- /dev/null +++ b/docus/dist/client-addons/phone.html @@ -0,0 +1,115 @@ +Client Phone Usage Guide - forge-docus
Client Addons

Client Phone Usage Guide

The client phone addon provides the in-game phone UI for contacts, SMS +messages, email, and local utility apps such as notes, calendar events, world +clocks, and alarms.

Client Phone Usage Guide

The client phone addon provides the in-game phone UI for contacts, SMS +messages, email, and local utility apps such as notes, calendar events, world +clocks, and alarms.

Open Phone UI

call forge_client_phone_fnc_openUI;
+

The phone UI creates RscPhone, loads ui/_site/index.html, and routes +browser alerts through forge_client_phone_fnc_handleUIEvents.

State Ownership

Contacts, messages, and emails are server-owned and requested through the +server phone addon.

Local utility app state is stored in profileNamespace:

  • notes
  • calendar events
  • world clocks
  • alarms
  • theme/preferences

Phone Class

forge_client_phone_fnc_initClass creates GVAR(PhoneClass).

The phone class currently owns local notes, events, and settings helpers. +Contacts, messages, and emails continue to use server-backed request/response +events.

Browser Events

Session and Preferences

EventClient behavior
phone::get::playerSend player UID to browser with setPlayerUid.
phone::get::themeSend saved light/dark theme to browser.
phone::set::themeSave theme preference to profileNamespace.

Contacts

EventClient behavior
phone::get::contactsLoad cached contacts and request server refresh.
phone::refresh::contactsRequest contacts from server.
phone::add::contactAdd contact by phone number.
phone::add::contact::by::phoneAdd contact by phone number.
phone::add::contact::by::emailAdd contact by email.
phone::remove::contactRemove contact by UID.

Messages

EventClient behavior
phone::get::messagesRequest messages from server.
phone::get::message::threadRequest thread with another UID.
phone::send::messageSend SMS through server.
phone::mark::message::readMark message read on server.
phone::delete::messageDelete message on server.

Email

EventClient behavior
phone::get::emailsRequest emails from server.
phone::send::emailSend email through server.
phone::mark::email::readMark email read on server.
phone::delete::emailDelete email on server.

Local Utility Apps

EventClient behavior
phone::get::notesLoad local notes.
phone::save::noteSave local note.
phone::delete::noteDelete local note.
phone::get::eventsLoad local calendar events.
phone::save::eventSave local calendar event.
phone::delete::eventDelete local calendar event.
phone::get::clocksLoad local world clocks.
phone::save::clockSave local world clock.
phone::delete::clockDelete local world clock.
phone::get::alarmsLoad local alarms.
phone::save::alarmSave local alarm.
phone::delete::alarmDelete local alarm.
phone::toggle::alarmToggle local alarm enabled state.

Usage Rules

  • Send contact, message, and email mutations to the server phone addon.
  • Keep local-only utility apps in profileNamespace until they are migrated to +server-backed storage.
  • Do not treat local phone utility state as shared multiplayer state.
  • Validate required UID, phone, email, subject, and message fields before +sending server requests.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/phone/_payload.json b/docus/dist/client-addons/phone/_payload.json new file mode 100644 index 0000000..eb674c2 --- /dev/null +++ b/docus/dist/client-addons/phone/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":718},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-phone":145,"-client-addons-phone-surround":713},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":105,"body":147,"description":157,"extension":707,"links":708,"meta":709,"navigation":710,"path":106,"seo":711,"stem":107,"__hash__":712},"docs\u002F4.client-addons\u002F10.phone.md",{"type":148,"value":149,"toc":691},"minimark",[150,154,158,163,180,195,199,202,209,228,232,241,244,248,253,308,312,383,387,449,453,505,509,651,655,672,676,687],[151,152,105],"h1",{"id":153},"client-phone-usage-guide",[155,156,157],"p",{},"The client phone addon provides the in-game phone UI for contacts, SMS\nmessages, email, and local utility apps such as notes, calendar events, world\nclocks, and alarms.",[159,160,162],"h2",{"id":161},"open-phone-ui","Open Phone UI",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_phone_fnc_openUI;\n","sqf","",[171,172,173],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,167],{},[155,181,182,183,186,187,190,191,194],{},"The phone UI creates ",[171,184,185],{},"RscPhone",", loads ",[171,188,189],{},"ui\u002F_site\u002Findex.html",", and routes\nbrowser alerts through ",[171,192,193],{},"forge_client_phone_fnc_handleUIEvents",".",[159,196,198],{"id":197},"state-ownership","State Ownership",[155,200,201],{},"Contacts, messages, and emails are server-owned and requested through the\nserver phone addon.",[155,203,204,205,208],{},"Local utility app state is stored in ",[171,206,207],{},"profileNamespace",":",[210,211,212,216,219,222,225],"ul",{},[213,214,215],"li",{},"notes",[213,217,218],{},"calendar events",[213,220,221],{},"world clocks",[213,223,224],{},"alarms",[213,226,227],{},"theme\u002Fpreferences",[159,229,231],{"id":230},"phone-class","Phone Class",[155,233,234,237,238,194],{},[171,235,236],{},"forge_client_phone_fnc_initClass"," creates ",[171,239,240],{},"GVAR(PhoneClass)",[155,242,243],{},"The phone class currently owns local notes, events, and settings helpers.\nContacts, messages, and emails continue to use server-backed request\u002Fresponse\nevents.",[159,245,247],{"id":246},"browser-events","Browser Events",[249,250,252],"h3",{"id":251},"session-and-preferences","Session and Preferences",[254,255,256,269],"table",{},[257,258,259],"thead",{},[260,261,262,266],"tr",{},[263,264,265],"th",{},"Event",[263,267,268],{},"Client behavior",[270,271,272,286,296],"tbody",{},[260,273,274,280],{},[275,276,277],"td",{},[171,278,279],{},"phone::get::player",[275,281,282,283,194],{},"Send player UID to browser with ",[171,284,285],{},"setPlayerUid",[260,287,288,293],{},[275,289,290],{},[171,291,292],{},"phone::get::theme",[275,294,295],{},"Send saved light\u002Fdark theme to browser.",[260,297,298,303],{},[275,299,300],{},[171,301,302],{},"phone::set::theme",[275,304,305,306,194],{},"Save theme preference to ",[171,307,207],{},[249,309,311],{"id":310},"contacts","Contacts",[254,313,314,322],{},[257,315,316],{},[260,317,318,320],{},[263,319,265],{},[263,321,268],{},[270,323,324,334,344,354,363,373],{},[260,325,326,331],{},[275,327,328],{},[171,329,330],{},"phone::get::contacts",[275,332,333],{},"Load cached contacts and request server refresh.",[260,335,336,341],{},[275,337,338],{},[171,339,340],{},"phone::refresh::contacts",[275,342,343],{},"Request contacts from server.",[260,345,346,351],{},[275,347,348],{},[171,349,350],{},"phone::add::contact",[275,352,353],{},"Add contact by phone number.",[260,355,356,361],{},[275,357,358],{},[171,359,360],{},"phone::add::contact::by::phone",[275,362,353],{},[260,364,365,370],{},[275,366,367],{},[171,368,369],{},"phone::add::contact::by::email",[275,371,372],{},"Add contact by email.",[260,374,375,380],{},[275,376,377],{},[171,378,379],{},"phone::remove::contact",[275,381,382],{},"Remove contact by UID.",[249,384,386],{"id":385},"messages","Messages",[254,388,389,397],{},[257,390,391],{},[260,392,393,395],{},[263,394,265],{},[263,396,268],{},[270,398,399,409,419,429,439],{},[260,400,401,406],{},[275,402,403],{},[171,404,405],{},"phone::get::messages",[275,407,408],{},"Request messages from server.",[260,410,411,416],{},[275,412,413],{},[171,414,415],{},"phone::get::message::thread",[275,417,418],{},"Request thread with another UID.",[260,420,421,426],{},[275,422,423],{},[171,424,425],{},"phone::send::message",[275,427,428],{},"Send SMS through server.",[260,430,431,436],{},[275,432,433],{},[171,434,435],{},"phone::mark::message::read",[275,437,438],{},"Mark message read on server.",[260,440,441,446],{},[275,442,443],{},[171,444,445],{},"phone::delete::message",[275,447,448],{},"Delete message on server.",[249,450,452],{"id":451},"email","Email",[254,454,455,463],{},[257,456,457],{},[260,458,459,461],{},[263,460,265],{},[263,462,268],{},[270,464,465,475,485,495],{},[260,466,467,472],{},[275,468,469],{},[171,470,471],{},"phone::get::emails",[275,473,474],{},"Request emails from server.",[260,476,477,482],{},[275,478,479],{},[171,480,481],{},"phone::send::email",[275,483,484],{},"Send email through server.",[260,486,487,492],{},[275,488,489],{},[171,490,491],{},"phone::mark::email::read",[275,493,494],{},"Mark email read on server.",[260,496,497,502],{},[275,498,499],{},[171,500,501],{},"phone::delete::email",[275,503,504],{},"Delete email on server.",[249,506,508],{"id":507},"local-utility-apps","Local Utility Apps",[254,510,511,519],{},[257,512,513],{},[260,514,515,517],{},[263,516,265],{},[263,518,268],{},[270,520,521,531,541,551,561,571,581,591,601,611,621,631,641],{},[260,522,523,528],{},[275,524,525],{},[171,526,527],{},"phone::get::notes",[275,529,530],{},"Load local notes.",[260,532,533,538],{},[275,534,535],{},[171,536,537],{},"phone::save::note",[275,539,540],{},"Save local note.",[260,542,543,548],{},[275,544,545],{},[171,546,547],{},"phone::delete::note",[275,549,550],{},"Delete local note.",[260,552,553,558],{},[275,554,555],{},[171,556,557],{},"phone::get::events",[275,559,560],{},"Load local calendar events.",[260,562,563,568],{},[275,564,565],{},[171,566,567],{},"phone::save::event",[275,569,570],{},"Save local calendar event.",[260,572,573,578],{},[275,574,575],{},[171,576,577],{},"phone::delete::event",[275,579,580],{},"Delete local calendar event.",[260,582,583,588],{},[275,584,585],{},[171,586,587],{},"phone::get::clocks",[275,589,590],{},"Load local world clocks.",[260,592,593,598],{},[275,594,595],{},[171,596,597],{},"phone::save::clock",[275,599,600],{},"Save local world clock.",[260,602,603,608],{},[275,604,605],{},[171,606,607],{},"phone::delete::clock",[275,609,610],{},"Delete local world clock.",[260,612,613,618],{},[275,614,615],{},[171,616,617],{},"phone::get::alarms",[275,619,620],{},"Load local alarms.",[260,622,623,628],{},[275,624,625],{},[171,626,627],{},"phone::save::alarm",[275,629,630],{},"Save local alarm.",[260,632,633,638],{},[275,634,635],{},[171,636,637],{},"phone::delete::alarm",[275,639,640],{},"Delete local alarm.",[260,642,643,648],{},[275,644,645],{},[171,646,647],{},"phone::toggle::alarm",[275,649,650],{},"Toggle local alarm enabled state.",[159,652,654],{"id":653},"usage-rules","Usage Rules",[210,656,657,660,666,669],{},[213,658,659],{},"Send contact, message, and email mutations to the server phone addon.",[213,661,662,663,665],{},"Keep local-only utility apps in ",[171,664,207],{}," until they are migrated to\nserver-backed storage.",[213,667,668],{},"Do not treat local phone utility state as shared multiplayer state.",[213,670,671],{},"Validate required UID, phone, email, subject, and message fields before\nsending server requests.",[159,673,675],{"id":674},"related-guides","Related Guides",[210,677,678,683],{},[213,679,680],{},[681,682,89],"a",{"href":90},[213,684,685],{},[681,686,137],{"href":138},[688,689,690],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":169,"searchDepth":692,"depth":692,"links":693},2,[694,695,696,697,705,706],{"id":161,"depth":692,"text":162},{"id":197,"depth":692,"text":198},{"id":230,"depth":692,"text":231},{"id":246,"depth":692,"text":247,"children":698},[699,701,702,703,704],{"id":251,"depth":700,"text":252},3,{"id":310,"depth":700,"text":311},{"id":385,"depth":700,"text":386},{"id":451,"depth":700,"text":452},{"id":507,"depth":700,"text":508},{"id":653,"depth":692,"text":654},{"id":674,"depth":692,"text":675},"md",null,{},true,{"title":105,"description":157},"0NTtS9Y0Ou2ZP0DjQSKm3TT1mcZwqsRjnA5q7p__qdo",[714,716],{"title":101,"path":102,"stem":103,"description":715,"children":-1},"The client main addon provides the shared mod identity, version metadata,\nCBA settings, and macro foundation used by the Forge client addons.",{"title":109,"path":110,"stem":111,"description":717,"children":-1},"The client store addon provides the storefront browser UI for catalog browsing,\ncategory hydration, payment source display, cart handling, and checkout\nrequests.",1776806627742] \ No newline at end of file diff --git a/docus/dist/client-addons/store.html b/docus/dist/client-addons/store.html new file mode 100644 index 0000000..93ca4a5 --- /dev/null +++ b/docus/dist/client-addons/store.html @@ -0,0 +1,122 @@ +Client Store Usage Guide - forge-docus
Client Addons

Client Store Usage Guide

The client store addon provides the storefront browser UI for catalog browsing, +category hydration, payment source display, cart handling, and checkout +requests.

Client Store Usage Guide

The client store addon provides the storefront browser UI for catalog browsing, +category hydration, payment source display, cart handling, and checkout +requests.

Open Store UI

call forge_client_store_fnc_openUI;
+

The UI opens RscStore, loads ui/_site/index.html, and routes browser alerts +through forge_client_store_fnc_handleUIEvents.

Bridge

forge_client_store_fnc_initUIBridge owns:

  • browser control lookup
  • store hydrate requests
  • category requests
  • checkout requests
  • category hydrate/failure responses
  • checkout success/failure responses
  • store config refresh after successful checkout

Store currently uses its own StoreUIBridge.receive(...) browser bridge rather +than the shared ForgeBridge.receive(...) delivery used by newer bridges.

Browser Events

EventClient behavior
store::readyRequest store hydrate from the server.
store::category::requestRequest catalog items for a category.
store::checkout::requestForward checkout JSON to the server.
store::closeClose the display.

Browser Response Events

EventPurpose
store::hydrateInitial storefront/session/config payload.
store::config::hydrateRefreshed payment/source config.
store::category::hydrateCategory catalog payload.
store::category::failureCategory request failure.
store::checkout::successCheckout success payload.
store::checkout::failureCheckout failure payload.

Category Requests

Category requests require a non-empty category value.

{
+  "category": "weapons"
+}
+

The client lowercases the category before forwarding it to the server store +addon.

Checkout Requests

Checkout requests send a serialized checkout payload:

{
+  "checkoutJson": "{\"items\":[],\"paymentSource\":\"cash\"}"
+}
+

The client only forwards the checkout data. The server store addon and +extension validate prices, inventory grants, payment source authorization, and +integration with bank, organization, locker, and garage state.

After a successful checkout, the client asks the server for a fresh store config +payload so payment-source balances and permissions stay current.

Authoritative State

Catalog data, prices, checkout validation, money movement, organization funds, +credit lines, locker grants, garage grants, and persistence are server-owned.

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/client-addons/store/_payload.json b/docus/dist/client-addons/store/_payload.json new file mode 100644 index 0000000..0f447f5 --- /dev/null +++ b/docus/dist/client-addons/store/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":571},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-store":145,"-client-addons-store-surround":566},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":109,"body":147,"description":157,"extension":560,"links":561,"meta":562,"navigation":563,"path":110,"seo":564,"stem":111,"__hash__":565},"docs\u002F4.client-addons\u002F11.store.md",{"type":148,"value":149,"toc":550},"minimark",[150,154,158,163,180,195,199,205,230,241,245,305,309,382,386,389,434,437,441,444,506,509,512,516,519,523,546],[151,152,109],"h1",{"id":153},"client-store-usage-guide",[155,156,157],"p",{},"The client store addon provides the storefront browser UI for catalog browsing,\ncategory hydration, payment source display, cart handling, and checkout\nrequests.",[159,160,162],"h2",{"id":161},"open-store-ui","Open Store UI",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_store_fnc_openUI;\n","sqf","",[171,172,173],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,167],{},[155,181,182,183,186,187,190,191,194],{},"The UI opens ",[171,184,185],{},"RscStore",", loads ",[171,188,189],{},"ui\u002F_site\u002Findex.html",", and routes browser alerts\nthrough ",[171,192,193],{},"forge_client_store_fnc_handleUIEvents",".",[159,196,198],{"id":197},"bridge","Bridge",[155,200,201,204],{},[171,202,203],{},"forge_client_store_fnc_initUIBridge"," owns:",[206,207,208,212,215,218,221,224,227],"ul",{},[209,210,211],"li",{},"browser control lookup",[209,213,214],{},"store hydrate requests",[209,216,217],{},"category requests",[209,219,220],{},"checkout requests",[209,222,223],{},"category hydrate\u002Ffailure responses",[209,225,226],{},"checkout success\u002Ffailure responses",[209,228,229],{},"store config refresh after successful checkout",[155,231,232,233,236,237,240],{},"Store currently uses its own ",[171,234,235],{},"StoreUIBridge.receive(...)"," browser bridge rather\nthan the shared ",[171,238,239],{},"ForgeBridge.receive(...)"," delivery used by newer bridges.",[159,242,244],{"id":243},"browser-events","Browser Events",[246,247,248,261],"table",{},[249,250,251],"thead",{},[252,253,254,258],"tr",{},[255,256,257],"th",{},"Event",[255,259,260],{},"Client behavior",[262,263,264,275,285,295],"tbody",{},[252,265,266,272],{},[267,268,269],"td",{},[171,270,271],{},"store::ready",[267,273,274],{},"Request store hydrate from the server.",[252,276,277,282],{},[267,278,279],{},[171,280,281],{},"store::category::request",[267,283,284],{},"Request catalog items for a category.",[252,286,287,292],{},[267,288,289],{},[171,290,291],{},"store::checkout::request",[267,293,294],{},"Forward checkout JSON to the server.",[252,296,297,302],{},[267,298,299],{},[171,300,301],{},"store::close",[267,303,304],{},"Close the display.",[159,306,308],{"id":307},"browser-response-events","Browser Response Events",[246,310,311,320],{},[249,312,313],{},[252,314,315,317],{},[255,316,257],{},[255,318,319],{},"Purpose",[262,321,322,332,342,352,362,372],{},[252,323,324,329],{},[267,325,326],{},[171,327,328],{},"store::hydrate",[267,330,331],{},"Initial storefront\u002Fsession\u002Fconfig payload.",[252,333,334,339],{},[267,335,336],{},[171,337,338],{},"store::config::hydrate",[267,340,341],{},"Refreshed payment\u002Fsource config.",[252,343,344,349],{},[267,345,346],{},[171,347,348],{},"store::category::hydrate",[267,350,351],{},"Category catalog payload.",[252,353,354,359],{},[267,355,356],{},[171,357,358],{},"store::category::failure",[267,360,361],{},"Category request failure.",[252,363,364,369],{},[267,365,366],{},[171,367,368],{},"store::checkout::success",[267,370,371],{},"Checkout success payload.",[252,373,374,379],{},[267,375,376],{},[171,377,378],{},"store::checkout::failure",[267,380,381],{},"Checkout failure payload.",[159,383,385],{"id":384},"category-requests","Category Requests",[155,387,388],{},"Category requests require a non-empty category value.",[164,390,394],{"className":391,"code":392,"language":393,"meta":169,"style":169},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"category\": \"weapons\"\n}\n","json",[171,395,396,402,428],{"__ignoreMap":169},[174,397,398],{"class":176,"line":177},[174,399,401],{"class":400},"sMK4o","{\n",[174,403,405,408,412,415,418,421,425],{"class":176,"line":404},2,[174,406,407],{"class":400}," \"",[174,409,411],{"class":410},"spNyl","category",[174,413,414],{"class":400},"\"",[174,416,417],{"class":400},":",[174,419,420],{"class":400}," \"",[174,422,424],{"class":423},"sfazB","weapons",[174,426,427],{"class":400},"\"\n",[174,429,431],{"class":176,"line":430},3,[174,432,433],{"class":400},"}\n",[155,435,436],{},"The client lowercases the category before forwarding it to the server store\naddon.",[159,438,440],{"id":439},"checkout-requests","Checkout Requests",[155,442,443],{},"Checkout requests send a serialized checkout payload:",[164,445,447],{"className":391,"code":446,"language":393,"meta":169,"style":169},"{\n \"checkoutJson\": \"{\\\"items\\\":[],\\\"paymentSource\\\":\\\"cash\\\"}\"\n}\n",[171,448,449,453,502],{"__ignoreMap":169},[174,450,451],{"class":176,"line":177},[174,452,401],{"class":400},[174,454,455,457,460,462,464,466,469,473,476,478,481,483,486,488,490,492,495,497,500],{"class":176,"line":404},[174,456,407],{"class":400},[174,458,459],{"class":410},"checkoutJson",[174,461,414],{"class":400},[174,463,417],{"class":400},[174,465,420],{"class":400},[174,467,468],{"class":423},"{",[174,470,472],{"class":471},"sTEyZ","\\\"",[174,474,475],{"class":423},"items",[174,477,472],{"class":471},[174,479,480],{"class":423},":[],",[174,482,472],{"class":471},[174,484,485],{"class":423},"paymentSource",[174,487,472],{"class":471},[174,489,417],{"class":423},[174,491,472],{"class":471},[174,493,494],{"class":423},"cash",[174,496,472],{"class":471},[174,498,499],{"class":423},"}",[174,501,427],{"class":400},[174,503,504],{"class":176,"line":430},[174,505,433],{"class":400},[155,507,508],{},"The client only forwards the checkout data. The server store addon and\nextension validate prices, inventory grants, payment source authorization, and\nintegration with bank, organization, locker, and garage state.",[155,510,511],{},"After a successful checkout, the client asks the server for a fresh store config\npayload so payment-source balances and permissions stay current.",[159,513,515],{"id":514},"authoritative-state","Authoritative State",[155,517,518],{},"Catalog data, prices, checkout validation, money movement, organization funds,\ncredit lines, locker grants, garage grants, and persistence are server-owned.",[159,520,522],{"id":521},"related-guides","Related Guides",[206,524,525,530,534,538,542],{},[209,526,527],{},[528,529,53],"a",{"href":54},[209,531,532],{},[528,533,121],{"href":122},[209,535,536],{},[528,537,141],{"href":142},[209,539,540],{},[528,541,133],{"href":134},[209,543,544],{},[528,545,129],{"href":130},[547,548,549],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":169,"searchDepth":404,"depth":404,"links":551},[552,553,554,555,556,557,558,559],{"id":161,"depth":404,"text":162},{"id":197,"depth":404,"text":198},{"id":243,"depth":404,"text":244},{"id":307,"depth":404,"text":308},{"id":384,"depth":404,"text":385},{"id":439,"depth":404,"text":440},{"id":514,"depth":404,"text":515},{"id":521,"depth":404,"text":522},"md",null,{},true,{"title":109,"description":157},"_8o4h6aY-FR4MYNv4DJEbZDm0AHB3KRAnI2hPi2cCII",[567,569],{"title":105,"path":106,"stem":107,"description":568,"children":-1},"The client phone addon provides the in-game phone UI for contacts, SMS\nmessages, email, and local utility apps such as notes, calendar events, world\nclocks, and alarms.",{"title":113,"path":114,"stem":115,"description":570,"children":-1},"The client common addon contains shared browser UI bridge declarations and\ncommon client-side browser integration patterns.",1776806627742] \ No newline at end of file diff --git a/docus/dist/getting-started.html b/docus/dist/getting-started.html new file mode 100644 index 0000000..6ca6042 --- /dev/null +++ b/docus/dist/getting-started.html @@ -0,0 +1,104 @@ +Getting Started - forge-docus
Getting Started

Getting Started

Use this section as the main entry point for the Forge framework.

Getting Started

Use this section as the main entry point for the Forge framework.

Forge combines:

  • Arma 3 client addons for UX and browser-hosted interfaces
  • Arma 3 server addons for mission integration and authoritative flow control
  • a Rust server extension for command routing and persistence
  • shared Rust crates for models, repositories, and services
  • SurrealDB for durable storage

Common Commands

cargo test
+npm run build:webui
+.\build-arma.ps1
+

Start Here

Architecture
Understand how SQF, Rust services, SurrealDB, and browser UIs fit together.
Module Reference
Review gameplay domains, infrastructure modules, and extension command groups.
Development Guide
See the rules for adding modules and changing boundaries without regressions.
SurrealDB Setup
Install SurrealDB, match Forge config values, and choose the right setup path +for developers or admin-facing roles.
Server Extension
Follow the extension architecture, API surface, and SQF usage examples.
Server Modules
Dive into the actor, bank, CAD, garage, locker, organization, phone, store, +task, and owned-storage guides.
Client Addons
Explore the client bridge model and addon-specific browser integration rules.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/getting-started/_payload.json b/docus/dist/getting-started/_payload.json new file mode 100644 index 0000000..a472a5c --- /dev/null +++ b/docus/dist/getting-started/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":268},["ShallowReactive",2],{"navigation_docs":3,"-getting-started":145,"-getting-started-surround":265},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":5,"body":147,"description":157,"extension":259,"links":260,"meta":261,"navigation":262,"path":6,"seo":263,"stem":7,"__hash__":264},"docs\u002F1.getting-started\u002F0.index.md",{"type":148,"value":149,"toc":255},"minimark",[150,154,158,161,180,185,215,219,251],[151,152,5],"h1",{"id":153},"getting-started",[155,156,157],"p",{},"Use this section as the main entry point for the Forge framework.",[155,159,160],{},"Forge combines:",[162,163,164,168,171,174,177],"ul",{},[165,166,167],"li",{},"Arma 3 client addons for UX and browser-hosted interfaces",[165,169,170],{},"Arma 3 server addons for mission integration and authoritative flow control",[165,172,173],{},"a Rust server extension for command routing and persistence",[165,175,176],{},"shared Rust crates for models, repositories, and services",[165,178,179],{},"SurrealDB for durable storage",[181,182,184],"h2",{"id":183},"common-commands","Common Commands",[186,187,192],"pre",{"className":188,"code":189,"language":190,"meta":191,"style":191},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cargo test\nnpm run build:webui\n.\\build-arma.ps1\n","powershell","",[193,194,195,203,209],"code",{"__ignoreMap":191},[196,197,200],"span",{"class":198,"line":199},"line",1,[196,201,202],{},"cargo test\n",[196,204,206],{"class":198,"line":205},2,[196,207,208],{},"npm run build:webui\n",[196,210,212],{"class":198,"line":211},3,[196,213,214],{},".\\build-arma.ps1\n",[181,216,218],{"id":217},"start-here","Start Here",[220,221,222,228,232,236,240,245,248],"u-page-grid",{},[223,224,227],"u-page-card",{"icon":225,"title":226,"to":12},"i-lucide-network","Architecture","Understand how SQF, Rust services, SurrealDB, and browser UIs fit together.",[223,229,231],{"icon":230,"title":15,"to":16},"i-lucide-boxes","Review gameplay domains, infrastructure modules, and extension command groups.",[223,233,235],{"icon":234,"title":19,"to":20},"i-lucide-wrench","See the rules for adding modules and changing boundaries without regressions.",[223,237,239],{"icon":238,"title":23,"to":24},"i-lucide-database","Install SurrealDB, match Forge config values, and choose the right setup path\nfor developers or admin-facing roles.",[223,241,244],{"icon":242,"title":243,"to":29},"i-lucide-server-cog","Server Extension","Follow the extension architecture, API surface, and SQF usage examples.",[223,246,247],{"icon":92,"title":42,"to":43},"Dive into the actor, bank, CAD, garage, locker, organization, phone, store,\ntask, and owned-storage guides.",[223,249,250],{"icon":144,"title":94,"to":95},"Explore the client bridge model and addon-specific browser integration rules.",[252,253,254],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":191,"searchDepth":205,"depth":205,"links":256},[257,258],{"id":183,"depth":205,"text":184},{"id":217,"depth":205,"text":218},"md",null,{},true,{"title":5,"description":157},"S3Xe9nM8bUIoSC2wMWB6DiA3AF4Pcfw7DxQNTkDDSbc",[260,266],{"title":11,"path":12,"stem":13,"description":267,"children":-1},"Forge is organized around domain modules. A domain usually has SQF addon\nentry points, Rust models, repository traits, service logic, extension command\nhandlers, and optional browser UI.",1776806627034] \ No newline at end of file diff --git a/docus/dist/getting-started/architecture.html b/docus/dist/getting-started/architecture.html new file mode 100644 index 0000000..136a2ba --- /dev/null +++ b/docus/dist/getting-started/architecture.html @@ -0,0 +1,154 @@ +Framework Architecture - forge-docus
Getting Started

Framework Architecture

Forge is organized around domain modules. A domain usually has SQF addon +entry points, Rust models, repository traits, service logic, extension command +handlers, and optional browser UI.

Framework Architecture

Forge is organized around domain modules. A domain usually has SQF addon +entry points, Rust models, repository traits, service logic, extension command +handlers, and optional browser UI.

Runtime Flow

Arma client UI or SQF action
+  -> client addon bridge
+  -> server addon function
+  -> forge_server callExtension command
+  -> extension command group
+  -> forge-services domain service
+  -> forge-repositories trait
+  -> SurrealDB repository implementation
+  -> SurrealDB
+

For small payloads, server SQF calls forge_server directly through the +extension bridge. For large payloads, arma/server/addons/extension stages +request and response chunks through the extension transport module.

Main Layers

Client Addons

Client addons live under arma/client/addons. They own local player UX, +keybinds, browser UI dialogs, and UI-to-SQF event handling. When a client needs +durable or authoritative state, it routes work to the matching server addon +instead of touching persistence directly.

Server Addons

Server addons live under arma/server/addons. They own server-side SQF +initialization, game-object integration, validation near the Arma runtime, and +calls into the Rust extension. The extension addon is the shared bridge for +callExtension and transport handling.

Rust Extension

The server extension lives under arma/server/extension. It registers the +forge_server command groups, loads configuration, initializes SurrealDB, and +maps SQF command inputs into service calls.

The extension should stay thin:

  • Parse and validate command arguments that arrive from SQF.
  • Resolve Arma-specific context such as player UID when required.
  • Call the matching service.
  • Serialize the service result back to JSON or a simple string.

Shared Rust Crates

The lib workspace contains reusable Rust crates:

  • forge-models: shared domain structs and serialization rules.
  • forge-repositories: storage-agnostic repository traits and in-memory +implementations used by tests and hot-state services.
  • forge-services: domain behavior, validation, and mutation workflows.
  • forge-shared: cross-crate helpers.

Persistence

Durable storage is SurrealDB. Schema modules live under +arma/server/extension/src/schema, and concrete SurrealDB repository +implementations live under arma/server/extension/src/storage.

Repository traits stay in lib/repositories so service logic remains testable +without a database.

Hot State

Several domains have hot command groups. Hot state keeps a runtime copy of +frequently accessed data in memory, then saves it back to durable storage when +requested. This is useful for player state that changes often during a session.

Typical hot-state flow:

actor:hot:init
+actor:hot:get
+actor:hot:override
+actor:hot:save
+actor:hot:remove
+

Use hot state for session workflows. Use normal domain commands for direct +durable CRUD operations.

Transport Layer

The transport layer exists because Arma extension calls have practical payload +size limits. It provides chunked request and response handling while still +routing to the same domain command groups.

Common direct command:

"forge_server" callExtension ["status", []];
+

Common transport path:

server addon fnc_extCall
+  -> transport:request:append
+  -> transport:invoke_stored
+  -> transport:response:get
+

Configuration

The server extension reads config.toml next to the extension DLL. The current +persistence section is:

[surreal]
+endpoint = "127.0.0.1:8000"
+namespace = "forge"
+database = "main"
+username = "root"
+password = "root"
+connect_timeout_ms = 5000
+

For install links and role-based setup guidance, see +SurrealDB Setup.

Check persistence readiness before issuing commands that require storage:

"forge_server" callExtension ["status", []];
+"forge_server" callExtension ["surreal:status", []];
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/getting-started/architecture/_payload.json b/docus/dist/getting-started/architecture/_payload.json new file mode 100644 index 0000000..84d64c4 --- /dev/null +++ b/docus/dist/getting-started/architecture/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":477},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-architecture":145,"-getting-started-architecture-surround":472},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":11,"body":147,"description":157,"extension":466,"links":467,"meta":468,"navigation":469,"path":12,"seo":470,"stem":13,"__hash__":471},"docs\u002F1.getting-started\u002F1.architecture.md",{"type":148,"value":149,"toc":453},"minimark",[150,154,158,163,174,185,189,193,200,204,219,223,233,236,252,256,263,289,293,304,311,315,322,325,331,334,338,341,344,358,361,367,371,378,426,432,435,449],[151,152,11],"h1",{"id":153},"framework-architecture",[155,156,157],"p",{},"Forge is organized around domain modules. A domain usually has SQF addon\nentry points, Rust models, repository traits, service logic, extension command\nhandlers, and optional browser UI.",[159,160,162],"h2",{"id":161},"runtime-flow","Runtime Flow",[164,165,171],"pre",{"className":166,"code":168,"language":169,"meta":170},[167],"language-text","Arma client UI or SQF action\n -> client addon bridge\n -> server addon function\n -> forge_server callExtension command\n -> extension command group\n -> forge-services domain service\n -> forge-repositories trait\n -> SurrealDB repository implementation\n -> SurrealDB\n","text","",[172,173,168],"code",{"__ignoreMap":170},[155,175,176,177,180,181,184],{},"For small payloads, server SQF calls ",[172,178,179],{},"forge_server"," directly through the\nextension bridge. For large payloads, ",[172,182,183],{},"arma\u002Fserver\u002Faddons\u002Fextension"," stages\nrequest and response chunks through the extension transport module.",[159,186,188],{"id":187},"main-layers","Main Layers",[190,191,94],"h3",{"id":192},"client-addons",[155,194,195,196,199],{},"Client addons live under ",[172,197,198],{},"arma\u002Fclient\u002Faddons",". They own local player UX,\nkeybinds, browser UI dialogs, and UI-to-SQF event handling. When a client needs\ndurable or authoritative state, it routes work to the matching server addon\ninstead of touching persistence directly.",[190,201,203],{"id":202},"server-addons","Server Addons",[155,205,206,207,210,211,214,215,218],{},"Server addons live under ",[172,208,209],{},"arma\u002Fserver\u002Faddons",". They own server-side SQF\ninitialization, game-object integration, validation near the Arma runtime, and\ncalls into the Rust extension. The ",[172,212,213],{},"extension"," addon is the shared bridge for\n",[172,216,217],{},"callExtension"," and transport handling.",[190,220,222],{"id":221},"rust-extension","Rust Extension",[155,224,225,226,229,230,232],{},"The server extension lives under ",[172,227,228],{},"arma\u002Fserver\u002Fextension",". It registers the\n",[172,231,179],{}," command groups, loads configuration, initializes SurrealDB, and\nmaps SQF command inputs into service calls.",[155,234,235],{},"The extension should stay thin:",[237,238,239,243,246,249],"ul",{},[240,241,242],"li",{},"Parse and validate command arguments that arrive from SQF.",[240,244,245],{},"Resolve Arma-specific context such as player UID when required.",[240,247,248],{},"Call the matching service.",[240,250,251],{},"Serialize the service result back to JSON or a simple string.",[190,253,255],{"id":254},"shared-rust-crates","Shared Rust Crates",[155,257,258,259,262],{},"The ",[172,260,261],{},"lib"," workspace contains reusable Rust crates:",[237,264,265,271,277,283],{},[240,266,267,270],{},[172,268,269],{},"forge-models",": shared domain structs and serialization rules.",[240,272,273,276],{},[172,274,275],{},"forge-repositories",": storage-agnostic repository traits and in-memory\nimplementations used by tests and hot-state services.",[240,278,279,282],{},[172,280,281],{},"forge-services",": domain behavior, validation, and mutation workflows.",[240,284,285,288],{},[172,286,287],{},"forge-shared",": cross-crate helpers.",[190,290,292],{"id":291},"persistence","Persistence",[155,294,295,296,299,300,303],{},"Durable storage is SurrealDB. Schema modules live under\n",[172,297,298],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Fschema",", and concrete SurrealDB repository\nimplementations live under ",[172,301,302],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Fstorage",".",[155,305,306,307,310],{},"Repository traits stay in ",[172,308,309],{},"lib\u002Frepositories"," so service logic remains testable\nwithout a database.",[159,312,314],{"id":313},"hot-state","Hot State",[155,316,317,318,321],{},"Several domains have ",[172,319,320],{},"hot"," command groups. Hot state keeps a runtime copy of\nfrequently accessed data in memory, then saves it back to durable storage when\nrequested. This is useful for player state that changes often during a session.",[155,323,324],{},"Typical hot-state flow:",[164,326,329],{"className":327,"code":328,"language":169,"meta":170},[167],"actor:hot:init\nactor:hot:get\nactor:hot:override\nactor:hot:save\nactor:hot:remove\n",[172,330,328],{"__ignoreMap":170},[155,332,333],{},"Use hot state for session workflows. Use normal domain commands for direct\ndurable CRUD operations.",[159,335,337],{"id":336},"transport-layer","Transport Layer",[155,339,340],{},"The transport layer exists because Arma extension calls have practical payload\nsize limits. It provides chunked request and response handling while still\nrouting to the same domain command groups.",[155,342,343],{},"Common direct command:",[164,345,349],{"className":346,"code":347,"language":348,"meta":170,"style":170},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"forge_server\" callExtension [\"status\", []];\n","sqf",[172,350,351],{"__ignoreMap":170},[352,353,356],"span",{"class":354,"line":355},"line",1,[352,357,347],{},[155,359,360],{},"Common transport path:",[164,362,365],{"className":363,"code":364,"language":169,"meta":170},[167],"server addon fnc_extCall\n -> transport:request:append\n -> transport:invoke_stored\n -> transport:response:get\n",[172,366,364],{"__ignoreMap":170},[159,368,370],{"id":369},"configuration","Configuration",[155,372,373,374,377],{},"The server extension reads ",[172,375,376],{},"config.toml"," next to the extension DLL. The current\npersistence section is:",[164,379,383],{"className":380,"code":381,"language":382,"meta":170,"style":170},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[surreal]\nendpoint = \"127.0.0.1:8000\"\nnamespace = \"forge\"\ndatabase = \"main\"\nusername = \"root\"\npassword = \"root\"\nconnect_timeout_ms = 5000\n","toml",[172,384,385,390,396,402,408,414,420],{"__ignoreMap":170},[352,386,387],{"class":354,"line":355},[352,388,389],{},"[surreal]\n",[352,391,393],{"class":354,"line":392},2,[352,394,395],{},"endpoint = \"127.0.0.1:8000\"\n",[352,397,399],{"class":354,"line":398},3,[352,400,401],{},"namespace = \"forge\"\n",[352,403,405],{"class":354,"line":404},4,[352,406,407],{},"database = \"main\"\n",[352,409,411],{"class":354,"line":410},5,[352,412,413],{},"username = \"root\"\n",[352,415,417],{"class":354,"line":416},6,[352,418,419],{},"password = \"root\"\n",[352,421,423],{"class":354,"line":422},7,[352,424,425],{},"connect_timeout_ms = 5000\n",[155,427,428,429,303],{},"For install links and role-based setup guidance, see\n",[430,431,23],"a",{"href":24},[155,433,434],{},"Check persistence readiness before issuing commands that require storage:",[164,436,438],{"className":346,"code":437,"language":348,"meta":170,"style":170},"\"forge_server\" callExtension [\"status\", []];\n\"forge_server\" callExtension [\"surreal:status\", []];\n",[172,439,440,444],{"__ignoreMap":170},[352,441,442],{"class":354,"line":355},[352,443,347],{},[352,445,446],{"class":354,"line":392},[352,447,448],{},"\"forge_server\" callExtension [\"surreal:status\", []];\n",[450,451,452],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":170,"searchDepth":392,"depth":392,"links":454},[455,456,463,464,465],{"id":161,"depth":392,"text":162},{"id":187,"depth":392,"text":188,"children":457},[458,459,460,461,462],{"id":192,"depth":398,"text":94},{"id":202,"depth":398,"text":203},{"id":221,"depth":398,"text":222},{"id":254,"depth":398,"text":255},{"id":291,"depth":398,"text":292},{"id":313,"depth":392,"text":314},{"id":336,"depth":392,"text":337},{"id":369,"depth":392,"text":370},"md",null,{},true,{"title":11,"description":157},"iMv3ZlJLneWaY-rT4sboHwZgTUNknan2htKsPAMBaw0",[473,475],{"title":5,"path":6,"stem":7,"description":474,"children":-1},"Use this section as the main entry point for the Forge framework.",{"title":15,"path":16,"stem":17,"description":476,"children":-1},"This reference lists the main Forge modules and where each layer lives.",1776806627742] \ No newline at end of file diff --git a/docus/dist/getting-started/development.html b/docus/dist/getting-started/development.html new file mode 100644 index 0000000..823c73f --- /dev/null +++ b/docus/dist/getting-started/development.html @@ -0,0 +1,123 @@ +Development Guide - forge-docus
Getting Started

Development Guide

This guide covers the usual path for adding or changing a Forge module.

Development Guide

This guide covers the usual path for adding or changing a Forge module.

Local Checks

Before running storage-backed workflows locally, complete +SurrealDB Setup.

Run these before pushing Rust or extension changes:

cargo fmt --check
+cargo check
+cargo test
+cargo build
+cargo clippy --all-targets --all-features -- -D warnings
+

Run this after changing browser UI sources:

npm run build:webui
+

Build Arma packages with:

.\build-arma.ps1
+

Module Boundaries

Keep each layer responsible for one kind of work:

LayerOwnsAvoid
lib/modelsData structures, serde defaults, validation helpers.Database calls, SQF-specific context.
lib/repositoriesRepository traits and in-memory stores.SurrealDB-specific code.
lib/servicesBusiness rules, workflow orchestration, structured results.Arma engine calls, extension transport details.
arma/server/extensionCommand parsing, context resolution, SurrealDB implementations, serialization to SQF.Business rules that belong in services.
arma/server/addonsServer SQF lifecycle, game-object integration, calls into forge_server.Direct database logic.
arma/client/addonsClient UI, keybinds, local UI events.Authoritative persistence.

Adding a Domain Module

  1. Add the model in lib/models/src/<module>.rs.
  2. Export the model from lib/models/src/lib.rs.
  3. Add repository traits in lib/repositories/src/<module>.rs.
  4. Add in-memory repository support if the service needs tests or hot state.
  5. Export the traits from lib/repositories/src/lib.rs.
  6. Add service logic in lib/services/src/<module>.rs.
  7. Add focused unit tests for service behavior.
  8. Export the service from lib/services/src/lib.rs.
  9. Add a SurrealDB schema module under arma/server/extension/src/schema.
  10. Add the concrete storage adapter under arma/server/extension/src/storage.
  11. Register the storage adapter in arma/server/extension/src/storage.rs.
  12. Add an extension command group under arma/server/extension/src/<module>.rs.
  13. Register the command group in arma/server/extension/src/lib.rs.
  14. Add server addon functions under arma/server/addons/<module> if SQF needs a module-level API.
  15. Add client addon or browser UI files under arma/client/addons/<module> if the module has player-facing UI.
  16. Add documentation in docs/ and module-level READMEs.

Extension Command Rules

Commands should return one of these forms:

  • JSON string for structured results.
  • "true" or "false" for simple existence and boolean operations.
  • "OK" for successful destructive operations with no response body.
  • "Error: <message>" for failures.

Prefer stable JSON shapes over ad hoc strings. SQF callers should always check +for the "Error:" prefix before parsing JSON.

Example:

private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]];
+private _payload = _result select 0;
+
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Actor request failed: %1", _payload];
+};
+
+private _actor = fromJSON _payload;
+

Persistence Rules

SurrealDB is the durable store. Keep database-specific mapping in the extension +storage adapters, not in services or repository traits.

When changing persisted data:

  • Update or add the matching .surql schema module.
  • Update the concrete storage adapter.
  • Preserve existing records when possible through serde defaults or migration +logic.
  • Add tests at the service level for behavior, and add storage tests only when +database mapping is the risk.

Hot-State Rules

Use hot state for data that is read or mutated frequently during a player +session. Hot-state modules usually provide:

  • init to load durable state into memory.
  • get to read the runtime copy.
  • override or focused mutation commands to update the runtime copy.
  • save to write the runtime copy back to SurrealDB.
  • remove to evict the runtime copy.

Do not assume hot state is durable until save succeeds.

Web UI Rules

Browser UI source files live under each client addon. Built assets usually land +under that addon's ui/_site directory.

Use the existing common bridge in arma/client/addons/common when a UI needs +to send events back to SQF. Keep UI state and rendering in JavaScript, and keep +server-authoritative decisions in server SQF or Rust services.

Documentation Checklist

When adding or changing a module, update:

  • docs/MODULE_REFERENCE.md for framework-level inventory.
  • A module-specific README in the addon directory when SQF or UI usage changes.
  • arma/server/docs/api-reference.md when extension commands change.
  • Existing usage guides when payload shapes or workflows change.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/getting-started/development/_payload.json b/docus/dist/getting-started/development/_payload.json new file mode 100644 index 0000000..0a230b2 --- /dev/null +++ b/docus/dist/getting-started/development/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":688},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-development":145,"-getting-started-development-surround":683},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":19,"body":147,"description":157,"extension":678,"links":679,"meta":680,"navigation":517,"path":20,"seo":681,"stem":21,"__hash__":682},"docs\u002F1.getting-started\u002F3.development.md",{"type":148,"value":149,"toc":668},"minimark",[150,154,158,163,170,173,215,218,227,230,239,243,246,350,354,451,455,458,486,493,496,546,550,553,556,574,578,581,613,619,623,630,637,641,644,664],[151,152,19],"h1",{"id":153},"development-guide",[155,156,157],"p",{},"This guide covers the usual path for adding or changing a Forge module.",[159,160,162],"h2",{"id":161},"local-checks","Local Checks",[155,164,165,166,169],{},"Before running storage-backed workflows locally, complete\n",[167,168,23],"a",{"href":24},".",[155,171,172],{},"Run these before pushing Rust or extension changes:",[174,175,180],"pre",{"className":176,"code":177,"language":178,"meta":179,"style":179},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cargo fmt --check\ncargo check\ncargo test\ncargo build\ncargo clippy --all-targets --all-features -- -D warnings\n","powershell","",[181,182,183,191,197,203,209],"code",{"__ignoreMap":179},[184,185,188],"span",{"class":186,"line":187},"line",1,[184,189,190],{},"cargo fmt --check\n",[184,192,194],{"class":186,"line":193},2,[184,195,196],{},"cargo check\n",[184,198,200],{"class":186,"line":199},3,[184,201,202],{},"cargo test\n",[184,204,206],{"class":186,"line":205},4,[184,207,208],{},"cargo build\n",[184,210,212],{"class":186,"line":211},5,[184,213,214],{},"cargo clippy --all-targets --all-features -- -D warnings\n",[155,216,217],{},"Run this after changing browser UI sources:",[174,219,221],{"className":176,"code":220,"language":178,"meta":179,"style":179},"npm run build:webui\n",[181,222,223],{"__ignoreMap":179},[184,224,225],{"class":186,"line":187},[184,226,220],{},[155,228,229],{},"Build Arma packages with:",[174,231,233],{"className":176,"code":232,"language":178,"meta":179,"style":179},".\\build-arma.ps1\n",[181,234,235],{"__ignoreMap":179},[184,236,237],{"class":186,"line":187},[184,238,232],{},[159,240,242],{"id":241},"module-boundaries","Module Boundaries",[155,244,245],{},"Keep each layer responsible for one kind of work:",[247,248,249,265],"table",{},[250,251,252],"thead",{},[253,254,255,259,262],"tr",{},[256,257,258],"th",{},"Layer",[256,260,261],{},"Owns",[256,263,264],{},"Avoid",[266,267,268,282,295,308,321,337],"tbody",{},[253,269,270,276,279],{},[271,272,273],"td",{},[181,274,275],{},"lib\u002Fmodels",[271,277,278],{},"Data structures, serde defaults, validation helpers.",[271,280,281],{},"Database calls, SQF-specific context.",[253,283,284,289,292],{},[271,285,286],{},[181,287,288],{},"lib\u002Frepositories",[271,290,291],{},"Repository traits and in-memory stores.",[271,293,294],{},"SurrealDB-specific code.",[253,296,297,302,305],{},[271,298,299],{},[181,300,301],{},"lib\u002Fservices",[271,303,304],{},"Business rules, workflow orchestration, structured results.",[271,306,307],{},"Arma engine calls, extension transport details.",[253,309,310,315,318],{},[271,311,312],{},[181,313,314],{},"arma\u002Fserver\u002Fextension",[271,316,317],{},"Command parsing, context resolution, SurrealDB implementations, serialization to SQF.",[271,319,320],{},"Business rules that belong in services.",[253,322,323,328,334],{},[271,324,325],{},[181,326,327],{},"arma\u002Fserver\u002Faddons",[271,329,330,331,169],{},"Server SQF lifecycle, game-object integration, calls into ",[181,332,333],{},"forge_server",[271,335,336],{},"Direct database logic.",[253,338,339,344,347],{},[271,340,341],{},[181,342,343],{},"arma\u002Fclient\u002Faddons",[271,345,346],{},"Client UI, keybinds, local UI events.",[271,348,349],{},"Authoritative persistence.",[159,351,353],{"id":352},"adding-a-domain-module","Adding a Domain Module",[355,356,357,364,370,376,379,385,391,394,400,406,412,418,424,430,437,444],"ol",{},[358,359,360,361,169],"li",{},"Add the model in ",[181,362,363],{},"lib\u002Fmodels\u002Fsrc\u002F\u003Cmodule>.rs",[358,365,366,367,169],{},"Export the model from ",[181,368,369],{},"lib\u002Fmodels\u002Fsrc\u002Flib.rs",[358,371,372,373,169],{},"Add repository traits in ",[181,374,375],{},"lib\u002Frepositories\u002Fsrc\u002F\u003Cmodule>.rs",[358,377,378],{},"Add in-memory repository support if the service needs tests or hot state.",[358,380,381,382,169],{},"Export the traits from ",[181,383,384],{},"lib\u002Frepositories\u002Fsrc\u002Flib.rs",[358,386,387,388,169],{},"Add service logic in ",[181,389,390],{},"lib\u002Fservices\u002Fsrc\u002F\u003Cmodule>.rs",[358,392,393],{},"Add focused unit tests for service behavior.",[358,395,396,397,169],{},"Export the service from ",[181,398,399],{},"lib\u002Fservices\u002Fsrc\u002Flib.rs",[358,401,402,403,169],{},"Add a SurrealDB schema module under ",[181,404,405],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Fschema",[358,407,408,409,169],{},"Add the concrete storage adapter under ",[181,410,411],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Fstorage",[358,413,414,415,169],{},"Register the storage adapter in ",[181,416,417],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Fstorage.rs",[358,419,420,421,169],{},"Add an extension command group under ",[181,422,423],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002F\u003Cmodule>.rs",[358,425,426,427,169],{},"Register the command group in ",[181,428,429],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Flib.rs",[358,431,432,433,436],{},"Add server addon functions under ",[181,434,435],{},"arma\u002Fserver\u002Faddons\u002F\u003Cmodule>"," if SQF needs a module-level API.",[358,438,439,440,443],{},"Add client addon or browser UI files under ",[181,441,442],{},"arma\u002Fclient\u002Faddons\u002F\u003Cmodule>"," if the module has player-facing UI.",[358,445,446,447,450],{},"Add documentation in ",[181,448,449],{},"docs\u002F"," and module-level READMEs.",[159,452,454],{"id":453},"extension-command-rules","Extension Command Rules",[155,456,457],{},"Commands should return one of these forms:",[459,460,461,464,474,480],"ul",{},[358,462,463],{},"JSON string for structured results.",[358,465,466,469,470,473],{},[181,467,468],{},"\"true\""," or ",[181,471,472],{},"\"false\""," for simple existence and boolean operations.",[358,475,476,479],{},[181,477,478],{},"\"OK\""," for successful destructive operations with no response body.",[358,481,482,485],{},[181,483,484],{},"\"Error: \u003Cmessage>\""," for failures.",[155,487,488,489,492],{},"Prefer stable JSON shapes over ad hoc strings. SQF callers should always check\nfor the ",[181,490,491],{},"\"Error:\""," prefix before parsing JSON.",[155,494,495],{},"Example:",[174,497,501],{"className":498,"code":499,"language":500,"meta":179,"style":179},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _result = \"forge_server\" callExtension [\"actor:get\", [getPlayerUID player]];\nprivate _payload = _result select 0;\n\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Actor request failed: %1\", _payload];\n};\n\nprivate _actor = fromJSON _payload;\n","sqf",[181,502,503,508,513,519,524,529,535,540],{"__ignoreMap":179},[184,504,505],{"class":186,"line":187},[184,506,507],{},"private _result = \"forge_server\" callExtension [\"actor:get\", [getPlayerUID player]];\n",[184,509,510],{"class":186,"line":193},[184,511,512],{},"private _payload = _result select 0;\n",[184,514,515],{"class":186,"line":199},[184,516,518],{"emptyLinePlaceholder":517},true,"\n",[184,520,521],{"class":186,"line":205},[184,522,523],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[184,525,526],{"class":186,"line":211},[184,527,528],{}," systemChat format [\"Actor request failed: %1\", _payload];\n",[184,530,532],{"class":186,"line":531},6,[184,533,534],{},"};\n",[184,536,538],{"class":186,"line":537},7,[184,539,518],{"emptyLinePlaceholder":517},[184,541,543],{"class":186,"line":542},8,[184,544,545],{},"private _actor = fromJSON _payload;\n",[159,547,549],{"id":548},"persistence-rules","Persistence Rules",[155,551,552],{},"SurrealDB is the durable store. Keep database-specific mapping in the extension\nstorage adapters, not in services or repository traits.",[155,554,555],{},"When changing persisted data:",[459,557,558,565,568,571],{},[358,559,560,561,564],{},"Update or add the matching ",[181,562,563],{},".surql"," schema module.",[358,566,567],{},"Update the concrete storage adapter.",[358,569,570],{},"Preserve existing records when possible through serde defaults or migration\nlogic.",[358,572,573],{},"Add tests at the service level for behavior, and add storage tests only when\ndatabase mapping is the risk.",[159,575,577],{"id":576},"hot-state-rules","Hot-State Rules",[155,579,580],{},"Use hot state for data that is read or mutated frequently during a player\nsession. Hot-state modules usually provide:",[459,582,583,589,595,601,607],{},[358,584,585,588],{},[181,586,587],{},"init"," to load durable state into memory.",[358,590,591,594],{},[181,592,593],{},"get"," to read the runtime copy.",[358,596,597,600],{},[181,598,599],{},"override"," or focused mutation commands to update the runtime copy.",[358,602,603,606],{},[181,604,605],{},"save"," to write the runtime copy back to SurrealDB.",[358,608,609,612],{},[181,610,611],{},"remove"," to evict the runtime copy.",[155,614,615,616,618],{},"Do not assume hot state is durable until ",[181,617,605],{}," succeeds.",[159,620,622],{"id":621},"web-ui-rules","Web UI Rules",[155,624,625,626,629],{},"Browser UI source files live under each client addon. Built assets usually land\nunder that addon's ",[181,627,628],{},"ui\u002F_site"," directory.",[155,631,632,633,636],{},"Use the existing common bridge in ",[181,634,635],{},"arma\u002Fclient\u002Faddons\u002Fcommon"," when a UI needs\nto send events back to SQF. Keep UI state and rendering in JavaScript, and keep\nserver-authoritative decisions in server SQF or Rust services.",[159,638,640],{"id":639},"documentation-checklist","Documentation Checklist",[155,642,643],{},"When adding or changing a module, update:",[459,645,646,652,655,661],{},[358,647,648,651],{},[181,649,650],{},"docs\u002FMODULE_REFERENCE.md"," for framework-level inventory.",[358,653,654],{},"A module-specific README in the addon directory when SQF or UI usage changes.",[358,656,657,660],{},[181,658,659],{},"arma\u002Fserver\u002Fdocs\u002Fapi-reference.md"," when extension commands change.",[358,662,663],{},"Existing usage guides when payload shapes or workflows change.",[665,666,667],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":179,"searchDepth":193,"depth":193,"links":669},[670,671,672,673,674,675,676,677],{"id":161,"depth":193,"text":162},{"id":241,"depth":193,"text":242},{"id":352,"depth":193,"text":353},{"id":453,"depth":193,"text":454},{"id":548,"depth":193,"text":549},{"id":576,"depth":193,"text":577},{"id":621,"depth":193,"text":622},{"id":639,"depth":193,"text":640},"md",null,{},{"title":19,"description":157},"SACXFQxkQonJpusqYCXgr0NFhrv1Imz0UFQfb7-7iGg",[684,686],{"title":15,"path":16,"stem":17,"description":685,"children":-1},"This reference lists the main Forge modules and where each layer lives.",{"title":23,"path":24,"stem":25,"description":687,"children":-1},"Forge uses SurrealDB for durable storage. The Rust server extension connects to\nSurrealDB on startup and applies Forge schema modules automatically, so setup\ncomes down to running a reachable database and matching the Forge config.",1776806627742] \ No newline at end of file diff --git a/docus/dist/getting-started/module-reference.html b/docus/dist/getting-started/module-reference.html new file mode 100644 index 0000000..962ede0 --- /dev/null +++ b/docus/dist/getting-started/module-reference.html @@ -0,0 +1,134 @@ +Module Reference - forge-docus
Getting Started

Module Reference

This reference lists the main Forge modules and where each layer lives.

Module Reference

This reference lists the main Forge modules and where each layer lives.

Directory Map

arma/client/addons/      Client-side Arma addons and browser UIs
+arma/server/addons/      Server-side Arma addons and extension bridge
+arma/server/extension/   Rust arma-rs extension and SurrealDB adapters
+bin/icom/                Interprocess communication helper
+lib/models/              Shared domain data models
+lib/repositories/        Repository traits and in-memory stores
+lib/services/            Domain services and workflow logic
+lib/shared/              Cross-crate helpers
+tools/                   Web UI build tooling
+docs/                    Framework-level documentation
+

Gameplay Domains

DomainPurposeClient addonServer addonService/model layerExtension group
ActorPlayer identity, loadout, position, status, contact identifiers, and persistent character data.arma/client/addons/actorarma/server/addons/actorlib/models/src/actor.rs, lib/services/src/actor.rsactor:*
BankPlayer accounts, cash/bank balances, PIN validation, transfers, checkout charging, and transaction context.arma/client/addons/bankarma/server/addons/banklib/models/src/bank.rs, lib/services/src/bank.rsbank:*, bank:hot:*
CADDispatch requests, assignments, orders, activity stream, profiles, groups, and hydrated dispatcher views.arma/client/addons/cadarma/server/addons/cadlib/models/src/cad.rs, lib/services/src/cad.rscad:*
GaragePlayer vehicle storage with plate IDs, fuel, damage, and hit point state.arma/client/addons/garagearma/server/addons/garagelib/models/src/garage.rs, lib/services/src/garage.rsgarage:*, garage:hot:*
LockerPlayer item storage keyed by classname with category and amount.arma/client/addons/lockerarma/server/addons/lockerlib/models/src/locker.rs, lib/services/src/locker.rslocker:*, locker:hot:*
OrganizationPlayer organizations, membership, treasury, credit lines, shared assets, and fleet data.arma/client/addons/orgarma/server/addons/orglib/models/src/org.rs, lib/services/src/org.rsorg:*, org:hot:*
PhoneContacts, messages, and email state.arma/client/addons/phonearma/server/addons/phonelib/models/src/phone.rs, lib/services/src/phone.rsphone:*
StoreStorefront entity setup, catalog hydration, checkout workflows, and checkout charging integration.arma/client/addons/storearma/server/addons/storelib/models/src/store.rs, lib/services/src/store.rsstore:checkout
TaskServer-owned mission/task flows, catalog, ownership, status, participant tracking, rewards, and defuse counters.nonearma/server/addons/tasklib/models/src/task.rs, lib/services/src/task.rstask:*
Owned GarageOrganization or owner-scoped vehicle unlock storage.via garage/org UIserver extension onlylib/models/src/v_garage.rs, lib/services/src/v_garage.rsowned:garage:*
Owned LockerOrganization or owner-scoped arsenal unlock storage.via locker/org UIserver extension onlylib/models/src/v_locker.rs, lib/services/src/v_locker.rsowned:locker:*

Server and extension guides: +Actor, +Bank, +CAD, +Economy, +Garage, +Locker, +Organization, +Owned Storage, +Phone, +Store, +Task.

Client guides: +Client Overview, +Main, +Common, +Actor, +Bank, +CAD, +Garage, +Locker, +Notifications, +Organization, +Phone, +Store.

Infrastructure Modules

ModulePurposeLocation
commonShared SQF helpers, base stores, utility functions, and shared UI bridge pieces.arma/client/addons/common, arma/server/addons/common
extensionServer SQF bridge around forge_server extension calls and chunked transport.arma/server/addons/extension
mainMod-level configuration, pre-init wiring, and server/client startup glue.arma/client/addons/main, arma/server/addons/main
economyServer-side fuel, medical, and service economy helpers. Fuel and repair charge organization hot state; medical charges player bank/cash first, then organization funds with repayable member debt when personal funds cannot cover the bill.arma/server/addons/economy
notificationsClient notification UI, sounds, and UI event handling.arma/client/addons/notifications
icomRust helper for interprocess communication and event broadcasting.bin/icom, arma/server/extension/src/icom.rs
terrainExtension-side terrain export helper.arma/server/extension/src/terrain.rs
transportChunked request/response handling for large extension payloads.arma/server/extension/src/transport.rs
surrealSurrealDB connection lifecycle and status reporting.arma/server/extension/src/surreal.rs

Extension Command Groups

Commands are invoked with:

"forge_server" callExtension ["group:command", [_arg1, _arg2]];
+

Nested groups use additional : separators, for example +bank:hot:deposit.

Core

CommandPurpose
versionReturn the extension version string.
statusReturn SurrealDB connection state.
surreal:statusReturn SurrealDB connection state directly from the Surreal module.

Actor

CommandPurpose
actor:getFetch actor data for a resolved player UID.
actor:createCreate actor data from JSON.
actor:updateApply actor JSON updates.
actor:existsReturn true or false.
actor:deleteDelete actor data.
actor:hot:init, actor:hot:get, actor:hot:keys, actor:hot:override, actor:hot:save, actor:hot:removeManage actor hot state.

See Actor Usage Guide for examples.

Bank

CommandPurpose
bank:get, bank:create, bank:update, bank:exists, bank:deleteDurable bank CRUD.
bank:hot:init, bank:hot:get, bank:hot:override, bank:hot:patch, bank:hot:save, bank:hot:removeManage bank hot state.
bank:hot:deposit, bank:hot:withdraw, bank:hot:deposit_earnings, bank:hot:transferMutate hot bank balances with operation context.
bank:hot:charge_checkoutCharge a checkout against hot bank state.
bank:hot:validate_pinValidate a PIN for bank operations.

See Bank Usage Guide for examples.

Garage

CommandPurpose
garage:create, garage:get, garage:add, garage:update, garage:patch, garage:remove, garage:delete, garage:existsDurable player garage operations.
garage:hot:init, garage:hot:get, garage:hot:override, garage:hot:add, garage:hot:remove_vehicle, garage:hot:save, garage:hot:removeManage player garage hot state.

See Garage Usage Guide for examples.

Locker

CommandPurpose
locker:create, locker:get, locker:add, locker:update, locker:patch, locker:remove, locker:delete, locker:existsDurable player locker operations.
locker:hot:init, locker:hot:get, locker:hot:override, locker:hot:save, locker:hot:removeManage player locker hot state.

See Locker Usage Guide for examples.

Organization

CommandPurpose
org:get, org:create, org:update, org:exists, org:deleteDurable organization CRUD.
org:assets:get, org:assets:updateManage organization assets.
org:fleet:get, org:fleet:updateManage organization fleet entries.
org:members:get, org:members:add, org:members:removeManage organization membership.
org:hot:*Runtime organization workflows including registration, invites, credit lines, checkout charging, assets, fleet, leave, disband, save, and remove.

See Org Usage Guide for examples.

Phone

CommandPurpose
phone:initInitialize phone state for a UID.
phone:contacts:list, phone:contacts:add, phone:contacts:removeManage contacts.
phone:messages:list, phone:messages:thread, phone:messages:send, phone:messages:mark_read, phone:messages:deleteManage messages.
phone:emails:list, phone:emails:send, phone:emails:mark_read, phone:emails:deleteManage emails.
phone:removeRemove phone state for a UID.

See Phone Usage Guide for examples.

CAD

Command GroupPurpose
cad:activity:append, cad:activity:recentAppend and read recent activity.
cad:assignments:list, cad:assignments:assign, cad:assignments:acknowledge, cad:assignments:decline, cad:assignments:upsert, cad:assignments:deleteManage dispatch assignments.
cad:orders:list, cad:orders:create, cad:orders:create_from_context, cad:orders:close, cad:orders:upsert, cad:orders:deleteManage orders.
cad:requests:list, cad:requests:submit, cad:requests:submit_from_context, cad:requests:close, cad:requests:upsert, cad:requests:deleteManage requests.
cad:profiles:list, cad:profiles:update_from_context, cad:profiles:upsert, cad:profiles:deleteManage profiles.
cad:groups:buildBuild grouped CAD state.
cad:view:hydrateBuild the dispatcher view model.

See CAD Usage Guide for examples.

Task

Command GroupPurpose
task:resetReset task state.
task:catalog:active, task:catalog:get, task:catalog:upsert, task:catalog:deleteManage task catalog entries.
task:ownership:bind, task:ownership:release, task:ownership:accept, task:ownership:reward_contextManage task ownership and rewards.
task:status:set, task:status:get, task:status:clearManage task status.
task:defuse:increment, task:defuse:getManage defuse counters.
task:clearClear task state.

See Task Usage Guide for examples.

Owned Storage

Command GroupPurpose
owned:garage:create, owned:garage:fetch, owned:garage:get, owned:garage:add, owned:garage:remove, owned:garage:delete, owned:garage:existsOwner-scoped vehicle storage.
owned:garage:hot:*Owner-scoped vehicle hot state.
owned:locker:create, owned:locker:fetch, owned:locker:get, owned:locker:add, owned:locker:remove, owned:locker:delete, owned:locker:existsOwner-scoped item storage.
owned:locker:hot:*Owner-scoped item hot state.

See Owned Storage Usage Guide for examples.

Other Extension Groups

Command GroupPurpose
store:checkoutRun store checkout behavior.
icom:connect, icom:broadcast, icom:send_eventICom connection and event forwarding.
terrain:exportSVGExport terrain data as SVG.
transport:invoke, transport:invoke_storedInvoke commands through transport.
transport:request:append, transport:request:clearManage stored request chunks.
transport:response:get, transport:response:clearManage stored response chunks.

Rust Crates

CrateRole
forge-modelsDomain models and validation. Keep these serializable and free of persistence details.
forge-repositoriesRepository traits and in-memory implementations. Keep these storage-agnostic.
forge-servicesBusiness rules and workflows. Depend on repository traits, not concrete databases.
forge-sharedCross-crate helpers. Keep dependencies light.
forge-serverArma extension crate. Owns command registration, SurrealDB runtime wiring, and concrete storage adapters.
forge-icomICom helper binary and client library.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/getting-started/module-reference/_payload.json b/docus/dist/getting-started/module-reference/_payload.json new file mode 100644 index 0000000..841478a --- /dev/null +++ b/docus/dist/getting-started/module-reference/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1959},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-module-reference":145,"-getting-started-module-reference-surround":1954},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":15,"body":147,"description":157,"extension":1948,"links":1949,"meta":1950,"navigation":1951,"path":16,"seo":1952,"stem":17,"__hash__":1953},"docs\u002F1.getting-started\u002F2.module-reference.md",{"type":148,"value":149,"toc":1927},"minimark",[150,154,158,163,174,178,553,583,614,618,782,786,789,803,813,818,861,864,958,964,967,1064,1068,1071,1142,1146,1149,1214,1218,1221,1306,1311,1314,1403,1407,1410,1550,1554,1557,1656,1660,1663,1751,1755,1759,1845,1849,1923],[151,152,15],"h1",{"id":153},"module-reference",[155,156,157],"p",{},"This reference lists the main Forge modules and where each layer lives.",[159,160,162],"h2",{"id":161},"directory-map","Directory Map",[164,165,171],"pre",{"className":166,"code":168,"language":169,"meta":170},[167],"language-text","arma\u002Fclient\u002Faddons\u002F Client-side Arma addons and browser UIs\narma\u002Fserver\u002Faddons\u002F Server-side Arma addons and extension bridge\narma\u002Fserver\u002Fextension\u002F Rust arma-rs extension and SurrealDB adapters\nbin\u002Ficom\u002F Interprocess communication helper\nlib\u002Fmodels\u002F Shared domain data models\nlib\u002Frepositories\u002F Repository traits and in-memory stores\nlib\u002Fservices\u002F Domain services and workflow logic\nlib\u002Fshared\u002F Cross-crate helpers\ntools\u002F Web UI build tooling\ndocs\u002F Framework-level documentation\n","text","",[172,173,168],"code",{"__ignoreMap":170},[159,175,177],{"id":176},"gameplay-domains","Gameplay Domains",[179,180,181,206],"table",{},[182,183,184],"thead",{},[185,186,187,191,194,197,200,203],"tr",{},[188,189,190],"th",{},"Domain",[188,192,193],{},"Purpose",[188,195,196],{},"Client addon",[188,198,199],{},"Server addon",[188,201,202],{},"Service\u002Fmodel layer",[188,204,205],{},"Extension group",[207,208,209,242,276,307,341,375,409,440,471,500,527],"tbody",{},[185,210,211,215,218,223,228,237],{},[212,213,214],"td",{},"Actor",[212,216,217],{},"Player identity, loadout, position, status, contact identifiers, and persistent character data.",[212,219,220],{},[172,221,222],{},"arma\u002Fclient\u002Faddons\u002Factor",[212,224,225],{},[172,226,227],{},"arma\u002Fserver\u002Faddons\u002Factor",[212,229,230,233,234],{},[172,231,232],{},"lib\u002Fmodels\u002Fsrc\u002Factor.rs",", ",[172,235,236],{},"lib\u002Fservices\u002Fsrc\u002Factor.rs",[212,238,239],{},[172,240,241],{},"actor:*",[185,243,244,247,250,255,260,268],{},[212,245,246],{},"Bank",[212,248,249],{},"Player accounts, cash\u002Fbank balances, PIN validation, transfers, checkout charging, and transaction context.",[212,251,252],{},[172,253,254],{},"arma\u002Fclient\u002Faddons\u002Fbank",[212,256,257],{},[172,258,259],{},"arma\u002Fserver\u002Faddons\u002Fbank",[212,261,262,233,265],{},[172,263,264],{},"lib\u002Fmodels\u002Fsrc\u002Fbank.rs",[172,266,267],{},"lib\u002Fservices\u002Fsrc\u002Fbank.rs",[212,269,270,233,273],{},[172,271,272],{},"bank:*",[172,274,275],{},"bank:hot:*",[185,277,278,281,284,289,294,302],{},[212,279,280],{},"CAD",[212,282,283],{},"Dispatch requests, assignments, orders, activity stream, profiles, groups, and hydrated dispatcher views.",[212,285,286],{},[172,287,288],{},"arma\u002Fclient\u002Faddons\u002Fcad",[212,290,291],{},[172,292,293],{},"arma\u002Fserver\u002Faddons\u002Fcad",[212,295,296,233,299],{},[172,297,298],{},"lib\u002Fmodels\u002Fsrc\u002Fcad.rs",[172,300,301],{},"lib\u002Fservices\u002Fsrc\u002Fcad.rs",[212,303,304],{},[172,305,306],{},"cad:*",[185,308,309,312,315,320,325,333],{},[212,310,311],{},"Garage",[212,313,314],{},"Player vehicle storage with plate IDs, fuel, damage, and hit point state.",[212,316,317],{},[172,318,319],{},"arma\u002Fclient\u002Faddons\u002Fgarage",[212,321,322],{},[172,323,324],{},"arma\u002Fserver\u002Faddons\u002Fgarage",[212,326,327,233,330],{},[172,328,329],{},"lib\u002Fmodels\u002Fsrc\u002Fgarage.rs",[172,331,332],{},"lib\u002Fservices\u002Fsrc\u002Fgarage.rs",[212,334,335,233,338],{},[172,336,337],{},"garage:*",[172,339,340],{},"garage:hot:*",[185,342,343,346,349,354,359,367],{},[212,344,345],{},"Locker",[212,347,348],{},"Player item storage keyed by classname with category and amount.",[212,350,351],{},[172,352,353],{},"arma\u002Fclient\u002Faddons\u002Flocker",[212,355,356],{},[172,357,358],{},"arma\u002Fserver\u002Faddons\u002Flocker",[212,360,361,233,364],{},[172,362,363],{},"lib\u002Fmodels\u002Fsrc\u002Flocker.rs",[172,365,366],{},"lib\u002Fservices\u002Fsrc\u002Flocker.rs",[212,368,369,233,372],{},[172,370,371],{},"locker:*",[172,373,374],{},"locker:hot:*",[185,376,377,380,383,388,393,401],{},[212,378,379],{},"Organization",[212,381,382],{},"Player organizations, membership, treasury, credit lines, shared assets, and fleet data.",[212,384,385],{},[172,386,387],{},"arma\u002Fclient\u002Faddons\u002Forg",[212,389,390],{},[172,391,392],{},"arma\u002Fserver\u002Faddons\u002Forg",[212,394,395,233,398],{},[172,396,397],{},"lib\u002Fmodels\u002Fsrc\u002Forg.rs",[172,399,400],{},"lib\u002Fservices\u002Fsrc\u002Forg.rs",[212,402,403,233,406],{},[172,404,405],{},"org:*",[172,407,408],{},"org:hot:*",[185,410,411,414,417,422,427,435],{},[212,412,413],{},"Phone",[212,415,416],{},"Contacts, messages, and email state.",[212,418,419],{},[172,420,421],{},"arma\u002Fclient\u002Faddons\u002Fphone",[212,423,424],{},[172,425,426],{},"arma\u002Fserver\u002Faddons\u002Fphone",[212,428,429,233,432],{},[172,430,431],{},"lib\u002Fmodels\u002Fsrc\u002Fphone.rs",[172,433,434],{},"lib\u002Fservices\u002Fsrc\u002Fphone.rs",[212,436,437],{},[172,438,439],{},"phone:*",[185,441,442,445,448,453,458,466],{},[212,443,444],{},"Store",[212,446,447],{},"Storefront entity setup, catalog hydration, checkout workflows, and checkout charging integration.",[212,449,450],{},[172,451,452],{},"arma\u002Fclient\u002Faddons\u002Fstore",[212,454,455],{},[172,456,457],{},"arma\u002Fserver\u002Faddons\u002Fstore",[212,459,460,233,463],{},[172,461,462],{},"lib\u002Fmodels\u002Fsrc\u002Fstore.rs",[172,464,465],{},"lib\u002Fservices\u002Fsrc\u002Fstore.rs",[212,467,468],{},[172,469,470],{},"store:checkout",[185,472,473,476,479,482,487,495],{},[212,474,475],{},"Task",[212,477,478],{},"Server-owned mission\u002Ftask flows, catalog, ownership, status, participant tracking, rewards, and defuse counters.",[212,480,481],{},"none",[212,483,484],{},[172,485,486],{},"arma\u002Fserver\u002Faddons\u002Ftask",[212,488,489,233,492],{},[172,490,491],{},"lib\u002Fmodels\u002Fsrc\u002Ftask.rs",[172,493,494],{},"lib\u002Fservices\u002Fsrc\u002Ftask.rs",[212,496,497],{},[172,498,499],{},"task:*",[185,501,502,505,508,511,514,522],{},[212,503,504],{},"Owned Garage",[212,506,507],{},"Organization or owner-scoped vehicle unlock storage.",[212,509,510],{},"via garage\u002Forg UI",[212,512,513],{},"server extension only",[212,515,516,233,519],{},[172,517,518],{},"lib\u002Fmodels\u002Fsrc\u002Fv_garage.rs",[172,520,521],{},"lib\u002Fservices\u002Fsrc\u002Fv_garage.rs",[212,523,524],{},[172,525,526],{},"owned:garage:*",[185,528,529,532,535,538,540,548],{},[212,530,531],{},"Owned Locker",[212,533,534],{},"Organization or owner-scoped arsenal unlock storage.",[212,536,537],{},"via locker\u002Forg UI",[212,539,513],{},[212,541,542,233,545],{},[172,543,544],{},"lib\u002Fmodels\u002Fsrc\u002Fv_locker.rs",[172,546,547],{},"lib\u002Fservices\u002Fsrc\u002Fv_locker.rs",[212,549,550],{},[172,551,552],{},"owned:locker:*",[155,554,555,556,559,560,559,562,559,564,559,567,559,569,559,571,559,573,559,576,559,578,559,580,582],{},"Server and extension guides:\n",[557,558,214],"a",{"href":50},",\n",[557,561,246],{"href":62},[557,563,280],{"href":66},[557,565,566],{"href":70},"Economy",[557,568,311],{"href":74},[557,570,345],{"href":78},[557,572,379],{"href":82},[557,574,575],{"href":86},"Owned Storage",[557,577,413],{"href":90},[557,579,444],{"href":54},[557,581,475],{"href":58},".",[155,584,585,586,559,589,559,592,559,595,559,597,559,599,559,601,559,603,559,605,559,608,559,610,559,612,582],{},"Client guides:\n",[557,587,588],{"href":95},"Client Overview",[557,590,591],{"href":102},"Main",[557,593,594],{"href":114},"Common",[557,596,214],{"href":118},[557,598,246],{"href":122},[557,600,280],{"href":126},[557,602,311],{"href":130},[557,604,345],{"href":134},[557,606,607],{"href":138},"Notifications",[557,609,379],{"href":142},[557,611,413],{"href":106},[557,613,444],{"href":110},[159,615,617],{"id":616},"infrastructure-modules","Infrastructure Modules",[179,619,620,632],{},[182,621,622],{},[185,623,624,627,629],{},[188,625,626],{},"Module",[188,628,193],{},[188,630,631],{},"Location",[207,633,634,652,671,689,704,719,737,752,767],{},[185,635,636,641,644],{},[212,637,638],{},[172,639,640],{},"common",[212,642,643],{},"Shared SQF helpers, base stores, utility functions, and shared UI bridge pieces.",[212,645,646,233,649],{},[172,647,648],{},"arma\u002Fclient\u002Faddons\u002Fcommon",[172,650,651],{},"arma\u002Fserver\u002Faddons\u002Fcommon",[185,653,654,659,666],{},[212,655,656],{},[172,657,658],{},"extension",[212,660,661,662,665],{},"Server SQF bridge around ",[172,663,664],{},"forge_server"," extension calls and chunked transport.",[212,667,668],{},[172,669,670],{},"arma\u002Fserver\u002Faddons\u002Fextension",[185,672,673,678,681],{},[212,674,675],{},[172,676,677],{},"main",[212,679,680],{},"Mod-level configuration, pre-init wiring, and server\u002Fclient startup glue.",[212,682,683,233,686],{},[172,684,685],{},"arma\u002Fclient\u002Faddons\u002Fmain",[172,687,688],{},"arma\u002Fserver\u002Faddons\u002Fmain",[185,690,691,696,699],{},[212,692,693],{},[172,694,695],{},"economy",[212,697,698],{},"Server-side fuel, medical, and service economy helpers. Fuel and repair charge organization hot state; medical charges player bank\u002Fcash first, then organization funds with repayable member debt when personal funds cannot cover the bill.",[212,700,701],{},[172,702,703],{},"arma\u002Fserver\u002Faddons\u002Feconomy",[185,705,706,711,714],{},[212,707,708],{},[172,709,710],{},"notifications",[212,712,713],{},"Client notification UI, sounds, and UI event handling.",[212,715,716],{},[172,717,718],{},"arma\u002Fclient\u002Faddons\u002Fnotifications",[185,720,721,726,729],{},[212,722,723],{},[172,724,725],{},"icom",[212,727,728],{},"Rust helper for interprocess communication and event broadcasting.",[212,730,731,233,734],{},[172,732,733],{},"bin\u002Ficom",[172,735,736],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Ficom.rs",[185,738,739,744,747],{},[212,740,741],{},[172,742,743],{},"terrain",[212,745,746],{},"Extension-side terrain export helper.",[212,748,749],{},[172,750,751],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Fterrain.rs",[185,753,754,759,762],{},[212,755,756],{},[172,757,758],{},"transport",[212,760,761],{},"Chunked request\u002Fresponse handling for large extension payloads.",[212,763,764],{},[172,765,766],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Ftransport.rs",[185,768,769,774,777],{},[212,770,771],{},[172,772,773],{},"surreal",[212,775,776],{},"SurrealDB connection lifecycle and status reporting.",[212,778,779],{},[172,780,781],{},"arma\u002Fserver\u002Fextension\u002Fsrc\u002Fsurreal.rs",[159,783,785],{"id":784},"extension-command-groups","Extension Command Groups",[155,787,788],{},"Commands are invoked with:",[164,790,794],{"className":791,"code":792,"language":793,"meta":170,"style":170},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"forge_server\" callExtension [\"group:command\", [_arg1, _arg2]];\n","sqf",[172,795,796],{"__ignoreMap":170},[797,798,801],"span",{"class":799,"line":800},"line",1,[797,802,792],{},[155,804,805,806,809,810,582],{},"Nested groups use additional ",[172,807,808],{},":"," separators, for example\n",[172,811,812],{},"bank:hot:deposit",[814,815,817],"h3",{"id":816},"core","Core",[179,819,820,829],{},[182,821,822],{},[185,823,824,827],{},[188,825,826],{},"Command",[188,828,193],{},[207,830,831,841,851],{},[185,832,833,838],{},[212,834,835],{},[172,836,837],{},"version",[212,839,840],{},"Return the extension version string.",[185,842,843,848],{},[212,844,845],{},[172,846,847],{},"status",[212,849,850],{},"Return SurrealDB connection state.",[185,852,853,858],{},[212,854,855],{},[172,856,857],{},"surreal:status",[212,859,860],{},"Return SurrealDB connection state directly from the Surreal module.",[814,862,214],{"id":863},"actor",[179,865,866,874],{},[182,867,868],{},[185,869,870,872],{},[188,871,826],{},[188,873,193],{},[207,875,876,886,896,906,923,933],{},[185,877,878,883],{},[212,879,880],{},[172,881,882],{},"actor:get",[212,884,885],{},"Fetch actor data for a resolved player UID.",[185,887,888,893],{},[212,889,890],{},[172,891,892],{},"actor:create",[212,894,895],{},"Create actor data from JSON.",[185,897,898,903],{},[212,899,900],{},[172,901,902],{},"actor:update",[212,904,905],{},"Apply actor JSON updates.",[185,907,908,913],{},[212,909,910],{},[172,911,912],{},"actor:exists",[212,914,915,916,919,920,582],{},"Return ",[172,917,918],{},"true"," or ",[172,921,922],{},"false",[185,924,925,930],{},[212,926,927],{},[172,928,929],{},"actor:delete",[212,931,932],{},"Delete actor data.",[185,934,935,955],{},[212,936,937,233,940,233,943,233,946,233,949,233,952],{},[172,938,939],{},"actor:hot:init",[172,941,942],{},"actor:hot:get",[172,944,945],{},"actor:hot:keys",[172,947,948],{},"actor:hot:override",[172,950,951],{},"actor:hot:save",[172,953,954],{},"actor:hot:remove",[212,956,957],{},"Manage actor hot state.",[155,959,960,961,963],{},"See ",[557,962,49],{"href":50}," for examples.",[814,965,246],{"id":966},"bank",[179,968,969,977],{},[182,970,971],{},[185,972,973,975],{},[188,974,826],{},[188,976,193],{},[207,978,979,1001,1026,1044,1054],{},[185,980,981,998],{},[212,982,983,233,986,233,989,233,992,233,995],{},[172,984,985],{},"bank:get",[172,987,988],{},"bank:create",[172,990,991],{},"bank:update",[172,993,994],{},"bank:exists",[172,996,997],{},"bank:delete",[212,999,1000],{},"Durable bank CRUD.",[185,1002,1003,1023],{},[212,1004,1005,233,1008,233,1011,233,1014,233,1017,233,1020],{},[172,1006,1007],{},"bank:hot:init",[172,1009,1010],{},"bank:hot:get",[172,1012,1013],{},"bank:hot:override",[172,1015,1016],{},"bank:hot:patch",[172,1018,1019],{},"bank:hot:save",[172,1021,1022],{},"bank:hot:remove",[212,1024,1025],{},"Manage bank hot state.",[185,1027,1028,1041],{},[212,1029,1030,233,1032,233,1035,233,1038],{},[172,1031,812],{},[172,1033,1034],{},"bank:hot:withdraw",[172,1036,1037],{},"bank:hot:deposit_earnings",[172,1039,1040],{},"bank:hot:transfer",[212,1042,1043],{},"Mutate hot bank balances with operation context.",[185,1045,1046,1051],{},[212,1047,1048],{},[172,1049,1050],{},"bank:hot:charge_checkout",[212,1052,1053],{},"Charge a checkout against hot bank state.",[185,1055,1056,1061],{},[212,1057,1058],{},[172,1059,1060],{},"bank:hot:validate_pin",[212,1062,1063],{},"Validate a PIN for bank operations.",[155,1065,960,1066,963],{},[557,1067,61],{"href":62},[814,1069,311],{"id":1070},"garage",[179,1072,1073,1081],{},[182,1074,1075],{},[185,1076,1077,1079],{},[188,1078,826],{},[188,1080,193],{},[207,1082,1083,1114],{},[185,1084,1085,1111],{},[212,1086,1087,233,1090,233,1093,233,1096,233,1099,233,1102,233,1105,233,1108],{},[172,1088,1089],{},"garage:create",[172,1091,1092],{},"garage:get",[172,1094,1095],{},"garage:add",[172,1097,1098],{},"garage:update",[172,1100,1101],{},"garage:patch",[172,1103,1104],{},"garage:remove",[172,1106,1107],{},"garage:delete",[172,1109,1110],{},"garage:exists",[212,1112,1113],{},"Durable player garage operations.",[185,1115,1116,1139],{},[212,1117,1118,233,1121,233,1124,233,1127,233,1130,233,1133,233,1136],{},[172,1119,1120],{},"garage:hot:init",[172,1122,1123],{},"garage:hot:get",[172,1125,1126],{},"garage:hot:override",[172,1128,1129],{},"garage:hot:add",[172,1131,1132],{},"garage:hot:remove_vehicle",[172,1134,1135],{},"garage:hot:save",[172,1137,1138],{},"garage:hot:remove",[212,1140,1141],{},"Manage player garage hot state.",[155,1143,960,1144,963],{},[557,1145,73],{"href":74},[814,1147,345],{"id":1148},"locker",[179,1150,1151,1159],{},[182,1152,1153],{},[185,1154,1155,1157],{},[188,1156,826],{},[188,1158,193],{},[207,1160,1161,1192],{},[185,1162,1163,1189],{},[212,1164,1165,233,1168,233,1171,233,1174,233,1177,233,1180,233,1183,233,1186],{},[172,1166,1167],{},"locker:create",[172,1169,1170],{},"locker:get",[172,1172,1173],{},"locker:add",[172,1175,1176],{},"locker:update",[172,1178,1179],{},"locker:patch",[172,1181,1182],{},"locker:remove",[172,1184,1185],{},"locker:delete",[172,1187,1188],{},"locker:exists",[212,1190,1191],{},"Durable player locker operations.",[185,1193,1194,1211],{},[212,1195,1196,233,1199,233,1202,233,1205,233,1208],{},[172,1197,1198],{},"locker:hot:init",[172,1200,1201],{},"locker:hot:get",[172,1203,1204],{},"locker:hot:override",[172,1206,1207],{},"locker:hot:save",[172,1209,1210],{},"locker:hot:remove",[212,1212,1213],{},"Manage player locker hot state.",[155,1215,960,1216,963],{},[557,1217,77],{"href":78},[814,1219,379],{"id":1220},"organization",[179,1222,1223,1231],{},[182,1224,1225],{},[185,1226,1227,1229],{},[188,1228,826],{},[188,1230,193],{},[207,1232,1233,1255,1268,1281,1297],{},[185,1234,1235,1252],{},[212,1236,1237,233,1240,233,1243,233,1246,233,1249],{},[172,1238,1239],{},"org:get",[172,1241,1242],{},"org:create",[172,1244,1245],{},"org:update",[172,1247,1248],{},"org:exists",[172,1250,1251],{},"org:delete",[212,1253,1254],{},"Durable organization CRUD.",[185,1256,1257,1265],{},[212,1258,1259,233,1262],{},[172,1260,1261],{},"org:assets:get",[172,1263,1264],{},"org:assets:update",[212,1266,1267],{},"Manage organization assets.",[185,1269,1270,1278],{},[212,1271,1272,233,1275],{},[172,1273,1274],{},"org:fleet:get",[172,1276,1277],{},"org:fleet:update",[212,1279,1280],{},"Manage organization fleet entries.",[185,1282,1283,1294],{},[212,1284,1285,233,1288,233,1291],{},[172,1286,1287],{},"org:members:get",[172,1289,1290],{},"org:members:add",[172,1292,1293],{},"org:members:remove",[212,1295,1296],{},"Manage organization membership.",[185,1298,1299,1303],{},[212,1300,1301],{},[172,1302,408],{},[212,1304,1305],{},"Runtime organization workflows including registration, invites, credit lines, checkout charging, assets, fleet, leave, disband, save, and remove.",[155,1307,960,1308,963],{},[557,1309,1310],{"href":82},"Org Usage Guide",[814,1312,413],{"id":1313},"phone",[179,1315,1316,1324],{},[182,1317,1318],{},[185,1319,1320,1322],{},[188,1321,826],{},[188,1323,193],{},[207,1325,1326,1336,1352,1374,1393],{},[185,1327,1328,1333],{},[212,1329,1330],{},[172,1331,1332],{},"phone:init",[212,1334,1335],{},"Initialize phone state for a UID.",[185,1337,1338,1349],{},[212,1339,1340,233,1343,233,1346],{},[172,1341,1342],{},"phone:contacts:list",[172,1344,1345],{},"phone:contacts:add",[172,1347,1348],{},"phone:contacts:remove",[212,1350,1351],{},"Manage contacts.",[185,1353,1354,1371],{},[212,1355,1356,233,1359,233,1362,233,1365,233,1368],{},[172,1357,1358],{},"phone:messages:list",[172,1360,1361],{},"phone:messages:thread",[172,1363,1364],{},"phone:messages:send",[172,1366,1367],{},"phone:messages:mark_read",[172,1369,1370],{},"phone:messages:delete",[212,1372,1373],{},"Manage messages.",[185,1375,1376,1390],{},[212,1377,1378,233,1381,233,1384,233,1387],{},[172,1379,1380],{},"phone:emails:list",[172,1382,1383],{},"phone:emails:send",[172,1385,1386],{},"phone:emails:mark_read",[172,1388,1389],{},"phone:emails:delete",[212,1391,1392],{},"Manage emails.",[185,1394,1395,1400],{},[212,1396,1397],{},[172,1398,1399],{},"phone:remove",[212,1401,1402],{},"Remove phone state for a UID.",[155,1404,960,1405,963],{},[557,1406,89],{"href":90},[814,1408,280],{"id":1409},"cad",[179,1411,1412,1421],{},[182,1413,1414],{},[185,1415,1416,1419],{},[188,1417,1418],{},"Command Group",[188,1420,193],{},[207,1422,1423,1436,1461,1486,1511,1530,1540],{},[185,1424,1425,1433],{},[212,1426,1427,233,1430],{},[172,1428,1429],{},"cad:activity:append",[172,1431,1432],{},"cad:activity:recent",[212,1434,1435],{},"Append and read recent activity.",[185,1437,1438,1458],{},[212,1439,1440,233,1443,233,1446,233,1449,233,1452,233,1455],{},[172,1441,1442],{},"cad:assignments:list",[172,1444,1445],{},"cad:assignments:assign",[172,1447,1448],{},"cad:assignments:acknowledge",[172,1450,1451],{},"cad:assignments:decline",[172,1453,1454],{},"cad:assignments:upsert",[172,1456,1457],{},"cad:assignments:delete",[212,1459,1460],{},"Manage dispatch assignments.",[185,1462,1463,1483],{},[212,1464,1465,233,1468,233,1471,233,1474,233,1477,233,1480],{},[172,1466,1467],{},"cad:orders:list",[172,1469,1470],{},"cad:orders:create",[172,1472,1473],{},"cad:orders:create_from_context",[172,1475,1476],{},"cad:orders:close",[172,1478,1479],{},"cad:orders:upsert",[172,1481,1482],{},"cad:orders:delete",[212,1484,1485],{},"Manage orders.",[185,1487,1488,1508],{},[212,1489,1490,233,1493,233,1496,233,1499,233,1502,233,1505],{},[172,1491,1492],{},"cad:requests:list",[172,1494,1495],{},"cad:requests:submit",[172,1497,1498],{},"cad:requests:submit_from_context",[172,1500,1501],{},"cad:requests:close",[172,1503,1504],{},"cad:requests:upsert",[172,1506,1507],{},"cad:requests:delete",[212,1509,1510],{},"Manage requests.",[185,1512,1513,1527],{},[212,1514,1515,233,1518,233,1521,233,1524],{},[172,1516,1517],{},"cad:profiles:list",[172,1519,1520],{},"cad:profiles:update_from_context",[172,1522,1523],{},"cad:profiles:upsert",[172,1525,1526],{},"cad:profiles:delete",[212,1528,1529],{},"Manage profiles.",[185,1531,1532,1537],{},[212,1533,1534],{},[172,1535,1536],{},"cad:groups:build",[212,1538,1539],{},"Build grouped CAD state.",[185,1541,1542,1547],{},[212,1543,1544],{},[172,1545,1546],{},"cad:view:hydrate",[212,1548,1549],{},"Build the dispatcher view model.",[155,1551,960,1552,963],{},[557,1553,65],{"href":66},[814,1555,475],{"id":1556},"task",[179,1558,1559,1567],{},[182,1560,1561],{},[185,1562,1563,1565],{},[188,1564,1418],{},[188,1566,193],{},[207,1568,1569,1579,1598,1617,1633,1646],{},[185,1570,1571,1576],{},[212,1572,1573],{},[172,1574,1575],{},"task:reset",[212,1577,1578],{},"Reset task state.",[185,1580,1581,1595],{},[212,1582,1583,233,1586,233,1589,233,1592],{},[172,1584,1585],{},"task:catalog:active",[172,1587,1588],{},"task:catalog:get",[172,1590,1591],{},"task:catalog:upsert",[172,1593,1594],{},"task:catalog:delete",[212,1596,1597],{},"Manage task catalog entries.",[185,1599,1600,1614],{},[212,1601,1602,233,1605,233,1608,233,1611],{},[172,1603,1604],{},"task:ownership:bind",[172,1606,1607],{},"task:ownership:release",[172,1609,1610],{},"task:ownership:accept",[172,1612,1613],{},"task:ownership:reward_context",[212,1615,1616],{},"Manage task ownership and rewards.",[185,1618,1619,1630],{},[212,1620,1621,233,1624,233,1627],{},[172,1622,1623],{},"task:status:set",[172,1625,1626],{},"task:status:get",[172,1628,1629],{},"task:status:clear",[212,1631,1632],{},"Manage task status.",[185,1634,1635,1643],{},[212,1636,1637,233,1640],{},[172,1638,1639],{},"task:defuse:increment",[172,1641,1642],{},"task:defuse:get",[212,1644,1645],{},"Manage defuse counters.",[185,1647,1648,1653],{},[212,1649,1650],{},[172,1651,1652],{},"task:clear",[212,1654,1655],{},"Clear task state.",[155,1657,960,1658,963],{},[557,1659,57],{"href":58},[814,1661,575],{"id":1662},"owned-storage",[179,1664,1665,1673],{},[182,1666,1667],{},[185,1668,1669,1671],{},[188,1670,1418],{},[188,1672,193],{},[207,1674,1675,1703,1713,1741],{},[185,1676,1677,1700],{},[212,1678,1679,233,1682,233,1685,233,1688,233,1691,233,1694,233,1697],{},[172,1680,1681],{},"owned:garage:create",[172,1683,1684],{},"owned:garage:fetch",[172,1686,1687],{},"owned:garage:get",[172,1689,1690],{},"owned:garage:add",[172,1692,1693],{},"owned:garage:remove",[172,1695,1696],{},"owned:garage:delete",[172,1698,1699],{},"owned:garage:exists",[212,1701,1702],{},"Owner-scoped vehicle storage.",[185,1704,1705,1710],{},[212,1706,1707],{},[172,1708,1709],{},"owned:garage:hot:*",[212,1711,1712],{},"Owner-scoped vehicle hot state.",[185,1714,1715,1738],{},[212,1716,1717,233,1720,233,1723,233,1726,233,1729,233,1732,233,1735],{},[172,1718,1719],{},"owned:locker:create",[172,1721,1722],{},"owned:locker:fetch",[172,1724,1725],{},"owned:locker:get",[172,1727,1728],{},"owned:locker:add",[172,1730,1731],{},"owned:locker:remove",[172,1733,1734],{},"owned:locker:delete",[172,1736,1737],{},"owned:locker:exists",[212,1739,1740],{},"Owner-scoped item storage.",[185,1742,1743,1748],{},[212,1744,1745],{},[172,1746,1747],{},"owned:locker:hot:*",[212,1749,1750],{},"Owner-scoped item hot state.",[155,1752,960,1753,963],{},[557,1754,85],{"href":86},[814,1756,1758],{"id":1757},"other-extension-groups","Other Extension Groups",[179,1760,1761,1769],{},[182,1762,1763],{},[185,1764,1765,1767],{},[188,1766,1418],{},[188,1768,193],{},[207,1770,1771,1780,1796,1806,1819,1832],{},[185,1772,1773,1777],{},[212,1774,1775],{},[172,1776,470],{},[212,1778,1779],{},"Run store checkout behavior.",[185,1781,1782,1793],{},[212,1783,1784,233,1787,233,1790],{},[172,1785,1786],{},"icom:connect",[172,1788,1789],{},"icom:broadcast",[172,1791,1792],{},"icom:send_event",[212,1794,1795],{},"ICom connection and event forwarding.",[185,1797,1798,1803],{},[212,1799,1800],{},[172,1801,1802],{},"terrain:exportSVG",[212,1804,1805],{},"Export terrain data as SVG.",[185,1807,1808,1816],{},[212,1809,1810,233,1813],{},[172,1811,1812],{},"transport:invoke",[172,1814,1815],{},"transport:invoke_stored",[212,1817,1818],{},"Invoke commands through transport.",[185,1820,1821,1829],{},[212,1822,1823,233,1826],{},[172,1824,1825],{},"transport:request:append",[172,1827,1828],{},"transport:request:clear",[212,1830,1831],{},"Manage stored request chunks.",[185,1833,1834,1842],{},[212,1835,1836,233,1839],{},[172,1837,1838],{},"transport:response:get",[172,1840,1841],{},"transport:response:clear",[212,1843,1844],{},"Manage stored response chunks.",[159,1846,1848],{"id":1847},"rust-crates","Rust Crates",[179,1850,1851,1861],{},[182,1852,1853],{},[185,1854,1855,1858],{},[188,1856,1857],{},"Crate",[188,1859,1860],{},"Role",[207,1862,1863,1873,1883,1893,1903,1913],{},[185,1864,1865,1870],{},[212,1866,1867],{},[172,1868,1869],{},"forge-models",[212,1871,1872],{},"Domain models and validation. Keep these serializable and free of persistence details.",[185,1874,1875,1880],{},[212,1876,1877],{},[172,1878,1879],{},"forge-repositories",[212,1881,1882],{},"Repository traits and in-memory implementations. Keep these storage-agnostic.",[185,1884,1885,1890],{},[212,1886,1887],{},[172,1888,1889],{},"forge-services",[212,1891,1892],{},"Business rules and workflows. Depend on repository traits, not concrete databases.",[185,1894,1895,1900],{},[212,1896,1897],{},[172,1898,1899],{},"forge-shared",[212,1901,1902],{},"Cross-crate helpers. Keep dependencies light.",[185,1904,1905,1910],{},[212,1906,1907],{},[172,1908,1909],{},"forge-server",[212,1911,1912],{},"Arma extension crate. Owns command registration, SurrealDB runtime wiring, and concrete storage adapters.",[185,1914,1915,1920],{},[212,1916,1917],{},[172,1918,1919],{},"forge-icom",[212,1921,1922],{},"ICom helper binary and client library.",[1924,1925,1926],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":170,"searchDepth":1928,"depth":1928,"links":1929},2,[1930,1931,1932,1933,1947],{"id":161,"depth":1928,"text":162},{"id":176,"depth":1928,"text":177},{"id":616,"depth":1928,"text":617},{"id":784,"depth":1928,"text":785,"children":1934},[1935,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946],{"id":816,"depth":1936,"text":817},3,{"id":863,"depth":1936,"text":214},{"id":966,"depth":1936,"text":246},{"id":1070,"depth":1936,"text":311},{"id":1148,"depth":1936,"text":345},{"id":1220,"depth":1936,"text":379},{"id":1313,"depth":1936,"text":413},{"id":1409,"depth":1936,"text":280},{"id":1556,"depth":1936,"text":475},{"id":1662,"depth":1936,"text":575},{"id":1757,"depth":1936,"text":1758},{"id":1847,"depth":1928,"text":1848},"md",null,{},true,{"title":15,"description":157},"DvQwc2rM4FqseD3QHUyCecRoLIjQmfZuZK0p1V8hxZw",[1955,1957],{"title":11,"path":12,"stem":13,"description":1956,"children":-1},"Forge is organized around domain modules. A domain usually has SQF addon\nentry points, Rust models, repository traits, service logic, extension command\nhandlers, and optional browser UI.",{"title":19,"path":20,"stem":21,"description":1958,"children":-1},"This guide covers the usual path for adding or changing a Forge module.",1776806627742] \ No newline at end of file diff --git a/docus/dist/getting-started/surrealdb-setup.html b/docus/dist/getting-started/surrealdb-setup.html new file mode 100644 index 0000000..dd2195a --- /dev/null +++ b/docus/dist/getting-started/surrealdb-setup.html @@ -0,0 +1,139 @@ +SurrealDB Setup - forge-docus
Getting Started

SurrealDB Setup

Forge uses SurrealDB for durable storage. The Rust server extension connects to +SurrealDB on startup and applies Forge schema modules automatically, so setup +comes down to running a reachable database and matching the Forge config.

SurrealDB Setup

Forge uses SurrealDB for durable storage. The Rust server extension connects to +SurrealDB on startup and applies Forge schema modules automatically, so setup +comes down to running a reachable database and matching the Forge config.

Choose the Right Path

Developer or Server Operator

Use this path if you are building Forge, running a local test server, or +hosting the live Arma server.

Official SurrealDB resources:

Install SurrealDB with the official method for your platform:

# Windows
+iwr https://windows.surrealdb.com -useb | iex
+
# macOS
+brew install surrealdb/tap/surreal
+
# Linux
+curl -sSf https://install.surrealdb.com | sh
+

For Forge, start a persistent local database instead of the default in-memory +mode:

surreal start surrealkv://forge.db --bind 127.0.0.1:8000 --user root --pass root
+

Then copy arma/server/extension/config.example.toml to config.toml next to +forge_server_x64.dll and keep the values aligned with the database you +started:

[surreal]
+endpoint = "127.0.0.1:8000"
+namespace = "forge"
+database = "main"
+username = "root"
+password = "root"
+connect_timeout_ms = 5000
+

After that:

  1. Start the Arma server with the Forge extension enabled.
  2. Let the extension connect and apply the Forge schema modules.
  3. Verify the connection state:
"forge_server" callExtension ["status", []];
+"forge_server" callExtension ["surreal:status", []];
+

If you change the endpoint, namespace, database, username, or password in +SurrealDB, change the same values in Forge's config.toml.

Mission Designer or Community Manager/Leader

Use this path if you mostly need to inspect, query, or adjust data for a test +or live server and you are not changing Forge source code.

Official SurrealDB resources:

Recommended approach:

  1. Install Surrealist Desktop. It is the better fit for Forge because the +official docs note that the web app can be limited when connecting to +localhost or non-HTTPS endpoints.
  2. Connect Surrealist to the same database Forge uses.
  3. Use the values from the server's config.toml:
Endpoint:   http://127.0.0.1:8000
+Namespace:  forge
+Database:   main
+Username:   root
+Password:   root
+

If you need your own local sandbox instead of connecting to an existing Forge +server, install SurrealDB first and follow the developer/server-operator path +above. Surrealist Desktop can also launch a local database for you after the +surreal executable is installed and available on your PATH.

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/getting-started/surrealdb-setup/_payload.json b/docus/dist/getting-started/surrealdb-setup/_payload.json new file mode 100644 index 0000000..d5bdb3b --- /dev/null +++ b/docus/dist/getting-started/surrealdb-setup/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":488},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-surrealdb-setup":145,"-getting-started-surrealdb-setup-surround":483},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":23,"body":147,"description":157,"extension":477,"links":478,"meta":479,"navigation":480,"path":24,"seo":481,"stem":25,"__hash__":482},"docs\u002F1.getting-started\u002F4.surrealdb-setup.md",{"type":148,"value":149,"toc":471},"minimark",[150,154,158,163,168,171,174,199,202,225,251,279,282,291,306,353,356,368,385,391,395,398,400,423,426,449,457,467],[151,152,23],"h1",{"id":153},"surrealdb-setup",[155,156,157],"p",{},"Forge uses SurrealDB for durable storage. The Rust server extension connects to\nSurrealDB on startup and applies Forge schema modules automatically, so setup\ncomes down to running a reachable database and matching the Forge config.",[159,160,162],"h2",{"id":161},"choose-the-right-path","Choose the Right Path",[164,165,167],"h3",{"id":166},"developer-or-server-operator","Developer or Server Operator",[155,169,170],{},"Use this path if you are building Forge, running a local test server, or\nhosting the live Arma server.",[155,172,173],{},"Official SurrealDB resources:",[175,176,177,187],"ul",{},[178,179,180],"li",{},[181,182,186],"a",{"href":183,"rel":184},"https:\u002F\u002Fsurrealdb.com\u002Finstall",[185],"nofollow","SurrealDB install page",[178,188,189],{},[181,190,193,194,198],{"href":191,"rel":192},"https:\u002F\u002Fsurrealdb.com\u002Fdocs\u002Freference\u002Fcli\u002Fsurrealdb-cli\u002Fcommands\u002Fstart",[185],"SurrealDB CLI ",[195,196,197],"code",{},"start"," reference",[155,200,201],{},"Install SurrealDB with the official method for your platform:",[203,204,209],"pre",{"className":205,"code":206,"language":207,"meta":208,"style":208},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Windows\niwr https:\u002F\u002Fwindows.surrealdb.com -useb | iex\n","powershell","",[195,210,211,219],{"__ignoreMap":208},[212,213,216],"span",{"class":214,"line":215},"line",1,[212,217,218],{},"# Windows\n",[212,220,222],{"class":214,"line":221},2,[212,223,224],{},"iwr https:\u002F\u002Fwindows.surrealdb.com -useb | iex\n",[203,226,230],{"className":227,"code":228,"language":229,"meta":208,"style":208},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# macOS\nbrew install surrealdb\u002Ftap\u002Fsurreal\n","bash",[195,231,232,238],{"__ignoreMap":208},[212,233,234],{"class":214,"line":215},[212,235,237],{"class":236},"sHwdD","# macOS\n",[212,239,240,244,248],{"class":214,"line":221},[212,241,243],{"class":242},"sBMFI","brew",[212,245,247],{"class":246},"sfazB"," install",[212,249,250],{"class":246}," surrealdb\u002Ftap\u002Fsurreal\n",[203,252,254],{"className":227,"code":253,"language":229,"meta":208,"style":208},"# Linux\ncurl -sSf https:\u002F\u002Finstall.surrealdb.com | sh\n",[195,255,256,261],{"__ignoreMap":208},[212,257,258],{"class":214,"line":215},[212,259,260],{"class":236},"# Linux\n",[212,262,263,266,269,272,276],{"class":214,"line":221},[212,264,265],{"class":242},"curl",[212,267,268],{"class":246}," -sSf",[212,270,271],{"class":246}," https:\u002F\u002Finstall.surrealdb.com",[212,273,275],{"class":274},"sMK4o"," |",[212,277,278],{"class":242}," sh\n",[155,280,281],{},"For Forge, start a persistent local database instead of the default in-memory\nmode:",[203,283,285],{"className":205,"code":284,"language":207,"meta":208,"style":208},"surreal start surrealkv:\u002F\u002Fforge.db --bind 127.0.0.1:8000 --user root --pass root\n",[195,286,287],{"__ignoreMap":208},[212,288,289],{"class":214,"line":215},[212,290,284],{},[155,292,293,294,297,298,301,302,305],{},"Then copy ",[195,295,296],{},"arma\u002Fserver\u002Fextension\u002Fconfig.example.toml"," to ",[195,299,300],{},"config.toml"," next to\n",[195,303,304],{},"forge_server_x64.dll"," and keep the values aligned with the database you\nstarted:",[203,307,311],{"className":308,"code":309,"language":310,"meta":208,"style":208},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[surreal]\nendpoint = \"127.0.0.1:8000\"\nnamespace = \"forge\"\ndatabase = \"main\"\nusername = \"root\"\npassword = \"root\"\nconnect_timeout_ms = 5000\n","toml",[195,312,313,318,323,329,335,341,347],{"__ignoreMap":208},[212,314,315],{"class":214,"line":215},[212,316,317],{},"[surreal]\n",[212,319,320],{"class":214,"line":221},[212,321,322],{},"endpoint = \"127.0.0.1:8000\"\n",[212,324,326],{"class":214,"line":325},3,[212,327,328],{},"namespace = \"forge\"\n",[212,330,332],{"class":214,"line":331},4,[212,333,334],{},"database = \"main\"\n",[212,336,338],{"class":214,"line":337},5,[212,339,340],{},"username = \"root\"\n",[212,342,344],{"class":214,"line":343},6,[212,345,346],{},"password = \"root\"\n",[212,348,350],{"class":214,"line":349},7,[212,351,352],{},"connect_timeout_ms = 5000\n",[155,354,355],{},"After that:",[357,358,359,362,365],"ol",{},[178,360,361],{},"Start the Arma server with the Forge extension enabled.",[178,363,364],{},"Let the extension connect and apply the Forge schema modules.",[178,366,367],{},"Verify the connection state:",[203,369,373],{"className":370,"code":371,"language":372,"meta":208,"style":208},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"forge_server\" callExtension [\"status\", []];\n\"forge_server\" callExtension [\"surreal:status\", []];\n","sqf",[195,374,375,380],{"__ignoreMap":208},[212,376,377],{"class":214,"line":215},[212,378,379],{},"\"forge_server\" callExtension [\"status\", []];\n",[212,381,382],{"class":214,"line":221},[212,383,384],{},"\"forge_server\" callExtension [\"surreal:status\", []];\n",[155,386,387,388,390],{},"If you change the endpoint, namespace, database, username, or password in\nSurrealDB, change the same values in Forge's ",[195,389,300],{},".",[164,392,394],{"id":393},"mission-designer-or-community-managerleader","Mission Designer or Community Manager\u002FLeader",[155,396,397],{},"Use this path if you mostly need to inspect, query, or adjust data for a test\nor live server and you are not changing Forge source code.",[155,399,173],{},[175,401,402,409,416],{},[178,403,404],{},[181,405,408],{"href":406,"rel":407},"https:\u002F\u002Fsurrealdb.com\u002Fdocs\u002Fexplore\u002Fsurrealist\u002Finstallation",[185],"Surrealist installation",[178,410,411],{},[181,412,415],{"href":413,"rel":414},"https:\u002F\u002Fapp.surrealdb.com",[185],"Surrealist web app",[178,417,418],{},[181,419,422],{"href":420,"rel":421},"https:\u002F\u002Fsurrealdb.com\u002Fdocs\u002Fexplore\u002Fsurrealist\u002Fconcepts\u002Flocal-database-serving",[185],"Surrealist local database serving",[155,424,425],{},"Recommended approach:",[357,427,428,440,443],{},[178,429,430,431,435,436,439],{},"Install ",[432,433,434],"strong",{},"Surrealist Desktop",". It is the better fit for Forge because the\nofficial docs note that the web app can be limited when connecting to\n",[195,437,438],{},"localhost"," or non-HTTPS endpoints.",[178,441,442],{},"Connect Surrealist to the same database Forge uses.",[178,444,445,446,448],{},"Use the values from the server's ",[195,447,300],{},":",[203,450,455],{"className":451,"code":453,"language":454,"meta":208},[452],"language-text","Endpoint: http:\u002F\u002F127.0.0.1:8000\nNamespace: forge\nDatabase: main\nUsername: root\nPassword: root\n","text",[195,456,453],{"__ignoreMap":208},[155,458,459,460,463,464,390],{},"If you need your own local sandbox instead of connecting to an existing Forge\nserver, install SurrealDB first and follow the developer\u002Fserver-operator path\nabove. Surrealist Desktop can also launch a local database for you after the\n",[195,461,462],{},"surreal"," executable is installed and available on your ",[195,465,466],{},"PATH",[468,469,470],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":208,"searchDepth":221,"depth":221,"links":472},[473],{"id":161,"depth":221,"text":162,"children":474},[475,476],{"id":166,"depth":325,"text":167},{"id":393,"depth":325,"text":394},"md",null,{},true,{"title":23,"description":157},"Mzg_hZr3MJToQo6L-0UrTXsAtDW3i2aJ-CYUHBu0nB8",[484,486],{"title":19,"path":20,"stem":21,"description":485,"children":-1},"This guide covers the usual path for adding or changing a Forge module.",{"title":28,"path":29,"stem":30,"description":487,"children":-1},"Forge Server is an arma-rs extension for Arma 3 server-side persistence and\ndomain services. It exposes game-facing commands and stores durable state in\nSurrealDB.",1776806627742] \ No newline at end of file diff --git a/docus/dist/index.html b/docus/dist/index.html new file mode 100644 index 0000000..fd4ff5c --- /dev/null +++ b/docus/dist/index.html @@ -0,0 +1,106 @@ +Forge Framework Documentation - forge-docus

Forge Framework Documentation

Forge is a persistent Arma 3 framework that combines SQF addons, a Rust +arma-rs extension, SurrealDB persistence, shared domain crates, and +browser-backed player interfaces.

Use these docs to understand the runtime architecture, extension API surface, +server gameplay modules, and client addon integration patterns.

What Forge Covers

    Domain Modules
    Actor, bank, CAD, garage, locker, organization, phone, store, task, and +owned-storage workflows share a consistent service and extension model.
    Rust Extension
    The server extension keeps command parsing thin, routes domain requests into +services, and persists durable state through SurrealDB.
    Durable Persistence
    Repository traits stay storage-agnostic while concrete adapters in the +extension handle schema and database mapping.
    Browser UIs
    Client addons host web-based interfaces inside Arma displays and synchronize +state through namespaced browser bridge events.
    Transport Layer
    Large payloads move through chunked request and response transport while +smaller commands still use direct callExtension paths.
    Development Workflow
    The docs cover module boundaries, local validation checks, and where new +domain logic belongs across Rust, SQF, and web UI layers.

Documentation Areas

    Getting Started
    Framework overview, architecture, module reference, and development rules.
    Server Extension
    Extension architecture, command surface, and SQF usage examples.
    Server Modules
    Gameplay-domain usage guides for persistence, hot state, and command flows.
    Client Addons
    Browser bridge, client UX entry points, and addon-specific event contracts.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/llms-full.txt b/docus/dist/llms-full.txt new file mode 100644 index 0000000..25a9080 --- /dev/null +++ b/docus/dist/llms-full.txt @@ -0,0 +1,4206 @@ +# Getting Started + +Use this section as the main entry point for the Forge framework. + +Forge combines: + +- Arma 3 client addons for UX and browser-hosted interfaces +- Arma 3 server addons for mission integration and authoritative flow control +- a Rust server extension for command routing and persistence +- shared Rust crates for models, repositories, and services +- SurrealDB for durable storage + +## Common Commands + +```powershell +cargo test +npm run build:webui +.\build-arma.ps1 +``` + +## Start Here + +::u-page-grid + :::u-page-card + --- + icon: i-lucide-network + title: Architecture + to: https://innovativedevsolutions.github.io/getting-started/architecture + --- + Understand how SQF, Rust services, SurrealDB, and browser UIs fit together. + ::: + + :::u-page-card + --- + icon: i-lucide-boxes + title: Module Reference + to: https://innovativedevsolutions.github.io/getting-started/module-reference + --- + Review gameplay domains, infrastructure modules, and extension command groups. + ::: + + :::u-page-card + --- + icon: i-lucide-wrench + title: Development Guide + to: https://innovativedevsolutions.github.io/getting-started/development + --- + See the rules for adding modules and changing boundaries without regressions. + ::: + + :::u-page-card + --- + icon: i-lucide-database + title: SurrealDB Setup + to: https://innovativedevsolutions.github.io/getting-started/surrealdb-setup + --- + Install SurrealDB, match Forge config values, and choose the right setup path + for developers or admin-facing roles. + ::: + + :::u-page-card + --- + icon: i-lucide-server-cog + title: Server Extension + to: https://innovativedevsolutions.github.io/server-extension + --- + Follow the extension architecture, API surface, and SQF usage examples. + ::: + + :::u-page-card + --- + icon: i-lucide-layers-3 + title: Server Modules + to: https://innovativedevsolutions.github.io/server-modules + --- + Dive into the actor, bank, CAD, garage, locker, organization, phone, store, + task, and owned-storage guides. + ::: + + :::u-page-card + --- + icon: i-lucide-monitor-smartphone + title: Client Addons + to: https://innovativedevsolutions.github.io/client-addons + --- + Explore the client bridge model and addon-specific browser integration rules. + ::: +:: + + +# Framework Architecture + +Forge is organized around domain modules. A domain usually has SQF addon +entry points, Rust models, repository traits, service logic, extension command +handlers, and optional browser UI. + +## Runtime Flow + +```text +Arma client UI or SQF action + -> client addon bridge + -> server addon function + -> forge_server callExtension command + -> extension command group + -> forge-services domain service + -> forge-repositories trait + -> SurrealDB repository implementation + -> SurrealDB +``` + +For small payloads, server SQF calls `forge_server` directly through the +extension bridge. For large payloads, `arma/server/addons/extension` stages +request and response chunks through the extension transport module. + +## Main Layers + +### Client Addons + +Client addons live under `arma/client/addons`. They own local player UX, +keybinds, browser UI dialogs, and UI-to-SQF event handling. When a client needs +durable or authoritative state, it routes work to the matching server addon +instead of touching persistence directly. + +### Server Addons + +Server addons live under `arma/server/addons`. They own server-side SQF +initialization, game-object integration, validation near the Arma runtime, and +calls into the Rust extension. The `extension` addon is the shared bridge for +`callExtension` and transport handling. + +### Rust Extension + +The server extension lives under `arma/server/extension`. It registers the +`forge_server` command groups, loads configuration, initializes SurrealDB, and +maps SQF command inputs into service calls. + +The extension should stay thin: + +- Parse and validate command arguments that arrive from SQF. +- Resolve Arma-specific context such as player UID when required. +- Call the matching service. +- Serialize the service result back to JSON or a simple string. + +### Shared Rust Crates + +The `lib` workspace contains reusable Rust crates: + +- `forge-models`: shared domain structs and serialization rules. +- `forge-repositories`: storage-agnostic repository traits and in-memory + implementations used by tests and hot-state services. +- `forge-services`: domain behavior, validation, and mutation workflows. +- `forge-shared`: cross-crate helpers. + +### Persistence + +Durable storage is SurrealDB. Schema modules live under +`arma/server/extension/src/schema`, and concrete SurrealDB repository +implementations live under `arma/server/extension/src/storage`. + +Repository traits stay in `lib/repositories` so service logic remains testable +without a database. + +## Hot State + +Several domains have `hot` command groups. Hot state keeps a runtime copy of +frequently accessed data in memory, then saves it back to durable storage when +requested. This is useful for player state that changes often during a session. + +Typical hot-state flow: + +```text +actor:hot:init +actor:hot:get +actor:hot:override +actor:hot:save +actor:hot:remove +``` + +Use hot state for session workflows. Use normal domain commands for direct +durable CRUD operations. + +## Transport Layer + +The transport layer exists because Arma extension calls have practical payload +size limits. It provides chunked request and response handling while still +routing to the same domain command groups. + +Common direct command: + +```sqf +"forge_server" callExtension ["status", []]; +``` + +Common transport path: + +```text +server addon fnc_extCall + -> transport:request:append + -> transport:invoke_stored + -> transport:response:get +``` + +## Configuration + +The server extension reads `config.toml` next to the extension DLL. The current +persistence section is: + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +For install links and role-based setup guidance, see +[SurrealDB Setup](https://innovativedevsolutions.github.io/getting-started/surrealdb-setup). + +Check persistence readiness before issuing commands that require storage: + +```sqf +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` + + +# Module Reference + +This reference lists the main Forge modules and where each layer lives. + +## Directory Map + +```text +arma/client/addons/ Client-side Arma addons and browser UIs +arma/server/addons/ Server-side Arma addons and extension bridge +arma/server/extension/ Rust arma-rs extension and SurrealDB adapters +bin/icom/ Interprocess communication helper +lib/models/ Shared domain data models +lib/repositories/ Repository traits and in-memory stores +lib/services/ Domain services and workflow logic +lib/shared/ Cross-crate helpers +tools/ Web UI build tooling +docs/ Framework-level documentation +``` + +## Gameplay Domains + +| Domain | Purpose | Client addon | Server addon | Service/model layer | Extension group | +| ------------ | ---------------------------------------------------------------------------------------------------------------- | --------------------------- | --------------------------- | ------------------------------------------------------------ | -------------------------- | +| Actor | Player identity, loadout, position, status, contact identifiers, and persistent character data. | `arma/client/addons/actor` | `arma/server/addons/actor` | `lib/models/src/actor.rs`, `lib/services/src/actor.rs` | `actor:*` | +| Bank | Player accounts, cash/bank balances, PIN validation, transfers, checkout charging, and transaction context. | `arma/client/addons/bank` | `arma/server/addons/bank` | `lib/models/src/bank.rs`, `lib/services/src/bank.rs` | `bank:*`, `bank:hot:*` | +| CAD | Dispatch requests, assignments, orders, activity stream, profiles, groups, and hydrated dispatcher views. | `arma/client/addons/cad` | `arma/server/addons/cad` | `lib/models/src/cad.rs`, `lib/services/src/cad.rs` | `cad:*` | +| Garage | Player vehicle storage with plate IDs, fuel, damage, and hit point state. | `arma/client/addons/garage` | `arma/server/addons/garage` | `lib/models/src/garage.rs`, `lib/services/src/garage.rs` | `garage:*`, `garage:hot:*` | +| Locker | Player item storage keyed by classname with category and amount. | `arma/client/addons/locker` | `arma/server/addons/locker` | `lib/models/src/locker.rs`, `lib/services/src/locker.rs` | `locker:*`, `locker:hot:*` | +| Organization | Player organizations, membership, treasury, credit lines, shared assets, and fleet data. | `arma/client/addons/org` | `arma/server/addons/org` | `lib/models/src/org.rs`, `lib/services/src/org.rs` | `org:*`, `org:hot:*` | +| Phone | Contacts, messages, and email state. | `arma/client/addons/phone` | `arma/server/addons/phone` | `lib/models/src/phone.rs`, `lib/services/src/phone.rs` | `phone:*` | +| Store | Storefront entity setup, catalog hydration, checkout workflows, and checkout charging integration. | `arma/client/addons/store` | `arma/server/addons/store` | `lib/models/src/store.rs`, `lib/services/src/store.rs` | `store:checkout` | +| Task | Server-owned mission/task flows, catalog, ownership, status, participant tracking, rewards, and defuse counters. | none | `arma/server/addons/task` | `lib/models/src/task.rs`, `lib/services/src/task.rs` | `task:*` | +| Owned Garage | Organization or owner-scoped vehicle unlock storage. | via garage/org UI | server extension only | `lib/models/src/v_garage.rs`, `lib/services/src/v_garage.rs` | `owned:garage:*` | +| Owned Locker | Organization or owner-scoped arsenal unlock storage. | via locker/org UI | server extension only | `lib/models/src/v_locker.rs`, `lib/services/src/v_locker.rs` | `owned:locker:*` | + +Server and extension guides: +[Actor](https://innovativedevsolutions.github.io/server-modules/actor), +[Bank](https://innovativedevsolutions.github.io/server-modules/bank), +[CAD](https://innovativedevsolutions.github.io/server-modules/cad), +[Economy](https://innovativedevsolutions.github.io/server-modules/economy), +[Garage](https://innovativedevsolutions.github.io/server-modules/garage), +[Locker](https://innovativedevsolutions.github.io/server-modules/locker), +[Organization](https://innovativedevsolutions.github.io/server-modules/organization), +[Owned Storage](https://innovativedevsolutions.github.io/server-modules/owned-storage), +[Phone](https://innovativedevsolutions.github.io/server-modules/phone), +[Store](https://innovativedevsolutions.github.io/server-modules/store), +[Task](https://innovativedevsolutions.github.io/server-modules/task). + +Client guides: +[Client Overview](https://innovativedevsolutions.github.io/client-addons), +[Main](https://innovativedevsolutions.github.io/client-addons/main), +[Common](https://innovativedevsolutions.github.io/client-addons/common), +[Actor](https://innovativedevsolutions.github.io/client-addons/actor), +[Bank](https://innovativedevsolutions.github.io/client-addons/bank), +[CAD](https://innovativedevsolutions.github.io/client-addons/cad), +[Garage](https://innovativedevsolutions.github.io/client-addons/garage), +[Locker](https://innovativedevsolutions.github.io/client-addons/locker), +[Notifications](https://innovativedevsolutions.github.io/client-addons/notifications), +[Organization](https://innovativedevsolutions.github.io/client-addons/organization), +[Phone](https://innovativedevsolutions.github.io/client-addons/phone), +[Store](https://innovativedevsolutions.github.io/client-addons/store). + +## Infrastructure Modules + +| Module | Purpose | Location | +| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | +| `common` | Shared SQF helpers, base stores, utility functions, and shared UI bridge pieces. | `arma/client/addons/common`, `arma/server/addons/common` | +| `extension` | Server SQF bridge around `forge_server` extension calls and chunked transport. | `arma/server/addons/extension` | +| `main` | Mod-level configuration, pre-init wiring, and server/client startup glue. | `arma/client/addons/main`, `arma/server/addons/main` | +| `economy` | Server-side fuel, medical, and service economy helpers. Fuel and repair charge organization hot state; medical charges player bank/cash first, then organization funds with repayable member debt when personal funds cannot cover the bill. | `arma/server/addons/economy` | +| `notifications` | Client notification UI, sounds, and UI event handling. | `arma/client/addons/notifications` | +| `icom` | Rust helper for interprocess communication and event broadcasting. | `bin/icom`, `arma/server/extension/src/icom.rs` | +| `terrain` | Extension-side terrain export helper. | `arma/server/extension/src/terrain.rs` | +| `transport` | Chunked request/response handling for large extension payloads. | `arma/server/extension/src/transport.rs` | +| `surreal` | SurrealDB connection lifecycle and status reporting. | `arma/server/extension/src/surreal.rs` | + +## Extension Command Groups + +Commands are invoked with: + +```sqf +"forge_server" callExtension ["group:command", [_arg1, _arg2]]; +``` + +Nested groups use additional `:` separators, for example +`bank:hot:deposit`. + +### Core + +| Command | Purpose | +| ---------------- | ------------------------------------------------------------------- | +| `version` | Return the extension version string. | +| `status` | Return SurrealDB connection state. | +| `surreal:status` | Return SurrealDB connection state directly from the Surreal module. | + +### Actor + +| Command | Purpose | +| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | +| `actor:get` | Fetch actor data for a resolved player UID. | +| `actor:create` | Create actor data from JSON. | +| `actor:update` | Apply actor JSON updates. | +| `actor:exists` | Return `true` or `false`. | +| `actor:delete` | Delete actor data. | +| `actor:hot:init`, `actor:hot:get`, `actor:hot:keys`, `actor:hot:override`, `actor:hot:save`, `actor:hot:remove` | Manage actor hot state. | + +See [Actor Usage Guide](https://innovativedevsolutions.github.io/server-modules/actor) for examples. + +### Bank + +| Command | Purpose | +| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | +| `bank:get`, `bank:create`, `bank:update`, `bank:exists`, `bank:delete` | Durable bank CRUD. | +| `bank:hot:init`, `bank:hot:get`, `bank:hot:override`, `bank:hot:patch`, `bank:hot:save`, `bank:hot:remove` | Manage bank hot state. | +| `bank:hot:deposit`, `bank:hot:withdraw`, `bank:hot:deposit_earnings`, `bank:hot:transfer` | Mutate hot bank balances with operation context. | +| `bank:hot:charge_checkout` | Charge a checkout against hot bank state. | +| `bank:hot:validate_pin` | Validate a PIN for bank operations. | + +See [Bank Usage Guide](https://innovativedevsolutions.github.io/server-modules/bank) for examples. + +### Garage + +| Command | Purpose | +| ------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| `garage:create`, `garage:get`, `garage:add`, `garage:update`, `garage:patch`, `garage:remove`, `garage:delete`, `garage:exists` | Durable player garage operations. | +| `garage:hot:init`, `garage:hot:get`, `garage:hot:override`, `garage:hot:add`, `garage:hot:remove_vehicle`, `garage:hot:save`, `garage:hot:remove` | Manage player garage hot state. | + +See [Garage Usage Guide](https://innovativedevsolutions.github.io/server-modules/garage) for examples. + +### Locker + +| Command | Purpose | +| ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| `locker:create`, `locker:get`, `locker:add`, `locker:update`, `locker:patch`, `locker:remove`, `locker:delete`, `locker:exists` | Durable player locker operations. | +| `locker:hot:init`, `locker:hot:get`, `locker:hot:override`, `locker:hot:save`, `locker:hot:remove` | Manage player locker hot state. | + +See [Locker Usage Guide](https://innovativedevsolutions.github.io/server-modules/locker) for examples. + +### Organization + +| Command | Purpose | +| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `org:get`, `org:create`, `org:update`, `org:exists`, `org:delete` | Durable organization CRUD. | +| `org:assets:get`, `org:assets:update` | Manage organization assets. | +| `org:fleet:get`, `org:fleet:update` | Manage organization fleet entries. | +| `org:members:get`, `org:members:add`, `org:members:remove` | Manage organization membership. | +| `org:hot:*` | Runtime organization workflows including registration, invites, credit lines, checkout charging, assets, fleet, leave, disband, save, and remove. | + +See [Org Usage Guide](https://innovativedevsolutions.github.io/server-modules/organization) for examples. + +### Phone + +| Command | Purpose | +| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| `phone:init` | Initialize phone state for a UID. | +| `phone:contacts:list`, `phone:contacts:add`, `phone:contacts:remove` | Manage contacts. | +| `phone:messages:list`, `phone:messages:thread`, `phone:messages:send`, `phone:messages:mark_read`, `phone:messages:delete` | Manage messages. | +| `phone:emails:list`, `phone:emails:send`, `phone:emails:mark_read`, `phone:emails:delete` | Manage emails. | +| `phone:remove` | Remove phone state for a UID. | + +See [Phone Usage Guide](https://innovativedevsolutions.github.io/server-modules/phone) for examples. + +### CAD + +| Command Group | Purpose | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | +| `cad:activity:append`, `cad:activity:recent` | Append and read recent activity. | +| `cad:assignments:list`, `cad:assignments:assign`, `cad:assignments:acknowledge`, `cad:assignments:decline`, `cad:assignments:upsert`, `cad:assignments:delete` | Manage dispatch assignments. | +| `cad:orders:list`, `cad:orders:create`, `cad:orders:create_from_context`, `cad:orders:close`, `cad:orders:upsert`, `cad:orders:delete` | Manage orders. | +| `cad:requests:list`, `cad:requests:submit`, `cad:requests:submit_from_context`, `cad:requests:close`, `cad:requests:upsert`, `cad:requests:delete` | Manage requests. | +| `cad:profiles:list`, `cad:profiles:update_from_context`, `cad:profiles:upsert`, `cad:profiles:delete` | Manage profiles. | +| `cad:groups:build` | Build grouped CAD state. | +| `cad:view:hydrate` | Build the dispatcher view model. | + +See [CAD Usage Guide](https://innovativedevsolutions.github.io/server-modules/cad) for examples. + +### Task + +| Command Group | Purpose | +| --------------------------------------------------------------------------------------------------------- | ---------------------------------- | +| `task:reset` | Reset task state. | +| `task:catalog:active`, `task:catalog:get`, `task:catalog:upsert`, `task:catalog:delete` | Manage task catalog entries. | +| `task:ownership:bind`, `task:ownership:release`, `task:ownership:accept`, `task:ownership:reward_context` | Manage task ownership and rewards. | +| `task:status:set`, `task:status:get`, `task:status:clear` | Manage task status. | +| `task:defuse:increment`, `task:defuse:get` | Manage defuse counters. | +| `task:clear` | Clear task state. | + +See [Task Usage Guide](https://innovativedevsolutions.github.io/server-modules/task) for examples. + +### Owned Storage + +| Command Group | Purpose | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | +| `owned:garage:create`, `owned:garage:fetch`, `owned:garage:get`, `owned:garage:add`, `owned:garage:remove`, `owned:garage:delete`, `owned:garage:exists` | Owner-scoped vehicle storage. | +| `owned:garage:hot:*` | Owner-scoped vehicle hot state. | +| `owned:locker:create`, `owned:locker:fetch`, `owned:locker:get`, `owned:locker:add`, `owned:locker:remove`, `owned:locker:delete`, `owned:locker:exists` | Owner-scoped item storage. | +| `owned:locker:hot:*` | Owner-scoped item hot state. | + +See [Owned Storage Usage Guide](https://innovativedevsolutions.github.io/server-modules/owned-storage) for examples. + +### Other Extension Groups + +| Command Group | Purpose | +| ----------------------------------------------------- | ------------------------------------- | +| `store:checkout` | Run store checkout behavior. | +| `icom:connect`, `icom:broadcast`, `icom:send_event` | ICom connection and event forwarding. | +| `terrain:exportSVG` | Export terrain data as SVG. | +| `transport:invoke`, `transport:invoke_stored` | Invoke commands through transport. | +| `transport:request:append`, `transport:request:clear` | Manage stored request chunks. | +| `transport:response:get`, `transport:response:clear` | Manage stored response chunks. | + +## Rust Crates + +| Crate | Role | +| -------------------- | --------------------------------------------------------------------------------------------------------- | +| `forge-models` | Domain models and validation. Keep these serializable and free of persistence details. | +| `forge-repositories` | Repository traits and in-memory implementations. Keep these storage-agnostic. | +| `forge-services` | Business rules and workflows. Depend on repository traits, not concrete databases. | +| `forge-shared` | Cross-crate helpers. Keep dependencies light. | +| `forge-server` | Arma extension crate. Owns command registration, SurrealDB runtime wiring, and concrete storage adapters. | +| `forge-icom` | ICom helper binary and client library. | + + +# Development Guide + +This guide covers the usual path for adding or changing a Forge module. + +## Local Checks + +Before running storage-backed workflows locally, complete +[SurrealDB Setup](https://innovativedevsolutions.github.io/getting-started/surrealdb-setup). + +Run these before pushing Rust or extension changes: + +```powershell +cargo fmt --check +cargo check +cargo test +cargo build +cargo clippy --all-targets --all-features -- -D warnings +``` + +Run this after changing browser UI sources: + +```powershell +npm run build:webui +``` + +Build Arma packages with: + +```powershell +.\build-arma.ps1 +``` + +## Module Boundaries + +Keep each layer responsible for one kind of work: + +| Layer | Owns | Avoid | +| ----------------------- | ------------------------------------------------------------------------------------- | ----------------------------------------------- | +| `lib/models` | Data structures, serde defaults, validation helpers. | Database calls, SQF-specific context. | +| `lib/repositories` | Repository traits and in-memory stores. | SurrealDB-specific code. | +| `lib/services` | Business rules, workflow orchestration, structured results. | Arma engine calls, extension transport details. | +| `arma/server/extension` | Command parsing, context resolution, SurrealDB implementations, serialization to SQF. | Business rules that belong in services. | +| `arma/server/addons` | Server SQF lifecycle, game-object integration, calls into `forge_server`. | Direct database logic. | +| `arma/client/addons` | Client UI, keybinds, local UI events. | Authoritative persistence. | + +## Adding a Domain Module + +1. Add the model in `lib/models/src/.rs`. +2. Export the model from `lib/models/src/lib.rs`. +3. Add repository traits in `lib/repositories/src/.rs`. +4. Add in-memory repository support if the service needs tests or hot state. +5. Export the traits from `lib/repositories/src/lib.rs`. +6. Add service logic in `lib/services/src/.rs`. +7. Add focused unit tests for service behavior. +8. Export the service from `lib/services/src/lib.rs`. +9. Add a SurrealDB schema module under `arma/server/extension/src/schema`. +10. Add the concrete storage adapter under `arma/server/extension/src/storage`. +11. Register the storage adapter in `arma/server/extension/src/storage.rs`. +12. Add an extension command group under `arma/server/extension/src/.rs`. +13. Register the command group in `arma/server/extension/src/lib.rs`. +14. Add server addon functions under `arma/server/addons/` if SQF needs a module-level API. +15. Add client addon or browser UI files under `arma/client/addons/` if the module has player-facing UI. +16. Add documentation in `docs/` and module-level READMEs. + +## Extension Command Rules + +Commands should return one of these forms: + +- JSON string for structured results. +- `"true"` or `"false"` for simple existence and boolean operations. +- `"OK"` for successful destructive operations with no response body. +- `"Error: "` for failures. + +Prefer stable JSON shapes over ad hoc strings. SQF callers should always check +for the `"Error:"` prefix before parsing JSON. + +Example: + +```sqf +private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Actor request failed: %1", _payload]; +}; + +private _actor = fromJSON _payload; +``` + +## Persistence Rules + +SurrealDB is the durable store. Keep database-specific mapping in the extension +storage adapters, not in services or repository traits. + +When changing persisted data: + +- Update or add the matching `.surql` schema module. +- Update the concrete storage adapter. +- Preserve existing records when possible through serde defaults or migration + logic. +- Add tests at the service level for behavior, and add storage tests only when + database mapping is the risk. + +## Hot-State Rules + +Use hot state for data that is read or mutated frequently during a player +session. Hot-state modules usually provide: + +- `init` to load durable state into memory. +- `get` to read the runtime copy. +- `override` or focused mutation commands to update the runtime copy. +- `save` to write the runtime copy back to SurrealDB. +- `remove` to evict the runtime copy. + +Do not assume hot state is durable until `save` succeeds. + +## Web UI Rules + +Browser UI source files live under each client addon. Built assets usually land +under that addon's `ui/_site` directory. + +Use the existing common bridge in `arma/client/addons/common` when a UI needs +to send events back to SQF. Keep UI state and rendering in JavaScript, and keep +server-authoritative decisions in server SQF or Rust services. + +## Documentation Checklist + +When adding or changing a module, update: + +- `docs/MODULE_REFERENCE.md` for framework-level inventory. +- A module-specific README in the addon directory when SQF or UI usage changes. +- `arma/server/docs/api-reference.md` when extension commands change. +- Existing usage guides when payload shapes or workflows change. + + +# SurrealDB Setup + +Forge uses SurrealDB for durable storage. The Rust server extension connects to +SurrealDB on startup and applies Forge schema modules automatically, so setup +comes down to running a reachable database and matching the Forge config. + +## Choose the Right Path + +### Developer or Server Operator + +Use this path if you are building Forge, running a local test server, or +hosting the live Arma server. + +Official SurrealDB resources: + +- [SurrealDB install page](https://surrealdb.com/install){rel=""nofollow""} +- [SurrealDB CLI `start` reference](https://surrealdb.com/docs/reference/cli/surrealdb-cli/commands/start){rel=""nofollow""} + +Install SurrealDB with the official method for your platform: + +```powershell +# Windows +iwr https://windows.surrealdb.com -useb | iex +``` + +```bash +# macOS +brew install surrealdb/tap/surreal +``` + +```bash +# Linux +curl -sSf https://install.surrealdb.com | sh +``` + +For Forge, start a persistent local database instead of the default in-memory +mode: + +```powershell +surreal start surrealkv://forge.db --bind 127.0.0.1:8000 --user root --pass root +``` + +Then copy `arma/server/extension/config.example.toml` to `config.toml` next to +`forge_server_x64.dll` and keep the values aligned with the database you +started: + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +After that: + +1. Start the Arma server with the Forge extension enabled. +2. Let the extension connect and apply the Forge schema modules. +3. Verify the connection state: + +```sqf +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` + +If you change the endpoint, namespace, database, username, or password in +SurrealDB, change the same values in Forge's `config.toml`. + +### Mission Designer or Community Manager/Leader + +Use this path if you mostly need to inspect, query, or adjust data for a test +or live server and you are not changing Forge source code. + +Official SurrealDB resources: + +- [Surrealist installation](https://surrealdb.com/docs/explore/surrealist/installation){rel=""nofollow""} +- [Surrealist web app](https://app.surrealdb.com){rel=""nofollow""} +- [Surrealist local database serving](https://surrealdb.com/docs/explore/surrealist/concepts/local-database-serving){rel=""nofollow""} + +Recommended approach: + +1. Install **Surrealist Desktop**. It is the better fit for Forge because the + official docs note that the web app can be limited when connecting to + `localhost` or non-HTTPS endpoints. +2. Connect Surrealist to the same database Forge uses. +3. Use the values from the server's `config.toml`: + +```text +Endpoint: http://127.0.0.1:8000 +Namespace: forge +Database: main +Username: root +Password: root +``` + +If you need your own local sandbox instead of connecting to an existing Forge +server, install SurrealDB first and follow the developer/server-operator path +above. Surrealist Desktop can also launch a local database for you after the +`surreal` executable is installed and available on your `PATH`. + + +# Forge Server Extension + +Forge Server is an arma-rs extension for Arma 3 server-side persistence and +domain services. It exposes game-facing commands and stores durable state in +SurrealDB. + +## Architecture + +SQF modules call `forge_server` through `fnc_extCall`. Small requests use the +direct `callExtension` path, while large payloads are staged through the +transport layer. + +```text +SQF module + -> extension bridge + -> domain command + -> service layer + -> repository + -> SurrealDB +``` + +## Configuration + +Copy `config.example.toml` to `config.toml` next to the extension DLL. + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +For install links and Forge-specific setup steps, see +[SurrealDB Setup](https://innovativedevsolutions.github.io/getting-started/surrealdb-setup). + +## References + +- [API Reference](https://innovativedevsolutions.github.io/server-extension/api-reference) +- [Usage Examples](https://innovativedevsolutions.github.io/server-extension/usage-examples) +- [Framework Module Guides](https://innovativedevsolutions.github.io/getting-started) + + +# Forge Server API Reference + +The Forge server extension exposes domain-oriented commands through +`callExtension`. Persistent data is stored through the configured SurrealDB +connection and schema modules. + +## Core Commands + +```sqf +"forge_server" callExtension ["version", []]; +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` + +`status` and `surreal:status` return `initializing`, `connected`, or `failed`. + +## Domain Commands + +Game systems should call the domain APIs instead of raw database operations: + +- `actor:*` +- `bank:*` +- `garage:*` +- `locker:*` +- `org:*` +- `phone:*` +- `store:*` +- `task:*` +- `cad:*` +- `owned:garage:*` +- `owned:locker:*` +- `transport:*` + +Large request and response payloads are routed through the transport layer when +needed by `forge_server_addons_extension_fnc_extCall`. + +## Module Guides + +- [Actor](https://innovativedevsolutions.github.io/server-modules/actor) +- [Bank](https://innovativedevsolutions.github.io/server-modules/bank) +- [CAD](https://innovativedevsolutions.github.io/server-modules/cad) +- [Garage](https://innovativedevsolutions.github.io/server-modules/garage) +- [Locker](https://innovativedevsolutions.github.io/server-modules/locker) +- [Organization](https://innovativedevsolutions.github.io/server-modules/organization) +- [Owned Storage](https://innovativedevsolutions.github.io/server-modules/owned-storage) +- [Phone](https://innovativedevsolutions.github.io/server-modules/phone) +- [Store](https://innovativedevsolutions.github.io/server-modules/store) +- [Task](https://innovativedevsolutions.github.io/server-modules/task) + + +# Forge Server Usage Examples + +These examples use the domain command surface exposed by the extension. +Persistence is handled by the server through SurrealDB. + +## Status Check + +```sqf +["status", []] call forge_server_extension_fnc_extCall params ["_status", "_ok"]; +if (_ok && {_status isEqualTo "connected"}) then { + systemChat "Forge persistence is online."; +}; +``` + +## Actor Fetch + +```sqf +private _uid = getPlayerUID player; +["actor:get", [_uid]] call forge_server_extension_fnc_extCall params ["_payload", "_ok"]; +if (_ok) then { + private _actor = fromJSON _payload; + systemChat format ["Loaded actor %1", _actor getOrDefault ["uid", _uid]]; +}; +``` + +## Store Checkout + +```sqf +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", "default"], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "bank"], + ["items", [ + createHashMapFromArray [ + ["classname", "FirstAidKit"], + ["category", "item"], + ["priceValue", 50], + ["quantity", 2] + ] + ]], + ["vehicles", []] +]; + +["store:checkout", [toJSON _checkout]] call forge_server_extension_fnc_extCall; +``` + + +# Server Module Guides + +These pages document the authoritative server-side workflows in Forge. + +Most modules follow the same shape: + +1. Server SQF gathers game context and validates mission/runtime assumptions. +2. The `forge_server` extension routes the request into the matching command group. +3. Services apply business rules through storage-agnostic repository traits. +4. The extension persists durable state through SurrealDB adapters when needed. + +## Gameplay Domains + +::u-page-grid + :::u-page-card + --- + icon: i-lucide-user-round + title: Actor + to: https://innovativedevsolutions.github.io/server-modules/actor + --- + Persistent player identity, position, loadout, contact fields, and hot state. + ::: + + :::u-page-card + --- + icon: i-lucide-wallet + title: Bank + to: https://innovativedevsolutions.github.io/server-modules/bank + --- + Player funds, transfers, PIN validation, checkout charging, and bank hot state. + ::: + + :::u-page-card + --- + icon: i-lucide-map + title: CAD + to: https://innovativedevsolutions.github.io/server-modules/cad + --- + Dispatch requests, assignments, profiles, grouped state, and hydrated views. + ::: + + :::u-page-card + --- + icon: i-lucide-ambulance + title: Economy + to: https://innovativedevsolutions.github.io/server-modules/economy + --- + Fuel, service, and medical charging rules across player and organization funds. + ::: + + :::u-page-card + --- + icon: i-lucide-car-front + title: Garage + to: https://innovativedevsolutions.github.io/server-modules/garage + --- + Vehicle storage, hot-state updates, and persistence of vehicle condition. + ::: + + :::u-page-card + --- + icon: i-lucide-package + title: Locker + to: https://innovativedevsolutions.github.io/server-modules/locker + --- + Player inventory storage, unique item limits, and locker hot-state behavior. + ::: + + :::u-page-card + --- + icon: i-lucide-building-2 + title: Organization + to: https://innovativedevsolutions.github.io/server-modules/organization + --- + Membership, treasury, shared assets, fleet, and organization hot workflows. + ::: + + :::u-page-card + --- + icon: i-lucide-key-round + title: Owned Storage + to: https://innovativedevsolutions.github.io/server-modules/owned-storage + --- + Owner-scoped locker and vehicle unlock storage used by org-linked features. + ::: + + :::u-page-card + --- + icon: i-lucide-smartphone + title: Phone + to: https://innovativedevsolutions.github.io/server-modules/phone + --- + Contacts, message threads, and email state for in-game phone workflows. + ::: + + :::u-page-card + --- + icon: i-lucide-shopping-cart + title: Store + to: https://innovativedevsolutions.github.io/server-modules/store + --- + Checkout orchestration across pricing, grants, payment sources, and rollback. + ::: + + :::u-page-card + --- + icon: i-lucide-flag + title: Task + to: https://innovativedevsolutions.github.io/server-modules/task + --- + Task catalog, ownership, status transitions, defuse counters, and rewards. + ::: +:: + + +# Actor Usage Guide + +The actor module stores persistent player character data: identity, loadout, +position, direction, stance, contact fields, state, holster status, rank, and +organization. + +## Storage Model + +Actor data is persisted through SurrealDB by the server extension. + +```json +{ + "uid": "76561198000000000", + "name": "Player Name", + "loadout": {}, + "position": [1234.5, 6789.0, 0.0], + "direction": 90.0, + "stance": "STAND", + "email": "0160000000@spearnet.mil", + "phone_number": "0160000000", + "state": "HEALTHY", + "holster": true, + "rank": null, + "organization": "default" +} +``` + +Rules validated by the Rust service: + +- `uid` is authoritative from the command argument and must be a 17-digit Steam + UID. +- `name` is optional, but cannot be empty when set and cannot exceed 50 + characters. +- `position` must be three finite numbers when set. +- `direction` must be in the `0.0 <= direction < 360.0` range. +- `email` must contain `@` and end with `.mil` when set. +- `phone_number` must start with `0160` and be 10 digits when set. +- Empty `phone_number`, `email`, or `organization` fields are filled on create. + +## Commands + +All commands are called on the `actor` group. + +| Command | Arguments | Returns | +| -------------- | ------------------- | -------------------------------------------------------------------------------- | +| `actor:get` | `uid` | Actor JSON. If no actor exists, returns a default actor but does not persist it. | +| `actor:create` | `uid`, `actor_json` | Persisted actor JSON. | +| `actor:update` | `uid`, `patch_json` | Updated actor JSON. | +| `actor:exists` | `uid` | `true` or `false`. | +| `actor:delete` | `uid` | `OK`. | + +## Create an Actor + +The `uid` field in the JSON is overwritten with the command UID. + +```sqf +private _actor = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["name", name player], + ["loadout", getUnitLoadout player], + ["position", getPosATL player], + ["direction", getDir player], + ["stance", stance player], + ["email", ""], + ["phone_number", ""], + ["state", "HEALTHY"], + ["holster", true], + ["organization", "default"] +]; + +private _result = "forge_server" callExtension ["actor:create", [ + getPlayerUID player, + toJSON _actor +]]; +``` + +## Update an Actor + +`actor:update` accepts a JSON object containing only fields to change. + +```sqf +private _patch = createHashMapFromArray [ + ["position", getPosATL player], + ["direction", getDir player], + ["stance", stance player], + ["loadout", getUnitLoadout player] +]; + +private _result = "forge_server" callExtension ["actor:update", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +Supported patch fields are `name`, `position`, `direction`, `stance`, `email`, +`phone_number`, `state`, `holster`, `rank`, `organization`, and `loadout`. +`uid` is ignored. + +## Hot State + +The `actor:hot:*` commands keep a runtime copy of actor data and write it back +only when `actor:hot:save` runs. + +| Command | Arguments | Returns | +| -------------------- | ------------------- | ---------------------------------------------- | +| `actor:hot:init` | `uid` | Actor JSON from durable storage. | +| `actor:hot:get` | `uid` | Actor JSON. | +| `actor:hot:keys` | none | JSON array of hot actor UIDs. | +| `actor:hot:override` | `uid`, `actor_json` | Actor JSON. | +| `actor:hot:save` | `uid` | Current hot actor JSON and async durable save. | +| `actor:hot:remove` | `uid` | `OK`. | + +Use hot state for frequently updated session data such as position and loadout. +Use durable commands for account creation and administrative changes. + +## Error Handling + +```sqf +private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Actor error: %1", _payload]; +}; + +private _actor = fromJSON _payload; +``` + + +# Store Usage Guide + +The store module processes checkout requests. It charges a payment source and +grants purchased items to the player locker, virtual arsenal locker, and +virtual garage unlocks. + +## Server SQF Module + +The server addon uses two long-lived module objects: + +- `StorefrontStore` is the storefront workflow facade. It builds hydrate + payloads, validates checkout requests, calls the Rust `store:checkout` + command, syncs UI patches, and asks related module stores to save hot state. +- `StoreCatalogService` scans configured item and vehicle categories, builds + catalog responses, resolves checkout entries, and calculates authoritative + prices. + +Editor-placed store entities are initialized by `fnc_initStore` during store +post-init. The initializer matches non-null mission namespace objects whose +variable names contain `store` and sets `isStore = true`, following the same +pattern used by garage entities. + +## Checkout Model + +`store:checkout` accepts one JSON context. + +```json +{ + "requesterUid": "76561198000000000", + "requesterName": "Player Name", + "orgId": "default", + "requesterIsDefaultOrgCeo": false, + "paymentMethod": "bank", + "items": [ + { + "classname": "arifle_MX_F", + "category": "weapon", + "priceValue": 500, + "quantity": 1 + } + ], + "vehicles": [ + { + "classname": "B_Quadbike_01_F", + "category": "cars", + "priceValue": 1500 + } + ] +} +``` + +Rules validated by the Rust service: + +- `requesterUid` is required. +- At least one item or vehicle is required. +- The checkout total must be greater than zero. +- Item categories must be `item`, `attachment`, `weapon`, `magazine`, or + `backpack`. +- Vehicle categories must be `cars`, `armor`, `helis`, `planes`, `naval`, or + `other`. +- Payment method must be `cash`, `bank`, `org_funds`, or `credit_line`. +- Player locker capacity cannot exceed 25 unique items after checkout. +- Organization funds can only be charged by the org owner or the default org + CEO flag. + +## Command + +| Command | Arguments | Returns | +| ---------------- | --------------- | --------------------- | +| `store:checkout` | `checkout_json` | Checkout result JSON. | + +## Result Model + +```json +{ + "chargedTotal": 2000.0, + "paymentMethod": "bank", + "message": "Checkout completed. $2,000 charged, 1 locker grant(s), 1 vehicle unlock(s).", + "lockerGranted": [], + "vehicleGranted": [], + "lockerPatch": {}, + "vaPatch": {}, + "vgaragePatch": {}, + "bankPatch": {}, + "orgPatch": {}, + "orgTargetUids": [] +} +``` + +Patch fields are intended for UI updates after checkout. The service commits +all grants and payment changes together, and attempts rollback if a later write +fails. + +## Player Bank Checkout + +```sqf +private _item = createHashMapFromArray [ + ["classname", "arifle_MX_F"], + ["category", "weapon"], + ["priceValue", 500], + ["quantity", 1] +]; + +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", "default"], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "bank"], + ["items", [_item]], + ["vehicles", []] +]; + +private _result = "forge_server" callExtension ["store:checkout", [toJSON _checkout]]; +``` + +## Organization Funds Checkout + +When `paymentMethod` is `org_funds`, vehicles are also added to the +organization fleet patch. + +```sqf +private _vehicle = createHashMapFromArray [ + ["classname", "B_Quadbike_01_F"], + ["category", "cars"], + ["priceValue", 1500] +]; + +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "org_funds"], + ["items", []], + ["vehicles", [_vehicle]] +]; + +private _result = "forge_server" callExtension ["store:checkout", [toJSON _checkout]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Checkout failed: %1", _payload]; +}; + +private _checkoutResult = fromJSON _payload; +``` + + +# Task Usage Guide + +The task module stores transient mission task metadata for active server or +mission lifecycle workflows. SQF still owns Arma-only runtime state such as +objects and participants. + +The server addon at `arma/server/addons/task` also owns task execution: +creating BIS tasks, registering task entities, tracking participants, binding +task ownership, applying player/org rewards, and clearing task state when a +task completes. + +Runtime dependencies: + +- `forge_server_extension` +- `forge_server_common` +- `forge_server_actor` +- `forge_server_bank` +- `forge_server_org` +- `forge_client_notifications` + +## Data Model + +Catalog entries are flexible JSON objects. The service normalizes these fields +when a catalog entry is inserted or ownership changes: + +- `taskId` +- `taskID` +- `accepted` +- `requesterUid` +- `orgID` + +Ownership context: + +```json +{ + "requesterUid": "76561198000000000", + "orgId": "default" +} +``` + +## Commands + +| Command | Arguments | Returns | +| ------------------------------- | --------------------------- | -------------------------------- | +| `task:reset` | none | `true`. | +| `task:catalog:active` | none | Active catalog entry array JSON. | +| `task:catalog:get` | `task_id` | Catalog entry JSON or `null`. | +| `task:catalog:upsert` | `task_id`, `entry_json` | Stored catalog entry JSON. | +| `task:catalog:delete` | `task_id` | `true`. | +| `task:ownership:bind` | `task_id`, `ownership_json` | Ownership mutation result JSON. | +| `task:ownership:release` | `task_id` | Ownership mutation result JSON. | +| `task:ownership:accept` | `task_id`, `ownership_json` | Ownership mutation result JSON. | +| `task:ownership:reward_context` | `task_id` | Reward context JSON. | +| `task:status:set` | `task_id`, `status` | `true`. | +| `task:status:get` | `task_id` | Status string JSON. | +| `task:status:clear` | `task_id` | `true`. | +| `task:defuse:increment` | `task_id` | New counter value JSON. | +| `task:defuse:get` | `task_id` | Counter value JSON. | +| `task:clear` | `task_id` | `true`. | + +## Upsert a Catalog Entry + +```sqf +private _entry = createHashMapFromArray [ + ["title", "Destroy Cache"], + ["description", "Destroy the enemy supply cache."], + ["reward", 1500] +]; + +private _result = "forge_server" callExtension ["task:catalog:upsert", [ + "task-cache-1", + toJSON _entry +]]; +``` + +## Mark a Task Active + +```sqf +"forge_server" callExtension ["task:status:set", [ + "task-cache-1", + "active" +]]; + +private _active = "forge_server" callExtension ["task:catalog:active", []]; +``` + +Completed statuses `succeeded` and `failed` are also stored as completed status +fallbacks. Clearing status removes active and completed state. + +## Accept a Task + +```sqf +private _ownership = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["orgId", "default"] +]; + +private _result = "forge_server" callExtension ["task:ownership:accept", [ + "task-cache-1", + toJSON _ownership +]]; +``` + +`task:ownership:accept` fails if the task is not active or another requester +already accepted it. + +## Rewards + +```sqf +private _result = "forge_server" callExtension ["task:ownership:reward_context", [ + "task-cache-1" +]]; + +private _context = fromJSON (_result select 0); +``` + +The reward context contains `requesterUid` and `orgId`. + +## Server Task Flows + +The task addon provides these server-owned task flows: + +- `attack` +- `defend` +- `defuse` +- `delivery` +- `destroy` +- `hostage` +- `hvt` + +Mission designers can create tasks in four ways: + +- Eden modules for editor-authored tasks. +- `forge_server_task_fnc_startTask` for script-authored tasks. +- `forge_server_task_fnc_handler` for pre-registered entities with reputation + gating and ownership binding. This path expects the BIS task and catalog + entry to already exist if map-task and CAD visibility are required. +- Direct task function calls for server-owned or mission-authored flows that + intentionally fall back to the `default` org. This path expects the BIS task + to already exist if map-task visibility is required. + +The dynamic mission manager can also generate attack tasks from config. That is +system-generated content rather than a hand-authored task creation path. + +## CAD Compatibility + +CAD hydrates assignable tasks from `TaskStore.getActiveTaskCatalog`. A task must +have a catalog entry and active task status before CAD can show and assign it. + +CAD-compatible creation paths: + +- Eden modules: compatible because they delegate to + `forge_server_task_fnc_startTask`. +- `forge_server_task_fnc_startTask`: compatible because it registers the + catalog entry, creates the BIS task, and dispatches through the handler. +- Dynamic mission manager attack tasks: compatible because the mission manager + uses `forge_server_task_fnc_startTask`. + +Limited or incompatible paths: + +- `forge_server_task_fnc_handler`: only compatible if a catalog entry was + already registered elsewhere. The handler sets active status and ownership, + but it does not create the BIS task shown in the map task tab or upsert the + catalog entry. +- Direct task function calls: not CAD-compatible by default. They bypass + `startTask` and usually do not register the task catalog entry or active + status that CAD hydrates from. They also only call `BIS_fnc_taskSetState` at + completion/failure; they do not create the BIS task first. + +## BIS Map Task Prerequisite + +Only the Eden task modules and `forge_server_task_fnc_startTask` create the BIS +task automatically through `BIS_fnc_taskCreate`. + +If a mission uses `forge_server_task_fnc_handler` directly or calls a task flow +function such as `forge_server_task_fnc_attack`, the mission must create a BIS +task with the same task ID before the Forge task completes. Otherwise the +success/failure `BIS_fnc_taskSetState` call has no visible map task to update. + +That prerequisite can be satisfied with a vanilla Eden task creation module or +a scripted `BIS_fnc_taskCreate` call. `forge_server_task_fnc_startTask` is the +preferred Forge path because it handles BIS task creation, Forge catalog +registration, entity registration, and handler dispatch together. + +## Eden Modules + +Eden task modules are the normal designer-facing path. Place the module, +configure its attributes, and sync it to the relevant entities or grouping +modules. + +Available task modules: + +- `FORGE_Module_Attack`: sync directly to target units or vehicles. +- `FORGE_Module_Destroy`: sync directly to objects, vehicles, or units. +- `FORGE_Module_Defuse`: sync to `FORGE_Module_Explosives` and optionally + `FORGE_Module_Protected`. +- `FORGE_Module_Delivery`: sync to `FORGE_Module_Cargo`; the cargo module syncs + to cargo objects. +- `FORGE_Module_Hostage`: sync to `FORGE_Module_Hostages` and + `FORGE_Module_Shooters`. +- `FORGE_Module_HVT`: sync directly to HVT units. +- `FORGE_Module_Defend`: configure the defense marker and wave settings. + +These modules delegate to `forge_server_task_fnc_startTask`. + +## Scripted Start Task + +Use `forge_server_task_fnc_startTask` when creating tasks from modules, +mission scripts, or generated mission-manager content. It registers task +entities, creates the BIS task, stores the catalog entry, then dispatches +through `forge_server_task_fnc_handler`. + +```sqf +[ + "attack", + "compound_attack_01", + getPosATL leader1, + "Attack: East Compound", + "Eliminate all hostile forces.", + createHashMapFromArray [["targets", [unit1, unit2, unit3]]], + createHashMapFromArray [ + ["limitFail", 0], + ["limitSuccess", 3], + ["funds", 50000], + ["ratingFail", -10], + ["ratingSuccess", 20], + ["timeLimit", 900] + ], + 0, + getPlayerUID player, + "script" +] call forge_server_task_fnc_startTask; +``` + +## Handler Calls + +Use `forge_server_task_fnc_handler` directly when the task entities are already +registered and you want reputation gating plus ownership binding. Create the +BIS task and catalog entry separately if this task should appear in the map +task tab or CAD: + +```sqf +[ + "delivery", + ["delivery_1", 1, 3, "delivery_zone", 250000, -75, 300, false, false, 900], + 250, + getPlayerUID player +] call forge_server_task_fnc_handler; +``` + +## Direct Task Calls + +Direct task function calls still work for mission-authored or server-owned +tasks, but they do not provide a requester UID. Ownership falls back to the +`default` org. Create the BIS task separately if this task should appear in the +map task tab. + +## Timer Semantics + +Task time limits use `0` for no limit: + +- attack `timeLimit` +- destroy `timeLimit` +- delivery `timeLimit` +- hostage `timeLimit` +- HVT `timeLimit` + +Positive values are measured in seconds. Do not pass `-1` as a no-limit value; +the task runtime treats any non-zero task time limit as active. + +Defuse IED timers are different. `iedTimer` must be greater than `0`, because +IEDs are expected to have an active countdown. The Eden defuse module defaults +to `300` seconds. + +## Defuse Counter + +```sqf +"forge_server" callExtension ["task:defuse:increment", ["task-cache-1"]]; +private _count = "forge_server" callExtension ["task:defuse:get", ["task-cache-1"]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Task error: %1", _payload]; +}; +``` + + +# Bank Usage Guide + +The bank module stores player account balances, earnings, PINs, and transaction +strings. The hot-state API also owns the active banking workflows used by the +UI: deposit, withdraw, transfer, checkout charge, and PIN validation. + +## Storage Model + +Bank data is persisted through SurrealDB by the server extension. + +```json +{ + "uid": "76561198000000000", + "name": "Player Name", + "bank": 1000.0, + "cash": 250.0, + "earnings": 0.0, + "pin": 1234, + "transactions": [] +} +``` + +Rules validated by the Rust service: + +- `uid` is authoritative from the command argument. +- `name` cannot be empty. +- `bank` and `cash` cannot be negative. +- `pin` must be a four-digit number. +- Durable `bank:get` requires an existing bank account. + +## Durable Commands + +| Command | Arguments | Returns | +| ------------- | ------------------- | -------------------- | +| `bank:create` | `uid`, `bank_json` | Persisted bank JSON. | +| `bank:get` | `uid` | Bank JSON. | +| `bank:update` | `uid`, `patch_json` | Updated bank JSON. | +| `bank:exists` | `uid` | `true` or `false`. | +| `bank:delete` | `uid` | `OK`. | + +## Create an Account + +The `uid` field in the JSON is overwritten with the command UID. + +```sqf +private _account = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["name", name player], + ["bank", 0], + ["cash", 0], + ["earnings", 0], + ["pin", 1234], + ["transactions", []] +]; + +private _result = "forge_server" callExtension ["bank:create", [ + getPlayerUID player, + toJSON _account +]]; +``` + +## Hot-State Commands + +| Command | Arguments | Returns | +| --------------------------- | ---------------------------------------------------- | --------------------------------------------- | +| `bank:hot:init` | `uid` | Bank JSON loaded into hot state. | +| `bank:hot:get` | `uid` | Bank JSON. | +| `bank:hot:override` | `uid`, `bank_json` | Bank JSON. | +| `bank:hot:patch` | `uid`, `patch_json` | `{ account, patch }`. | +| `bank:hot:deposit` | `uid`, `amount`, `context_json` | `{ account, patch }`. | +| `bank:hot:withdraw` | `uid`, `amount`, `context_json` | `{ account, patch }`. | +| `bank:hot:deposit_earnings` | `uid`, `amount`, `context_json` | `{ account, patch }`. | +| `bank:hot:transfer` | `source_uid`, `target_uid`, `amount`, `context_json` | Transfer result JSON. | +| `bank:hot:charge_checkout` | `uid`, `amount`, `context_json` | `{ account, patch }`. | +| `bank:hot:validate_pin` | `uid`, `pin`, `context_json` | `{}` on success. | +| `bank:hot:save` | `uid` | Current hot bank JSON and async durable save. | +| `bank:hot:remove` | `uid` | `OK`. | + +Use hot-state commands for UI workflows. They return patch objects so the UI can +update only changed fields. + +## Deposit and Withdraw + +ATM sessions require `atmAuthorized: true`. Full bank sessions can set +`mode: "bank"`. + +```sqf +private _context = createHashMapFromArray [ + ["mode", "atm"], + ["atmAuthorized", true] +]; + +private _deposit = "forge_server" callExtension ["bank:hot:deposit", [ + getPlayerUID player, + "100", + toJSON _context +]]; + +private _withdraw = "forge_server" callExtension ["bank:hot:withdraw", [ + getPlayerUID player, + "50", + toJSON _context +]]; +``` + +## Transfer + +Transfers are only available from the full bank interface. `fromField` can be +`bank` or `cash`. + +```sqf +private _context = createHashMapFromArray [ + ["mode", "bank"], + ["atmAuthorized", false], + ["fromField", "bank"] +]; + +private _result = "forge_server" callExtension ["bank:hot:transfer", [ + getPlayerUID player, + _targetUid, + "250", + toJSON _context +]]; +``` + +## Checkout Charge + +Checkout charging supports `sourceField: "cash"` or `sourceField: "bank"`. +Set `commit` to `false` to preview the patch without saving. + +```sqf +private _context = createHashMapFromArray [ + ["sourceField", "bank"], + ["commit", true] +]; + +private _result = "forge_server" callExtension ["bank:hot:charge_checkout", [ + getPlayerUID player, + "125", + toJSON _context +]]; +``` + +## PIN Validation + +PIN entry is only valid in ATM mode. + +```sqf +private _context = createHashMapFromArray [["mode", "atm"]]; + +private _result = "forge_server" callExtension ["bank:hot:validate_pin", [ + getPlayerUID player, + "1234", + toJSON _context +]]; +``` + +## Error Handling + +```sqf +private _result = "forge_server" callExtension ["bank:hot:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Bank error: %1", _payload]; +}; + +private _bank = fromJSON _payload; +``` + + +# CAD Usage Guide + +The CAD module stores transient operational state for dispatch activity, +assignments, dispatch orders, support requests, group profiles, grouped views, +and hydrated UI payloads. CAD state is in-memory and follows the active server +or mission lifecycle. + +## Data Model + +Most CAD records are flexible JSON objects. The service normalizes important +IDs and returns structured mutation results for higher-level workflows. + +Common generated IDs: + +- Orders: `cad-order:` +- Requests: `cad-request:` +- Assignments usually share a task ID or order ID. + +## Commands + +### Activity + +| Command | Arguments | Returns | +| --------------------- | --------------- | --------------------------- | +| `cad:activity:append` | `activity_json` | `OK`. | +| `cad:activity:recent` | `limit` | Recent activity array JSON. | + +### Assignments + +| Command | Arguments | Returns | +| ----------------------------- | ----------------------------- | ------------------------------------------------------- | +| `cad:assignments:list` | none | Assignment array JSON. | +| `cad:assignments:assign` | `entry_id`, `assignment_json` | Assignment mutation result JSON. | +| `cad:assignments:acknowledge` | `entry_id`, `patch_json` | Assignment mutation result JSON. | +| `cad:assignments:decline` | `entry_id`, `patch_json` | Assignment mutation result JSON and removes assignment. | +| `cad:assignments:upsert` | `entry_id`, `assignment_json` | `OK`. | +| `cad:assignments:delete` | `entry_id` | `OK`. | + +### Orders + +| Command | Arguments | Returns | +| -------------------------------- | ------------------------ | ----------------------------------------------------------------- | +| `cad:orders:list` | none | Order array JSON. | +| `cad:orders:create` | `order_seed_json` | Dispatch order mutation result JSON. | +| `cad:orders:create_from_context` | `context_json` | Dispatch order mutation result JSON. | +| `cad:orders:close` | `entry_id` | Dispatch order mutation result JSON and removes order/assignment. | +| `cad:orders:upsert` | `entry_id`, `order_json` | `OK`. | +| `cad:orders:delete` | `entry_id` | `OK`. | + +### Requests + +| Command | Arguments | Returns | +| ---------------------------------- | -------------------------- | ------------------------------------------------- | +| `cad:requests:list` | none | Request array JSON. | +| `cad:requests:submit` | `request_json` | Request mutation result JSON. | +| `cad:requests:submit_from_context` | `context_json` | Request mutation result JSON. | +| `cad:requests:close` | `entry_id` | Request mutation result JSON and removes request. | +| `cad:requests:upsert` | `entry_id`, `request_json` | `OK`. | +| `cad:requests:delete` | `entry_id` | `OK`. | + +### Profiles and Views + +| Command | Arguments | Returns | +| ---------------------------------- | -------------------------- | ----------------------------- | +| `cad:profiles:list` | none | Profile array JSON. | +| `cad:profiles:update_from_context` | `context_json` | Profile mutation result JSON. | +| `cad:profiles:upsert` | `entry_id`, `profile_json` | `OK`. | +| `cad:profiles:delete` | `entry_id` | `OK`. | +| `cad:groups:build` | `groups_seed_json` | Group array JSON. | +| `cad:view:hydrate` | `hydrate_seed_json` | Hydrated CAD payload JSON. | + +## Submit a Support Request + +```sqf +private _fields = createHashMapFromArray [ + ["pickup_location", "Grid 123456"], + ["precedence", "urgent"], + ["security", "secure"] +]; + +private _context = createHashMapFromArray [ + ["type", "medevac_9line"], + ["fields", _fields], + ["groupId", "alpha"], + ["groupCallsign", "Alpha 1-1"], + ["submittedByUid", getPlayerUID player], + ["submittedByName", name player], + ["priority", "emergency"], + ["position", getPosATL player], + ["createdAt", diag_tickTime] +]; + +private _result = "forge_server" callExtension ["cad:requests:submit_from_context", [ + toJSON _context +]]; +``` + +Supported priority values are `routine`, `priority`, and `emergency`. Unknown +values normalize to `priority`. + +## Create a Dispatch Order + +```sqf +private _context = createHashMapFromArray [ + ["assigneeGroupId", "bravo"], + ["assigneeGroupCallsign", "Bravo 1-1"], + ["targetGroupId", "alpha"], + ["targetGroupCallsign", "Alpha 1-1"], + ["targetPosition", getPosATL player], + ["createdByUid", getPlayerUID player], + ["createdByName", name player], + ["requestId", "cad-request:1"], + ["requestType", "logreq"], + ["requestTitle", "LOGREQ | Alpha 1-1"], + ["requestSummary", "Ammo resupply requested"], + ["requestFields", createHashMap], + ["note", "Support Alpha 1-1 at current position."], + ["priority", "priority"], + ["createdAt", diag_tickTime] +]; + +private _result = "forge_server" callExtension ["cad:orders:create_from_context", [ + toJSON _context +]]; +``` + +## Assignment Workflow + +```sqf +private _assignment = createHashMapFromArray [ + ["groupId", "bravo"], + ["assigneeGroupCallsign", "Bravo 1-1"], + ["assignedByUid", getPlayerUID player], + ["assignedByName", name player], + ["assignedAt", diag_tickTime], + ["state", "assigned"] +]; + +"forge_server" callExtension ["cad:assignments:assign", [ + "task-123", + toJSON _assignment +]]; + +private _ack = createHashMapFromArray [ + ["state", "acknowledged"], + ["acknowledgedByUid", getPlayerUID player], + ["acknowledgedAt", diag_tickTime] +]; + +"forge_server" callExtension ["cad:assignments:acknowledge", [ + "task-123", + toJSON _ack +]]; +``` + +## Hydrate the CAD UI + +```sqf +private _session = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["orgId", "default"], + ["isDispatcher", true], + ["groupId", "alpha"], + ["isLeader", true] +]; + +private _seed = createHashMapFromArray [ + ["groups", _liveGroups], + ["activeTasks", _activeTasks], + ["session", _session] +]; + +private _result = "forge_server" callExtension ["cad:view:hydrate", [toJSON _seed]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["CAD error: %1", _payload]; +}; +``` + + +# Economy Usage Guide + +The economy server addon owns Arma-world service behavior for fuel, medical, +and repair interactions. It does not own money state. Money mutations go +through extension-backed bank and organization hot state before the world +effect is applied. + +## Dependencies + +- `forge_server_common` for logging, formatting, and player lookup. +- `forge_server_bank` for personal medical billing. +- `forge_server_org` for organization-funded services and medical fallback + debt. +- `forge_client_actor` and `forge_client_notifications` for targeted client + responses. + +## Fuel + +Fuel is organization-funded. + +When refueling stops, `fnc_initFEconomyStore.sqf` calculates the fuel delta and +cost, charges the player's organization through `OrgStore chargeCheckout`, and +syncs the organization patch to online members. If organization funds cannot +cover the refuel, the vehicle is rolled back to the fuel level it had when the +session started. + +Garage UI refuel requests use the server `RefuelService` event. The fuel store +calculates missing fuel from the vehicle config `fuelCapacity`, charges the +player's organization, and fills the vehicle only after the organization charge +succeeds. + +## Repair + +Repair is organization-funded. + +Use the repair service event: + +```sqf +[QEGVAR(economy,RepairService), [_target, _unit, _cost]] call CBA_fnc_serverEvent; +``` + +`_cost` is optional. Passing `-1` uses the configured service repair cost. +The target is only repaired after the organization charge succeeds. + +The client garage UI forwards selected nearby vehicle repair requests through +the same event. + +## Medical + +Medical is player-funded first. + +When a heal is requested, `fnc_initMEconomyStore.sqf` uses this billing order: + +1. Charge the player's bank balance when it can cover the medical fee. +2. Otherwise charge the player's cash when it can cover the fee. +3. If neither personal balance can cover the fee, charge organization funds. +4. When organization funds cover the fallback charge, record the same amount as + debt on the player's organization credit line. + +The heal only completes after one of those charges succeeds. If personal +billing is unavailable, the heal does not fall back to organization funds +because the server cannot verify that the player is unable to cover the fee. + +## Medical Debt Repayment + +Medical fallback debt uses the existing organization credit-line repayment +flow. The organization treasury is reduced when the service is rendered, and +the player's credit-line `amount_due` increases by the medical fee. When the +player repays through the bank credit-line repayment action, player bank funds +are moved back into the organization treasury. + +## Hot-Cache Boundary + +The economy addon should stay server-authoritative for world effects such as +vehicle fuel, vehicle repair, healing, respawn placement, and death inventory +movement. Bank and organization balances should continue to mutate through the +extension-backed hot-cache services. + + +# Garage Usage Guide + +The garage module stores physical player vehicles. Each record keeps the +vehicle classname, generated plate UUID, fuel, overall damage, and detailed hit +point damage. + +## Storage Model + +Garage data is persisted through SurrealDB by the server extension. + +```json +{ + "plate-uuid": { + "plate": "plate-uuid", + "classname": "B_Quadbike_01_F", + "fuel": 1.0, + "damage": 0.0, + "hit_points": { + "names": ["hitengine"], + "selections": ["engine_hitpoint"], + "values": [0.0] + } + } +} +``` + +Rules validated by the Rust service: + +- A player garage can contain up to 5 vehicles. +- `garage:add` generates a UUID plate automatically. +- `fuel`, `damage`, and every hit point value must be between `0.0` and `1.0`. +- `hit_points.names`, `hit_points.selections`, and `hit_points.values` must have + the same length. +- `garage:get`, `garage:patch`, and `garage:remove` require an existing garage. +- `garage:add` creates an empty garage automatically when one does not exist. + +## Commands + +All commands are called on the `garage` group. + +| Command | Arguments | Returns | +| --------------- | ---------------------- | ----------------------------- | +| `garage:create` | `uid` | Empty vehicle map as JSON. | +| `garage:get` | `uid` | Vehicle map as JSON. | +| `garage:add` | `uid`, `vehicle_json` | Updated vehicle map as JSON. | +| `garage:update` | `uid`, `vehicles_json` | Replaced vehicle map as JSON. | +| `garage:patch` | `uid`, `patch_json` | Updated vehicle map as JSON. | +| `garage:remove` | `uid`, `remove_json` | Updated vehicle map as JSON. | +| `garage:delete` | `uid` | `OK`. | +| `garage:exists` | `uid` | `true` or `false`. | + +## Error Handling + +Every command returns a string payload. Always check for the `Error:` prefix +before parsing JSON. + +```sqf +private _result = "forge_server" callExtension ["garage:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Garage error: %1", _payload]; +}; + +private _garage = fromJSON _payload; +``` + +## Add a Vehicle + +`garage:add` requires `classname`, `fuel`, `damage`, and `hit_points`. + +```sqf +private _hitPointData = getAllHitPointsDamage _vehicle; +private _hitPoints = createHashMapFromArray [ + ["names", _hitPointData select 0], + ["selections", _hitPointData select 1], + ["values", _hitPointData select 2] +]; + +private _vehicleData = createHashMapFromArray [ + ["classname", typeOf _vehicle], + ["fuel", fuel _vehicle], + ["damage", damage _vehicle], + ["hit_points", _hitPoints] +]; + +private _result = "forge_server" callExtension ["garage:add", [ + getPlayerUID player, + toJSON _vehicleData +]]; + +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to store vehicle: %1", _payload]; +}; + +private _garage = fromJSON _payload; +``` + +The returned value is a hash map keyed by generated plate. To find the newly +stored vehicle, compare returned keys before and after the add, or search by +classname if your workflow guarantees a unique pending vehicle. + +```sqf +private _storedPlate = ""; +{ + private _vehicleRecord = _garage get _x; + if ((_vehicleRecord get "classname") == typeOf _vehicle) then { + _storedPlate = _x; + }; +} forEach keys _garage; +``` + +## Patch a Vehicle + +`garage:patch` updates selected fields for one plate. The `plate` field is +required. `fuel`, `damage`, and `hit_points` are optional. + +```sqf +private _patch = createHashMapFromArray [ + ["plate", _vehicle getVariable ["forge_garage_plate", ""]], + ["fuel", fuel _vehicle], + ["damage", damage _vehicle] +]; + +private _result = "forge_server" callExtension ["garage:patch", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +## Remove a Vehicle + +`garage:remove` expects JSON with a `plate` field. + +```sqf +private _remove = createHashMapFromArray [ + ["plate", _plate] +]; + +private _result = "forge_server" callExtension ["garage:remove", [ + getPlayerUID player, + toJSON _remove +]]; +``` + +## Spawn a Stored Vehicle + +```sqf +fnc_spawnGarageVehicle = { + params ["_plate"]; + + private _result = "forge_server" callExtension ["garage:get", [getPlayerUID player]]; + private _payload = _result select 0; + + if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to load garage: %1", _payload]; + objNull + }; + + private _garage = fromJSON _payload; + private _vehicleData = _garage getOrDefault [_plate, createHashMap]; + if (_vehicleData isEqualTo createHashMap) exitWith { + hint "Vehicle plate was not found in your garage."; + objNull + }; + + private _vehicle = (_vehicleData get "classname") createVehicle (player getPos [10, getDir player]); + _vehicle setFuel (_vehicleData getOrDefault ["fuel", 1]); + _vehicle setDamage (_vehicleData getOrDefault ["damage", 0]); + _vehicle setVariable ["forge_garage_plate", _plate, true]; + + private _hitPoints = _vehicleData getOrDefault ["hit_points", createHashMap]; + private _names = _hitPoints getOrDefault ["names", []]; + private _values = _hitPoints getOrDefault ["values", []]; + + { + _vehicle setHitPointDamage [_x, _values select _forEachIndex]; + } forEach _names; + + private _remove = createHashMapFromArray [["plate", _plate]]; + "forge_server" callExtension ["garage:remove", [getPlayerUID player, toJSON _remove]]; + + _vehicle +}; +``` + +## Hot State + +The `garage:hot:*` commands keep a runtime copy of a player's garage and write +it back only when `garage:hot:save` runs. + +| Command | Arguments | Returns | +| --------------------------- | ---------------------- | -------------------------------- | +| `garage:hot:init` | `uid` | Vehicle map as JSON. | +| `garage:hot:get` | `uid` | Vehicle map as JSON. | +| `garage:hot:override` | `uid`, `vehicles_json` | Vehicle map as JSON. | +| `garage:hot:add` | `uid`, `vehicle_json` | Vehicle map as JSON. | +| `garage:hot:remove_vehicle` | `uid`, `remove_json` | Vehicle map as JSON. | +| `garage:hot:save` | `uid` | Current hot vehicle map as JSON. | +| `garage:hot:remove` | `uid` | `OK`. | + +Use hot state for session-heavy vehicle workflows. Use the durable commands for +simple store/retrieve operations. + +## Best Practices + +- Store the generated plate on spawned vehicles with `setVariable`. +- Use `garage:patch` for frequent fuel and damage syncs. +- Use `garage:update` only when replacing the whole vehicle map intentionally. +- Do not delete the world vehicle until `garage:add` succeeds. +- Treat vehicle maps as hash maps keyed by plate, not arrays. + + +# Locker Usage Guide + +The locker module stores physical player inventory items by classname. It is +separate from the virtual arsenal unlock module documented in +[Owned Storage Usage Guide](https://innovativedevsolutions.github.io/server-modules/owned-storage). + +## Storage Model + +Locker data is persisted through SurrealDB by the server extension. + +```json +{ + "arifle_MX_F": { + "category": "weapon", + "classname": "arifle_MX_F", + "amount": 1 + } +} +``` + +Rules validated by the Rust service: + +- A locker can contain up to 25 unique classnames. +- `category` and `classname` cannot be empty. +- `amount` must be greater than `0`. +- `locker:add` creates an empty locker automatically when one does not exist. +- `locker:get`, `locker:patch`, and `locker:remove` require an existing locker. +- `locker:remove` takes the classname directly, not a JSON object. + +## Commands + +All commands are called on the `locker` group. + +| Command | Arguments | Returns | +| --------------- | ------------------- | -------------------------- | +| `locker:create` | `uid` | Empty item map as JSON. | +| `locker:get` | `uid` | Item map as JSON. | +| `locker:add` | `uid`, `item_json` | Updated item map as JSON. | +| `locker:update` | `uid`, `items_json` | Replaced item map as JSON. | +| `locker:patch` | `uid`, `patch_json` | Updated item map as JSON. | +| `locker:remove` | `uid`, `classname` | Updated item map as JSON. | +| `locker:delete` | `uid` | `OK`. | +| `locker:exists` | `uid` | `true` or `false`. | + +## Error Handling + +Every command returns a string payload. Always check for the `Error:` prefix +before parsing JSON. + +```sqf +private _result = "forge_server" callExtension ["locker:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Locker error: %1", _payload]; +}; + +private _locker = fromJSON _payload; +``` + +## Add an Item + +`locker:add` creates or overwrites one classname entry. + +```sqf +private _item = createHashMapFromArray [ + ["category", "weapon"], + ["classname", "arifle_MX_F"], + ["amount", 1] +]; + +private _result = "forge_server" callExtension ["locker:add", [ + getPlayerUID player, + toJSON _item +]]; + +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to store item: %1", _payload]; +}; + +private _locker = fromJSON _payload; +``` + +## Patch an Amount + +`locker:patch` currently patches the `amount` field for an existing classname. + +```sqf +private _patch = createHashMapFromArray [ + ["classname", "arifle_MX_F"], + ["amount", 5] +]; + +private _result = "forge_server" callExtension ["locker:patch", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +## Remove an Item + +`locker:remove` takes the classname as the second argument. + +```sqf +private _result = "forge_server" callExtension ["locker:remove", [ + getPlayerUID player, + "arifle_MX_F" +]]; +``` + +## Retrieve an Item + +```sqf +fnc_retrieveLockerItem = { + params ["_classname"]; + + private _result = "forge_server" callExtension ["locker:get", [getPlayerUID player]]; + private _payload = _result select 0; + + if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to load locker: %1", _payload]; + false + }; + + private _locker = fromJSON _payload; + private _item = _locker getOrDefault [_classname, createHashMap]; + if (_item isEqualTo createHashMap) exitWith { + hint "Item was not found in your locker."; + false + }; + + private _amount = _item getOrDefault ["amount", 0]; + if (_amount <= 0) exitWith { + hint "Item is out of stock."; + false + }; + + if !(player canAdd _classname) exitWith { + hint "Not enough inventory space."; + false + }; + + player addItem _classname; + + if (_amount > 1) then { + private _patch = createHashMapFromArray [ + ["classname", _classname], + ["amount", _amount - 1] + ]; + "forge_server" callExtension ["locker:patch", [getPlayerUID player, toJSON _patch]]; + } else { + "forge_server" callExtension ["locker:remove", [getPlayerUID player, _classname]]; + }; + + true +}; +``` + +## Replace the Whole Locker + +`locker:update` replaces the whole item map. Use it for explicit bulk syncs, +not single-item changes. + +```sqf +private _items = createHashMapFromArray [ + ["arifle_MX_F", createHashMapFromArray [ + ["category", "weapon"], + ["classname", "arifle_MX_F"], + ["amount", 1] + ]] +]; + +private _result = "forge_server" callExtension ["locker:update", [ + getPlayerUID player, + toJSON _items +]]; +``` + +## Hot State + +The `locker:hot:*` commands keep a runtime copy of a player's locker and write +it back only when `locker:hot:save` runs. + +| Command | Arguments | Returns | +| --------------------- | ------------------- | ----------------------------- | +| `locker:hot:init` | `uid` | Item map as JSON. | +| `locker:hot:get` | `uid` | Item map as JSON. | +| `locker:hot:override` | `uid`, `items_json` | Item map as JSON. | +| `locker:hot:save` | `uid` | Current hot item map as JSON. | +| `locker:hot:remove` | `uid` | `OK`. | + +Use hot state for session-heavy locker workflows. Use the durable commands for +simple item deposits and withdrawals. + +## Best Practices + +- Keep categories normalized, for example `weapon`, `magazine`, `item`, or + `backpack`. +- Use `locker:patch` for quantity changes. +- Use `locker:remove` when quantity reaches zero. +- Treat the locker response as a hash map keyed by classname. +- Check capacity before bulk operations that may exceed 25 unique items. + + +# Organization Usage Guide + +The organization module stores organization records, members, assets, fleet +entries, and credit lines. Durable commands manage persisted records directly. +Hot-state commands support the active organization UI workflows. + +## Storage Model + +Core organization: + +```json +{ + "id": "default", + "owner": "server", + "name": "Default Organization", + "funds": 0.0, + "reputation": 0, + "credit_lines": {} +} +``` + +Hot organization: + +```json +{ + "id": "default", + "owner": "server", + "name": "Default Organization", + "funds": 0.0, + "reputation": 0, + "credit_lines": {}, + "assets": {}, + "fleet": {}, + "members": {}, + "pending_invites": {} +} +``` + +Rules validated by the Rust service: + +- `id` must be non-empty and contain only alphanumeric characters or `_`. +- `owner` must be `server` or a 17-digit Steam UID. +- `name` cannot be empty, cannot exceed 100 characters, and cannot contain + control characters. +- `funds`, reputation, and credit line amounts cannot be negative. +- Player registration is rejected when the player already belongs to a + non-default organization. + +## Durable Commands + +| Command | Arguments | Returns | +| -------------------- | ----------------------- | -------------------------- | +| `org:create` | `org_id`, `org_json` | Organization JSON. | +| `org:get` | `org_id` | Organization JSON. | +| `org:update` | `org_id`, `patch_json` | Updated organization JSON. | +| `org:exists` | `org_id` | `true` or `false`. | +| `org:delete` | `org_id` | `OK`. | +| `org:assets:get` | `org_id` | Asset map JSON. | +| `org:assets:update` | `org_id`, `assets_json` | Updated asset map JSON. | +| `org:fleet:get` | `org_id` | Fleet map JSON. | +| `org:fleet:update` | `org_id`, `fleet_json` | Updated fleet map JSON. | +| `org:members:get` | `org_id` | Member array JSON. | +| `org:members:add` | `org_id`, `member_uid` | `OK`. | +| `org:members:remove` | `org_id`, `member_uid` | `OK`. | + +## Create an Organization + +The command key is authoritative for `id`. + +```sqf +private _org = createHashMapFromArray [ + ["id", _orgId], + ["owner", getPlayerUID player], + ["name", "Spearnet Logistics"], + ["funds", 0], + ["reputation", 0], + ["credit_lines", createHashMap] +]; + +private _result = "forge_server" callExtension ["org:create", [ + _orgId, + toJSON _org +]]; +``` + +## Update Organization Funds + +```sqf +private _patch = createHashMapFromArray [ + ["funds", 5000], + ["reputation", 10] +]; + +private _result = "forge_server" callExtension ["org:update", [ + _orgId, + toJSON _patch +]]; +``` + +Supported durable patch fields are `id`, `owner`, `name`, `funds`, +`reputation`, and `credit_lines`. + +## Assets and Fleet + +Assets are grouped by category, then classname. + +```sqf +private _assets = createHashMapFromArray [ + ["ammo", createHashMapFromArray [ + ["ACE_30Rnd_65x39_caseless_mag", createHashMapFromArray [ + ["classname", "ACE_30Rnd_65x39_caseless_mag"], + ["type", "ammo"], + ["quantity", 20] + ]] + ]] +]; + +"forge_server" callExtension ["org:assets:update", [_orgId, toJSON _assets]]; +``` + +Fleet is keyed by an internal fleet entry ID. + +```sqf +private _fleet = createHashMapFromArray [ + ["B_Truck_01_transport_F_0", createHashMapFromArray [ + ["classname", "B_Truck_01_transport_F"], + ["name", "Transport Truck"], + ["type", "cars"], + ["status", "Ready"], + ["damage", "0%"] + ]] +]; + +"forge_server" callExtension ["org:fleet:update", [_orgId, toJSON _fleet]]; +``` + +## Hot-State Commands + +| Command | Arguments | Returns | +| ---------------------------- | ----------------------------- | ----------------------------------------------------- | +| `org:hot:init` | `org_id` | Hot organization JSON. | +| `org:hot:get` | `org_id` | Hot organization JSON. | +| `org:hot:override` | `org_id`, `hot_org_json` | Hot organization JSON. | +| `org:hot:ensure_member` | `context_json` | Hot organization JSON. | +| `org:hot:member_invites` | `member_uid` | Invite array JSON. | +| `org:hot:register` | `context_json` | Register result JSON. | +| `org:hot:invite_member` | `context_json` | Invite result JSON. | +| `org:hot:accept_invite` | `context_json` | Invite decision result JSON. | +| `org:hot:decline_invite` | `context_json` | Invite decision result JSON. | +| `org:hot:assign_credit_line` | `context_json` | Mutation result JSON. | +| `org:hot:repay_credit_line` | `context_json` | Repayment result JSON. | +| `org:hot:charge_checkout` | `context_json` | Mutation result JSON. | +| `org:hot:add_assets` | `context_json`, `assets_json` | Mutation result JSON. | +| `org:hot:add_fleet` | `context_json`, `fleet_json` | Mutation result JSON. | +| `org:hot:leave` | `context_json` | Leave result JSON. | +| `org:hot:disband` | `context_json` | Disband result JSON. | +| `org:hot:save` | `org_id` | Current hot organization JSON and async durable save. | +| `org:hot:remove` | `org_id` | `OK`. | + +## Register from UI Context + +```sqf +private _context = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["orgName", "Spearnet Logistics"], + ["existingOrgId", "default"] +]; + +private _result = "forge_server" callExtension ["org:hot:register", [toJSON _context]]; +``` + +## Invite and Accept + +```sqf +private _invite = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["targetUid", _targetUid], + ["targetName", _targetName], + ["targetOrgId", "default"] +]; + +"forge_server" callExtension ["org:hot:invite_member", [toJSON _invite]]; + +private _decision = createHashMapFromArray [ + ["requesterUid", _targetUid], + ["requesterName", _targetName], + ["orgId", _orgId], + ["existingOrgId", "default"] +]; + +"forge_server" callExtension ["org:hot:accept_invite", [toJSON _decision]]; +``` + +## Credit Line Checkout + +```sqf +private _credit = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["memberUid", _memberUid], + ["memberName", _memberName], + ["amount", 1000] +]; + +"forge_server" callExtension ["org:hot:assign_credit_line", [toJSON _credit]]; + +private _charge = createHashMapFromArray [ + ["requesterUid", _memberUid], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["source", "credit_line"], + ["amount", 250], + ["commit", true] +]; + +"forge_server" callExtension ["org:hot:charge_checkout", [toJSON _charge]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Organization error: %1", _payload]; +}; +``` + + +# Owned Storage Usage Guide + +Owned storage covers the `owned:locker` and `owned:garage` extension command +groups. These modules store unlock lists rather than physical item or vehicle +instances. + +Use these modules for virtual arsenal and virtual garage unlocks. Use +[Locker Usage Guide](https://innovativedevsolutions.github.io/server-modules/locker) and +[Garage Usage Guide](https://innovativedevsolutions.github.io/server-modules/garage) for physical inventory and stored +vehicle instances. + +## Owned Locker Model + +```json +{ + "items": ["FirstAidKit"], + "weapons": ["arifle_MX_F"], + "magazines": ["30Rnd_65x39_caseless_black_mag"], + "backpacks": ["B_AssaultPack_rgr"] +} +``` + +Supported owned locker categories: + +- `items` +- `weapons` +- `magazines` +- `backpacks` + +New owned lockers are created with default unlocks from the Rust model. + +## Owned Garage Model + +```json +{ + "cars": ["B_Quadbike_01_F"], + "armor": [], + "helis": [], + "planes": [], + "naval": [], + "other": [] +} +``` + +Supported owned garage categories: + +- `cars` +- `armor` +- `helis` +- `planes` +- `naval` +- `other` + +The durable `owned:garage:remove` command currently accepts `heli` for the +helicopter category. Add, get, and hot remove accept `helis`. + +New owned garages are created with default unlocks from the Rust model. + +## Owned Locker Commands + +| Command | Arguments | Returns | +| --------------------- | ------------------------------------ | ------------------------------ | +| `owned:locker:create` | `uid` | Full owned locker JSON. | +| `owned:locker:fetch` | `uid` | Full owned locker JSON. | +| `owned:locker:get` | `uid`, `category` | Category classname array JSON. | +| `owned:locker:add` | `uid`, `category`, `classnames_json` | Updated category array JSON. | +| `owned:locker:remove` | `uid`, `category`, `classname` | Updated category array JSON. | +| `owned:locker:delete` | `uid` | `OK`. | +| `owned:locker:exists` | `uid` | `true` or `false`. | + +## Owned Garage Commands + +| Command | Arguments | Returns | +| --------------------- | ------------------------------------ | ------------------------------ | +| `owned:garage:create` | `uid` | Full owned garage JSON. | +| `owned:garage:fetch` | `uid` | Full owned garage JSON. | +| `owned:garage:get` | `uid`, `category` | Category classname array JSON. | +| `owned:garage:add` | `uid`, `category`, `classnames_json` | Updated category array JSON. | +| `owned:garage:remove` | `uid`, `category`, `classname` | Updated category array JSON. | +| `owned:garage:delete` | `uid` | `OK`. | +| `owned:garage:exists` | `uid` | `true` or `false`. | + +## Add Virtual Arsenal Unlocks + +```sqf +private _classes = ["arifle_MX_F", "hgun_P07_F"]; + +private _result = "forge_server" callExtension ["owned:locker:add", [ + getPlayerUID player, + "weapons", + toJSON _classes +]]; +``` + +## Add Virtual Garage Unlocks + +```sqf +private _classes = ["B_Quadbike_01_F", "B_MRAP_01_F"]; + +private _result = "forge_server" callExtension ["owned:garage:add", [ + getPlayerUID player, + "cars", + toJSON _classes +]]; +``` + +## Remove an Unlock + +```sqf +"forge_server" callExtension ["owned:locker:remove", [ + getPlayerUID player, + "weapons", + "arifle_MX_F" +]]; + +"forge_server" callExtension ["owned:garage:remove", [ + getPlayerUID player, + "cars", + "B_Quadbike_01_F" +]]; +``` + +## Hot-State Commands + +Both owned storage modules support hot state. + +Owned locker: + +| Command | Arguments | Returns | +| --------------------------- | -------------------- | ----------------------------------------------------- | +| `owned:locker:hot:init` | `uid` | Full owned locker JSON. | +| `owned:locker:hot:fetch` | `uid` | Full owned locker JSON. | +| `owned:locker:hot:get` | `uid`, `category` | Category array JSON. | +| `owned:locker:hot:override` | `uid`, `locker_json` | Full owned locker JSON. | +| `owned:locker:hot:save` | `uid` | Current hot owned locker JSON and async durable save. | +| `owned:locker:hot:remove` | `uid` | `OK`. | + +Owned garage: + +| Command | Arguments | Returns | +| ------------------------------ | ------------------------------------ | ----------------------------------------------------- | +| `owned:garage:hot:init` | `uid` | Full owned garage JSON. | +| `owned:garage:hot:fetch` | `uid` | Full owned garage JSON. | +| `owned:garage:hot:get` | `uid`, `category` | Category array JSON. | +| `owned:garage:hot:override` | `uid`, `garage_json` | Full owned garage JSON. | +| `owned:garage:hot:add` | `uid`, `category`, `classnames_json` | Updated category array JSON. | +| `owned:garage:hot:remove_item` | `uid`, `category`, `classname` | Updated category array JSON. | +| `owned:garage:hot:save` | `uid` | Current hot owned garage JSON and async durable save. | +| `owned:garage:hot:remove` | `uid` | `OK`. | + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Owned storage error: %1", _payload]; +}; +``` + + +# Phone Usage Guide + +The phone module stores contacts, messages, and emails for each UID. It is a +server-extension state module backed by SurrealDB. + +## Storage Model + +```json +{ + "contacts": ["76561198000000000", "field_commander"], + "messages": [ + { + "id": "phone-message:sender:receiver:1", + "from": "sender", + "to": "receiver", + "message": "Text body", + "timestamp": 123.45, + "read": false + } + ], + "emails": [ + { + "id": "phone-email:sender:receiver:2", + "from": "sender", + "to": "receiver", + "subject": "Subject", + "body": "Email body", + "timestamp": 123.45, + "read": false + } + ] +} +``` + +Rules validated by the Rust service: + +- UID arguments cannot be empty. +- Message and email bodies cannot be empty. +- Empty email subjects become `No subject`. +- Player messages and emails cannot target `field_commander`. +- `field_commander` can send messages or emails to players. +- Deleting a message or email removes it only from the requesting UID's index. + +## Commands + +| Command | Arguments | Returns | +| -------------------------- | ---------------------------------------------------- | ------------------------------------ | +| `phone:init` | `uid` | Full phone payload. | +| `phone:contacts:list` | `uid` | Contact UID array. | +| `phone:contacts:add` | `uid`, `contact_uid` | `true` or `false`. | +| `phone:contacts:remove` | `uid`, `contact_uid` | `true` or `false`. | +| `phone:messages:list` | `uid` | Message array. | +| `phone:messages:thread` | `uid`, `other_uid` | Message array for both participants. | +| `phone:messages:send` | `from_uid`, `to_uid`, `message`, `timestamp` | Message JSON. | +| `phone:messages:mark_read` | `uid`, `message_id` | `true` or `false`. | +| `phone:messages:delete` | `uid`, `message_id` | `true` or `false`. | +| `phone:emails:list` | `uid` | Email array. | +| `phone:emails:send` | `from_uid`, `to_uid`, `subject`, `body`, `timestamp` | Email JSON. | +| `phone:emails:mark_read` | `uid`, `email_id` | `true` or `false`. | +| `phone:emails:delete` | `uid`, `email_id` | `true` or `false`. | +| `phone:remove` | `uid` | `OK`. | + +## Initialize Phone State + +`phone:init` creates phone state if needed and seeds self-contact plus +`field_commander`. + +```sqf +private _result = "forge_server" callExtension ["phone:init", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Phone init failed: %1", _payload]; +}; + +private _phone = fromJSON _payload; +``` + +## Send a Message + +```sqf +private _timestamp = str diag_tickTime; + +private _result = "forge_server" callExtension ["phone:messages:send", [ + getPlayerUID player, + _targetUid, + "Move to checkpoint Alpha.", + _timestamp +]]; +``` + +## Read a Conversation + +```sqf +private _result = "forge_server" callExtension ["phone:messages:thread", [ + getPlayerUID player, + _otherUid +]]; + +private _messages = fromJSON (_result select 0); +``` + +## Send an Email + +```sqf +private _result = "forge_server" callExtension ["phone:emails:send", [ + getPlayerUID player, + _targetUid, + "Supply Request", + "Requesting resupply at grid 123456.", + str diag_tickTime +]]; +``` + +## Mark and Delete Records + +```sqf +"forge_server" callExtension ["phone:messages:mark_read", [ + getPlayerUID player, + _messageId +]]; + +"forge_server" callExtension ["phone:emails:delete", [ + getPlayerUID player, + _emailId +]]; +``` + +## Error Handling + +```sqf +private _payload = (_result select 0); +if (_payload find "Error:" == 0) then { + systemChat format ["Phone error: %1", _payload]; +}; +``` + + +# Client Usage Guide + +Forge Client contains the Arma client-side addons that open player interfaces, +handle browser events, cache client-visible state, and forward authoritative +requests to the server addons. + +Use this guide as the entry point for client-side integration. Domain data, +validation, persistence, rewards, ownership, and checkout behavior remain +server-side responsibilities. + +## Client Responsibilities + +- Open Arma displays and `CT_WEBBROWSER` controls. +- Load browser UI assets from each addon's `ui/_site` folder. +- Receive browser alerts through `JSDialog` handlers. +- Translate browser events into local actions or CBA server events. +- Cache display state in client repositories. +- Push server responses back into browser UIs with `ExecJS`. +- Provide local-only utility state where the feature is intentionally local. + +## Authoritative Boundaries + +Client repositories are view state. They are useful for rendering, local UI +decisions, and short-lived session behavior, but they should not be treated as +durable state. + +Authoritative state lives in: + +- server SQF addons for mission and player workflow ownership +- the `forge_server` extension for durable and hot-state domain logic +- SurrealDB where the extension persists durable domain records + +## Common Runtime Flow + +Most browser-backed client addons follow this shape: + +1. The addon creates a display, finds a browser control, and registers a + `JSDialog` event handler. +2. The browser loads an HTML entrypoint from `ui/_site`. +3. The browser sends JSON alerts with an `event` name and `data` payload. +4. `fnc_handleUIEvents.sqf` parses the alert and routes the event. +5. A bridge object or repository sends a CBA server event when server data is + needed. +6. Server responses are caught in `XEH_postInitClient.sqf`. +7. The bridge sends browser update events back through `ExecJS`. + +Browser alert payload: + +```json +{ + "event": "module::action", + "data": {} +} +``` + +## Open UI Entry Points + +| UI | Entry point | +| ------------------- | ------------------------------------------- | +| Actor menu | `call forge_client_actor_fnc_openUI;` | +| Bank | `call forge_client_bank_fnc_openUI;` | +| ATM | `[true] call forge_client_bank_fnc_openUI;` | +| CAD | `call forge_client_cad_fnc_openUI;` | +| Garage | `call forge_client_garage_fnc_openUI;` | +| Virtual garage | `call forge_client_garage_fnc_openVG;` | +| Organization portal | `call forge_client_org_fnc_openUI;` | +| Phone | `call forge_client_phone_fnc_openUI;` | +| Store | `call forge_client_store_fnc_openUI;` | + +Notifications are normally opened during client initialization and then updated +through the notification event/service. + +## Addon Guides + +- [Client Main Usage Guide](https://innovativedevsolutions.github.io/client-addons/main) +- [Client Common Usage Guide](https://innovativedevsolutions.github.io/client-addons/common) +- [Client Actor Usage Guide](https://innovativedevsolutions.github.io/client-addons/actor) +- [Client Bank Usage Guide](https://innovativedevsolutions.github.io/client-addons/bank) +- [Client CAD Usage Guide](https://innovativedevsolutions.github.io/client-addons/cad) +- [Client Garage Usage Guide](https://innovativedevsolutions.github.io/client-addons/garage) +- [Client Locker Usage Guide](https://innovativedevsolutions.github.io/client-addons/locker) +- [Client Notifications Usage Guide](https://innovativedevsolutions.github.io/client-addons/notifications) +- [Client Organization Usage Guide](https://innovativedevsolutions.github.io/client-addons/organization) +- [Client Phone Usage Guide](https://innovativedevsolutions.github.io/client-addons/phone) +- [Client Store Usage Guide](https://innovativedevsolutions.github.io/client-addons/store) + +## Extension Calls + +Client addons should usually call server SQF events, not the `forge_server` +extension directly. The server addon owns validation context and converts the +request into extension commands. + +Example: + +```sqf +[SRPC(bank,requestDeposit), [getPlayerUID player, 100]] call CFUNC(serverEvent); +``` + +Direct extension calls from client code bypass server authorization boundaries +and should be avoided. + +## Browser Bridge Notes + +`forge_client_common_fnc_initWebUIBridge` provides reusable bridge and screen +objects for newer browser UIs. It queues outbound events until a browser screen +is ready, then delivers payloads through: + +```sqf +_control ctrlWebBrowserAction ["ExecJS", format ["ForgeBridge.receive(%1)", _json]]; +``` + +Feature addons still own their event names, request payloads, and response +mapping. + +## Development Checklist + +- Keep feature-specific behavior in the owning addon. +- Send authoritative changes to the server addon. +- Use namespaced browser events such as `bank::deposit::request`. +- Treat `profileNamespace` as local player preference or utility state only. +- Make browser-ready events request the current server state before rendering + stale data. +- Queue or ignore bridge responses when the display is closed. +- Keep mission object setup on the mission/server side and client display logic + on the client side. + + +# Client Main Usage Guide + +The client `main` addon provides the shared mod identity, version metadata, +CBA settings, and macro foundation used by the Forge client addons. + +## Purpose + +Use `forge_client_main` as the foundation dependency for client addons that +need Forge macros, function naming, settings, or mod-level configuration. + +Feature logic should stay in the owning addon. `main` should remain limited to +shared client configuration and compile infrastructure. + +## Key Files + +| File | Purpose | +| -------------------- | ---------------------------- | +| `script_mod.hpp` | Client mod identity. | +| `script_version.hpp` | Client mod version values. | +| `script_macros.hpp` | Shared client macros. | +| `CfgSettings.hpp` | Client CBA settings. | +| `config.cpp` | Addon config and mod wiring. | + +## Dependency Pattern + +Feature addons normally depend on `forge_client_main` in their `config.cpp`. + +```cpp +class forge_client_example { + requiredAddons[] = { + "forge_client_main" + }; +}; +``` + +## Usage Notes + +- Put domain UI, repositories, and event handling in feature addons. +- Put reusable browser bridge behavior in `forge_client_common`. +- Put server-only behavior in `arma/server/addons`. +- Keep settings in `CfgSettings.hpp` when they apply to the client mod as a + whole or to a client feature toggle. + +## Related Guides + +- [Client Usage Guide](https://innovativedevsolutions.github.io/client-addons) +- [Client Common Usage Guide](https://innovativedevsolutions.github.io/client-addons/common) +- [Development Guide](https://innovativedevsolutions.github.io/getting-started/development) + + +# Client Phone Usage Guide + +The client phone addon provides the in-game phone UI for contacts, SMS +messages, email, and local utility apps such as notes, calendar events, world +clocks, and alarms. + +## Open Phone UI + +```sqf +call forge_client_phone_fnc_openUI; +``` + +The phone UI creates `RscPhone`, loads `ui/_site/index.html`, and routes +browser alerts through `forge_client_phone_fnc_handleUIEvents`. + +## State Ownership + +Contacts, messages, and emails are server-owned and requested through the +server phone addon. + +Local utility app state is stored in `profileNamespace`: + +- notes +- calendar events +- world clocks +- alarms +- theme/preferences + +## Phone Class + +`forge_client_phone_fnc_initClass` creates `GVAR(PhoneClass)`. + +The phone class currently owns local notes, events, and settings helpers. +Contacts, messages, and emails continue to use server-backed request/response +events. + +## Browser Events + +### Session and Preferences + +| Event | Client behavior | +| -------------------- | ----------------------------------------------- | +| `phone::get::player` | Send player UID to browser with `setPlayerUid`. | +| `phone::get::theme` | Send saved light/dark theme to browser. | +| `phone::set::theme` | Save theme preference to `profileNamespace`. | + +### Contacts + +| Event | Client behavior | +| -------------------------------- | ------------------------------------------------ | +| `phone::get::contacts` | Load cached contacts and request server refresh. | +| `phone::refresh::contacts` | Request contacts from server. | +| `phone::add::contact` | Add contact by phone number. | +| `phone::add::contact::by::phone` | Add contact by phone number. | +| `phone::add::contact::by::email` | Add contact by email. | +| `phone::remove::contact` | Remove contact by UID. | + +### Messages + +| Event | Client behavior | +| ----------------------------- | -------------------------------- | +| `phone::get::messages` | Request messages from server. | +| `phone::get::message::thread` | Request thread with another UID. | +| `phone::send::message` | Send SMS through server. | +| `phone::mark::message::read` | Mark message read on server. | +| `phone::delete::message` | Delete message on server. | + +### Email + +| Event | Client behavior | +| -------------------------- | --------------------------- | +| `phone::get::emails` | Request emails from server. | +| `phone::send::email` | Send email through server. | +| `phone::mark::email::read` | Mark email read on server. | +| `phone::delete::email` | Delete email on server. | + +### Local Utility Apps + +| Event | Client behavior | +| ---------------------- | --------------------------------- | +| `phone::get::notes` | Load local notes. | +| `phone::save::note` | Save local note. | +| `phone::delete::note` | Delete local note. | +| `phone::get::events` | Load local calendar events. | +| `phone::save::event` | Save local calendar event. | +| `phone::delete::event` | Delete local calendar event. | +| `phone::get::clocks` | Load local world clocks. | +| `phone::save::clock` | Save local world clock. | +| `phone::delete::clock` | Delete local world clock. | +| `phone::get::alarms` | Load local alarms. | +| `phone::save::alarm` | Save local alarm. | +| `phone::delete::alarm` | Delete local alarm. | +| `phone::toggle::alarm` | Toggle local alarm enabled state. | + +## Usage Rules + +- Send contact, message, and email mutations to the server phone addon. +- Keep local-only utility apps in `profileNamespace` until they are migrated to + server-backed storage. +- Do not treat local phone utility state as shared multiplayer state. +- Validate required UID, phone, email, subject, and message fields before + sending server requests. + +## Related Guides + +- [Phone Usage Guide](https://innovativedevsolutions.github.io/server-modules/phone) +- [Client Notifications Usage Guide](https://innovativedevsolutions.github.io/client-addons/notifications) + + +# Client Store Usage Guide + +The client store addon provides the storefront browser UI for catalog browsing, +category hydration, payment source display, cart handling, and checkout +requests. + +## Open Store UI + +```sqf +call forge_client_store_fnc_openUI; +``` + +The UI opens `RscStore`, loads `ui/_site/index.html`, and routes browser alerts +through `forge_client_store_fnc_handleUIEvents`. + +## Bridge + +`forge_client_store_fnc_initUIBridge` owns: + +- browser control lookup +- store hydrate requests +- category requests +- checkout requests +- category hydrate/failure responses +- checkout success/failure responses +- store config refresh after successful checkout + +Store currently uses its own `StoreUIBridge.receive(...)` browser bridge rather +than the shared `ForgeBridge.receive(...)` delivery used by newer bridges. + +## Browser Events + +| Event | Client behavior | +| -------------------------- | -------------------------------------- | +| `store::ready` | Request store hydrate from the server. | +| `store::category::request` | Request catalog items for a category. | +| `store::checkout::request` | Forward checkout JSON to the server. | +| `store::close` | Close the display. | + +## Browser Response Events + +| Event | Purpose | +| -------------------------- | ------------------------------------------ | +| `store::hydrate` | Initial storefront/session/config payload. | +| `store::config::hydrate` | Refreshed payment/source config. | +| `store::category::hydrate` | Category catalog payload. | +| `store::category::failure` | Category request failure. | +| `store::checkout::success` | Checkout success payload. | +| `store::checkout::failure` | Checkout failure payload. | + +## Category Requests + +Category requests require a non-empty category value. + +```json +{ + "category": "weapons" +} +``` + +The client lowercases the category before forwarding it to the server store +addon. + +## Checkout Requests + +Checkout requests send a serialized checkout payload: + +```json +{ + "checkoutJson": "{\"items\":[],\"paymentSource\":\"cash\"}" +} +``` + +The client only forwards the checkout data. The server store addon and +extension validate prices, inventory grants, payment source authorization, and +integration with bank, organization, locker, and garage state. + +After a successful checkout, the client asks the server for a fresh store config +payload so payment-source balances and permissions stay current. + +## Authoritative State + +Catalog data, prices, checkout validation, money movement, organization funds, +credit lines, locker grants, garage grants, and persistence are server-owned. + +## Related Guides + +- [Store Usage Guide](https://innovativedevsolutions.github.io/server-modules/store) +- [Client Bank Usage Guide](https://innovativedevsolutions.github.io/client-addons/bank) +- [Client Organization Usage Guide](https://innovativedevsolutions.github.io/client-addons/organization) +- [Client Locker Usage Guide](https://innovativedevsolutions.github.io/client-addons/locker) +- [Client Garage Usage Guide](https://innovativedevsolutions.github.io/client-addons/garage) + + +# Client Common Usage Guide + +The client `common` addon contains shared browser UI bridge declarations and +common client-side browser integration patterns. + +## Purpose + +Use `forge_client_common` when a browser-backed feature UI needs reusable +screen lifecycle behavior: + +- active browser control tracking +- browser ready state +- pending event queues +- `ExecJS` payload delivery +- shared bridge object inheritance through `createHashMapObject` + +Feature addons still own their app-specific events and server RPC mapping. + +## Shared Bridge + +Initialize the bridge declarations with: + +```sqf +private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge; +private _bridgeDeclaration = _webUIDeclarations get "bridgeDeclaration"; +``` + +Feature bridges can inherit from the shared declaration: + +```sqf +GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [ + ["#base", _bridgeDeclaration], + ["#type", "MyUIBridgeBaseClass"], + ["handleReady", compileFinal { + params [["_control", controlNull, [controlNull]]]; + + _self call ["setActiveBrowserControl", [_control]]; + _self call ["sendEvent", ["myAddon::hydrate", createHashMap, _control]]; + }] +]; +``` + +## Event Delivery + +`sendEvent` builds this payload: + +```json +{ + "event": "myAddon::event", + "data": {} +} +``` + +If the browser control is missing or not ready, the payload is queued on the +screen object. When the screen marks ready, `flushPendingEvents` delivers the +queue. + +## Screen Lifecycle + +The shared screen object tracks: + +| Field | Purpose | +| --------------- | ------------------------------------------------- | +| `control` | Active browser control. | +| `readyState` | Whether the browser app has sent its ready event. | +| `pendingEvents` | Outbound events waiting for a ready browser. | + +Call `handleClose` or `dispose` when a display closes so stale controls and +queued events are cleared. + +## Current Consumers + +The common bridge pattern is used by the newer bank, CAD, garage, and +organization client bridges. Store currently keeps its own bridge object and +browser bridge function names. + +## Usage Rules + +- Keep bridge inheritance in feature addons thin and explicit. +- Keep shared code generic; do not add bank, CAD, org, or store-specific logic + to `common`. +- Prefer namespaced events such as `garage::sync`. +- Send hash maps or arrays that can be safely serialized with `toJSON`. +- Avoid direct extension calls from the client bridge; send CBA server events. + +## Related Guides + +- [Client Usage Guide](https://innovativedevsolutions.github.io/client-addons) +- [Client Bank Usage Guide](https://innovativedevsolutions.github.io/client-addons/bank) +- [Client CAD Usage Guide](https://innovativedevsolutions.github.io/client-addons/cad) +- [Client Garage Usage Guide](https://innovativedevsolutions.github.io/client-addons/garage) +- [Client Organization Usage Guide](https://innovativedevsolutions.github.io/client-addons/organization) + + +# Client Actor Usage Guide + +The client actor addon owns the player interaction menu and client-side actor +repository. It is the main launcher for nearby player actions and other Forge +client UIs. + +## Open the Actor Menu + +```sqf +call forge_client_actor_fnc_openUI; +``` + +The actor menu opens `RscActorMenu`, loads `ui/_site/index.html`, and routes +browser alerts through `forge_client_actor_fnc_handleUIEvents`. + +## Repository + +`forge_client_actor_fnc_initRepository` creates `GVAR(ActorRepository)`. + +The repository: + +- requests actor initialization from the server +- saves actor state through the server actor addon +- caches client-visible actor fields +- applies position, direction, stance, rank, and loadout on JIP sync when the + relevant settings allow it +- provides nearby interaction actions to the browser UI + +Initialize actor state through the repository: + +```sqf +GVAR(ActorRepository) call ["init", []]; +``` + +Save actor state through the server: + +```sqf +GVAR(ActorRepository) call ["save", [true]]; +``` + +## Nearby Actions + +The menu asks for nearby actions with: + +```text +actor::get::actions +``` + +The repository scans objects within 5 meters and returns actions based on +mission object variables: + +| Variable | Action | +| ------------------ | ----------------------------------------- | +| `storeType` | store | +| `isAtm` | ATM | +| `isBank` | bank | +| `isGarage` | garage | +| `garageType` | garage subtype | +| `isLocker` | virtual arsenal action when VA is enabled | +| `deviceType` | device action placeholder | +| nearby player unit | player interaction placeholder | + +The response is pushed into the browser with `updateAvailableActions(...)`. + +## Browser Events + +| Event | Client behavior | +| ---------------------- | --------------------------------------- | +| `actor::get::actions` | Refresh nearby actions. | +| `actor::close::menu` | Close actor menu. | +| `actor::open::atm` | Open bank UI in ATM mode. | +| `actor::open::bank` | Open bank UI in bank mode. | +| `actor::open::cad` | Open CAD UI. | +| `actor::open::garage` | Open garage UI. | +| `actor::open::vgarage` | Open virtual garage. | +| `actor::open::org` | Open organization UI. | +| `actor::open::vlocker` | Open ACE arsenal on `FORGE_Locker_Box`. | +| `actor::open::phone` | Open phone UI. | +| `actor::open::store` | Open store UI. | + +Device and player interaction events currently display placeholder feedback. + +## Authoritative State + +Actor persistence is server-owned. The client repository requests and displays +actor data, but actor creation, durable updates, and hot-state behavior are +handled by the server actor addon and extension. + +## Related Guides + +- [Actor Usage Guide](https://innovativedevsolutions.github.io/server-modules/actor) +- [Client Bank Usage Guide](https://innovativedevsolutions.github.io/client-addons/bank) +- [Client CAD Usage Guide](https://innovativedevsolutions.github.io/client-addons/cad) +- [Client Garage Usage Guide](https://innovativedevsolutions.github.io/client-addons/garage) +- [Client Locker Usage Guide](https://innovativedevsolutions.github.io/client-addons/locker) +- [Client Organization Usage Guide](https://innovativedevsolutions.github.io/client-addons/organization) +- [Client Phone Usage Guide](https://innovativedevsolutions.github.io/client-addons/phone) +- [Client Store Usage Guide](https://innovativedevsolutions.github.io/client-addons/store) + + +# Client Bank Usage Guide + +The client bank addon opens the bank and ATM browser UI, forwards banking +requests to the server bank addon, and pushes account updates back into the +browser. + +## Open Bank UI + +Open full bank mode: + +```sqf +call forge_client_bank_fnc_openUI; +``` + +Open ATM mode: + +```sqf +[true] call forge_client_bank_fnc_openUI; +``` + +The open function creates `RscBank`, sets the bridge mode to `bank` or `atm`, +loads `ui/_site/index.html`, and routes browser events through +`forge_client_bank_fnc_handleUIEvents`. + +## Bridge and Repository + +`forge_client_bank_fnc_initRepository` tracks account load and cached account +state. + +`forge_client_bank_fnc_initUIBridge` owns: + +- active browser control tracking +- bank/ATM mode +- browser ready handling +- account hydrate and sync responses +- deposit, withdrawal, transfer, earnings deposit, credit repayment, and PIN + requests +- browser notice delivery + +## Browser Events + +| Event | Client behavior | +| -------------------------------- | ------------------------------------------------------- | +| `bank::ready` | Mark browser ready and request hydrate from the server. | +| `bank::refresh` | Request fresh bank hydrate data. | +| `bank::deposit::request` | Forward deposit amount to the server. | +| `bank::withdraw::request` | Forward withdrawal amount to the server. | +| `bank::transfer::request` | Forward target, source field, and amount. | +| `bank::depositEarnings::request` | Request earnings deposit. | +| `bank::repayCreditLine::request` | Request credit-line repayment. | +| `bank::pin::request` | Forward PIN validation request. | +| `bank::close` | Dispose bridge screen state and close the display. | + +## Browser Response Events + +The bridge sends: + +| Event | Purpose | +| --------------- | ----------------------------- | +| `bank::hydrate` | Full session/account payload. | +| `bank::sync` | Account patch or sync data. | +| `bank::notice` | UI-visible notice payload. | + +## Request Flow + +Example deposit flow: + +1. Browser sends `bank::deposit::request` with an `amount`. +2. Client bridge calls the server bank request event. +3. Server bank addon validates the request and calls bank hot-state logic. +4. Server response is caught by the client post-init event handlers. +5. Client bridge sends `bank::sync` or `bank::notice` back to the browser. + +## Authoritative State + +Balances, PIN authorization, transfers, checkout charges, credit lines, and +persistence are server-owned. The client should only display account data and +request mutations through server events. + +## Related Guides + +- [Bank Usage Guide](https://innovativedevsolutions.github.io/server-modules/bank) +- [Client Common Usage Guide](https://innovativedevsolutions.github.io/client-addons/common) +- [Client Store Usage Guide](https://innovativedevsolutions.github.io/client-addons/store) + + +# Client CAD Usage Guide + +The client CAD addon provides the map and dispatch UI for groups, active +tasks, task assignment, dispatch orders, support requests, and task +acknowledge/decline workflows. + +## Open CAD UI + +```sqf +call forge_client_cad_fnc_openUI; +``` + +The CAD UI opens `RscMapUI` and loads separate browser controls for: + +- top bar +- bottom bar +- side panel +- dispatcher board + +The native Arma map remains part of the same display. + +## Repository and Bridge + +`forge_client_cad_fnc_initRepository` caches the hydrated CAD payload, +selected mode, dispatch view, session data, groups, tasks, requests, and +assignments. + +`forge_client_cad_fnc_initUIBridge` owns: + +- ready state for side panel, top bar, and dispatcher board +- operations vs dispatch mode +- board vs map dispatch view +- hydrate requests +- task assignment, acknowledge, and decline requests +- dispatch order create/close requests +- support request submit/close requests +- group status, role, and profile requests +- map focus actions + +## Browser Events + +| Event | Client behavior | +| ----------------------------- | -------------------------------------------------- | +| `cad::topbar::ready` | Mark top bar ready and push top bar state. | +| `cad::ready` | Mark side panel ready and request hydrate. | +| `cad::dispatcher::ready` | Mark dispatcher board ready and push hydrate data. | +| `cad::mode::set` | Switch between operations and dispatch mode. | +| `cad::dispatchView::set` | Switch dispatch board/map view. | +| `cad::refresh` | Request fresh CAD hydrate data. | +| `cad::tasks::assign` | Assign a task to a group. | +| `cad::tasks::acknowledge` | Acknowledge assigned task. | +| `cad::tasks::decline` | Decline assigned task. | +| `cad::dispatchOrder::create` | Create dispatch order. | +| `cad::dispatchOrder::close` | Close dispatch order. | +| `cad::supportRequest::submit` | Submit support request. | +| `cad::supportRequest::close` | Close support request. | +| `cad::groups::status` | Update group status. | +| `cad::groups::role` | Update group role. | +| `cad::groups::profile` | Update status and role together. | +| `cad::groups::focus` | Center map on a group. | +| `cad::tasks::focus` | Center map on a task. | +| `cad::requests::focus` | Center map on a support request. | +| `map::zoomIn` | Zoom native map in. | +| `map::zoomOut` | Zoom native map out. | +| `map::search` | Placeholder status update. | +| `map::close` | Dispose bridge state and close the display. | + +## Response Events + +The bridge pushes: + +| Event | Purpose | +| --------------------------- | -------------------------------------------- | +| `cad::hydrate` | Full hydrated CAD payload to the side panel. | +| `cad::assignment::response` | Task assignment/acknowledge/decline result. | +| `cad::group::response` | Group status/role/profile result. | +| `cad::request::response` | Support request result. | + +Dispatcher board controls also receive direct `ExecJS` status and hydrate +calls. + +## Task Compatibility + +CAD task visibility depends on server-side task catalog entries. Tasks created +through Eden Forge task modules or `forge_server_task_fnc_startTask` are the +normal CAD-compatible task sources because they register task catalog data. + +Direct handler or task-function calls only work with CAD when the task catalog +entry already exists. + +## Authorization Notes + +Only dispatcher sessions can enter dispatch mode. If the hydrated session is +not a dispatcher, the bridge forces the UI back to operations mode. + +## Related Guides + +- [CAD Usage Guide](https://innovativedevsolutions.github.io/server-modules/cad) +- [Task Usage Guide](https://innovativedevsolutions.github.io/server-modules/task) +- [Client Common Usage Guide](https://innovativedevsolutions.github.io/client-addons/common) + + +# Client Garage Usage Guide + +The client garage addon provides player vehicle storage UI, vehicle +store/retrieve actions, selected nearby vehicle service requests, vehicle +context building, and the virtual garage view. + +## Open Garage UI + +```sqf +call forge_client_garage_fnc_openUI; +``` + +The garage UI opens `RscGarage`, loads `ui/_site/index.html`, and routes +browser events through `forge_client_garage_fnc_handleUIEvents`. + +## Open Virtual Garage + +```sqf +call forge_client_garage_fnc_openVG; +``` + +The virtual garage uses mission-configured `FORGE_CfgGarages` locations to set +the spawn/preview position, opens the BIS garage interface, and restricts the +available vehicle lists from the virtual garage repository. + +## Client Services + +| Service | Purpose | +| ---------------------- | --------------------------------------------------------------------------------------------- | +| `GarageRepository` | Player garage view state. | +| `VGRepository` | Virtual garage unlock view state. | +| `GarageHelperService` | Vehicle names, hit points, and payload helpers. | +| `GarageContextService` | Nearby/current vehicle context. | +| `GaragePayloadService` | Browser hydrate payload construction. | +| `GarageActionService` | Store/retrieve request handling and selected nearby vehicle refuel/repair request forwarding. | +| `GarageUIBridge` | Browser ready, hydrate, and sync delivery. | + +## Browser Events + +| Event | Client behavior | +| ------------------------------------ | ----------------------------------------------------------------------------- | +| `garage::ready` | Mark browser ready and send `garage::hydrate`. | +| `garage::refresh` | Send current garage payload as `garage::sync`. | +| `garage::vehicle::retrieve::request` | Forward retrieve request through the action service. | +| `garage::vehicle::store::request` | Forward store request through the action service. | +| `garage::vehicle::refuel::request` | Forward selected nearby vehicle refuel request to the server economy service. | +| `garage::vehicle::repair::request` | Forward selected nearby vehicle repair request to the server economy service. | +| `garage::close` | Dispose bridge screen state and close the display. | + +## Browser Response Events + +| Event | Purpose | +| -------------------------- | --------------------------------------------------- | +| `garage::hydrate` | Initial vehicle and session payload. | +| `garage::sync` | Refreshed vehicle payload. | +| `garage::service::success` | Browser notice for accepted refuel/repair requests. | +| `garage::service::failure` | Browser notice for rejected refuel/repair requests. | + +Server action responses are handled by the action service and notification +flow. + +## Vehicle Service + +The selected vehicle detail panel includes refuel and repair actions for nearby +world vehicles. Stored records must be retrieved first because server economy +services operate on live vehicle objects, not stored garage records. + +Refuel requests use the server economy `RefuelService` event. Repair requests +use the server economy `RepairService` event. Both services are billed by the +server economy addon through organization funds. + +## Mission Setup + +Garage interactions are normally surfaced through the actor menu when nearby +objects have garage variables such as: + +```sqf +_object setVariable ["isGarage", true, true]; +_object setVariable ["garageType", "cars", true]; +``` + +Virtual garage access also requires configured garage locations in mission +config so the preview/spawn position can be resolved. + +## Authoritative State + +The client gathers vehicle context and sends store/retrieve requests. Stored +vehicle state, validation, spawning, removal, and persistence are owned by the +server garage addon and extension. + +## Related Guides + +- [Garage Usage Guide](https://innovativedevsolutions.github.io/server-modules/garage) +- [Client Actor Usage Guide](https://innovativedevsolutions.github.io/client-addons/actor) +- [Client Notifications Usage Guide](https://innovativedevsolutions.github.io/client-addons/notifications) + + +# Client Locker Usage Guide + +The client locker addon manages personal locker display state, local locker +container behavior, and virtual arsenal unlock state. + +## Repositories + +`forge_client_locker_fnc_initRepository` creates `GVAR(LockerRepository)`. + +`forge_client_locker_fnc_initVARepository` creates `GVAR(VARepository)`. + +Initialize locker state: + +```sqf +GVAR(LockerRepository) call ["init", []]; +GVAR(VARepository) call ["init", []]; +``` + +## Locker Container Flow + +The repository searches mission namespace variables whose names contain +`locker` and refer to objects. For each server/mission locker object, it creates +a local `Box_NATO_Equip_F` at the same position and attaches container event +handlers. + +On container open: + +- the local container is cleared +- cached locker items are inserted into the container +- over-capacity warnings are emitted when the item count is above 25 + +On container close: + +- cargo, nested container items, and weapon attachments are read back +- the new locker map is sent to the server with the override request +- the local repository cache is updated + +## Virtual Arsenal Flow + +The virtual arsenal repository creates a local `FORGE_Locker_Box` and requests +virtual arsenal unlocks from the server. + +As sync data arrives, it applies unlocks through ACE Arsenal: + +| Data key | Client behavior | +| ----------- | ---------------------- | +| `items` | Add virtual items. | +| `weapons` | Add virtual weapons. | +| `magazines` | Add virtual magazines. | +| `backpacks` | Add virtual backpacks. | + +The actor menu opens the virtual locker with: + +```sqf +[FORGE_Locker_Box, player, false] spawn ace_arsenal_fnc_openBox; +``` + +## Server Events + +The client repository sends requests for: + +- locker initialization +- locker save +- locker override after container close +- virtual arsenal initialization +- virtual arsenal save + +The server locker addon and extension own the saved locker and virtual arsenal +state. + +## Mission Setup + +Mission locker objects must be placed into `missionNamespace` with a variable +name containing `locker`. The client creates local interactive containers from +those authoritative mission objects. + +Example: + +```sqf +missionNamespace setVariable ["forge_locker_alpha", _lockerObject, true]; +``` + +## Related Guides + +- [Locker Usage Guide](https://innovativedevsolutions.github.io/server-modules/locker) +- [Owned Storage Usage Guide](https://innovativedevsolutions.github.io/server-modules/owned-storage) +- [Client Actor Usage Guide](https://innovativedevsolutions.github.io/client-addons/actor) + + +# Client Notifications Usage Guide + +The client notifications addon owns the notification HUD, notification sound, +and local notification service used by Forge client and server modules. + +## Runtime Behavior + +The notification display is created during client initialization. The browser +HUD sends: + +```text +notifications::ready +``` + +When that event is received, `NotificationService` initializes and sends a +startup notification. + +## Create a Notification + +Use the notification service when available: + +```sqf +GVAR(NotificationService) call ["create", [ + "success", + "Title", + "Notification text.", + 4000 +]]; +``` + +Arguments: + +| Argument | Purpose | +| ----------- | -------------------------------------------------------------------- | +| `_type` | Notification type, such as `success`, `info`, `warning`, or `error`. | +| `_title` | Notification title. | +| `_content` | Notification body text. | +| `_duration` | Display duration in milliseconds. | + +The service dispatches a browser `forge:notify` custom event. + +## CBA Event Surface + +Other addons can use the client notification event: + +```sqf +["forge_client_notifications_recieveNotification", [ + "warning", + "Garage", + "Vehicle spawn position is blocked.", + 3000 +]] call CBA_fnc_localEvent; +``` + +The event payload is: + +```sqf +[_type, _title, _content, _duration] +``` + +## Usage Rules + +- Use the shared notification service instead of opening separate transient + browser UIs. +- Keep server-driven player feedback short and actionable. +- Treat notification state as transient client UI state. +- Do not use notifications as the only record of durable domain changes. + +## Related Guides + +- [Client Usage Guide](https://innovativedevsolutions.github.io/client-addons) +- [Client Garage Usage Guide](https://innovativedevsolutions.github.io/client-addons/garage) +- [Client Bank Usage Guide](https://innovativedevsolutions.github.io/client-addons/bank) +- [Client Store Usage Guide](https://innovativedevsolutions.github.io/client-addons/store) + + +# Client Organization Usage Guide + +The client organization addon provides the organization portal UI and browser +bridge for login, registration, membership, invites, credit lines, leave and +disband flows, assets, fleet, and treasury display. + +## Open Organization UI + +```sqf +call forge_client_org_fnc_openUI; +``` + +The UI opens `RscOrg`, loads `ui/_site/index.html`, and routes browser alerts +through `forge_client_org_fnc_handleUIEvents`. + +## Repository and Bridge + +`forge_client_org_fnc_initRepository` caches organization portal state. + +`forge_client_org_fnc_initUIBridge` owns: + +- active browser control tracking +- portal hydrate requests +- create/login response routing +- leave and disband requests +- credit-line assignment requests +- invite, accept invite, and decline invite requests +- targeted browser response events + +## Browser Events + +| Event | Client behavior | +| ----------------------- | ------------------------------------------------- | +| `org::ready` | Mark browser ready and request `org::sync`. | +| `org::login::request` | Request portal hydrate as `org::login::success`. | +| `org::create::request` | Validate org name and request creation on server. | +| `org::disband::request` | Request disband on server. | +| `org::leave::request` | Request leave on server. | +| `org::credit::request` | Request credit-line assignment. | +| `org::invite::request` | Request member invite. | +| `org::invite::accept` | Accept invite by org ID. | +| `org::invite::decline` | Decline invite by org ID. | +| `org::close` | Close the display. | + +## Browser Response Events + +| Event | Purpose | +| -------------------------------- | ------------------------------------------------------ | +| `org::sync` | Full portal sync payload. | +| `org::login::success` | Login hydrate payload. | +| `org::create::success` | Creation hydrate payload. | +| `org::create::failure` | Creation validation or server failure. | +| `org::disband::success` | Requester disband success. | +| `org::disband::failure` | Disband failure. | +| `org::portal::revoked` | Portal state revoked by someone else's disband action. | +| `org::leave::success` | Leave success. | +| `org::leave::failure` | Leave failure. | +| `org::credit::success` | Credit-line request success. | +| `org::credit::failure` | Credit-line request failure. | +| `org::member::creditUpdated` | Targeted member credit-line patch. | +| `org::invite::success` | Invite success. | +| `org::invite::failure` | Invite failure. | +| `org::invite::decision::success` | Invite accept/decline success. | +| `org::invite::decision::failure` | Invite accept/decline failure. | + +## Request Examples + +Create organization request payload: + +```json +{ + "orgName": "Example Logistics" +} +``` + +Credit-line request payload: + +```json +{ + "memberUid": "76561198000000000", + "memberName": "Player Name", + "amount": 2500 +} +``` + +Invite request payload: + +```json +{ + "targetUid": "76561198000000000", + "targetName": "Player Name" +} +``` + +## Authoritative State + +Organization funds, reputation, membership, invites, credit lines, assets, +fleet, and persistence are server-owned. The client portal only displays and +requests changes. + +## Related Guides + +- [Organization Usage Guide](https://innovativedevsolutions.github.io/server-modules/organization) +- [Client Common Usage Guide](https://innovativedevsolutions.github.io/client-addons/common) +- [Client Bank Usage Guide](https://innovativedevsolutions.github.io/client-addons/bank) +- [Client Store Usage Guide](https://innovativedevsolutions.github.io/client-addons/store) + + +# Forge Framework Documentation + +::u-page-hero +#title +Forge Framework Documentation + +#description +Forge is a persistent Arma 3 framework that combines SQF addons, a Rust +`arma-rs` extension, SurrealDB persistence, shared domain crates, and +browser-backed player interfaces. + +Use these docs to understand the runtime architecture, extension API surface, +server gameplay modules, and client addon integration patterns. + +#links + :::u-button + --- + color: primary + size: xl + to: https://innovativedevsolutions.github.io/getting-started + trailing-icon: i-lucide-arrow-right + --- + Start here + ::: + + :::u-button + --- + color: neutral + icon: simple-icons-github + size: xl + to: https://github.com/InnovativeDevSolutions/forge + variant: outline + --- + View source + ::: +:: + +::u-page-section +#title +What Forge Covers + +#features + :::u-page-feature + --- + icon: i-lucide-boxes + --- + #title + Domain [Modules]{.text-primary} + + #description + Actor, bank, CAD, garage, locker, organization, phone, store, task, and + owned-storage workflows share a consistent service and extension model. + ::: + + :::u-page-feature + --- + icon: i-lucide-server + --- + #title + Rust [Extension]{.text-primary} + + #description + The server extension keeps command parsing thin, routes domain requests into + services, and persists durable state through SurrealDB. + ::: + + :::u-page-feature + --- + icon: i-lucide-database-zap + --- + #title + Durable [Persistence]{.text-primary} + + #description + Repository traits stay storage-agnostic while concrete adapters in the + extension handle schema and database mapping. + ::: + + :::u-page-feature + --- + icon: i-lucide-monitor-smartphone + --- + #title + Browser [UIs]{.text-primary} + + #description + Client addons host web-based interfaces inside Arma displays and synchronize + state through namespaced browser bridge events. + ::: + + :::u-page-feature + --- + icon: i-lucide-arrow-left-right + --- + #title + Transport [Layer]{.text-primary} + + #description + Large payloads move through chunked request and response transport while + smaller commands still use direct `callExtension` paths. + ::: + + :::u-page-feature + --- + icon: i-lucide-wrench + --- + #title + Development [Workflow]{.text-primary} + + #description + The docs cover module boundaries, local validation checks, and where new + domain logic belongs across Rust, SQF, and web UI layers. + ::: +:: + +::u-page-section +#title +Documentation Areas + +#features + :::u-page-feature + --- + icon: i-lucide-rocket + to: https://innovativedevsolutions.github.io/getting-started + --- + #title + [Getting Started]{.text-primary} + + #description + Framework overview, architecture, module reference, and development rules. + ::: + + :::u-page-feature + --- + icon: i-lucide-server-cog + to: https://innovativedevsolutions.github.io/server-extension + --- + #title + Server [Extension]{.text-primary} + + #description + Extension architecture, command surface, and SQF usage examples. + ::: + + :::u-page-feature + --- + icon: i-lucide-layers-3 + to: https://innovativedevsolutions.github.io/server-modules + --- + #title + Server [Modules]{.text-primary} + + #description + Gameplay-domain usage guides for persistence, hot state, and command flows. + ::: + + :::u-page-feature + --- + icon: i-lucide-monitor-smartphone + to: https://innovativedevsolutions.github.io/client-addons + --- + #title + Client [Addons]{.text-primary} + + #description + Browser bridge, client UX entry points, and addon-specific event contracts. + ::: +:: diff --git a/docus/dist/llms.txt b/docus/dist/llms.txt new file mode 100644 index 0000000..3469f77 --- /dev/null +++ b/docus/dist/llms.txt @@ -0,0 +1,96 @@ +# forge-docus + +## Documentation Sets + +- [forge-docus](https://innovativedevsolutions.github.io/llms-full.txt) + +## Docs + +- [Getting Started](https://innovativedevsolutions.github.io/raw/getting-started.md): Use this section as the main entry point for the Forge framework. +- [Framework Architecture](https://innovativedevsolutions.github.io/raw/getting-started/architecture.md): Forge is organized around domain modules. A domain usually has SQF addon +entry points, Rust models, repository traits, service logic, extension command +handlers, and optional browser UI. +- [Module Reference](https://innovativedevsolutions.github.io/raw/getting-started/module-reference.md): This reference lists the main Forge modules and where each layer lives. +- [Development Guide](https://innovativedevsolutions.github.io/raw/getting-started/development.md): This guide covers the usual path for adding or changing a Forge module. +- [SurrealDB Setup](https://innovativedevsolutions.github.io/raw/getting-started/surrealdb-setup.md): Forge uses SurrealDB for durable storage. The Rust server extension connects to +SurrealDB on startup and applies Forge schema modules automatically, so setup +comes down to running a reachable database and matching the Forge config. +- [Forge Server Extension](https://innovativedevsolutions.github.io/raw/server-extension.md): Forge Server is an arma-rs extension for Arma 3 server-side persistence and +domain services. It exposes game-facing commands and stores durable state in +SurrealDB. +- [Forge Server API Reference](https://innovativedevsolutions.github.io/raw/server-extension/api-reference.md): The Forge server extension exposes domain-oriented commands through +callExtension. Persistent data is stored through the configured SurrealDB +connection and schema modules. +- [Forge Server Usage Examples](https://innovativedevsolutions.github.io/raw/server-extension/usage-examples.md): These examples use the domain command surface exposed by the extension. +Persistence is handled by the server through SurrealDB. +- [Server Module Guides](https://innovativedevsolutions.github.io/raw/server-modules.md): These pages document the authoritative server-side workflows in Forge. +- [Actor Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/actor.md): The actor module stores persistent player character data: identity, loadout, +position, direction, stance, contact fields, state, holster status, rank, and +organization. +- [Store Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/store.md): The store module processes checkout requests. It charges a payment source and +grants purchased items to the player locker, virtual arsenal locker, and +virtual garage unlocks. +- [Task Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/task.md): The task module stores transient mission task metadata for active server or +mission lifecycle workflows. SQF still owns Arma-only runtime state such as +objects and participants. +- [Bank Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/bank.md): The bank module stores player account balances, earnings, PINs, and transaction +strings. The hot-state API also owns the active banking workflows used by the +UI: deposit, withdraw, transfer, checkout charge, and PIN validation. +- [CAD Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/cad.md): The CAD module stores transient operational state for dispatch activity, +assignments, dispatch orders, support requests, group profiles, grouped views, +and hydrated UI payloads. CAD state is in-memory and follows the active server +or mission lifecycle. +- [Economy Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/economy.md): The economy server addon owns Arma-world service behavior for fuel, medical, +and repair interactions. It does not own money state. Money mutations go +through extension-backed bank and organization hot state before the world +effect is applied. +- [Garage Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/garage.md): The garage module stores physical player vehicles. Each record keeps the +vehicle classname, generated plate UUID, fuel, overall damage, and detailed hit +point damage. +- [Locker Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/locker.md): The locker module stores physical player inventory items by classname. It is +separate from the virtual arsenal unlock module documented in +Owned Storage Usage Guide. +- [Organization Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/organization.md): The organization module stores organization records, members, assets, fleet +entries, and credit lines. Durable commands manage persisted records directly. +Hot-state commands support the active organization UI workflows. +- [Owned Storage Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/owned-storage.md): Owned storage covers the owned:locker and owned:garage extension command +groups. These modules store unlock lists rather than physical item or vehicle +instances. +- [Phone Usage Guide](https://innovativedevsolutions.github.io/raw/server-modules/phone.md): The phone module stores contacts, messages, and emails for each UID. It is a +server-extension state module backed by SurrealDB. +- [Client Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons.md): Forge Client contains the Arma client-side addons that open player interfaces, +handle browser events, cache client-visible state, and forward authoritative +requests to the server addons. +- [Client Main Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/main.md): The client main addon provides the shared mod identity, version metadata, +CBA settings, and macro foundation used by the Forge client addons. +- [Client Phone Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/phone.md): The client phone addon provides the in-game phone UI for contacts, SMS +messages, email, and local utility apps such as notes, calendar events, world +clocks, and alarms. +- [Client Store Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/store.md): The client store addon provides the storefront browser UI for catalog browsing, +category hydration, payment source display, cart handling, and checkout +requests. +- [Client Common Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/common.md): The client common addon contains shared browser UI bridge declarations and +common client-side browser integration patterns. +- [Client Actor Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/actor.md): The client actor addon owns the player interaction menu and client-side actor +repository. It is the main launcher for nearby player actions and other Forge +client UIs. +- [Client Bank Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/bank.md): The client bank addon opens the bank and ATM browser UI, forwards banking +requests to the server bank addon, and pushes account updates back into the +browser. +- [Client CAD Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/cad.md): The client CAD addon provides the map and dispatch UI for groups, active +tasks, task assignment, dispatch orders, support requests, and task +acknowledge/decline workflows. +- [Client Garage Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/garage.md): The client garage addon provides player vehicle storage UI, vehicle +store/retrieve actions, selected nearby vehicle service requests, vehicle +context building, and the virtual garage view. +- [Client Locker Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/locker.md): The client locker addon manages personal locker display state, local locker +container behavior, and virtual arsenal unlock state. +- [Client Notifications Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/notifications.md): The client notifications addon owns the notification HUD, notification sound, +and local notification service used by Forge client and server modules. +- [Client Organization Usage Guide](https://innovativedevsolutions.github.io/raw/client-addons/organization.md): The client organization addon provides the organization portal UI and browser +bridge for login, registration, membership, invites, credit lines, leave and +disband flows, assets, fleet, and treasury display. + +## Landing + +- [Forge Framework Documentation](https://innovativedevsolutions.github.io/raw/index.md): Documentation for the Forge Arma 3 framework, covering architecture, persistence, extension APIs, gameplay modules, and client UIs. \ No newline at end of file diff --git a/docus/dist/raw/client-addons.md b/docus/dist/raw/client-addons.md new file mode 100644 index 0000000..5c8e4a5 --- /dev/null +++ b/docus/dist/raw/client-addons.md @@ -0,0 +1,237 @@ +# Client Usage Guide + +Forge Client contains the Arma client-side addons that open player interfaces, +handle browser events, cache client-visible state, and forward authoritative +requests to the server addons. + +Use this guide as the entry point for client-side integration. Domain data, +validation, persistence, rewards, ownership, and checkout behavior remain +server-side responsibilities. + +## Client Responsibilities + +- Open Arma displays and `CT_WEBBROWSER` controls. +- Load browser UI assets from each addon's `ui/_site` folder. +- Receive browser alerts through `JSDialog` handlers. +- Translate browser events into local actions or CBA server events. +- Cache display state in client repositories. +- Push server responses back into browser UIs with `ExecJS`. +- Provide local-only utility state where the feature is intentionally local. + +## Authoritative Boundaries + +Client repositories are view state. They are useful for rendering, local UI +decisions, and short-lived session behavior, but they should not be treated as +durable state. + +Authoritative state lives in: + +- server SQF addons for mission and player workflow ownership +- the `forge_server` extension for durable and hot-state domain logic +- SurrealDB where the extension persists durable domain records + +## Common Runtime Flow + +Most browser-backed client addons follow this shape: + +1. The addon creates a display, finds a browser control, and registers a +`JSDialog` event handler. +2. The browser loads an HTML entrypoint from `ui/_site`. +3. The browser sends JSON alerts with an `event` name and `data` payload. +4. `fnc_handleUIEvents.sqf` parses the alert and routes the event. +5. A bridge object or repository sends a CBA server event when server data is +needed. +6. Server responses are caught in `XEH_postInitClient.sqf`. +7. The bridge sends browser update events back through `ExecJS`. + +Browser alert payload: + +```json +{ + "event": "module::action", + "data": {} +} +``` + +## Open UI Entry Points + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ UI + + Entry point +
+ Actor menu + + + call forge_client_actor_fnc_openUI; + +
+ Bank + + + call forge_client_bank_fnc_openUI; + +
+ ATM + + + [true] call forge_client_bank_fnc_openUI; + +
+ CAD + + + call forge_client_cad_fnc_openUI; + +
+ Garage + + + call forge_client_garage_fnc_openUI; + +
+ Virtual garage + + + call forge_client_garage_fnc_openVG; + +
+ Organization portal + + + call forge_client_org_fnc_openUI; + +
+ Phone + + + call forge_client_phone_fnc_openUI; + +
+ Store + + + call forge_client_store_fnc_openUI; + +
+ +Notifications are normally opened during client initialization and then updated +through the notification event/service. + +## Addon Guides + +- [Client Main Usage Guide](/client-addons/main) +- [Client Common Usage Guide](/client-addons/common) +- [Client Actor Usage Guide](/client-addons/actor) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client CAD Usage Guide](/client-addons/cad) +- [Client Garage Usage Guide](/client-addons/garage) +- [Client Locker Usage Guide](/client-addons/locker) +- [Client Notifications Usage Guide](/client-addons/notifications) +- [Client Organization Usage Guide](/client-addons/organization) +- [Client Phone Usage Guide](/client-addons/phone) +- [Client Store Usage Guide](/client-addons/store) + +## Extension Calls + +Client addons should usually call server SQF events, not the `forge_server` +extension directly. The server addon owns validation context and converts the +request into extension commands. + +Example: + +```sqf +[SRPC(bank,requestDeposit), [getPlayerUID player, 100]] call CFUNC(serverEvent); +``` + +Direct extension calls from client code bypass server authorization boundaries +and should be avoided. + +## Browser Bridge Notes + +`forge_client_common_fnc_initWebUIBridge` provides reusable bridge and screen +objects for newer browser UIs. It queues outbound events until a browser screen +is ready, then delivers payloads through: + +```sqf +_control ctrlWebBrowserAction ["ExecJS", format ["ForgeBridge.receive(%1)", _json]]; +``` + +Feature addons still own their event names, request payloads, and response +mapping. + +## Development Checklist + +- Keep feature-specific behavior in the owning addon. +- Send authoritative changes to the server addon. +- Use namespaced browser events such as `bank::deposit::request`. +- Treat `profileNamespace` as local player preference or utility state only. +- Make browser-ready events request the current server state before rendering +stale data. +- Queue or ignore bridge responses when the display is closed. +- Keep mission object setup on the mission/server side and client display logic +on the client side. diff --git a/docus/dist/raw/client-addons/actor.md b/docus/dist/raw/client-addons/actor.md new file mode 100644 index 0000000..0593a4e --- /dev/null +++ b/docus/dist/raw/client-addons/actor.md @@ -0,0 +1,335 @@ +# Client Actor Usage Guide + +The client actor addon owns the player interaction menu and client-side actor +repository. It is the main launcher for nearby player actions and other Forge +client UIs. + +## Open the Actor Menu + +```sqf +call forge_client_actor_fnc_openUI; +``` + +The actor menu opens `RscActorMenu`, loads `ui/_site/index.html`, and routes +browser alerts through `forge_client_actor_fnc_handleUIEvents`. + +## Repository + +`forge_client_actor_fnc_initRepository` creates `GVAR(ActorRepository)`. + +The repository: + +- requests actor initialization from the server +- saves actor state through the server actor addon +- caches client-visible actor fields +- applies position, direction, stance, rank, and loadout on JIP sync when the +relevant settings allow it +- provides nearby interaction actions to the browser UI + +Initialize actor state through the repository: + +```sqf +GVAR(ActorRepository) call ["init", []]; +``` + +Save actor state through the server: + +```sqf +GVAR(ActorRepository) call ["save", [true]]; +``` + +## Nearby Actions + +The menu asks for nearby actions with: + +```text +actor::get::actions +``` + +The repository scans objects within 5 meters and returns actions based on +mission object variables: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Variable + + Action +
+ + storeType + + + store +
+ + isAtm + + + ATM +
+ + isBank + + + bank +
+ + isGarage + + + garage +
+ + garageType + + + garage subtype +
+ + isLocker + + + virtual arsenal action when VA is enabled +
+ + deviceType + + + device action placeholder +
+ nearby player unit + + player interaction placeholder +
+ +The response is pushed into the browser with `updateAvailableActions(...)`. + +## Browser Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + actor::get::actions + + + Refresh nearby actions. +
+ + actor::close::menu + + + Close actor menu. +
+ + actor::open::atm + + + Open bank UI in ATM mode. +
+ + actor::open::bank + + + Open bank UI in bank mode. +
+ + actor::open::cad + + + Open CAD UI. +
+ + actor::open::garage + + + Open garage UI. +
+ + actor::open::vgarage + + + Open virtual garage. +
+ + actor::open::org + + + Open organization UI. +
+ + actor::open::vlocker + + + Open ACE arsenal on + FORGE_Locker_Box + + + . +
+ + actor::open::phone + + + Open phone UI. +
+ + actor::open::store + + + Open store UI. +
+ +Device and player interaction events currently display placeholder feedback. + +## Authoritative State + +Actor persistence is server-owned. The client repository requests and displays +actor data, but actor creation, durable updates, and hot-state behavior are +handled by the server actor addon and extension. + +## Related Guides + +- [Actor Usage Guide](/server-modules/actor) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client CAD Usage Guide](/client-addons/cad) +- [Client Garage Usage Guide](/client-addons/garage) +- [Client Locker Usage Guide](/client-addons/locker) +- [Client Organization Usage Guide](/client-addons/organization) +- [Client Phone Usage Guide](/client-addons/phone) +- [Client Store Usage Guide](/client-addons/store) diff --git a/docus/dist/raw/client-addons/bank.md b/docus/dist/raw/client-addons/bank.md new file mode 100644 index 0000000..cc627f8 --- /dev/null +++ b/docus/dist/raw/client-addons/bank.md @@ -0,0 +1,242 @@ +# Client Bank Usage Guide + +The client bank addon opens the bank and ATM browser UI, forwards banking +requests to the server bank addon, and pushes account updates back into the +browser. + +## Open Bank UI + +Open full bank mode: + +```sqf +call forge_client_bank_fnc_openUI; +``` + +Open ATM mode: + +```sqf +[true] call forge_client_bank_fnc_openUI; +``` + +The open function creates `RscBank`, sets the bridge mode to `bank` or `atm`, +loads `ui/_site/index.html`, and routes browser events through +`forge_client_bank_fnc_handleUIEvents`. + +## Bridge and Repository + +`forge_client_bank_fnc_initRepository` tracks account load and cached account +state. + +`forge_client_bank_fnc_initUIBridge` owns: + +- active browser control tracking +- bank/ATM mode +- browser ready handling +- account hydrate and sync responses +- deposit, withdrawal, transfer, earnings deposit, credit repayment, and PIN +requests +- browser notice delivery + +## Browser Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + bank::ready + + + Mark browser ready and request hydrate from the server. +
+ + bank::refresh + + + Request fresh bank hydrate data. +
+ + bank::deposit::request + + + Forward deposit amount to the server. +
+ + bank::withdraw::request + + + Forward withdrawal amount to the server. +
+ + bank::transfer::request + + + Forward target, source field, and amount. +
+ + bank::depositEarnings::request + + + Request earnings deposit. +
+ + bank::repayCreditLine::request + + + Request credit-line repayment. +
+ + bank::pin::request + + + Forward PIN validation request. +
+ + bank::close + + + Dispose bridge screen state and close the display. +
+ +## Browser Response Events + +The bridge sends: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Purpose +
+ + bank::hydrate + + + Full session/account payload. +
+ + bank::sync + + + Account patch or sync data. +
+ + bank::notice + + + UI-visible notice payload. +
+ +## Request Flow + +Example deposit flow: + +1. Browser sends `bank::deposit::request` with an `amount`. +2. Client bridge calls the server bank request event. +3. Server bank addon validates the request and calls bank hot-state logic. +4. Server response is caught by the client post-init event handlers. +5. Client bridge sends `bank::sync` or `bank::notice` back to the browser. + +## Authoritative State + +Balances, PIN authorization, transfers, checkout charges, credit lines, and +persistence are server-owned. The client should only display account data and +request mutations through server events. + +## Related Guides + +- [Bank Usage Guide](/server-modules/bank) +- [Client Common Usage Guide](/client-addons/common) +- [Client Store Usage Guide](/client-addons/store) diff --git a/docus/dist/raw/client-addons/cad.md b/docus/dist/raw/client-addons/cad.md new file mode 100644 index 0000000..a6b11dc --- /dev/null +++ b/docus/dist/raw/client-addons/cad.md @@ -0,0 +1,423 @@ +# Client CAD Usage Guide + +The client CAD addon provides the map and dispatch UI for groups, active +tasks, task assignment, dispatch orders, support requests, and task +acknowledge/decline workflows. + +## Open CAD UI + +```sqf +call forge_client_cad_fnc_openUI; +``` + +The CAD UI opens `RscMapUI` and loads separate browser controls for: + +- top bar +- bottom bar +- side panel +- dispatcher board + +The native Arma map remains part of the same display. + +## Repository and Bridge + +`forge_client_cad_fnc_initRepository` caches the hydrated CAD payload, +selected mode, dispatch view, session data, groups, tasks, requests, and +assignments. + +`forge_client_cad_fnc_initUIBridge` owns: + +- ready state for side panel, top bar, and dispatcher board +- operations vs dispatch mode +- board vs map dispatch view +- hydrate requests +- task assignment, acknowledge, and decline requests +- dispatch order create/close requests +- support request submit/close requests +- group status, role, and profile requests +- map focus actions + +## Browser Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + cad::topbar::ready + + + Mark top bar ready and push top bar state. +
+ + cad::ready + + + Mark side panel ready and request hydrate. +
+ + cad::dispatcher::ready + + + Mark dispatcher board ready and push hydrate data. +
+ + cad::mode::set + + + Switch between operations and dispatch mode. +
+ + cad::dispatchView::set + + + Switch dispatch board/map view. +
+ + cad::refresh + + + Request fresh CAD hydrate data. +
+ + cad::tasks::assign + + + Assign a task to a group. +
+ + cad::tasks::acknowledge + + + Acknowledge assigned task. +
+ + cad::tasks::decline + + + Decline assigned task. +
+ + cad::dispatchOrder::create + + + Create dispatch order. +
+ + cad::dispatchOrder::close + + + Close dispatch order. +
+ + cad::supportRequest::submit + + + Submit support request. +
+ + cad::supportRequest::close + + + Close support request. +
+ + cad::groups::status + + + Update group status. +
+ + cad::groups::role + + + Update group role. +
+ + cad::groups::profile + + + Update status and role together. +
+ + cad::groups::focus + + + Center map on a group. +
+ + cad::tasks::focus + + + Center map on a task. +
+ + cad::requests::focus + + + Center map on a support request. +
+ + map::zoomIn + + + Zoom native map in. +
+ + map::zoomOut + + + Zoom native map out. +
+ + map::search + + + Placeholder status update. +
+ + map::close + + + Dispose bridge state and close the display. +
+ +## Response Events + +The bridge pushes: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Purpose +
+ + cad::hydrate + + + Full hydrated CAD payload to the side panel. +
+ + cad::assignment::response + + + Task assignment/acknowledge/decline result. +
+ + cad::group::response + + + Group status/role/profile result. +
+ + cad::request::response + + + Support request result. +
+ +Dispatcher board controls also receive direct `ExecJS` status and hydrate +calls. + +## Task Compatibility + +CAD task visibility depends on server-side task catalog entries. Tasks created +through Eden Forge task modules or `forge_server_task_fnc_startTask` are the +normal CAD-compatible task sources because they register task catalog data. + +Direct handler or task-function calls only work with CAD when the task catalog +entry already exists. + +## Authorization Notes + +Only dispatcher sessions can enter dispatch mode. If the hydrated session is +not a dispatcher, the bridge forces the UI back to operations mode. + +## Related Guides + +- [CAD Usage Guide](/server-modules/cad) +- [Task Usage Guide](/server-modules/task) +- [Client Common Usage Guide](/client-addons/common) diff --git a/docus/dist/raw/client-addons/common.md b/docus/dist/raw/client-addons/common.md new file mode 100644 index 0000000..0db5e4b --- /dev/null +++ b/docus/dist/raw/client-addons/common.md @@ -0,0 +1,138 @@ +# Client Common Usage Guide + +The client `common` addon contains shared browser UI bridge declarations and +common client-side browser integration patterns. + +## Purpose + +Use `forge_client_common` when a browser-backed feature UI needs reusable +screen lifecycle behavior: + +- active browser control tracking +- browser ready state +- pending event queues +- `ExecJS` payload delivery +- shared bridge object inheritance through `createHashMapObject` + +Feature addons still own their app-specific events and server RPC mapping. + +## Shared Bridge + +Initialize the bridge declarations with: + +```sqf +private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge; +private _bridgeDeclaration = _webUIDeclarations get "bridgeDeclaration"; +``` + +Feature bridges can inherit from the shared declaration: + +```sqf +GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [ + ["#base", _bridgeDeclaration], + ["#type", "MyUIBridgeBaseClass"], + ["handleReady", compileFinal { + params [["_control", controlNull, [controlNull]]]; + + _self call ["setActiveBrowserControl", [_control]]; + _self call ["sendEvent", ["myAddon::hydrate", createHashMap, _control]]; + }] +]; +``` + +## Event Delivery + +`sendEvent` builds this payload: + +```json +{ + "event": "myAddon::event", + "data": {} +} +``` + +If the browser control is missing or not ready, the payload is queued on the +screen object. When the screen marks ready, `flushPendingEvents` delivers the +queue. + +## Screen Lifecycle + +The shared screen object tracks: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Field + + Purpose +
+ + control + + + Active browser control. +
+ + readyState + + + Whether the browser app has sent its ready event. +
+ + pendingEvents + + + Outbound events waiting for a ready browser. +
+ +Call `handleClose` or `dispose` when a display closes so stale controls and +queued events are cleared. + +## Current Consumers + +The common bridge pattern is used by the newer bank, CAD, garage, and +organization client bridges. Store currently keeps its own bridge object and +browser bridge function names. + +## Usage Rules + +- Keep bridge inheritance in feature addons thin and explicit. +- Keep shared code generic; do not add bank, CAD, org, or store-specific logic +to `common`. +- Prefer namespaced events such as `garage::sync`. +- Send hash maps or arrays that can be safely serialized with `toJSON`. +- Avoid direct extension calls from the client bridge; send CBA server events. + +## Related Guides + +- [Client Usage Guide](/client-addons) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client CAD Usage Guide](/client-addons/cad) +- [Client Garage Usage Guide](/client-addons/garage) +- [Client Organization Usage Guide](/client-addons/organization) diff --git a/docus/dist/raw/client-addons/garage.md b/docus/dist/raw/client-addons/garage.md new file mode 100644 index 0000000..57672b9 --- /dev/null +++ b/docus/dist/raw/client-addons/garage.md @@ -0,0 +1,340 @@ +# Client Garage Usage Guide + +The client garage addon provides player vehicle storage UI, vehicle +store/retrieve actions, selected nearby vehicle service requests, vehicle +context building, and the virtual garage view. + +## Open Garage UI + +```sqf +call forge_client_garage_fnc_openUI; +``` + +The garage UI opens `RscGarage`, loads `ui/_site/index.html`, and routes +browser events through `forge_client_garage_fnc_handleUIEvents`. + +## Open Virtual Garage + +```sqf +call forge_client_garage_fnc_openVG; +``` + +The virtual garage uses mission-configured `FORGE_CfgGarages` locations to set +the spawn/preview position, opens the BIS garage interface, and restricts the +available vehicle lists from the virtual garage repository. + +## Client Services + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Service + + Purpose +
+ + GarageRepository + + + Player garage view state. +
+ + VGRepository + + + Virtual garage unlock view state. +
+ + GarageHelperService + + + Vehicle names, hit points, and payload helpers. +
+ + GarageContextService + + + Nearby/current vehicle context. +
+ + GaragePayloadService + + + Browser hydrate payload construction. +
+ + GarageActionService + + + Store/retrieve request handling and selected nearby vehicle refuel/repair request forwarding. +
+ + GarageUIBridge + + + Browser ready, hydrate, and sync delivery. +
+ +## Browser Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + garage::ready + + + Mark browser ready and send + garage::hydrate + + + . +
+ + garage::refresh + + + Send current garage payload as + garage::sync + + + . +
+ + garage::vehicle::retrieve::request + + + Forward retrieve request through the action service. +
+ + garage::vehicle::store::request + + + Forward store request through the action service. +
+ + garage::vehicle::refuel::request + + + Forward selected nearby vehicle refuel request to the server economy service. +
+ + garage::vehicle::repair::request + + + Forward selected nearby vehicle repair request to the server economy service. +
+ + garage::close + + + Dispose bridge screen state and close the display. +
+ +## Browser Response Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Purpose +
+ + garage::hydrate + + + Initial vehicle and session payload. +
+ + garage::sync + + + Refreshed vehicle payload. +
+ + garage::service::success + + + Browser notice for accepted refuel/repair requests. +
+ + garage::service::failure + + + Browser notice for rejected refuel/repair requests. +
+ +Server action responses are handled by the action service and notification +flow. + +## Vehicle Service + +The selected vehicle detail panel includes refuel and repair actions for nearby +world vehicles. Stored records must be retrieved first because server economy +services operate on live vehicle objects, not stored garage records. + +Refuel requests use the server economy `RefuelService` event. Repair requests +use the server economy `RepairService` event. Both services are billed by the +server economy addon through organization funds. + +## Mission Setup + +Garage interactions are normally surfaced through the actor menu when nearby +objects have garage variables such as: + +```sqf +_object setVariable ["isGarage", true, true]; +_object setVariable ["garageType", "cars", true]; +``` + +Virtual garage access also requires configured garage locations in mission +config so the preview/spawn position can be resolved. + +## Authoritative State + +The client gathers vehicle context and sends store/retrieve requests. Stored +vehicle state, validation, spawning, removal, and persistence are owned by the +server garage addon and extension. + +## Related Guides + +- [Garage Usage Guide](/server-modules/garage) +- [Client Actor Usage Guide](/client-addons/actor) +- [Client Notifications Usage Guide](/client-addons/notifications) diff --git a/docus/dist/raw/client-addons/locker.md b/docus/dist/raw/client-addons/locker.md new file mode 100644 index 0000000..f0c7dec --- /dev/null +++ b/docus/dist/raw/client-addons/locker.md @@ -0,0 +1,144 @@ +# Client Locker Usage Guide + +The client locker addon manages personal locker display state, local locker +container behavior, and virtual arsenal unlock state. + +## Repositories + +`forge_client_locker_fnc_initRepository` creates `GVAR(LockerRepository)`. + +`forge_client_locker_fnc_initVARepository` creates `GVAR(VARepository)`. + +Initialize locker state: + +```sqf +GVAR(LockerRepository) call ["init", []]; +GVAR(VARepository) call ["init", []]; +``` + +## Locker Container Flow + +The repository searches mission namespace variables whose names contain +`locker` and refer to objects. For each server/mission locker object, it creates +a local `Box_NATO_Equip_F` at the same position and attaches container event +handlers. + +On container open: + +- the local container is cleared +- cached locker items are inserted into the container +- over-capacity warnings are emitted when the item count is above 25 + +On container close: + +- cargo, nested container items, and weapon attachments are read back +- the new locker map is sent to the server with the override request +- the local repository cache is updated + +## Virtual Arsenal Flow + +The virtual arsenal repository creates a local `FORGE_Locker_Box` and requests +virtual arsenal unlocks from the server. + +As sync data arrives, it applies unlocks through ACE Arsenal: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Data key + + Client behavior +
+ + items + + + Add virtual items. +
+ + weapons + + + Add virtual weapons. +
+ + magazines + + + Add virtual magazines. +
+ + backpacks + + + Add virtual backpacks. +
+ +The actor menu opens the virtual locker with: + +```sqf +[FORGE_Locker_Box, player, false] spawn ace_arsenal_fnc_openBox; +``` + +## Server Events + +The client repository sends requests for: + +- locker initialization +- locker save +- locker override after container close +- virtual arsenal initialization +- virtual arsenal save + +The server locker addon and extension own the saved locker and virtual arsenal +state. + +## Mission Setup + +Mission locker objects must be placed into `missionNamespace` with a variable +name containing `locker`. The client creates local interactive containers from +those authoritative mission objects. + +Example: + +```sqf +missionNamespace setVariable ["forge_locker_alpha", _lockerObject, true]; +``` + +## Related Guides + +- [Locker Usage Guide](/server-modules/locker) +- [Owned Storage Usage Guide](/server-modules/owned-storage) +- [Client Actor Usage Guide](/client-addons/actor) diff --git a/docus/dist/raw/client-addons/main.md b/docus/dist/raw/client-addons/main.md new file mode 100644 index 0000000..0fb66f4 --- /dev/null +++ b/docus/dist/raw/client-addons/main.md @@ -0,0 +1,116 @@ +# Client Main Usage Guide + +The client `main` addon provides the shared mod identity, version metadata, +CBA settings, and macro foundation used by the Forge client addons. + +## Purpose + +Use `forge_client_main` as the foundation dependency for client addons that +need Forge macros, function naming, settings, or mod-level configuration. + +Feature logic should stay in the owning addon. `main` should remain limited to +shared client configuration and compile infrastructure. + +## Key Files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ File + + Purpose +
+ + script_mod.hpp + + + Client mod identity. +
+ + script_version.hpp + + + Client mod version values. +
+ + script_macros.hpp + + + Shared client macros. +
+ + CfgSettings.hpp + + + Client CBA settings. +
+ + config.cpp + + + Addon config and mod wiring. +
+ +## Dependency Pattern + +Feature addons normally depend on `forge_client_main` in their `config.cpp`. + +```cpp +class forge_client_example { + requiredAddons[] = { + "forge_client_main" + }; +}; +``` + +## Usage Notes + +- Put domain UI, repositories, and event handling in feature addons. +- Put reusable browser bridge behavior in `forge_client_common`. +- Put server-only behavior in `arma/server/addons`. +- Keep settings in `CfgSettings.hpp` when they apply to the client mod as a +whole or to a client feature toggle. + +## Related Guides + +- [Client Usage Guide](/client-addons) +- [Client Common Usage Guide](/client-addons/common) +- [Development Guide](/getting-started/development) diff --git a/docus/dist/raw/client-addons/notifications.md b/docus/dist/raw/client-addons/notifications.md new file mode 100644 index 0000000..38899e6 --- /dev/null +++ b/docus/dist/raw/client-addons/notifications.md @@ -0,0 +1,147 @@ +# Client Notifications Usage Guide + +The client notifications addon owns the notification HUD, notification sound, +and local notification service used by Forge client and server modules. + +## Runtime Behavior + +The notification display is created during client initialization. The browser +HUD sends: + +```text +notifications::ready +``` + +When that event is received, `NotificationService` initializes and sends a +startup notification. + +## Create a Notification + +Use the notification service when available: + +```sqf +GVAR(NotificationService) call ["create", [ + "success", + "Title", + "Notification text.", + 4000 +]]; +``` + +Arguments: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Argument + + Purpose +
+ + _type + + + Notification type, such as + success + + + , + info + + + , + warning + + + , or + error + + + . +
+ + _title + + + Notification title. +
+ + _content + + + Notification body text. +
+ + _duration + + + Display duration in milliseconds. +
+ +The service dispatches a browser `forge:notify` custom event. + +## CBA Event Surface + +Other addons can use the client notification event: + +```sqf +["forge_client_notifications_recieveNotification", [ + "warning", + "Garage", + "Vehicle spawn position is blocked.", + 3000 +]] call CBA_fnc_localEvent; +``` + +The event payload is: + +```sqf +[_type, _title, _content, _duration] +``` + +## Usage Rules + +- Use the shared notification service instead of opening separate transient +browser UIs. +- Keep server-driven player feedback short and actionable. +- Treat notification state as transient client UI state. +- Do not use notifications as the only record of durable domain changes. + +## Related Guides + +- [Client Usage Guide](/client-addons) +- [Client Garage Usage Guide](/client-addons/garage) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client Store Usage Guide](/client-addons/store) diff --git a/docus/dist/raw/client-addons/organization.md b/docus/dist/raw/client-addons/organization.md new file mode 100644 index 0000000..755df2b --- /dev/null +++ b/docus/dist/raw/client-addons/organization.md @@ -0,0 +1,426 @@ +# Client Organization Usage Guide + +The client organization addon provides the organization portal UI and browser +bridge for login, registration, membership, invites, credit lines, leave and +disband flows, assets, fleet, and treasury display. + +## Open Organization UI + +```sqf +call forge_client_org_fnc_openUI; +``` + +The UI opens `RscOrg`, loads `ui/_site/index.html`, and routes browser alerts +through `forge_client_org_fnc_handleUIEvents`. + +## Repository and Bridge + +`forge_client_org_fnc_initRepository` caches organization portal state. + +`forge_client_org_fnc_initUIBridge` owns: + +- active browser control tracking +- portal hydrate requests +- create/login response routing +- leave and disband requests +- credit-line assignment requests +- invite, accept invite, and decline invite requests +- targeted browser response events + +## Browser Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + org::ready + + + Mark browser ready and request + org::sync + + + . +
+ + org::login::request + + + Request portal hydrate as + org::login::success + + + . +
+ + org::create::request + + + Validate org name and request creation on server. +
+ + org::disband::request + + + Request disband on server. +
+ + org::leave::request + + + Request leave on server. +
+ + org::credit::request + + + Request credit-line assignment. +
+ + org::invite::request + + + Request member invite. +
+ + org::invite::accept + + + Accept invite by org ID. +
+ + org::invite::decline + + + Decline invite by org ID. +
+ + org::close + + + Close the display. +
+ +## Browser Response Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Purpose +
+ + org::sync + + + Full portal sync payload. +
+ + org::login::success + + + Login hydrate payload. +
+ + org::create::success + + + Creation hydrate payload. +
+ + org::create::failure + + + Creation validation or server failure. +
+ + org::disband::success + + + Requester disband success. +
+ + org::disband::failure + + + Disband failure. +
+ + org::portal::revoked + + + Portal state revoked by someone else's disband action. +
+ + org::leave::success + + + Leave success. +
+ + org::leave::failure + + + Leave failure. +
+ + org::credit::success + + + Credit-line request success. +
+ + org::credit::failure + + + Credit-line request failure. +
+ + org::member::creditUpdated + + + Targeted member credit-line patch. +
+ + org::invite::success + + + Invite success. +
+ + org::invite::failure + + + Invite failure. +
+ + org::invite::decision::success + + + Invite accept/decline success. +
+ + org::invite::decision::failure + + + Invite accept/decline failure. +
+ +## Request Examples + +Create organization request payload: + +```json +{ + "orgName": "Example Logistics" +} +``` + +Credit-line request payload: + +```json +{ + "memberUid": "76561198000000000", + "memberName": "Player Name", + "amount": 2500 +} +``` + +Invite request payload: + +```json +{ + "targetUid": "76561198000000000", + "targetName": "Player Name" +} +``` + +## Authoritative State + +Organization funds, reputation, membership, invites, credit lines, assets, +fleet, and persistence are server-owned. The client portal only displays and +requests changes. + +## Related Guides + +- [Organization Usage Guide](/server-modules/organization) +- [Client Common Usage Guide](/client-addons/common) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client Store Usage Guide](/client-addons/store) diff --git a/docus/dist/raw/client-addons/phone.md b/docus/dist/raw/client-addons/phone.md new file mode 100644 index 0000000..51fbfba --- /dev/null +++ b/docus/dist/raw/client-addons/phone.md @@ -0,0 +1,521 @@ +# Client Phone Usage Guide + +The client phone addon provides the in-game phone UI for contacts, SMS +messages, email, and local utility apps such as notes, calendar events, world +clocks, and alarms. + +## Open Phone UI + +```sqf +call forge_client_phone_fnc_openUI; +``` + +The phone UI creates `RscPhone`, loads `ui/_site/index.html`, and routes +browser alerts through `forge_client_phone_fnc_handleUIEvents`. + +## State Ownership + +Contacts, messages, and emails are server-owned and requested through the +server phone addon. + +Local utility app state is stored in `profileNamespace`: + +- notes +- calendar events +- world clocks +- alarms +- theme/preferences + +## Phone Class + +`forge_client_phone_fnc_initClass` creates `GVAR(PhoneClass)`. + +The phone class currently owns local notes, events, and settings helpers. +Contacts, messages, and emails continue to use server-backed request/response +events. + +## Browser Events + +### Session and Preferences + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + phone::get::player + + + Send player UID to browser with + setPlayerUid + + + . +
+ + phone::get::theme + + + Send saved light/dark theme to browser. +
+ + phone::set::theme + + + Save theme preference to + profileNamespace + + + . +
+ +### Contacts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + phone::get::contacts + + + Load cached contacts and request server refresh. +
+ + phone::refresh::contacts + + + Request contacts from server. +
+ + phone::add::contact + + + Add contact by phone number. +
+ + phone::add::contact::by::phone + + + Add contact by phone number. +
+ + phone::add::contact::by::email + + + Add contact by email. +
+ + phone::remove::contact + + + Remove contact by UID. +
+ +### Messages + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + phone::get::messages + + + Request messages from server. +
+ + phone::get::message::thread + + + Request thread with another UID. +
+ + phone::send::message + + + Send SMS through server. +
+ + phone::mark::message::read + + + Mark message read on server. +
+ + phone::delete::message + + + Delete message on server. +
+ +### Email + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + phone::get::emails + + + Request emails from server. +
+ + phone::send::email + + + Send email through server. +
+ + phone::mark::email::read + + + Mark email read on server. +
+ + phone::delete::email + + + Delete email on server. +
+ +### Local Utility Apps + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + phone::get::notes + + + Load local notes. +
+ + phone::save::note + + + Save local note. +
+ + phone::delete::note + + + Delete local note. +
+ + phone::get::events + + + Load local calendar events. +
+ + phone::save::event + + + Save local calendar event. +
+ + phone::delete::event + + + Delete local calendar event. +
+ + phone::get::clocks + + + Load local world clocks. +
+ + phone::save::clock + + + Save local world clock. +
+ + phone::delete::clock + + + Delete local world clock. +
+ + phone::get::alarms + + + Load local alarms. +
+ + phone::save::alarm + + + Save local alarm. +
+ + phone::delete::alarm + + + Delete local alarm. +
+ + phone::toggle::alarm + + + Toggle local alarm enabled state. +
+ +## Usage Rules + +- Send contact, message, and email mutations to the server phone addon. +- Keep local-only utility apps in `profileNamespace` until they are migrated to +server-backed storage. +- Do not treat local phone utility state as shared multiplayer state. +- Validate required UID, phone, email, subject, and message fields before +sending server requests. + +## Related Guides + +- [Phone Usage Guide](/server-modules/phone) +- [Client Notifications Usage Guide](/client-addons/notifications) diff --git a/docus/dist/raw/client-addons/store.md b/docus/dist/raw/client-addons/store.md new file mode 100644 index 0000000..5796a61 --- /dev/null +++ b/docus/dist/raw/client-addons/store.md @@ -0,0 +1,228 @@ +# Client Store Usage Guide + +The client store addon provides the storefront browser UI for catalog browsing, +category hydration, payment source display, cart handling, and checkout +requests. + +## Open Store UI + +```sqf +call forge_client_store_fnc_openUI; +``` + +The UI opens `RscStore`, loads `ui/_site/index.html`, and routes browser alerts +through `forge_client_store_fnc_handleUIEvents`. + +## Bridge + +`forge_client_store_fnc_initUIBridge` owns: + +- browser control lookup +- store hydrate requests +- category requests +- checkout requests +- category hydrate/failure responses +- checkout success/failure responses +- store config refresh after successful checkout + +Store currently uses its own `StoreUIBridge.receive(...)` browser bridge rather +than the shared `ForgeBridge.receive(...)` delivery used by newer bridges. + +## Browser Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Client behavior +
+ + store::ready + + + Request store hydrate from the server. +
+ + store::category::request + + + Request catalog items for a category. +
+ + store::checkout::request + + + Forward checkout JSON to the server. +
+ + store::close + + + Close the display. +
+ +## Browser Response Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Event + + Purpose +
+ + store::hydrate + + + Initial storefront/session/config payload. +
+ + store::config::hydrate + + + Refreshed payment/source config. +
+ + store::category::hydrate + + + Category catalog payload. +
+ + store::category::failure + + + Category request failure. +
+ + store::checkout::success + + + Checkout success payload. +
+ + store::checkout::failure + + + Checkout failure payload. +
+ +## Category Requests + +Category requests require a non-empty category value. + +```json +{ + "category": "weapons" +} +``` + +The client lowercases the category before forwarding it to the server store +addon. + +## Checkout Requests + +Checkout requests send a serialized checkout payload: + +```json +{ + "checkoutJson": "{\"items\":[],\"paymentSource\":\"cash\"}" +} +``` + +The client only forwards the checkout data. The server store addon and +extension validate prices, inventory grants, payment source authorization, and +integration with bank, organization, locker, and garage state. + +After a successful checkout, the client asks the server for a fresh store config +payload so payment-source balances and permissions stay current. + +## Authoritative State + +Catalog data, prices, checkout validation, money movement, organization funds, +credit lines, locker grants, garage grants, and persistence are server-owned. + +## Related Guides + +- [Store Usage Guide](/server-modules/store) +- [Client Bank Usage Guide](/client-addons/bank) +- [Client Organization Usage Guide](/client-addons/organization) +- [Client Locker Usage Guide](/client-addons/locker) +- [Client Garage Usage Guide](/client-addons/garage) diff --git a/docus/dist/raw/getting-started.md b/docus/dist/raw/getting-started.md new file mode 100644 index 0000000..4718453 --- /dev/null +++ b/docus/dist/raw/getting-started.md @@ -0,0 +1,67 @@ +# Getting Started + +Use this section as the main entry point for the Forge framework. + +Forge combines: + +- Arma 3 client addons for UX and browser-hosted interfaces +- Arma 3 server addons for mission integration and authoritative flow control +- a Rust server extension for command routing and persistence +- shared Rust crates for models, repositories, and services +- SurrealDB for durable storage + +## Common Commands + +```powershell +cargo test +npm run build:webui +.\build-arma.ps1 +``` + +## Start Here + + + + +Understand how SQF, Rust services, SurrealDB, and browser UIs fit together. + + + + + +Review gameplay domains, infrastructure modules, and extension command groups. + + + + + +See the rules for adding modules and changing boundaries without regressions. + + + + + +Install SurrealDB, match Forge config values, and choose the right setup path +for developers or admin-facing roles. + + + + + +Follow the extension architecture, API surface, and SQF usage examples. + + + + + +Dive into the actor, bank, CAD, garage, locker, organization, phone, store, +task, and owned-storage guides. + + + + + +Explore the client bridge model and addon-specific browser integration rules. + + + diff --git a/docus/dist/raw/getting-started/architecture.md b/docus/dist/raw/getting-started/architecture.md new file mode 100644 index 0000000..fcb54e7 --- /dev/null +++ b/docus/dist/raw/getting-started/architecture.md @@ -0,0 +1,136 @@ +# Framework Architecture + +Forge is organized around domain modules. A domain usually has SQF addon +entry points, Rust models, repository traits, service logic, extension command +handlers, and optional browser UI. + +## Runtime Flow + +```text +Arma client UI or SQF action + -> client addon bridge + -> server addon function + -> forge_server callExtension command + -> extension command group + -> forge-services domain service + -> forge-repositories trait + -> SurrealDB repository implementation + -> SurrealDB +``` + +For small payloads, server SQF calls `forge_server` directly through the +extension bridge. For large payloads, `arma/server/addons/extension` stages +request and response chunks through the extension transport module. + +## Main Layers + +### Client Addons + +Client addons live under `arma/client/addons`. They own local player UX, +keybinds, browser UI dialogs, and UI-to-SQF event handling. When a client needs +durable or authoritative state, it routes work to the matching server addon +instead of touching persistence directly. + +### Server Addons + +Server addons live under `arma/server/addons`. They own server-side SQF +initialization, game-object integration, validation near the Arma runtime, and +calls into the Rust extension. The `extension` addon is the shared bridge for +`callExtension` and transport handling. + +### Rust Extension + +The server extension lives under `arma/server/extension`. It registers the +`forge_server` command groups, loads configuration, initializes SurrealDB, and +maps SQF command inputs into service calls. + +The extension should stay thin: + +- Parse and validate command arguments that arrive from SQF. +- Resolve Arma-specific context such as player UID when required. +- Call the matching service. +- Serialize the service result back to JSON or a simple string. + +### Shared Rust Crates + +The `lib` workspace contains reusable Rust crates: + +- `forge-models`: shared domain structs and serialization rules. +- `forge-repositories`: storage-agnostic repository traits and in-memory +implementations used by tests and hot-state services. +- `forge-services`: domain behavior, validation, and mutation workflows. +- `forge-shared`: cross-crate helpers. + +### Persistence + +Durable storage is SurrealDB. Schema modules live under +`arma/server/extension/src/schema`, and concrete SurrealDB repository +implementations live under `arma/server/extension/src/storage`. + +Repository traits stay in `lib/repositories` so service logic remains testable +without a database. + +## Hot State + +Several domains have `hot` command groups. Hot state keeps a runtime copy of +frequently accessed data in memory, then saves it back to durable storage when +requested. This is useful for player state that changes often during a session. + +Typical hot-state flow: + +```text +actor:hot:init +actor:hot:get +actor:hot:override +actor:hot:save +actor:hot:remove +``` + +Use hot state for session workflows. Use normal domain commands for direct +durable CRUD operations. + +## Transport Layer + +The transport layer exists because Arma extension calls have practical payload +size limits. It provides chunked request and response handling while still +routing to the same domain command groups. + +Common direct command: + +```sqf +"forge_server" callExtension ["status", []]; +``` + +Common transport path: + +```text +server addon fnc_extCall + -> transport:request:append + -> transport:invoke_stored + -> transport:response:get +``` + +## Configuration + +The server extension reads `config.toml` next to the extension DLL. The current +persistence section is: + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +For install links and role-based setup guidance, see +[SurrealDB Setup](/getting-started/surrealdb-setup). + +Check persistence readiness before issuing commands that require storage: + +```sqf +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` diff --git a/docus/dist/raw/getting-started/development.md b/docus/dist/raw/getting-started/development.md new file mode 100644 index 0000000..3989bf4 --- /dev/null +++ b/docus/dist/raw/getting-started/development.md @@ -0,0 +1,243 @@ +# Development Guide + +This guide covers the usual path for adding or changing a Forge module. + +## Local Checks + +Before running storage-backed workflows locally, complete +[SurrealDB Setup](/getting-started/surrealdb-setup). + +Run these before pushing Rust or extension changes: + +```powershell +cargo fmt --check +cargo check +cargo test +cargo build +cargo clippy --all-targets --all-features -- -D warnings +``` + +Run this after changing browser UI sources: + +```powershell +npm run build:webui +``` + +Build Arma packages with: + +```powershell +.\build-arma.ps1 +``` + +## Module Boundaries + +Keep each layer responsible for one kind of work: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Layer + + Owns + + Avoid +
+ + lib/models + + + Data structures, serde defaults, validation helpers. + + Database calls, SQF-specific context. +
+ + lib/repositories + + + Repository traits and in-memory stores. + + SurrealDB-specific code. +
+ + lib/services + + + Business rules, workflow orchestration, structured results. + + Arma engine calls, extension transport details. +
+ + arma/server/extension + + + Command parsing, context resolution, SurrealDB implementations, serialization to SQF. + + Business rules that belong in services. +
+ + arma/server/addons + + + Server SQF lifecycle, game-object integration, calls into + forge_server + + + . + + Direct database logic. +
+ + arma/client/addons + + + Client UI, keybinds, local UI events. + + Authoritative persistence. +
+ +## Adding a Domain Module + +1. Add the model in `lib/models/src/.rs`. +2. Export the model from `lib/models/src/lib.rs`. +3. Add repository traits in `lib/repositories/src/.rs`. +4. Add in-memory repository support if the service needs tests or hot state. +5. Export the traits from `lib/repositories/src/lib.rs`. +6. Add service logic in `lib/services/src/.rs`. +7. Add focused unit tests for service behavior. +8. Export the service from `lib/services/src/lib.rs`. +9. Add a SurrealDB schema module under `arma/server/extension/src/schema`. +10. Add the concrete storage adapter under `arma/server/extension/src/storage`. +11. Register the storage adapter in `arma/server/extension/src/storage.rs`. +12. Add an extension command group under `arma/server/extension/src/.rs`. +13. Register the command group in `arma/server/extension/src/lib.rs`. +14. Add server addon functions under `arma/server/addons/` if SQF needs a module-level API. +15. Add client addon or browser UI files under `arma/client/addons/` if the module has player-facing UI. +16. Add documentation in `docs/` and module-level READMEs. + +## Extension Command Rules + +Commands should return one of these forms: + +- JSON string for structured results. +- `"true"` or `"false"` for simple existence and boolean operations. +- `"OK"` for successful destructive operations with no response body. +- `"Error: "` for failures. + +Prefer stable JSON shapes over ad hoc strings. SQF callers should always check +for the `"Error:"` prefix before parsing JSON. + +Example: + +```sqf +private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Actor request failed: %1", _payload]; +}; + +private _actor = fromJSON _payload; +``` + +## Persistence Rules + +SurrealDB is the durable store. Keep database-specific mapping in the extension +storage adapters, not in services or repository traits. + +When changing persisted data: + +- Update or add the matching `.surql` schema module. +- Update the concrete storage adapter. +- Preserve existing records when possible through serde defaults or migration +logic. +- Add tests at the service level for behavior, and add storage tests only when +database mapping is the risk. + +## Hot-State Rules + +Use hot state for data that is read or mutated frequently during a player +session. Hot-state modules usually provide: + +- `init` to load durable state into memory. +- `get` to read the runtime copy. +- `override` or focused mutation commands to update the runtime copy. +- `save` to write the runtime copy back to SurrealDB. +- `remove` to evict the runtime copy. + +Do not assume hot state is durable until `save` succeeds. + +## Web UI Rules + +Browser UI source files live under each client addon. Built assets usually land +under that addon's `ui/_site` directory. + +Use the existing common bridge in `arma/client/addons/common` when a UI needs +to send events back to SQF. Keep UI state and rendering in JavaScript, and keep +server-authoritative decisions in server SQF or Rust services. + +## Documentation Checklist + +When adding or changing a module, update: + +- `docs/MODULE_REFERENCE.md` for framework-level inventory. +- A module-specific README in the addon directory when SQF or UI usage changes. +- `arma/server/docs/api-reference.md` when extension commands change. +- Existing usage guides when payload shapes or workflows change. diff --git a/docus/dist/raw/getting-started/module-reference.md b/docus/dist/raw/getting-started/module-reference.md new file mode 100644 index 0000000..ad528bf --- /dev/null +++ b/docus/dist/raw/getting-started/module-reference.md @@ -0,0 +1,2052 @@ +# Module Reference + +This reference lists the main Forge modules and where each layer lives. + +## Directory Map + +```text +arma/client/addons/ Client-side Arma addons and browser UIs +arma/server/addons/ Server-side Arma addons and extension bridge +arma/server/extension/ Rust arma-rs extension and SurrealDB adapters +bin/icom/ Interprocess communication helper +lib/models/ Shared domain data models +lib/repositories/ Repository traits and in-memory stores +lib/services/ Domain services and workflow logic +lib/shared/ Cross-crate helpers +tools/ Web UI build tooling +docs/ Framework-level documentation +``` + +## Gameplay Domains + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Domain + + Purpose + + Client addon + + Server addon + + Service/model layer + + Extension group +
+ Actor + + Player identity, loadout, position, status, contact identifiers, and persistent character data. + + + arma/client/addons/actor + + + + arma/server/addons/actor + + + + lib/models/src/actor.rs + + + , + lib/services/src/actor.rs + + + + actor:* + +
+ Bank + + Player accounts, cash/bank balances, PIN validation, transfers, checkout charging, and transaction context. + + + arma/client/addons/bank + + + + arma/server/addons/bank + + + + lib/models/src/bank.rs + + + , + lib/services/src/bank.rs + + + + bank:* + + + , + bank:hot:* + +
+ CAD + + Dispatch requests, assignments, orders, activity stream, profiles, groups, and hydrated dispatcher views. + + + arma/client/addons/cad + + + + arma/server/addons/cad + + + + lib/models/src/cad.rs + + + , + lib/services/src/cad.rs + + + + cad:* + +
+ Garage + + Player vehicle storage with plate IDs, fuel, damage, and hit point state. + + + arma/client/addons/garage + + + + arma/server/addons/garage + + + + lib/models/src/garage.rs + + + , + lib/services/src/garage.rs + + + + garage:* + + + , + garage:hot:* + +
+ Locker + + Player item storage keyed by classname with category and amount. + + + arma/client/addons/locker + + + + arma/server/addons/locker + + + + lib/models/src/locker.rs + + + , + lib/services/src/locker.rs + + + + locker:* + + + , + locker:hot:* + +
+ Organization + + Player organizations, membership, treasury, credit lines, shared assets, and fleet data. + + + arma/client/addons/org + + + + arma/server/addons/org + + + + lib/models/src/org.rs + + + , + lib/services/src/org.rs + + + + org:* + + + , + org:hot:* + +
+ Phone + + Contacts, messages, and email state. + + + arma/client/addons/phone + + + + arma/server/addons/phone + + + + lib/models/src/phone.rs + + + , + lib/services/src/phone.rs + + + + phone:* + +
+ Store + + Storefront entity setup, catalog hydration, checkout workflows, and checkout charging integration. + + + arma/client/addons/store + + + + arma/server/addons/store + + + + lib/models/src/store.rs + + + , + lib/services/src/store.rs + + + + store:checkout + +
+ Task + + Server-owned mission/task flows, catalog, ownership, status, participant tracking, rewards, and defuse counters. + + none + + + arma/server/addons/task + + + + lib/models/src/task.rs + + + , + lib/services/src/task.rs + + + + task:* + +
+ Owned Garage + + Organization or owner-scoped vehicle unlock storage. + + via garage/org UI + + server extension only + + + lib/models/src/v_garage.rs + + + , + lib/services/src/v_garage.rs + + + + owned:garage:* + +
+ Owned Locker + + Organization or owner-scoped arsenal unlock storage. + + via locker/org UI + + server extension only + + + lib/models/src/v_locker.rs + + + , + lib/services/src/v_locker.rs + + + + owned:locker:* + +
+ +Server and extension guides: +[Actor](/server-modules/actor), +[Bank](/server-modules/bank), +[CAD](/server-modules/cad), +[Economy](/server-modules/economy), +[Garage](/server-modules/garage), +[Locker](/server-modules/locker), +[Organization](/server-modules/organization), +[Owned Storage](/server-modules/owned-storage), +[Phone](/server-modules/phone), +[Store](/server-modules/store), +[Task](/server-modules/task). + +Client guides: +[Client Overview](/client-addons), +[Main](/client-addons/main), +[Common](/client-addons/common), +[Actor](/client-addons/actor), +[Bank](/client-addons/bank), +[CAD](/client-addons/cad), +[Garage](/client-addons/garage), +[Locker](/client-addons/locker), +[Notifications](/client-addons/notifications), +[Organization](/client-addons/organization), +[Phone](/client-addons/phone), +[Store](/client-addons/store). + +## Infrastructure Modules + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Module + + Purpose + + Location +
+ + common + + + Shared SQF helpers, base stores, utility functions, and shared UI bridge pieces. + + + arma/client/addons/common + + + , + arma/server/addons/common + +
+ + extension + + + Server SQF bridge around + forge_server + + + extension calls and chunked transport. + + + arma/server/addons/extension + +
+ + main + + + Mod-level configuration, pre-init wiring, and server/client startup glue. + + + arma/client/addons/main + + + , + arma/server/addons/main + +
+ + economy + + + Server-side fuel, medical, and service economy helpers. Fuel and repair charge organization hot state; medical charges player bank/cash first, then organization funds with repayable member debt when personal funds cannot cover the bill. + + + arma/server/addons/economy + +
+ + notifications + + + Client notification UI, sounds, and UI event handling. + + + arma/client/addons/notifications + +
+ + icom + + + Rust helper for interprocess communication and event broadcasting. + + + bin/icom + + + , + arma/server/extension/src/icom.rs + +
+ + terrain + + + Extension-side terrain export helper. + + + arma/server/extension/src/terrain.rs + +
+ + transport + + + Chunked request/response handling for large extension payloads. + + + arma/server/extension/src/transport.rs + +
+ + surreal + + + SurrealDB connection lifecycle and status reporting. + + + arma/server/extension/src/surreal.rs + +
+ +## Extension Command Groups + +Commands are invoked with: + +```sqf +"forge_server" callExtension ["group:command", [_arg1, _arg2]]; +``` + +Nested groups use additional `:` separators, for example +`bank:hot:deposit`. + +### Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Purpose +
+ + version + + + Return the extension version string. +
+ + status + + + Return SurrealDB connection state. +
+ + surreal:status + + + Return SurrealDB connection state directly from the Surreal module. +
+ +### Actor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Purpose +
+ + actor:get + + + Fetch actor data for a resolved player UID. +
+ + actor:create + + + Create actor data from JSON. +
+ + actor:update + + + Apply actor JSON updates. +
+ + actor:exists + + + Return + true + + + or + false + + + . +
+ + actor:delete + + + Delete actor data. +
+ + actor:hot:init + + + , + actor:hot:get + + + , + actor:hot:keys + + + , + actor:hot:override + + + , + actor:hot:save + + + , + actor:hot:remove + + + Manage actor hot state. +
+ +See [Actor Usage Guide](/server-modules/actor) for examples. + +### Bank + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Purpose +
+ + bank:get + + + , + bank:create + + + , + bank:update + + + , + bank:exists + + + , + bank:delete + + + Durable bank CRUD. +
+ + bank:hot:init + + + , + bank:hot:get + + + , + bank:hot:override + + + , + bank:hot:patch + + + , + bank:hot:save + + + , + bank:hot:remove + + + Manage bank hot state. +
+ + bank:hot:deposit + + + , + bank:hot:withdraw + + + , + bank:hot:deposit_earnings + + + , + bank:hot:transfer + + + Mutate hot bank balances with operation context. +
+ + bank:hot:charge_checkout + + + Charge a checkout against hot bank state. +
+ + bank:hot:validate_pin + + + Validate a PIN for bank operations. +
+ +See [Bank Usage Guide](/server-modules/bank) for examples. + +### Garage + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Purpose +
+ + garage:create + + + , + garage:get + + + , + garage:add + + + , + garage:update + + + , + garage:patch + + + , + garage:remove + + + , + garage:delete + + + , + garage:exists + + + Durable player garage operations. +
+ + garage:hot:init + + + , + garage:hot:get + + + , + garage:hot:override + + + , + garage:hot:add + + + , + garage:hot:remove_vehicle + + + , + garage:hot:save + + + , + garage:hot:remove + + + Manage player garage hot state. +
+ +See [Garage Usage Guide](/server-modules/garage) for examples. + +### Locker + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Purpose +
+ + locker:create + + + , + locker:get + + + , + locker:add + + + , + locker:update + + + , + locker:patch + + + , + locker:remove + + + , + locker:delete + + + , + locker:exists + + + Durable player locker operations. +
+ + locker:hot:init + + + , + locker:hot:get + + + , + locker:hot:override + + + , + locker:hot:save + + + , + locker:hot:remove + + + Manage player locker hot state. +
+ +See [Locker Usage Guide](/server-modules/locker) for examples. + +### Organization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Purpose +
+ + org:get + + + , + org:create + + + , + org:update + + + , + org:exists + + + , + org:delete + + + Durable organization CRUD. +
+ + org:assets:get + + + , + org:assets:update + + + Manage organization assets. +
+ + org:fleet:get + + + , + org:fleet:update + + + Manage organization fleet entries. +
+ + org:members:get + + + , + org:members:add + + + , + org:members:remove + + + Manage organization membership. +
+ + org:hot:* + + + Runtime organization workflows including registration, invites, credit lines, checkout charging, assets, fleet, leave, disband, save, and remove. +
+ +See [Org Usage Guide](/server-modules/organization) for examples. + +### Phone + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Purpose +
+ + phone:init + + + Initialize phone state for a UID. +
+ + phone:contacts:list + + + , + phone:contacts:add + + + , + phone:contacts:remove + + + Manage contacts. +
+ + phone:messages:list + + + , + phone:messages:thread + + + , + phone:messages:send + + + , + phone:messages:mark_read + + + , + phone:messages:delete + + + Manage messages. +
+ + phone:emails:list + + + , + phone:emails:send + + + , + phone:emails:mark_read + + + , + phone:emails:delete + + + Manage emails. +
+ + phone:remove + + + Remove phone state for a UID. +
+ +See [Phone Usage Guide](/server-modules/phone) for examples. + +### CAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command Group + + Purpose +
+ + cad:activity:append + + + , + cad:activity:recent + + + Append and read recent activity. +
+ + cad:assignments:list + + + , + cad:assignments:assign + + + , + cad:assignments:acknowledge + + + , + cad:assignments:decline + + + , + cad:assignments:upsert + + + , + cad:assignments:delete + + + Manage dispatch assignments. +
+ + cad:orders:list + + + , + cad:orders:create + + + , + cad:orders:create_from_context + + + , + cad:orders:close + + + , + cad:orders:upsert + + + , + cad:orders:delete + + + Manage orders. +
+ + cad:requests:list + + + , + cad:requests:submit + + + , + cad:requests:submit_from_context + + + , + cad:requests:close + + + , + cad:requests:upsert + + + , + cad:requests:delete + + + Manage requests. +
+ + cad:profiles:list + + + , + cad:profiles:update_from_context + + + , + cad:profiles:upsert + + + , + cad:profiles:delete + + + Manage profiles. +
+ + cad:groups:build + + + Build grouped CAD state. +
+ + cad:view:hydrate + + + Build the dispatcher view model. +
+ +See [CAD Usage Guide](/server-modules/cad) for examples. + +### Task + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command Group + + Purpose +
+ + task:reset + + + Reset task state. +
+ + task:catalog:active + + + , + task:catalog:get + + + , + task:catalog:upsert + + + , + task:catalog:delete + + + Manage task catalog entries. +
+ + task:ownership:bind + + + , + task:ownership:release + + + , + task:ownership:accept + + + , + task:ownership:reward_context + + + Manage task ownership and rewards. +
+ + task:status:set + + + , + task:status:get + + + , + task:status:clear + + + Manage task status. +
+ + task:defuse:increment + + + , + task:defuse:get + + + Manage defuse counters. +
+ + task:clear + + + Clear task state. +
+ +See [Task Usage Guide](/server-modules/task) for examples. + +### Owned Storage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command Group + + Purpose +
+ + owned:garage:create + + + , + owned:garage:fetch + + + , + owned:garage:get + + + , + owned:garage:add + + + , + owned:garage:remove + + + , + owned:garage:delete + + + , + owned:garage:exists + + + Owner-scoped vehicle storage. +
+ + owned:garage:hot:* + + + Owner-scoped vehicle hot state. +
+ + owned:locker:create + + + , + owned:locker:fetch + + + , + owned:locker:get + + + , + owned:locker:add + + + , + owned:locker:remove + + + , + owned:locker:delete + + + , + owned:locker:exists + + + Owner-scoped item storage. +
+ + owned:locker:hot:* + + + Owner-scoped item hot state. +
+ +See [Owned Storage Usage Guide](/server-modules/owned-storage) for examples. + +### Other Extension Groups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command Group + + Purpose +
+ + store:checkout + + + Run store checkout behavior. +
+ + icom:connect + + + , + icom:broadcast + + + , + icom:send_event + + + ICom connection and event forwarding. +
+ + terrain:exportSVG + + + Export terrain data as SVG. +
+ + transport:invoke + + + , + transport:invoke_stored + + + Invoke commands through transport. +
+ + transport:request:append + + + , + transport:request:clear + + + Manage stored request chunks. +
+ + transport:response:get + + + , + transport:response:clear + + + Manage stored response chunks. +
+ +## Rust Crates + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Crate + + Role +
+ + forge-models + + + Domain models and validation. Keep these serializable and free of persistence details. +
+ + forge-repositories + + + Repository traits and in-memory implementations. Keep these storage-agnostic. +
+ + forge-services + + + Business rules and workflows. Depend on repository traits, not concrete databases. +
+ + forge-shared + + + Cross-crate helpers. Keep dependencies light. +
+ + forge-server + + + Arma extension crate. Owns command registration, SurrealDB runtime wiring, and concrete storage adapters. +
+ + forge-icom + + + ICom helper binary and client library. +
diff --git a/docus/dist/raw/getting-started/surrealdb-setup.md b/docus/dist/raw/getting-started/surrealdb-setup.md new file mode 100644 index 0000000..b86ca1c --- /dev/null +++ b/docus/dist/raw/getting-started/surrealdb-setup.md @@ -0,0 +1,101 @@ +# SurrealDB Setup + +Forge uses SurrealDB for durable storage. The Rust server extension connects to +SurrealDB on startup and applies Forge schema modules automatically, so setup +comes down to running a reachable database and matching the Forge config. + +## Choose the Right Path + +### Developer or Server Operator + +Use this path if you are building Forge, running a local test server, or +hosting the live Arma server. + +Official SurrealDB resources: + +- [SurrealDB install page](https://surrealdb.com/install) +- [SurrealDB CLI `start` reference](https://surrealdb.com/docs/reference/cli/surrealdb-cli/commands/start) + +Install SurrealDB with the official method for your platform: + +```powershell +# Windows +iwr https://windows.surrealdb.com -useb | iex +``` + +```bash +# macOS +brew install surrealdb/tap/surreal +``` + +```bash +# Linux +curl -sSf https://install.surrealdb.com | sh +``` + +For Forge, start a persistent local database instead of the default in-memory +mode: + +```powershell +surreal start surrealkv://forge.db --bind 127.0.0.1:8000 --user root --pass root +``` + +Then copy `arma/server/extension/config.example.toml` to `config.toml` next to +`forge_server_x64.dll` and keep the values aligned with the database you +started: + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +After that: + +1. Start the Arma server with the Forge extension enabled. +2. Let the extension connect and apply the Forge schema modules. +3. Verify the connection state: + +```sqf +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` + +If you change the endpoint, namespace, database, username, or password in +SurrealDB, change the same values in Forge's `config.toml`. + +### Mission Designer or Community Manager/Leader + +Use this path if you mostly need to inspect, query, or adjust data for a test +or live server and you are not changing Forge source code. + +Official SurrealDB resources: + +- [Surrealist installation](https://surrealdb.com/docs/explore/surrealist/installation) +- [Surrealist web app](https://app.surrealdb.com) +- [Surrealist local database serving](https://surrealdb.com/docs/explore/surrealist/concepts/local-database-serving) + +Recommended approach: + +1. Install **Surrealist Desktop**. It is the better fit for Forge because the +official docs note that the web app can be limited when connecting to +`localhost` or non-HTTPS endpoints. +2. Connect Surrealist to the same database Forge uses. +3. Use the values from the server's `config.toml`: + +```text +Endpoint: http://127.0.0.1:8000 +Namespace: forge +Database: main +Username: root +Password: root +``` + +If you need your own local sandbox instead of connecting to an existing Forge +server, install SurrealDB first and follow the developer/server-operator path +above. Surrealist Desktop can also launch a local database for you after the +`surreal` executable is installed and available on your `PATH`. diff --git a/docus/dist/raw/index.md b/docus/dist/raw/index.md new file mode 100644 index 0000000..3250c94 --- /dev/null +++ b/docus/dist/raw/index.md @@ -0,0 +1,231 @@ +# + +> + + + + + + + + + + + + + + + + + + + + diff --git a/docus/dist/raw/server-extension.md b/docus/dist/raw/server-extension.md new file mode 100644 index 0000000..8f9201b --- /dev/null +++ b/docus/dist/raw/server-extension.md @@ -0,0 +1,43 @@ +# Forge Server Extension + +Forge Server is an arma-rs extension for Arma 3 server-side persistence and +domain services. It exposes game-facing commands and stores durable state in +SurrealDB. + +## Architecture + +SQF modules call `forge_server` through `fnc_extCall`. Small requests use the +direct `callExtension` path, while large payloads are staged through the +transport layer. + +```text +SQF module + -> extension bridge + -> domain command + -> service layer + -> repository + -> SurrealDB +``` + +## Configuration + +Copy `config.example.toml` to `config.toml` next to the extension DLL. + +```toml +[surreal] +endpoint = "127.0.0.1:8000" +namespace = "forge" +database = "main" +username = "root" +password = "root" +connect_timeout_ms = 5000 +``` + +For install links and Forge-specific setup steps, see +[SurrealDB Setup](/getting-started/surrealdb-setup). + +## References + +- [API Reference](/server-extension/api-reference) +- [Usage Examples](/server-extension/usage-examples) +- [Framework Module Guides](/getting-started) diff --git a/docus/dist/raw/server-extension/api-reference.md b/docus/dist/raw/server-extension/api-reference.md new file mode 100644 index 0000000..1ad6653 --- /dev/null +++ b/docus/dist/raw/server-extension/api-reference.md @@ -0,0 +1,48 @@ +# Forge Server API Reference + +The Forge server extension exposes domain-oriented commands through +`callExtension`. Persistent data is stored through the configured SurrealDB +connection and schema modules. + +## Core Commands + +```sqf +"forge_server" callExtension ["version", []]; +"forge_server" callExtension ["status", []]; +"forge_server" callExtension ["surreal:status", []]; +``` + +`status` and `surreal:status` return `initializing`, `connected`, or `failed`. + +## Domain Commands + +Game systems should call the domain APIs instead of raw database operations: + +- `actor:*` +- `bank:*` +- `garage:*` +- `locker:*` +- `org:*` +- `phone:*` +- `store:*` +- `task:*` +- `cad:*` +- `owned:garage:*` +- `owned:locker:*` +- `transport:*` + +Large request and response payloads are routed through the transport layer when +needed by `forge_server_addons_extension_fnc_extCall`. + +## Module Guides + +- [Actor](/server-modules/actor) +- [Bank](/server-modules/bank) +- [CAD](/server-modules/cad) +- [Garage](/server-modules/garage) +- [Locker](/server-modules/locker) +- [Organization](/server-modules/organization) +- [Owned Storage](/server-modules/owned-storage) +- [Phone](/server-modules/phone) +- [Store](/server-modules/store) +- [Task](/server-modules/task) diff --git a/docus/dist/raw/server-extension/usage-examples.md b/docus/dist/raw/server-extension/usage-examples.md new file mode 100644 index 0000000..c766ea2 --- /dev/null +++ b/docus/dist/raw/server-extension/usage-examples.md @@ -0,0 +1,47 @@ +# Forge Server Usage Examples + +These examples use the domain command surface exposed by the extension. +Persistence is handled by the server through SurrealDB. + +## Status Check + +```sqf +["status", []] call forge_server_extension_fnc_extCall params ["_status", "_ok"]; +if (_ok && {_status isEqualTo "connected"}) then { + systemChat "Forge persistence is online."; +}; +``` + +## Actor Fetch + +```sqf +private _uid = getPlayerUID player; +["actor:get", [_uid]] call forge_server_extension_fnc_extCall params ["_payload", "_ok"]; +if (_ok) then { + private _actor = fromJSON _payload; + systemChat format ["Loaded actor %1", _actor getOrDefault ["uid", _uid]]; +}; +``` + +## Store Checkout + +```sqf +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", "default"], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "bank"], + ["items", [ + createHashMapFromArray [ + ["classname", "FirstAidKit"], + ["category", "item"], + ["priceValue", 50], + ["quantity", 2] + ] + ]], + ["vehicles", []] +]; + +["store:checkout", [toJSON _checkout]] call forge_server_extension_fnc_extCall; +``` diff --git a/docus/dist/raw/server-modules.md b/docus/dist/raw/server-modules.md new file mode 100644 index 0000000..2521fa1 --- /dev/null +++ b/docus/dist/raw/server-modules.md @@ -0,0 +1,80 @@ +# Server Module Guides + +These pages document the authoritative server-side workflows in Forge. + +Most modules follow the same shape: + +1. Server SQF gathers game context and validates mission/runtime assumptions. +2. The `forge_server` extension routes the request into the matching command group. +3. Services apply business rules through storage-agnostic repository traits. +4. The extension persists durable state through SurrealDB adapters when needed. + +## Gameplay Domains + + + + +Persistent player identity, position, loadout, contact fields, and hot state. + + + + + +Player funds, transfers, PIN validation, checkout charging, and bank hot state. + + + + + +Dispatch requests, assignments, profiles, grouped state, and hydrated views. + + + + + +Fuel, service, and medical charging rules across player and organization funds. + + + + + +Vehicle storage, hot-state updates, and persistence of vehicle condition. + + + + + +Player inventory storage, unique item limits, and locker hot-state behavior. + + + + + +Membership, treasury, shared assets, fleet, and organization hot workflows. + + + + + +Owner-scoped locker and vehicle unlock storage used by org-linked features. + + + + + +Contacts, message threads, and email state for in-game phone workflows. + + + + + +Checkout orchestration across pricing, grants, payment sources, and rollback. + + + + + +Task catalog, ownership, status transitions, defuse counters, and rewards. + + + diff --git a/docus/dist/raw/server-modules/actor.md b/docus/dist/raw/server-modules/actor.md new file mode 100644 index 0000000..f5e97d3 --- /dev/null +++ b/docus/dist/raw/server-modules/actor.md @@ -0,0 +1,374 @@ +# Actor Usage Guide + +The actor module stores persistent player character data: identity, loadout, +position, direction, stance, contact fields, state, holster status, rank, and +organization. + +## Storage Model + +Actor data is persisted through SurrealDB by the server extension. + +```json +{ + "uid": "76561198000000000", + "name": "Player Name", + "loadout": {}, + "position": [1234.5, 6789.0, 0.0], + "direction": 90.0, + "stance": "STAND", + "email": "0160000000@spearnet.mil", + "phone_number": "0160000000", + "state": "HEALTHY", + "holster": true, + "rank": null, + "organization": "default" +} +``` + +Rules validated by the Rust service: + +- `uid` is authoritative from the command argument and must be a 17-digit Steam +UID. +- `name` is optional, but cannot be empty when set and cannot exceed 50 +characters. +- `position` must be three finite numbers when set. +- `direction` must be in the `0.0 <= direction < 360.0` range. +- `email` must contain `@` and end with `.mil` when set. +- `phone_number` must start with `0160` and be 10 digits when set. +- Empty `phone_number`, `email`, or `organization` fields are filled on create. + +## Commands + +All commands are called on the `actor` group. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + actor:get + + + + uid + + + Actor JSON. If no actor exists, returns a default actor but does not persist it. +
+ + actor:create + + + + uid + + + , + actor_json + + + Persisted actor JSON. +
+ + actor:update + + + + uid + + + , + patch_json + + + Updated actor JSON. +
+ + actor:exists + + + + uid + + + + true + + + or + false + + + . +
+ + actor:delete + + + + uid + + + + OK + + + . +
+ +## Create an Actor + +The `uid` field in the JSON is overwritten with the command UID. + +```sqf +private _actor = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["name", name player], + ["loadout", getUnitLoadout player], + ["position", getPosATL player], + ["direction", getDir player], + ["stance", stance player], + ["email", ""], + ["phone_number", ""], + ["state", "HEALTHY"], + ["holster", true], + ["organization", "default"] +]; + +private _result = "forge_server" callExtension ["actor:create", [ + getPlayerUID player, + toJSON _actor +]]; +``` + +## Update an Actor + +`actor:update` accepts a JSON object containing only fields to change. + +```sqf +private _patch = createHashMapFromArray [ + ["position", getPosATL player], + ["direction", getDir player], + ["stance", stance player], + ["loadout", getUnitLoadout player] +]; + +private _result = "forge_server" callExtension ["actor:update", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +Supported patch fields are `name`, `position`, `direction`, `stance`, `email`, +`phone_number`, `state`, `holster`, `rank`, `organization`, and `loadout`. +`uid` is ignored. + +## Hot State + +The `actor:hot:*` commands keep a runtime copy of actor data and write it back +only when `actor:hot:save` runs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + actor:hot:init + + + + uid + + + Actor JSON from durable storage. +
+ + actor:hot:get + + + + uid + + + Actor JSON. +
+ + actor:hot:keys + + + none + + JSON array of hot actor UIDs. +
+ + actor:hot:override + + + + uid + + + , + actor_json + + + Actor JSON. +
+ + actor:hot:save + + + + uid + + + Current hot actor JSON and async durable save. +
+ + actor:hot:remove + + + + uid + + + + OK + + + . +
+ +Use hot state for frequently updated session data such as position and loadout. +Use durable commands for account creation and administrative changes. + +## Error Handling + +```sqf +private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Actor error: %1", _payload]; +}; + +private _actor = fromJSON _payload; +``` diff --git a/docus/dist/raw/server-modules/bank.md b/docus/dist/raw/server-modules/bank.md new file mode 100644 index 0000000..f57b692 --- /dev/null +++ b/docus/dist/raw/server-modules/bank.md @@ -0,0 +1,600 @@ +# Bank Usage Guide + +The bank module stores player account balances, earnings, PINs, and transaction +strings. The hot-state API also owns the active banking workflows used by the +UI: deposit, withdraw, transfer, checkout charge, and PIN validation. + +## Storage Model + +Bank data is persisted through SurrealDB by the server extension. + +```json +{ + "uid": "76561198000000000", + "name": "Player Name", + "bank": 1000.0, + "cash": 250.0, + "earnings": 0.0, + "pin": 1234, + "transactions": [] +} +``` + +Rules validated by the Rust service: + +- `uid` is authoritative from the command argument. +- `name` cannot be empty. +- `bank` and `cash` cannot be negative. +- `pin` must be a four-digit number. +- Durable `bank:get` requires an existing bank account. + +## Durable Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + bank:create + + + + uid + + + , + bank_json + + + Persisted bank JSON. +
+ + bank:get + + + + uid + + + Bank JSON. +
+ + bank:update + + + + uid + + + , + patch_json + + + Updated bank JSON. +
+ + bank:exists + + + + uid + + + + true + + + or + false + + + . +
+ + bank:delete + + + + uid + + + + OK + + + . +
+ +## Create an Account + +The `uid` field in the JSON is overwritten with the command UID. + +```sqf +private _account = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["name", name player], + ["bank", 0], + ["cash", 0], + ["earnings", 0], + ["pin", 1234], + ["transactions", []] +]; + +private _result = "forge_server" callExtension ["bank:create", [ + getPlayerUID player, + toJSON _account +]]; +``` + +## Hot-State Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + bank:hot:init + + + + uid + + + Bank JSON loaded into hot state. +
+ + bank:hot:get + + + + uid + + + Bank JSON. +
+ + bank:hot:override + + + + uid + + + , + bank_json + + + Bank JSON. +
+ + bank:hot:patch + + + + uid + + + , + patch_json + + + + { account, patch } + + + . +
+ + bank:hot:deposit + + + + uid + + + , + amount + + + , + context_json + + + + { account, patch } + + + . +
+ + bank:hot:withdraw + + + + uid + + + , + amount + + + , + context_json + + + + { account, patch } + + + . +
+ + bank:hot:deposit_earnings + + + + uid + + + , + amount + + + , + context_json + + + + { account, patch } + + + . +
+ + bank:hot:transfer + + + + source_uid + + + , + target_uid + + + , + amount + + + , + context_json + + + Transfer result JSON. +
+ + bank:hot:charge_checkout + + + + uid + + + , + amount + + + , + context_json + + + + { account, patch } + + + . +
+ + bank:hot:validate_pin + + + + uid + + + , + pin + + + , + context_json + + + + {} + + + on success. +
+ + bank:hot:save + + + + uid + + + Current hot bank JSON and async durable save. +
+ + bank:hot:remove + + + + uid + + + + OK + + + . +
+ +Use hot-state commands for UI workflows. They return patch objects so the UI can +update only changed fields. + +## Deposit and Withdraw + +ATM sessions require `atmAuthorized: true`. Full bank sessions can set +`mode: "bank"`. + +```sqf +private _context = createHashMapFromArray [ + ["mode", "atm"], + ["atmAuthorized", true] +]; + +private _deposit = "forge_server" callExtension ["bank:hot:deposit", [ + getPlayerUID player, + "100", + toJSON _context +]]; + +private _withdraw = "forge_server" callExtension ["bank:hot:withdraw", [ + getPlayerUID player, + "50", + toJSON _context +]]; +``` + +## Transfer + +Transfers are only available from the full bank interface. `fromField` can be +`bank` or `cash`. + +```sqf +private _context = createHashMapFromArray [ + ["mode", "bank"], + ["atmAuthorized", false], + ["fromField", "bank"] +]; + +private _result = "forge_server" callExtension ["bank:hot:transfer", [ + getPlayerUID player, + _targetUid, + "250", + toJSON _context +]]; +``` + +## Checkout Charge + +Checkout charging supports `sourceField: "cash"` or `sourceField: "bank"`. +Set `commit` to `false` to preview the patch without saving. + +```sqf +private _context = createHashMapFromArray [ + ["sourceField", "bank"], + ["commit", true] +]; + +private _result = "forge_server" callExtension ["bank:hot:charge_checkout", [ + getPlayerUID player, + "125", + toJSON _context +]]; +``` + +## PIN Validation + +PIN entry is only valid in ATM mode. + +```sqf +private _context = createHashMapFromArray [["mode", "atm"]]; + +private _result = "forge_server" callExtension ["bank:hot:validate_pin", [ + getPlayerUID player, + "1234", + toJSON _context +]]; +``` + +## Error Handling + +```sqf +private _result = "forge_server" callExtension ["bank:hot:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Bank error: %1", _payload]; +}; + +private _bank = fromJSON _payload; +``` diff --git a/docus/dist/raw/server-modules/cad.md b/docus/dist/raw/server-modules/cad.md new file mode 100644 index 0000000..5be47b5 --- /dev/null +++ b/docus/dist/raw/server-modules/cad.md @@ -0,0 +1,766 @@ +# CAD Usage Guide + +The CAD module stores transient operational state for dispatch activity, +assignments, dispatch orders, support requests, group profiles, grouped views, +and hydrated UI payloads. CAD state is in-memory and follows the active server +or mission lifecycle. + +## Data Model + +Most CAD records are flexible JSON objects. The service normalizes important +IDs and returns structured mutation results for higher-level workflows. + +Common generated IDs: + +- Orders: `cad-order:` +- Requests: `cad-request:` +- Assignments usually share a task ID or order ID. + +## Commands + +### Activity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + cad:activity:append + + + + activity_json + + + + OK + + + . +
+ + cad:activity:recent + + + + limit + + + Recent activity array JSON. +
+ +### Assignments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + cad:assignments:list + + + none + + Assignment array JSON. +
+ + cad:assignments:assign + + + + entry_id + + + , + assignment_json + + + Assignment mutation result JSON. +
+ + cad:assignments:acknowledge + + + + entry_id + + + , + patch_json + + + Assignment mutation result JSON. +
+ + cad:assignments:decline + + + + entry_id + + + , + patch_json + + + Assignment mutation result JSON and removes assignment. +
+ + cad:assignments:upsert + + + + entry_id + + + , + assignment_json + + + + OK + + + . +
+ + cad:assignments:delete + + + + entry_id + + + + OK + + + . +
+ +### Orders + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + cad:orders:list + + + none + + Order array JSON. +
+ + cad:orders:create + + + + order_seed_json + + + Dispatch order mutation result JSON. +
+ + cad:orders:create_from_context + + + + context_json + + + Dispatch order mutation result JSON. +
+ + cad:orders:close + + + + entry_id + + + Dispatch order mutation result JSON and removes order/assignment. +
+ + cad:orders:upsert + + + + entry_id + + + , + order_json + + + + OK + + + . +
+ + cad:orders:delete + + + + entry_id + + + + OK + + + . +
+ +### Requests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + cad:requests:list + + + none + + Request array JSON. +
+ + cad:requests:submit + + + + request_json + + + Request mutation result JSON. +
+ + cad:requests:submit_from_context + + + + context_json + + + Request mutation result JSON. +
+ + cad:requests:close + + + + entry_id + + + Request mutation result JSON and removes request. +
+ + cad:requests:upsert + + + + entry_id + + + , + request_json + + + + OK + + + . +
+ + cad:requests:delete + + + + entry_id + + + + OK + + + . +
+ +### Profiles and Views + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + cad:profiles:list + + + none + + Profile array JSON. +
+ + cad:profiles:update_from_context + + + + context_json + + + Profile mutation result JSON. +
+ + cad:profiles:upsert + + + + entry_id + + + , + profile_json + + + + OK + + + . +
+ + cad:profiles:delete + + + + entry_id + + + + OK + + + . +
+ + cad:groups:build + + + + groups_seed_json + + + Group array JSON. +
+ + cad:view:hydrate + + + + hydrate_seed_json + + + Hydrated CAD payload JSON. +
+ +## Submit a Support Request + +```sqf +private _fields = createHashMapFromArray [ + ["pickup_location", "Grid 123456"], + ["precedence", "urgent"], + ["security", "secure"] +]; + +private _context = createHashMapFromArray [ + ["type", "medevac_9line"], + ["fields", _fields], + ["groupId", "alpha"], + ["groupCallsign", "Alpha 1-1"], + ["submittedByUid", getPlayerUID player], + ["submittedByName", name player], + ["priority", "emergency"], + ["position", getPosATL player], + ["createdAt", diag_tickTime] +]; + +private _result = "forge_server" callExtension ["cad:requests:submit_from_context", [ + toJSON _context +]]; +``` + +Supported priority values are `routine`, `priority`, and `emergency`. Unknown +values normalize to `priority`. + +## Create a Dispatch Order + +```sqf +private _context = createHashMapFromArray [ + ["assigneeGroupId", "bravo"], + ["assigneeGroupCallsign", "Bravo 1-1"], + ["targetGroupId", "alpha"], + ["targetGroupCallsign", "Alpha 1-1"], + ["targetPosition", getPosATL player], + ["createdByUid", getPlayerUID player], + ["createdByName", name player], + ["requestId", "cad-request:1"], + ["requestType", "logreq"], + ["requestTitle", "LOGREQ | Alpha 1-1"], + ["requestSummary", "Ammo resupply requested"], + ["requestFields", createHashMap], + ["note", "Support Alpha 1-1 at current position."], + ["priority", "priority"], + ["createdAt", diag_tickTime] +]; + +private _result = "forge_server" callExtension ["cad:orders:create_from_context", [ + toJSON _context +]]; +``` + +## Assignment Workflow + +```sqf +private _assignment = createHashMapFromArray [ + ["groupId", "bravo"], + ["assigneeGroupCallsign", "Bravo 1-1"], + ["assignedByUid", getPlayerUID player], + ["assignedByName", name player], + ["assignedAt", diag_tickTime], + ["state", "assigned"] +]; + +"forge_server" callExtension ["cad:assignments:assign", [ + "task-123", + toJSON _assignment +]]; + +private _ack = createHashMapFromArray [ + ["state", "acknowledged"], + ["acknowledgedByUid", getPlayerUID player], + ["acknowledgedAt", diag_tickTime] +]; + +"forge_server" callExtension ["cad:assignments:acknowledge", [ + "task-123", + toJSON _ack +]]; +``` + +## Hydrate the CAD UI + +```sqf +private _session = createHashMapFromArray [ + ["uid", getPlayerUID player], + ["orgId", "default"], + ["isDispatcher", true], + ["groupId", "alpha"], + ["isLeader", true] +]; + +private _seed = createHashMapFromArray [ + ["groups", _liveGroups], + ["activeTasks", _activeTasks], + ["session", _session] +]; + +private _result = "forge_server" callExtension ["cad:view:hydrate", [toJSON _seed]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["CAD error: %1", _payload]; +}; +``` diff --git a/docus/dist/raw/server-modules/economy.md b/docus/dist/raw/server-modules/economy.md new file mode 100644 index 0000000..d28a61c --- /dev/null +++ b/docus/dist/raw/server-modules/economy.md @@ -0,0 +1,77 @@ +# Economy Usage Guide + +The economy server addon owns Arma-world service behavior for fuel, medical, +and repair interactions. It does not own money state. Money mutations go +through extension-backed bank and organization hot state before the world +effect is applied. + +## Dependencies + +- `forge_server_common` for logging, formatting, and player lookup. +- `forge_server_bank` for personal medical billing. +- `forge_server_org` for organization-funded services and medical fallback +debt. +- `forge_client_actor` and `forge_client_notifications` for targeted client +responses. + +## Fuel + +Fuel is organization-funded. + +When refueling stops, `fnc_initFEconomyStore.sqf` calculates the fuel delta and +cost, charges the player's organization through `OrgStore chargeCheckout`, and +syncs the organization patch to online members. If organization funds cannot +cover the refuel, the vehicle is rolled back to the fuel level it had when the +session started. + +Garage UI refuel requests use the server `RefuelService` event. The fuel store +calculates missing fuel from the vehicle config `fuelCapacity`, charges the +player's organization, and fills the vehicle only after the organization charge +succeeds. + +## Repair + +Repair is organization-funded. + +Use the repair service event: + +```sqf +[QEGVAR(economy,RepairService), [_target, _unit, _cost]] call CBA_fnc_serverEvent; +``` + +`_cost` is optional. Passing `-1` uses the configured service repair cost. +The target is only repaired after the organization charge succeeds. + +The client garage UI forwards selected nearby vehicle repair requests through +the same event. + +## Medical + +Medical is player-funded first. + +When a heal is requested, `fnc_initMEconomyStore.sqf` uses this billing order: + +1. Charge the player's bank balance when it can cover the medical fee. +2. Otherwise charge the player's cash when it can cover the fee. +3. If neither personal balance can cover the fee, charge organization funds. +4. When organization funds cover the fallback charge, record the same amount as +debt on the player's organization credit line. + +The heal only completes after one of those charges succeeds. If personal +billing is unavailable, the heal does not fall back to organization funds +because the server cannot verify that the player is unable to cover the fee. + +## Medical Debt Repayment + +Medical fallback debt uses the existing organization credit-line repayment +flow. The organization treasury is reduced when the service is rendered, and +the player's credit-line `amount_due` increases by the medical fee. When the +player repays through the bank credit-line repayment action, player bank funds +are moved back into the organization treasury. + +## Hot-Cache Boundary + +The economy addon should stay server-authoritative for world effects such as +vehicle fuel, vehicle repair, healing, respawn placement, and death inventory +movement. Bank and organization balances should continue to mutate through the +extension-backed hot-cache services. diff --git a/docus/dist/raw/server-modules/garage.md b/docus/dist/raw/server-modules/garage.md new file mode 100644 index 0000000..503ee36 --- /dev/null +++ b/docus/dist/raw/server-modules/garage.md @@ -0,0 +1,545 @@ +# Garage Usage Guide + +The garage module stores physical player vehicles. Each record keeps the +vehicle classname, generated plate UUID, fuel, overall damage, and detailed hit +point damage. + +## Storage Model + +Garage data is persisted through SurrealDB by the server extension. + +```json +{ + "plate-uuid": { + "plate": "plate-uuid", + "classname": "B_Quadbike_01_F", + "fuel": 1.0, + "damage": 0.0, + "hit_points": { + "names": ["hitengine"], + "selections": ["engine_hitpoint"], + "values": [0.0] + } + } +} +``` + +Rules validated by the Rust service: + +- A player garage can contain up to 5 vehicles. +- `garage:add` generates a UUID plate automatically. +- `fuel`, `damage`, and every hit point value must be between `0.0` and `1.0`. +- `hit_points.names`, `hit_points.selections`, and `hit_points.values` must have +the same length. +- `garage:get`, `garage:patch`, and `garage:remove` require an existing garage. +- `garage:add` creates an empty garage automatically when one does not exist. + +## Commands + +All commands are called on the `garage` group. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + garage:create + + + + uid + + + Empty vehicle map as JSON. +
+ + garage:get + + + + uid + + + Vehicle map as JSON. +
+ + garage:add + + + + uid + + + , + vehicle_json + + + Updated vehicle map as JSON. +
+ + garage:update + + + + uid + + + , + vehicles_json + + + Replaced vehicle map as JSON. +
+ + garage:patch + + + + uid + + + , + patch_json + + + Updated vehicle map as JSON. +
+ + garage:remove + + + + uid + + + , + remove_json + + + Updated vehicle map as JSON. +
+ + garage:delete + + + + uid + + + + OK + + + . +
+ + garage:exists + + + + uid + + + + true + + + or + false + + + . +
+ +## Error Handling + +Every command returns a string payload. Always check for the `Error:` prefix +before parsing JSON. + +```sqf +private _result = "forge_server" callExtension ["garage:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Garage error: %1", _payload]; +}; + +private _garage = fromJSON _payload; +``` + +## Add a Vehicle + +`garage:add` requires `classname`, `fuel`, `damage`, and `hit_points`. + +```sqf +private _hitPointData = getAllHitPointsDamage _vehicle; +private _hitPoints = createHashMapFromArray [ + ["names", _hitPointData select 0], + ["selections", _hitPointData select 1], + ["values", _hitPointData select 2] +]; + +private _vehicleData = createHashMapFromArray [ + ["classname", typeOf _vehicle], + ["fuel", fuel _vehicle], + ["damage", damage _vehicle], + ["hit_points", _hitPoints] +]; + +private _result = "forge_server" callExtension ["garage:add", [ + getPlayerUID player, + toJSON _vehicleData +]]; + +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to store vehicle: %1", _payload]; +}; + +private _garage = fromJSON _payload; +``` + +The returned value is a hash map keyed by generated plate. To find the newly +stored vehicle, compare returned keys before and after the add, or search by +classname if your workflow guarantees a unique pending vehicle. + +```sqf +private _storedPlate = ""; +{ + private _vehicleRecord = _garage get _x; + if ((_vehicleRecord get "classname") == typeOf _vehicle) then { + _storedPlate = _x; + }; +} forEach keys _garage; +``` + +## Patch a Vehicle + +`garage:patch` updates selected fields for one plate. The `plate` field is +required. `fuel`, `damage`, and `hit_points` are optional. + +```sqf +private _patch = createHashMapFromArray [ + ["plate", _vehicle getVariable ["forge_garage_plate", ""]], + ["fuel", fuel _vehicle], + ["damage", damage _vehicle] +]; + +private _result = "forge_server" callExtension ["garage:patch", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +## Remove a Vehicle + +`garage:remove` expects JSON with a `plate` field. + +```sqf +private _remove = createHashMapFromArray [ + ["plate", _plate] +]; + +private _result = "forge_server" callExtension ["garage:remove", [ + getPlayerUID player, + toJSON _remove +]]; +``` + +## Spawn a Stored Vehicle + +```sqf +fnc_spawnGarageVehicle = { + params ["_plate"]; + + private _result = "forge_server" callExtension ["garage:get", [getPlayerUID player]]; + private _payload = _result select 0; + + if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to load garage: %1", _payload]; + objNull + }; + + private _garage = fromJSON _payload; + private _vehicleData = _garage getOrDefault [_plate, createHashMap]; + if (_vehicleData isEqualTo createHashMap) exitWith { + hint "Vehicle plate was not found in your garage."; + objNull + }; + + private _vehicle = (_vehicleData get "classname") createVehicle (player getPos [10, getDir player]); + _vehicle setFuel (_vehicleData getOrDefault ["fuel", 1]); + _vehicle setDamage (_vehicleData getOrDefault ["damage", 0]); + _vehicle setVariable ["forge_garage_plate", _plate, true]; + + private _hitPoints = _vehicleData getOrDefault ["hit_points", createHashMap]; + private _names = _hitPoints getOrDefault ["names", []]; + private _values = _hitPoints getOrDefault ["values", []]; + + { + _vehicle setHitPointDamage [_x, _values select _forEachIndex]; + } forEach _names; + + private _remove = createHashMapFromArray [["plate", _plate]]; + "forge_server" callExtension ["garage:remove", [getPlayerUID player, toJSON _remove]]; + + _vehicle +}; +``` + +## Hot State + +The `garage:hot:*` commands keep a runtime copy of a player's garage and write +it back only when `garage:hot:save` runs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + garage:hot:init + + + + uid + + + Vehicle map as JSON. +
+ + garage:hot:get + + + + uid + + + Vehicle map as JSON. +
+ + garage:hot:override + + + + uid + + + , + vehicles_json + + + Vehicle map as JSON. +
+ + garage:hot:add + + + + uid + + + , + vehicle_json + + + Vehicle map as JSON. +
+ + garage:hot:remove_vehicle + + + + uid + + + , + remove_json + + + Vehicle map as JSON. +
+ + garage:hot:save + + + + uid + + + Current hot vehicle map as JSON. +
+ + garage:hot:remove + + + + uid + + + + OK + + + . +
+ +Use hot state for session-heavy vehicle workflows. Use the durable commands for +simple store/retrieve operations. + +## Best Practices + +- Store the generated plate on spawned vehicles with `setVariable`. +- Use `garage:patch` for frequent fuel and damage syncs. +- Use `garage:update` only when replacing the whole vehicle map intentionally. +- Do not delete the world vehicle until `garage:add` succeeds. +- Treat vehicle maps as hash maps keyed by plate, not arrays. diff --git a/docus/dist/raw/server-modules/locker.md b/docus/dist/raw/server-modules/locker.md new file mode 100644 index 0000000..3b29e90 --- /dev/null +++ b/docus/dist/raw/server-modules/locker.md @@ -0,0 +1,494 @@ +# Locker Usage Guide + +The locker module stores physical player inventory items by classname. It is +separate from the virtual arsenal unlock module documented in +[Owned Storage Usage Guide](/server-modules/owned-storage). + +## Storage Model + +Locker data is persisted through SurrealDB by the server extension. + +```json +{ + "arifle_MX_F": { + "category": "weapon", + "classname": "arifle_MX_F", + "amount": 1 + } +} +``` + +Rules validated by the Rust service: + +- A locker can contain up to 25 unique classnames. +- `category` and `classname` cannot be empty. +- `amount` must be greater than `0`. +- `locker:add` creates an empty locker automatically when one does not exist. +- `locker:get`, `locker:patch`, and `locker:remove` require an existing locker. +- `locker:remove` takes the classname directly, not a JSON object. + +## Commands + +All commands are called on the `locker` group. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + locker:create + + + + uid + + + Empty item map as JSON. +
+ + locker:get + + + + uid + + + Item map as JSON. +
+ + locker:add + + + + uid + + + , + item_json + + + Updated item map as JSON. +
+ + locker:update + + + + uid + + + , + items_json + + + Replaced item map as JSON. +
+ + locker:patch + + + + uid + + + , + patch_json + + + Updated item map as JSON. +
+ + locker:remove + + + + uid + + + , + classname + + + Updated item map as JSON. +
+ + locker:delete + + + + uid + + + + OK + + + . +
+ + locker:exists + + + + uid + + + + true + + + or + false + + + . +
+ +## Error Handling + +Every command returns a string payload. Always check for the `Error:` prefix +before parsing JSON. + +```sqf +private _result = "forge_server" callExtension ["locker:get", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Locker error: %1", _payload]; +}; + +private _locker = fromJSON _payload; +``` + +## Add an Item + +`locker:add` creates or overwrites one classname entry. + +```sqf +private _item = createHashMapFromArray [ + ["category", "weapon"], + ["classname", "arifle_MX_F"], + ["amount", 1] +]; + +private _result = "forge_server" callExtension ["locker:add", [ + getPlayerUID player, + toJSON _item +]]; + +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to store item: %1", _payload]; +}; + +private _locker = fromJSON _payload; +``` + +## Patch an Amount + +`locker:patch` currently patches the `amount` field for an existing classname. + +```sqf +private _patch = createHashMapFromArray [ + ["classname", "arifle_MX_F"], + ["amount", 5] +]; + +private _result = "forge_server" callExtension ["locker:patch", [ + getPlayerUID player, + toJSON _patch +]]; +``` + +## Remove an Item + +`locker:remove` takes the classname as the second argument. + +```sqf +private _result = "forge_server" callExtension ["locker:remove", [ + getPlayerUID player, + "arifle_MX_F" +]]; +``` + +## Retrieve an Item + +```sqf +fnc_retrieveLockerItem = { + params ["_classname"]; + + private _result = "forge_server" callExtension ["locker:get", [getPlayerUID player]]; + private _payload = _result select 0; + + if (_payload find "Error:" == 0) exitWith { + hint format ["Failed to load locker: %1", _payload]; + false + }; + + private _locker = fromJSON _payload; + private _item = _locker getOrDefault [_classname, createHashMap]; + if (_item isEqualTo createHashMap) exitWith { + hint "Item was not found in your locker."; + false + }; + + private _amount = _item getOrDefault ["amount", 0]; + if (_amount <= 0) exitWith { + hint "Item is out of stock."; + false + }; + + if !(player canAdd _classname) exitWith { + hint "Not enough inventory space."; + false + }; + + player addItem _classname; + + if (_amount > 1) then { + private _patch = createHashMapFromArray [ + ["classname", _classname], + ["amount", _amount - 1] + ]; + "forge_server" callExtension ["locker:patch", [getPlayerUID player, toJSON _patch]]; + } else { + "forge_server" callExtension ["locker:remove", [getPlayerUID player, _classname]]; + }; + + true +}; +``` + +## Replace the Whole Locker + +`locker:update` replaces the whole item map. Use it for explicit bulk syncs, +not single-item changes. + +```sqf +private _items = createHashMapFromArray [ + ["arifle_MX_F", createHashMapFromArray [ + ["category", "weapon"], + ["classname", "arifle_MX_F"], + ["amount", 1] + ]] +]; + +private _result = "forge_server" callExtension ["locker:update", [ + getPlayerUID player, + toJSON _items +]]; +``` + +## Hot State + +The `locker:hot:*` commands keep a runtime copy of a player's locker and write +it back only when `locker:hot:save` runs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + locker:hot:init + + + + uid + + + Item map as JSON. +
+ + locker:hot:get + + + + uid + + + Item map as JSON. +
+ + locker:hot:override + + + + uid + + + , + items_json + + + Item map as JSON. +
+ + locker:hot:save + + + + uid + + + Current hot item map as JSON. +
+ + locker:hot:remove + + + + uid + + + + OK + + + . +
+ +Use hot state for session-heavy locker workflows. Use the durable commands for +simple item deposits and withdrawals. + +## Best Practices + +- Keep categories normalized, for example `weapon`, `magazine`, `item`, or +`backpack`. +- Use `locker:patch` for quantity changes. +- Use `locker:remove` when quantity reaches zero. +- Treat the locker response as a hash map keyed by classname. +- Check capacity before bulk operations that may exceed 25 unique items. diff --git a/docus/dist/raw/server-modules/organization.md b/docus/dist/raw/server-modules/organization.md new file mode 100644 index 0000000..2431d12 --- /dev/null +++ b/docus/dist/raw/server-modules/organization.md @@ -0,0 +1,836 @@ +# Organization Usage Guide + +The organization module stores organization records, members, assets, fleet +entries, and credit lines. Durable commands manage persisted records directly. +Hot-state commands support the active organization UI workflows. + +## Storage Model + +Core organization: + +```json +{ + "id": "default", + "owner": "server", + "name": "Default Organization", + "funds": 0.0, + "reputation": 0, + "credit_lines": {} +} +``` + +Hot organization: + +```json +{ + "id": "default", + "owner": "server", + "name": "Default Organization", + "funds": 0.0, + "reputation": 0, + "credit_lines": {}, + "assets": {}, + "fleet": {}, + "members": {}, + "pending_invites": {} +} +``` + +Rules validated by the Rust service: + +- `id` must be non-empty and contain only alphanumeric characters or `_`. +- `owner` must be `server` or a 17-digit Steam UID. +- `name` cannot be empty, cannot exceed 100 characters, and cannot contain +control characters. +- `funds`, reputation, and credit line amounts cannot be negative. +- Player registration is rejected when the player already belongs to a +non-default organization. + +## Durable Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + org:create + + + + org_id + + + , + org_json + + + Organization JSON. +
+ + org:get + + + + org_id + + + Organization JSON. +
+ + org:update + + + + org_id + + + , + patch_json + + + Updated organization JSON. +
+ + org:exists + + + + org_id + + + + true + + + or + false + + + . +
+ + org:delete + + + + org_id + + + + OK + + + . +
+ + org:assets:get + + + + org_id + + + Asset map JSON. +
+ + org:assets:update + + + + org_id + + + , + assets_json + + + Updated asset map JSON. +
+ + org:fleet:get + + + + org_id + + + Fleet map JSON. +
+ + org:fleet:update + + + + org_id + + + , + fleet_json + + + Updated fleet map JSON. +
+ + org:members:get + + + + org_id + + + Member array JSON. +
+ + org:members:add + + + + org_id + + + , + member_uid + + + + OK + + + . +
+ + org:members:remove + + + + org_id + + + , + member_uid + + + + OK + + + . +
+ +## Create an Organization + +The command key is authoritative for `id`. + +```sqf +private _org = createHashMapFromArray [ + ["id", _orgId], + ["owner", getPlayerUID player], + ["name", "Spearnet Logistics"], + ["funds", 0], + ["reputation", 0], + ["credit_lines", createHashMap] +]; + +private _result = "forge_server" callExtension ["org:create", [ + _orgId, + toJSON _org +]]; +``` + +## Update Organization Funds + +```sqf +private _patch = createHashMapFromArray [ + ["funds", 5000], + ["reputation", 10] +]; + +private _result = "forge_server" callExtension ["org:update", [ + _orgId, + toJSON _patch +]]; +``` + +Supported durable patch fields are `id`, `owner`, `name`, `funds`, +`reputation`, and `credit_lines`. + +## Assets and Fleet + +Assets are grouped by category, then classname. + +```sqf +private _assets = createHashMapFromArray [ + ["ammo", createHashMapFromArray [ + ["ACE_30Rnd_65x39_caseless_mag", createHashMapFromArray [ + ["classname", "ACE_30Rnd_65x39_caseless_mag"], + ["type", "ammo"], + ["quantity", 20] + ]] + ]] +]; + +"forge_server" callExtension ["org:assets:update", [_orgId, toJSON _assets]]; +``` + +Fleet is keyed by an internal fleet entry ID. + +```sqf +private _fleet = createHashMapFromArray [ + ["B_Truck_01_transport_F_0", createHashMapFromArray [ + ["classname", "B_Truck_01_transport_F"], + ["name", "Transport Truck"], + ["type", "cars"], + ["status", "Ready"], + ["damage", "0%"] + ]] +]; + +"forge_server" callExtension ["org:fleet:update", [_orgId, toJSON _fleet]]; +``` + +## Hot-State Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + org:hot:init + + + + org_id + + + Hot organization JSON. +
+ + org:hot:get + + + + org_id + + + Hot organization JSON. +
+ + org:hot:override + + + + org_id + + + , + hot_org_json + + + Hot organization JSON. +
+ + org:hot:ensure_member + + + + context_json + + + Hot organization JSON. +
+ + org:hot:member_invites + + + + member_uid + + + Invite array JSON. +
+ + org:hot:register + + + + context_json + + + Register result JSON. +
+ + org:hot:invite_member + + + + context_json + + + Invite result JSON. +
+ + org:hot:accept_invite + + + + context_json + + + Invite decision result JSON. +
+ + org:hot:decline_invite + + + + context_json + + + Invite decision result JSON. +
+ + org:hot:assign_credit_line + + + + context_json + + + Mutation result JSON. +
+ + org:hot:repay_credit_line + + + + context_json + + + Repayment result JSON. +
+ + org:hot:charge_checkout + + + + context_json + + + Mutation result JSON. +
+ + org:hot:add_assets + + + + context_json + + + , + assets_json + + + Mutation result JSON. +
+ + org:hot:add_fleet + + + + context_json + + + , + fleet_json + + + Mutation result JSON. +
+ + org:hot:leave + + + + context_json + + + Leave result JSON. +
+ + org:hot:disband + + + + context_json + + + Disband result JSON. +
+ + org:hot:save + + + + org_id + + + Current hot organization JSON and async durable save. +
+ + org:hot:remove + + + + org_id + + + + OK + + + . +
+ +## Register from UI Context + +```sqf +private _context = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["orgName", "Spearnet Logistics"], + ["existingOrgId", "default"] +]; + +private _result = "forge_server" callExtension ["org:hot:register", [toJSON _context]]; +``` + +## Invite and Accept + +```sqf +private _invite = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["targetUid", _targetUid], + ["targetName", _targetName], + ["targetOrgId", "default"] +]; + +"forge_server" callExtension ["org:hot:invite_member", [toJSON _invite]]; + +private _decision = createHashMapFromArray [ + ["requesterUid", _targetUid], + ["requesterName", _targetName], + ["orgId", _orgId], + ["existingOrgId", "default"] +]; + +"forge_server" callExtension ["org:hot:accept_invite", [toJSON _decision]]; +``` + +## Credit Line Checkout + +```sqf +private _credit = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["memberUid", _memberUid], + ["memberName", _memberName], + ["amount", 1000] +]; + +"forge_server" callExtension ["org:hot:assign_credit_line", [toJSON _credit]]; + +private _charge = createHashMapFromArray [ + ["requesterUid", _memberUid], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["source", "credit_line"], + ["amount", 250], + ["commit", true] +]; + +"forge_server" callExtension ["org:hot:charge_checkout", [toJSON _charge]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Organization error: %1", _payload]; +}; +``` diff --git a/docus/dist/raw/server-modules/owned-storage.md b/docus/dist/raw/server-modules/owned-storage.md new file mode 100644 index 0000000..d494fdf --- /dev/null +++ b/docus/dist/raw/server-modules/owned-storage.md @@ -0,0 +1,806 @@ +# Owned Storage Usage Guide + +Owned storage covers the `owned:locker` and `owned:garage` extension command +groups. These modules store unlock lists rather than physical item or vehicle +instances. + +Use these modules for virtual arsenal and virtual garage unlocks. Use +[Locker Usage Guide](/server-modules/locker) and +[Garage Usage Guide](/server-modules/garage) for physical inventory and stored +vehicle instances. + +## Owned Locker Model + +```json +{ + "items": ["FirstAidKit"], + "weapons": ["arifle_MX_F"], + "magazines": ["30Rnd_65x39_caseless_black_mag"], + "backpacks": ["B_AssaultPack_rgr"] +} +``` + +Supported owned locker categories: + +- `items` +- `weapons` +- `magazines` +- `backpacks` + +New owned lockers are created with default unlocks from the Rust model. + +## Owned Garage Model + +```json +{ + "cars": ["B_Quadbike_01_F"], + "armor": [], + "helis": [], + "planes": [], + "naval": [], + "other": [] +} +``` + +Supported owned garage categories: + +- `cars` +- `armor` +- `helis` +- `planes` +- `naval` +- `other` + +The durable `owned:garage:remove` command currently accepts `heli` for the +helicopter category. Add, get, and hot remove accept `helis`. + +New owned garages are created with default unlocks from the Rust model. + +## Owned Locker Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + owned:locker:create + + + + uid + + + Full owned locker JSON. +
+ + owned:locker:fetch + + + + uid + + + Full owned locker JSON. +
+ + owned:locker:get + + + + uid + + + , + category + + + Category classname array JSON. +
+ + owned:locker:add + + + + uid + + + , + category + + + , + classnames_json + + + Updated category array JSON. +
+ + owned:locker:remove + + + + uid + + + , + category + + + , + classname + + + Updated category array JSON. +
+ + owned:locker:delete + + + + uid + + + + OK + + + . +
+ + owned:locker:exists + + + + uid + + + + true + + + or + false + + + . +
+ +## Owned Garage Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + owned:garage:create + + + + uid + + + Full owned garage JSON. +
+ + owned:garage:fetch + + + + uid + + + Full owned garage JSON. +
+ + owned:garage:get + + + + uid + + + , + category + + + Category classname array JSON. +
+ + owned:garage:add + + + + uid + + + , + category + + + , + classnames_json + + + Updated category array JSON. +
+ + owned:garage:remove + + + + uid + + + , + category + + + , + classname + + + Updated category array JSON. +
+ + owned:garage:delete + + + + uid + + + + OK + + + . +
+ + owned:garage:exists + + + + uid + + + + true + + + or + false + + + . +
+ +## Add Virtual Arsenal Unlocks + +```sqf +private _classes = ["arifle_MX_F", "hgun_P07_F"]; + +private _result = "forge_server" callExtension ["owned:locker:add", [ + getPlayerUID player, + "weapons", + toJSON _classes +]]; +``` + +## Add Virtual Garage Unlocks + +```sqf +private _classes = ["B_Quadbike_01_F", "B_MRAP_01_F"]; + +private _result = "forge_server" callExtension ["owned:garage:add", [ + getPlayerUID player, + "cars", + toJSON _classes +]]; +``` + +## Remove an Unlock + +```sqf +"forge_server" callExtension ["owned:locker:remove", [ + getPlayerUID player, + "weapons", + "arifle_MX_F" +]]; + +"forge_server" callExtension ["owned:garage:remove", [ + getPlayerUID player, + "cars", + "B_Quadbike_01_F" +]]; +``` + +## Hot-State Commands + +Both owned storage modules support hot state. + +Owned locker: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + owned:locker:hot:init + + + + uid + + + Full owned locker JSON. +
+ + owned:locker:hot:fetch + + + + uid + + + Full owned locker JSON. +
+ + owned:locker:hot:get + + + + uid + + + , + category + + + Category array JSON. +
+ + owned:locker:hot:override + + + + uid + + + , + locker_json + + + Full owned locker JSON. +
+ + owned:locker:hot:save + + + + uid + + + Current hot owned locker JSON and async durable save. +
+ + owned:locker:hot:remove + + + + uid + + + + OK + + + . +
+ +Owned garage: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + owned:garage:hot:init + + + + uid + + + Full owned garage JSON. +
+ + owned:garage:hot:fetch + + + + uid + + + Full owned garage JSON. +
+ + owned:garage:hot:get + + + + uid + + + , + category + + + Category array JSON. +
+ + owned:garage:hot:override + + + + uid + + + , + garage_json + + + Full owned garage JSON. +
+ + owned:garage:hot:add + + + + uid + + + , + category + + + , + classnames_json + + + Updated category array JSON. +
+ + owned:garage:hot:remove_item + + + + uid + + + , + category + + + , + classname + + + Updated category array JSON. +
+ + owned:garage:hot:save + + + + uid + + + Current hot owned garage JSON and async durable save. +
+ + owned:garage:hot:remove + + + + uid + + + + OK + + + . +
+ +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Owned storage error: %1", _payload]; +}; +``` diff --git a/docus/dist/raw/server-modules/phone.md b/docus/dist/raw/server-modules/phone.md new file mode 100644 index 0000000..5cdd3dc --- /dev/null +++ b/docus/dist/raw/server-modules/phone.md @@ -0,0 +1,499 @@ +# Phone Usage Guide + +The phone module stores contacts, messages, and emails for each UID. It is a +server-extension state module backed by SurrealDB. + +## Storage Model + +```json +{ + "contacts": ["76561198000000000", "field_commander"], + "messages": [ + { + "id": "phone-message:sender:receiver:1", + "from": "sender", + "to": "receiver", + "message": "Text body", + "timestamp": 123.45, + "read": false + } + ], + "emails": [ + { + "id": "phone-email:sender:receiver:2", + "from": "sender", + "to": "receiver", + "subject": "Subject", + "body": "Email body", + "timestamp": 123.45, + "read": false + } + ] +} +``` + +Rules validated by the Rust service: + +- UID arguments cannot be empty. +- Message and email bodies cannot be empty. +- Empty email subjects become `No subject`. +- Player messages and emails cannot target `field_commander`. +- `field_commander` can send messages or emails to players. +- Deleting a message or email removes it only from the requesting UID's index. + +## Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + phone:init + + + + uid + + + Full phone payload. +
+ + phone:contacts:list + + + + uid + + + Contact UID array. +
+ + phone:contacts:add + + + + uid + + + , + contact_uid + + + + true + + + or + false + + + . +
+ + phone:contacts:remove + + + + uid + + + , + contact_uid + + + + true + + + or + false + + + . +
+ + phone:messages:list + + + + uid + + + Message array. +
+ + phone:messages:thread + + + + uid + + + , + other_uid + + + Message array for both participants. +
+ + phone:messages:send + + + + from_uid + + + , + to_uid + + + , + message + + + , + timestamp + + + Message JSON. +
+ + phone:messages:mark_read + + + + uid + + + , + message_id + + + + true + + + or + false + + + . +
+ + phone:messages:delete + + + + uid + + + , + message_id + + + + true + + + or + false + + + . +
+ + phone:emails:list + + + + uid + + + Email array. +
+ + phone:emails:send + + + + from_uid + + + , + to_uid + + + , + subject + + + , + body + + + , + timestamp + + + Email JSON. +
+ + phone:emails:mark_read + + + + uid + + + , + email_id + + + + true + + + or + false + + + . +
+ + phone:emails:delete + + + + uid + + + , + email_id + + + + true + + + or + false + + + . +
+ + phone:remove + + + + uid + + + + OK + + + . +
+ +## Initialize Phone State + +`phone:init` creates phone state if needed and seeds self-contact plus +`field_commander`. + +```sqf +private _result = "forge_server" callExtension ["phone:init", [getPlayerUID player]]; +private _payload = _result select 0; + +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Phone init failed: %1", _payload]; +}; + +private _phone = fromJSON _payload; +``` + +## Send a Message + +```sqf +private _timestamp = str diag_tickTime; + +private _result = "forge_server" callExtension ["phone:messages:send", [ + getPlayerUID player, + _targetUid, + "Move to checkpoint Alpha.", + _timestamp +]]; +``` + +## Read a Conversation + +```sqf +private _result = "forge_server" callExtension ["phone:messages:thread", [ + getPlayerUID player, + _otherUid +]]; + +private _messages = fromJSON (_result select 0); +``` + +## Send an Email + +```sqf +private _result = "forge_server" callExtension ["phone:emails:send", [ + getPlayerUID player, + _targetUid, + "Supply Request", + "Requesting resupply at grid 123456.", + str diag_tickTime +]]; +``` + +## Mark and Delete Records + +```sqf +"forge_server" callExtension ["phone:messages:mark_read", [ + getPlayerUID player, + _messageId +]]; + +"forge_server" callExtension ["phone:emails:delete", [ + getPlayerUID player, + _emailId +]]; +``` + +## Error Handling + +```sqf +private _payload = (_result select 0); +if (_payload find "Error:" == 0) then { + systemChat format ["Phone error: %1", _payload]; +}; +``` diff --git a/docus/dist/raw/server-modules/store.md b/docus/dist/raw/server-modules/store.md new file mode 100644 index 0000000..fc29a9b --- /dev/null +++ b/docus/dist/raw/server-modules/store.md @@ -0,0 +1,185 @@ +# Store Usage Guide + +The store module processes checkout requests. It charges a payment source and +grants purchased items to the player locker, virtual arsenal locker, and +virtual garage unlocks. + +## Server SQF Module + +The server addon uses two long-lived module objects: + +- `StorefrontStore` is the storefront workflow facade. It builds hydrate +payloads, validates checkout requests, calls the Rust `store:checkout` +command, syncs UI patches, and asks related module stores to save hot state. +- `StoreCatalogService` scans configured item and vehicle categories, builds +catalog responses, resolves checkout entries, and calculates authoritative +prices. + +Editor-placed store entities are initialized by `fnc_initStore` during store +post-init. The initializer matches non-null mission namespace objects whose +variable names contain `store` and sets `isStore = true`, following the same +pattern used by garage entities. + +## Checkout Model + +`store:checkout` accepts one JSON context. + +```json +{ + "requesterUid": "76561198000000000", + "requesterName": "Player Name", + "orgId": "default", + "requesterIsDefaultOrgCeo": false, + "paymentMethod": "bank", + "items": [ + { + "classname": "arifle_MX_F", + "category": "weapon", + "priceValue": 500, + "quantity": 1 + } + ], + "vehicles": [ + { + "classname": "B_Quadbike_01_F", + "category": "cars", + "priceValue": 1500 + } + ] +} +``` + +Rules validated by the Rust service: + +- `requesterUid` is required. +- At least one item or vehicle is required. +- The checkout total must be greater than zero. +- Item categories must be `item`, `attachment`, `weapon`, `magazine`, or +`backpack`. +- Vehicle categories must be `cars`, `armor`, `helis`, `planes`, `naval`, or +`other`. +- Payment method must be `cash`, `bank`, `org_funds`, or `credit_line`. +- Player locker capacity cannot exceed 25 unique items after checkout. +- Organization funds can only be charged by the org owner or the default org +CEO flag. + +## Command + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + store:checkout + + + + checkout_json + + + Checkout result JSON. +
+ +## Result Model + +```json +{ + "chargedTotal": 2000.0, + "paymentMethod": "bank", + "message": "Checkout completed. $2,000 charged, 1 locker grant(s), 1 vehicle unlock(s).", + "lockerGranted": [], + "vehicleGranted": [], + "lockerPatch": {}, + "vaPatch": {}, + "vgaragePatch": {}, + "bankPatch": {}, + "orgPatch": {}, + "orgTargetUids": [] +} +``` + +Patch fields are intended for UI updates after checkout. The service commits +all grants and payment changes together, and attempts rollback if a later write +fails. + +## Player Bank Checkout + +```sqf +private _item = createHashMapFromArray [ + ["classname", "arifle_MX_F"], + ["category", "weapon"], + ["priceValue", 500], + ["quantity", 1] +]; + +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", "default"], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "bank"], + ["items", [_item]], + ["vehicles", []] +]; + +private _result = "forge_server" callExtension ["store:checkout", [toJSON _checkout]]; +``` + +## Organization Funds Checkout + +When `paymentMethod` is `org_funds`, vehicles are also added to the +organization fleet patch. + +```sqf +private _vehicle = createHashMapFromArray [ + ["classname", "B_Quadbike_01_F"], + ["category", "cars"], + ["priceValue", 1500] +]; + +private _checkout = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["requesterName", name player], + ["orgId", _orgId], + ["requesterIsDefaultOrgCeo", false], + ["paymentMethod", "org_funds"], + ["items", []], + ["vehicles", [_vehicle]] +]; + +private _result = "forge_server" callExtension ["store:checkout", [toJSON _checkout]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + hint format ["Checkout failed: %1", _payload]; +}; + +private _checkoutResult = fromJSON _payload; +``` diff --git a/docus/dist/raw/server-modules/task.md b/docus/dist/raw/server-modules/task.md new file mode 100644 index 0000000..268654d --- /dev/null +++ b/docus/dist/raw/server-modules/task.md @@ -0,0 +1,597 @@ +# Task Usage Guide + +The task module stores transient mission task metadata for active server or +mission lifecycle workflows. SQF still owns Arma-only runtime state such as +objects and participants. + +The server addon at `arma/server/addons/task` also owns task execution: +creating BIS tasks, registering task entities, tracking participants, binding +task ownership, applying player/org rewards, and clearing task state when a +task completes. + +Runtime dependencies: + +- `forge_server_extension` +- `forge_server_common` +- `forge_server_actor` +- `forge_server_bank` +- `forge_server_org` +- `forge_client_notifications` + +## Data Model + +Catalog entries are flexible JSON objects. The service normalizes these fields +when a catalog entry is inserted or ownership changes: + +- `taskId` +- `taskID` +- `accepted` +- `requesterUid` +- `orgID` + +Ownership context: + +```json +{ + "requesterUid": "76561198000000000", + "orgId": "default" +} +``` + +## Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Command + + Arguments + + Returns +
+ + task:reset + + + none + + + true + + + . +
+ + task:catalog:active + + + none + + Active catalog entry array JSON. +
+ + task:catalog:get + + + + task_id + + + Catalog entry JSON or + null + + + . +
+ + task:catalog:upsert + + + + task_id + + + , + entry_json + + + Stored catalog entry JSON. +
+ + task:catalog:delete + + + + task_id + + + + true + + + . +
+ + task:ownership:bind + + + + task_id + + + , + ownership_json + + + Ownership mutation result JSON. +
+ + task:ownership:release + + + + task_id + + + Ownership mutation result JSON. +
+ + task:ownership:accept + + + + task_id + + + , + ownership_json + + + Ownership mutation result JSON. +
+ + task:ownership:reward_context + + + + task_id + + + Reward context JSON. +
+ + task:status:set + + + + task_id + + + , + status + + + + true + + + . +
+ + task:status:get + + + + task_id + + + Status string JSON. +
+ + task:status:clear + + + + task_id + + + + true + + + . +
+ + task:defuse:increment + + + + task_id + + + New counter value JSON. +
+ + task:defuse:get + + + + task_id + + + Counter value JSON. +
+ + task:clear + + + + task_id + + + + true + + + . +
+ +## Upsert a Catalog Entry + +```sqf +private _entry = createHashMapFromArray [ + ["title", "Destroy Cache"], + ["description", "Destroy the enemy supply cache."], + ["reward", 1500] +]; + +private _result = "forge_server" callExtension ["task:catalog:upsert", [ + "task-cache-1", + toJSON _entry +]]; +``` + +## Mark a Task Active + +```sqf +"forge_server" callExtension ["task:status:set", [ + "task-cache-1", + "active" +]]; + +private _active = "forge_server" callExtension ["task:catalog:active", []]; +``` + +Completed statuses `succeeded` and `failed` are also stored as completed status +fallbacks. Clearing status removes active and completed state. + +## Accept a Task + +```sqf +private _ownership = createHashMapFromArray [ + ["requesterUid", getPlayerUID player], + ["orgId", "default"] +]; + +private _result = "forge_server" callExtension ["task:ownership:accept", [ + "task-cache-1", + toJSON _ownership +]]; +``` + +`task:ownership:accept` fails if the task is not active or another requester +already accepted it. + +## Rewards + +```sqf +private _result = "forge_server" callExtension ["task:ownership:reward_context", [ + "task-cache-1" +]]; + +private _context = fromJSON (_result select 0); +``` + +The reward context contains `requesterUid` and `orgId`. + +## Server Task Flows + +The task addon provides these server-owned task flows: + +- `attack` +- `defend` +- `defuse` +- `delivery` +- `destroy` +- `hostage` +- `hvt` + +Mission designers can create tasks in four ways: + +- Eden modules for editor-authored tasks. +- `forge_server_task_fnc_startTask` for script-authored tasks. +- `forge_server_task_fnc_handler` for pre-registered entities with reputation +gating and ownership binding. This path expects the BIS task and catalog +entry to already exist if map-task and CAD visibility are required. +- Direct task function calls for server-owned or mission-authored flows that +intentionally fall back to the `default` org. This path expects the BIS task +to already exist if map-task visibility is required. + +The dynamic mission manager can also generate attack tasks from config. That is +system-generated content rather than a hand-authored task creation path. + +## CAD Compatibility + +CAD hydrates assignable tasks from `TaskStore.getActiveTaskCatalog`. A task must +have a catalog entry and active task status before CAD can show and assign it. + +CAD-compatible creation paths: + +- Eden modules: compatible because they delegate to +`forge_server_task_fnc_startTask`. +- `forge_server_task_fnc_startTask`: compatible because it registers the +catalog entry, creates the BIS task, and dispatches through the handler. +- Dynamic mission manager attack tasks: compatible because the mission manager +uses `forge_server_task_fnc_startTask`. + +Limited or incompatible paths: + +- `forge_server_task_fnc_handler`: only compatible if a catalog entry was +already registered elsewhere. The handler sets active status and ownership, +but it does not create the BIS task shown in the map task tab or upsert the +catalog entry. +- Direct task function calls: not CAD-compatible by default. They bypass +`startTask` and usually do not register the task catalog entry or active +status that CAD hydrates from. They also only call `BIS_fnc_taskSetState` at +completion/failure; they do not create the BIS task first. + +## BIS Map Task Prerequisite + +Only the Eden task modules and `forge_server_task_fnc_startTask` create the BIS +task automatically through `BIS_fnc_taskCreate`. + +If a mission uses `forge_server_task_fnc_handler` directly or calls a task flow +function such as `forge_server_task_fnc_attack`, the mission must create a BIS +task with the same task ID before the Forge task completes. Otherwise the +success/failure `BIS_fnc_taskSetState` call has no visible map task to update. + +That prerequisite can be satisfied with a vanilla Eden task creation module or +a scripted `BIS_fnc_taskCreate` call. `forge_server_task_fnc_startTask` is the +preferred Forge path because it handles BIS task creation, Forge catalog +registration, entity registration, and handler dispatch together. + +## Eden Modules + +Eden task modules are the normal designer-facing path. Place the module, +configure its attributes, and sync it to the relevant entities or grouping +modules. + +Available task modules: + +- `FORGE_Module_Attack`: sync directly to target units or vehicles. +- `FORGE_Module_Destroy`: sync directly to objects, vehicles, or units. +- `FORGE_Module_Defuse`: sync to `FORGE_Module_Explosives` and optionally +`FORGE_Module_Protected`. +- `FORGE_Module_Delivery`: sync to `FORGE_Module_Cargo`; the cargo module syncs +to cargo objects. +- `FORGE_Module_Hostage`: sync to `FORGE_Module_Hostages` and +`FORGE_Module_Shooters`. +- `FORGE_Module_HVT`: sync directly to HVT units. +- `FORGE_Module_Defend`: configure the defense marker and wave settings. + +These modules delegate to `forge_server_task_fnc_startTask`. + +## Scripted Start Task + +Use `forge_server_task_fnc_startTask` when creating tasks from modules, +mission scripts, or generated mission-manager content. It registers task +entities, creates the BIS task, stores the catalog entry, then dispatches +through `forge_server_task_fnc_handler`. + +```sqf +[ + "attack", + "compound_attack_01", + getPosATL leader1, + "Attack: East Compound", + "Eliminate all hostile forces.", + createHashMapFromArray [["targets", [unit1, unit2, unit3]]], + createHashMapFromArray [ + ["limitFail", 0], + ["limitSuccess", 3], + ["funds", 50000], + ["ratingFail", -10], + ["ratingSuccess", 20], + ["timeLimit", 900] + ], + 0, + getPlayerUID player, + "script" +] call forge_server_task_fnc_startTask; +``` + +## Handler Calls + +Use `forge_server_task_fnc_handler` directly when the task entities are already +registered and you want reputation gating plus ownership binding. Create the +BIS task and catalog entry separately if this task should appear in the map +task tab or CAD: + +```sqf +[ + "delivery", + ["delivery_1", 1, 3, "delivery_zone", 250000, -75, 300, false, false, 900], + 250, + getPlayerUID player +] call forge_server_task_fnc_handler; +``` + +## Direct Task Calls + +Direct task function calls still work for mission-authored or server-owned +tasks, but they do not provide a requester UID. Ownership falls back to the +`default` org. Create the BIS task separately if this task should appear in the +map task tab. + +## Timer Semantics + +Task time limits use `0` for no limit: + +- attack `timeLimit` +- destroy `timeLimit` +- delivery `timeLimit` +- hostage `timeLimit` +- HVT `timeLimit` + +Positive values are measured in seconds. Do not pass `-1` as a no-limit value; +the task runtime treats any non-zero task time limit as active. + +Defuse IED timers are different. `iedTimer` must be greater than `0`, because +IEDs are expected to have an active countdown. The Eden defuse module defaults +to `300` seconds. + +## Defuse Counter + +```sqf +"forge_server" callExtension ["task:defuse:increment", ["task-cache-1"]]; +private _count = "forge_server" callExtension ["task:defuse:get", ["task-cache-1"]]; +``` + +## Error Handling + +```sqf +private _payload = _result select 0; +if (_payload find "Error:" == 0) exitWith { + systemChat format ["Task error: %1", _payload]; +}; +``` diff --git a/docus/dist/server-extension.html b/docus/dist/server-extension.html new file mode 100644 index 0000000..5090d1a --- /dev/null +++ b/docus/dist/server-extension.html @@ -0,0 +1,125 @@ +Forge Server Extension - forge-docus
Forge Server Extension

Forge Server Extension

Forge Server is an arma-rs extension for Arma 3 server-side persistence and +domain services. It exposes game-facing commands and stores durable state in +SurrealDB.

Forge Server Extension

Forge Server is an arma-rs extension for Arma 3 server-side persistence and +domain services. It exposes game-facing commands and stores durable state in +SurrealDB.

Architecture

SQF modules call forge_server through fnc_extCall. Small requests use the +direct callExtension path, while large payloads are staged through the +transport layer.

SQF module
+  -> extension bridge
+  -> domain command
+  -> service layer
+  -> repository
+  -> SurrealDB
+

Configuration

Copy config.example.toml to config.toml next to the extension DLL.

[surreal]
+endpoint = "127.0.0.1:8000"
+namespace = "forge"
+database = "main"
+username = "root"
+password = "root"
+connect_timeout_ms = 5000
+

For install links and Forge-specific setup steps, see +SurrealDB Setup.

References

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-extension/_payload.json b/docus/dist/server-extension/_payload.json new file mode 100644 index 0000000..96e5c31 --- /dev/null +++ b/docus/dist/server-extension/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":305},["ShallowReactive",2],{"navigation_docs":3,"-server-extension":145,"-server-extension-surround":300},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":28,"body":147,"description":157,"extension":294,"links":295,"meta":296,"navigation":297,"path":29,"seo":298,"stem":30,"__hash__":299},"docs\u002F2.server-extension\u002F0.index.md",{"type":148,"value":149,"toc":289},"minimark",[150,154,158,163,179,189,193,204,255,262,266,285],[151,152,28],"h1",{"id":153},"forge-server-extension",[155,156,157],"p",{},"Forge Server is an arma-rs extension for Arma 3 server-side persistence and\ndomain services. It exposes game-facing commands and stores durable state in\nSurrealDB.",[159,160,162],"h2",{"id":161},"architecture","Architecture",[155,164,165,166,170,171,174,175,178],{},"SQF modules call ",[167,168,169],"code",{},"forge_server"," through ",[167,172,173],{},"fnc_extCall",". Small requests use the\ndirect ",[167,176,177],{},"callExtension"," path, while large payloads are staged through the\ntransport layer.",[180,181,187],"pre",{"className":182,"code":184,"language":185,"meta":186},[183],"language-text","SQF module\n -> extension bridge\n -> domain command\n -> service layer\n -> repository\n -> SurrealDB\n","text","",[167,188,184],{"__ignoreMap":186},[159,190,192],{"id":191},"configuration","Configuration",[155,194,195,196,199,200,203],{},"Copy ",[167,197,198],{},"config.example.toml"," to ",[167,201,202],{},"config.toml"," next to the extension DLL.",[180,205,209],{"className":206,"code":207,"language":208,"meta":186,"style":186},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[surreal]\nendpoint = \"127.0.0.1:8000\"\nnamespace = \"forge\"\ndatabase = \"main\"\nusername = \"root\"\npassword = \"root\"\nconnect_timeout_ms = 5000\n","toml",[167,210,211,219,225,231,237,243,249],{"__ignoreMap":186},[212,213,216],"span",{"class":214,"line":215},"line",1,[212,217,218],{},"[surreal]\n",[212,220,222],{"class":214,"line":221},2,[212,223,224],{},"endpoint = \"127.0.0.1:8000\"\n",[212,226,228],{"class":214,"line":227},3,[212,229,230],{},"namespace = \"forge\"\n",[212,232,234],{"class":214,"line":233},4,[212,235,236],{},"database = \"main\"\n",[212,238,240],{"class":214,"line":239},5,[212,241,242],{},"username = \"root\"\n",[212,244,246],{"class":214,"line":245},6,[212,247,248],{},"password = \"root\"\n",[212,250,252],{"class":214,"line":251},7,[212,253,254],{},"connect_timeout_ms = 5000\n",[155,256,257,258,261],{},"For install links and Forge-specific setup steps, see\n",[259,260,23],"a",{"href":24},".",[159,263,265],{"id":264},"references","References",[267,268,269,275,280],"ul",{},[270,271,272],"li",{},[259,273,274],{"href":35},"API Reference",[270,276,277],{},[259,278,279],{"href":39},"Usage Examples",[270,281,282],{},[259,283,284],{"href":6},"Framework Module Guides",[286,287,288],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":186,"searchDepth":221,"depth":221,"links":290},[291,292,293],{"id":161,"depth":221,"text":162},{"id":191,"depth":221,"text":192},{"id":264,"depth":221,"text":265},"md",null,{},true,{"title":28,"description":157},"SU6vHrINTwEWo9oGCzI4XL2aIeAMs6_cQbRNoeKCsys",[301,303],{"title":23,"path":24,"stem":25,"description":302,"children":-1},"Forge uses SurrealDB for durable storage. The Rust server extension connects to\nSurrealDB on startup and applies Forge schema modules automatically, so setup\ncomes down to running a reachable database and matching the Forge config.",{"title":34,"path":35,"stem":36,"description":304,"children":-1},"The Forge server extension exposes domain-oriented commands through\ncallExtension. Persistent data is stored through the configured SurrealDB\nconnection and schema modules.",1776806627034] \ No newline at end of file diff --git a/docus/dist/server-extension/api-reference.html b/docus/dist/server-extension/api-reference.html new file mode 100644 index 0000000..b72f125 --- /dev/null +++ b/docus/dist/server-extension/api-reference.html @@ -0,0 +1,112 @@ +Forge Server API Reference - forge-docus
Forge Server Extension

Forge Server API Reference

The Forge server extension exposes domain-oriented commands through +callExtension. Persistent data is stored through the configured SurrealDB +connection and schema modules.

Forge Server API Reference

The Forge server extension exposes domain-oriented commands through +callExtension. Persistent data is stored through the configured SurrealDB +connection and schema modules.

Core Commands

"forge_server" callExtension ["version", []];
+"forge_server" callExtension ["status", []];
+"forge_server" callExtension ["surreal:status", []];
+

status and surreal:status return initializing, connected, or failed.

Domain Commands

Game systems should call the domain APIs instead of raw database operations:

  • actor:*
  • bank:*
  • garage:*
  • locker:*
  • org:*
  • phone:*
  • store:*
  • task:*
  • cad:*
  • owned:garage:*
  • owned:locker:*
  • transport:*

Large request and response payloads are routed through the transport layer when +needed by forge_server_addons_extension_fnc_extCall.

Module Guides

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-extension/api-reference/_payload.json b/docus/dist/server-extension/api-reference/_payload.json new file mode 100644 index 0000000..c0b1b03 --- /dev/null +++ b/docus/dist/server-extension/api-reference/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":374},["ShallowReactive",2],{"navigation_docs":3,"-server-extension-api-reference":145,"-server-extension-api-reference-surround":369},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":34,"body":147,"description":362,"extension":363,"links":364,"meta":365,"navigation":366,"path":35,"seo":367,"stem":36,"__hash__":368},"docs\u002F2.server-extension\u002F1.api-reference.md",{"type":148,"value":149,"toc":357},"minimark",[150,154,163,168,197,219,223,226,290,296,300,353],[151,152,34],"h1",{"id":153},"forge-server-api-reference",[155,156,157,158,162],"p",{},"The Forge server extension exposes domain-oriented commands through\n",[159,160,161],"code",{},"callExtension",". Persistent data is stored through the configured SurrealDB\nconnection and schema modules.",[164,165,167],"h2",{"id":166},"core-commands","Core Commands",[169,170,175],"pre",{"className":171,"code":172,"language":173,"meta":174,"style":174},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"forge_server\" callExtension [\"version\", []];\n\"forge_server\" callExtension [\"status\", []];\n\"forge_server\" callExtension [\"surreal:status\", []];\n","sqf","",[159,176,177,185,191],{"__ignoreMap":174},[178,179,182],"span",{"class":180,"line":181},"line",1,[178,183,184],{},"\"forge_server\" callExtension [\"version\", []];\n",[178,186,188],{"class":180,"line":187},2,[178,189,190],{},"\"forge_server\" callExtension [\"status\", []];\n",[178,192,194],{"class":180,"line":193},3,[178,195,196],{},"\"forge_server\" callExtension [\"surreal:status\", []];\n",[155,198,199,202,203,206,207,210,211,214,215,218],{},[159,200,201],{},"status"," and ",[159,204,205],{},"surreal:status"," return ",[159,208,209],{},"initializing",", ",[159,212,213],{},"connected",", or ",[159,216,217],{},"failed",".",[164,220,222],{"id":221},"domain-commands","Domain Commands",[155,224,225],{},"Game systems should call the domain APIs instead of raw database operations:",[227,228,229,235,240,245,250,255,260,265,270,275,280,285],"ul",{},[230,231,232],"li",{},[159,233,234],{},"actor:*",[230,236,237],{},[159,238,239],{},"bank:*",[230,241,242],{},[159,243,244],{},"garage:*",[230,246,247],{},[159,248,249],{},"locker:*",[230,251,252],{},[159,253,254],{},"org:*",[230,256,257],{},[159,258,259],{},"phone:*",[230,261,262],{},[159,263,264],{},"store:*",[230,266,267],{},[159,268,269],{},"task:*",[230,271,272],{},[159,273,274],{},"cad:*",[230,276,277],{},[159,278,279],{},"owned:garage:*",[230,281,282],{},[159,283,284],{},"owned:locker:*",[230,286,287],{},[159,288,289],{},"transport:*",[155,291,292,293,218],{},"Large request and response payloads are routed through the transport layer when\nneeded by ",[159,294,295],{},"forge_server_addons_extension_fnc_extCall",[164,297,299],{"id":298},"module-guides","Module Guides",[227,301,302,308,313,318,323,328,333,338,343,348],{},[230,303,304],{},[305,306,307],"a",{"href":50},"Actor",[230,309,310],{},[305,311,312],{"href":62},"Bank",[230,314,315],{},[305,316,317],{"href":66},"CAD",[230,319,320],{},[305,321,322],{"href":74},"Garage",[230,324,325],{},[305,326,327],{"href":78},"Locker",[230,329,330],{},[305,331,332],{"href":82},"Organization",[230,334,335],{},[305,336,337],{"href":86},"Owned Storage",[230,339,340],{},[305,341,342],{"href":90},"Phone",[230,344,345],{},[305,346,347],{"href":54},"Store",[230,349,350],{},[305,351,352],{"href":58},"Task",[354,355,356],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":187,"depth":187,"links":358},[359,360,361],{"id":166,"depth":187,"text":167},{"id":221,"depth":187,"text":222},{"id":298,"depth":187,"text":299},"The Forge server extension exposes domain-oriented commands through\ncallExtension. Persistent data is stored through the configured SurrealDB\nconnection and schema modules.","md",null,{},true,{"title":34,"description":362},"j66Yivw9bhQFaFdk5v93_NuOAXUf0pyKZ7fE_8PMmcQ",[370,372],{"title":28,"path":29,"stem":30,"description":371,"children":-1},"Forge Server is an arma-rs extension for Arma 3 server-side persistence and\ndomain services. It exposes game-facing commands and stores durable state in\nSurrealDB.",{"title":38,"path":39,"stem":40,"description":373,"children":-1},"These examples use the domain command surface exposed by the extension.\nPersistence is handled by the server through SurrealDB.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-extension/usage-examples.html b/docus/dist/server-extension/usage-examples.html new file mode 100644 index 0000000..10fda26 --- /dev/null +++ b/docus/dist/server-extension/usage-examples.html @@ -0,0 +1,131 @@ +Forge Server Usage Examples - forge-docus
Forge Server Extension

Forge Server Usage Examples

These examples use the domain command surface exposed by the extension. +Persistence is handled by the server through SurrealDB.

Forge Server Usage Examples

These examples use the domain command surface exposed by the extension. +Persistence is handled by the server through SurrealDB.

Status Check

["status", []] call forge_server_extension_fnc_extCall params ["_status", "_ok"];
+if (_ok && {_status isEqualTo "connected"}) then {
+    systemChat "Forge persistence is online.";
+};
+

Actor Fetch

private _uid = getPlayerUID player;
+["actor:get", [_uid]] call forge_server_extension_fnc_extCall params ["_payload", "_ok"];
+if (_ok) then {
+    private _actor = fromJSON _payload;
+    systemChat format ["Loaded actor %1", _actor getOrDefault ["uid", _uid]];
+};
+

Store Checkout

private _checkout = createHashMapFromArray [
+    ["requesterUid", getPlayerUID player],
+    ["requesterName", name player],
+    ["orgId", "default"],
+    ["requesterIsDefaultOrgCeo", false],
+    ["paymentMethod", "bank"],
+    ["items", [
+        createHashMapFromArray [
+            ["classname", "FirstAidKit"],
+            ["category", "item"],
+            ["priceValue", 50],
+            ["quantity", 2]
+        ]
+    ]],
+    ["vehicles", []]
+];
+
+["store:checkout", [toJSON _checkout]] call forge_server_extension_fnc_extCall;
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-extension/usage-examples/_payload.json b/docus/dist/server-extension/usage-examples/_payload.json new file mode 100644 index 0000000..605a29a --- /dev/null +++ b/docus/dist/server-extension/usage-examples/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":370},["ShallowReactive",2],{"navigation_docs":3,"-server-extension-usage-examples":145,"-server-extension-usage-examples-surround":365},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":38,"body":147,"description":157,"extension":360,"links":361,"meta":362,"navigation":343,"path":39,"seo":363,"stem":40,"__hash__":364},"docs\u002F2.server-extension\u002F2.usage-examples.md",{"type":148,"value":149,"toc":355},"minimark",[150,154,158,163,199,203,239,243,351],[151,152,38],"h1",{"id":153},"forge-server-usage-examples",[155,156,157],"p",{},"These examples use the domain command surface exposed by the extension.\nPersistence is handled by the server through SurrealDB.",[159,160,162],"h2",{"id":161},"status-check","Status Check",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[\"status\", []] call forge_server_extension_fnc_extCall params [\"_status\", \"_ok\"];\nif (_ok && {_status isEqualTo \"connected\"}) then {\n systemChat \"Forge persistence is online.\";\n};\n","sqf","",[171,172,173,181,187,193],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,180],{},"[\"status\", []] call forge_server_extension_fnc_extCall params [\"_status\", \"_ok\"];\n",[174,182,184],{"class":176,"line":183},2,[174,185,186],{},"if (_ok && {_status isEqualTo \"connected\"}) then {\n",[174,188,190],{"class":176,"line":189},3,[174,191,192],{}," systemChat \"Forge persistence is online.\";\n",[174,194,196],{"class":176,"line":195},4,[174,197,198],{},"};\n",[159,200,202],{"id":201},"actor-fetch","Actor Fetch",[164,204,206],{"className":166,"code":205,"language":168,"meta":169,"style":169},"private _uid = getPlayerUID player;\n[\"actor:get\", [_uid]] call forge_server_extension_fnc_extCall params [\"_payload\", \"_ok\"];\nif (_ok) then {\n private _actor = fromJSON _payload;\n systemChat format [\"Loaded actor %1\", _actor getOrDefault [\"uid\", _uid]];\n};\n",[171,207,208,213,218,223,228,234],{"__ignoreMap":169},[174,209,210],{"class":176,"line":177},[174,211,212],{},"private _uid = getPlayerUID player;\n",[174,214,215],{"class":176,"line":183},[174,216,217],{},"[\"actor:get\", [_uid]] call forge_server_extension_fnc_extCall params [\"_payload\", \"_ok\"];\n",[174,219,220],{"class":176,"line":189},[174,221,222],{},"if (_ok) then {\n",[174,224,225],{"class":176,"line":195},[174,226,227],{}," private _actor = fromJSON _payload;\n",[174,229,231],{"class":176,"line":230},5,[174,232,233],{}," systemChat format [\"Loaded actor %1\", _actor getOrDefault [\"uid\", _uid]];\n",[174,235,237],{"class":176,"line":236},6,[174,238,198],{},[159,240,242],{"id":241},"store-checkout","Store Checkout",[164,244,246],{"className":166,"code":245,"language":168,"meta":169,"style":169},"private _checkout = createHashMapFromArray [\n [\"requesterUid\", getPlayerUID player],\n [\"requesterName\", name player],\n [\"orgId\", \"default\"],\n [\"requesterIsDefaultOrgCeo\", false],\n [\"paymentMethod\", \"bank\"],\n [\"items\", [\n createHashMapFromArray [\n [\"classname\", \"FirstAidKit\"],\n [\"category\", \"item\"],\n [\"priceValue\", 50],\n [\"quantity\", 2]\n ]\n ]],\n [\"vehicles\", []]\n];\n\n[\"store:checkout\", [toJSON _checkout]] call forge_server_extension_fnc_extCall;\n",[171,247,248,253,258,263,268,273,278,284,290,296,302,308,314,320,326,332,338,345],{"__ignoreMap":169},[174,249,250],{"class":176,"line":177},[174,251,252],{},"private _checkout = createHashMapFromArray [\n",[174,254,255],{"class":176,"line":183},[174,256,257],{}," [\"requesterUid\", getPlayerUID player],\n",[174,259,260],{"class":176,"line":189},[174,261,262],{}," [\"requesterName\", name player],\n",[174,264,265],{"class":176,"line":195},[174,266,267],{}," [\"orgId\", \"default\"],\n",[174,269,270],{"class":176,"line":230},[174,271,272],{}," [\"requesterIsDefaultOrgCeo\", false],\n",[174,274,275],{"class":176,"line":236},[174,276,277],{}," [\"paymentMethod\", \"bank\"],\n",[174,279,281],{"class":176,"line":280},7,[174,282,283],{}," [\"items\", [\n",[174,285,287],{"class":176,"line":286},8,[174,288,289],{}," createHashMapFromArray [\n",[174,291,293],{"class":176,"line":292},9,[174,294,295],{}," [\"classname\", \"FirstAidKit\"],\n",[174,297,299],{"class":176,"line":298},10,[174,300,301],{}," [\"category\", \"item\"],\n",[174,303,305],{"class":176,"line":304},11,[174,306,307],{}," [\"priceValue\", 50],\n",[174,309,311],{"class":176,"line":310},12,[174,312,313],{}," [\"quantity\", 2]\n",[174,315,317],{"class":176,"line":316},13,[174,318,319],{}," ]\n",[174,321,323],{"class":176,"line":322},14,[174,324,325],{}," ]],\n",[174,327,329],{"class":176,"line":328},15,[174,330,331],{}," [\"vehicles\", []]\n",[174,333,335],{"class":176,"line":334},16,[174,336,337],{},"];\n",[174,339,341],{"class":176,"line":340},17,[174,342,344],{"emptyLinePlaceholder":343},true,"\n",[174,346,348],{"class":176,"line":347},18,[174,349,350],{},"[\"store:checkout\", [toJSON _checkout]] call forge_server_extension_fnc_extCall;\n",[352,353,354],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":169,"searchDepth":183,"depth":183,"links":356},[357,358,359],{"id":161,"depth":183,"text":162},{"id":201,"depth":183,"text":202},{"id":241,"depth":183,"text":242},"md",null,{},{"title":38,"description":157},"O2TDcTyKl2_BCCIWxjtCzQoYYhkNwSnA_sZaeMXSjNw",[366,368],{"title":34,"path":35,"stem":36,"description":367,"children":-1},"The Forge server extension exposes domain-oriented commands through\ncallExtension. Persistent data is stored through the configured SurrealDB\nconnection and schema modules.",{"title":47,"path":43,"stem":44,"description":369,"children":-1},"These pages document the authoritative server-side workflows in Forge.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules.html b/docus/dist/server-modules.html new file mode 100644 index 0000000..f22f735 --- /dev/null +++ b/docus/dist/server-modules.html @@ -0,0 +1,100 @@ +Server Module Guides - forge-docus
Server Modules

Server Module Guides

These pages document the authoritative server-side workflows in Forge.

Server Module Guides

These pages document the authoritative server-side workflows in Forge.

Most modules follow the same shape:

  1. Server SQF gathers game context and validates mission/runtime assumptions.
  2. The forge_server extension routes the request into the matching command group.
  3. Services apply business rules through storage-agnostic repository traits.
  4. The extension persists durable state through SurrealDB adapters when needed.

Gameplay Domains

Actor
Persistent player identity, position, loadout, contact fields, and hot state.
Bank
Player funds, transfers, PIN validation, checkout charging, and bank hot state.
CAD
Dispatch requests, assignments, profiles, grouped state, and hydrated views.
Economy
Fuel, service, and medical charging rules across player and organization funds.
Garage
Vehicle storage, hot-state updates, and persistence of vehicle condition.
Locker
Player inventory storage, unique item limits, and locker hot-state behavior.
Organization
Membership, treasury, shared assets, fleet, and organization hot workflows.
Owned Storage
Owner-scoped locker and vehicle unlock storage used by org-linked features.
Phone
Contacts, message threads, and email state for in-game phone workflows.
Store
Checkout orchestration across pricing, grants, payment sources, and rollback.
Task
Task catalog, ownership, status transitions, defuse counters, and rewards.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/_payload.json b/docus/dist/server-modules/_payload.json new file mode 100644 index 0000000..22def03 --- /dev/null +++ b/docus/dist/server-modules/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":262},["ShallowReactive",2],{"navigation_docs":3,"-server-modules":145,"-server-modules-surround":257},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":47,"body":147,"description":157,"extension":251,"links":252,"meta":253,"navigation":254,"path":43,"seo":255,"stem":44,"__hash__":256},"docs\u002F3.server-modules\u002F0.index.md",{"type":148,"value":149,"toc":246},"minimark",[150,154,158,161,182,187],[151,152,47],"h1",{"id":153},"server-module-guides",[155,156,157],"p",{},"These pages document the authoritative server-side workflows in Forge.",[155,159,160],{},"Most modules follow the same shape:",[162,163,164,168,176,179],"ol",{},[165,166,167],"li",{},"Server SQF gathers game context and validates mission\u002Fruntime assumptions.",[165,169,170,171,175],{},"The ",[172,173,174],"code",{},"forge_server"," extension routes the request into the matching command group.",[165,177,178],{},"Services apply business rules through storage-agnostic repository traits.",[165,180,181],{},"The extension persists durable state through SurrealDB adapters when needed.",[183,184,186],"h2",{"id":185},"gameplay-domains","Gameplay Domains",[188,189,190,196,201,206,211,216,221,226,231,236,241],"u-page-grid",{},[191,192,195],"u-page-card",{"icon":193,"title":194,"to":50},"i-lucide-user-round","Actor","Persistent player identity, position, loadout, contact fields, and hot state.",[191,197,200],{"icon":198,"title":199,"to":62},"i-lucide-wallet","Bank","Player funds, transfers, PIN validation, checkout charging, and bank hot state.",[191,202,205],{"icon":203,"title":204,"to":66},"i-lucide-map","CAD","Dispatch requests, assignments, profiles, grouped state, and hydrated views.",[191,207,210],{"icon":208,"title":209,"to":70},"i-lucide-ambulance","Economy","Fuel, service, and medical charging rules across player and organization funds.",[191,212,215],{"icon":213,"title":214,"to":74},"i-lucide-car-front","Garage","Vehicle storage, hot-state updates, and persistence of vehicle condition.",[191,217,220],{"icon":218,"title":219,"to":78},"i-lucide-package","Locker","Player inventory storage, unique item limits, and locker hot-state behavior.",[191,222,225],{"icon":223,"title":224,"to":82},"i-lucide-building-2","Organization","Membership, treasury, shared assets, fleet, and organization hot workflows.",[191,227,230],{"icon":228,"title":229,"to":86},"i-lucide-key-round","Owned Storage","Owner-scoped locker and vehicle unlock storage used by org-linked features.",[191,232,235],{"icon":233,"title":234,"to":90},"i-lucide-smartphone","Phone","Contacts, message threads, and email state for in-game phone workflows.",[191,237,240],{"icon":238,"title":239,"to":54},"i-lucide-shopping-cart","Store","Checkout orchestration across pricing, grants, payment sources, and rollback.",[191,242,245],{"icon":243,"title":244,"to":58},"i-lucide-flag","Task","Task catalog, ownership, status transitions, defuse counters, and rewards.",{"title":247,"searchDepth":248,"depth":248,"links":249},"",2,[250],{"id":185,"depth":248,"text":186},"md",null,{},true,{"title":47,"description":157},"6TeKjF0JW1R_YnkuNXMM5vx2uv1q0ZlB9jRteQjAnto",[258,260],{"title":38,"path":39,"stem":40,"description":259,"children":-1},"These examples use the domain command surface exposed by the extension.\nPersistence is handled by the server through SurrealDB.",{"title":49,"path":50,"stem":51,"description":261,"children":-1},"The actor module stores persistent player character data: identity, loadout,\nposition, direction, stance, contact fields, state, holster status, rank, and\norganization.",1776806627034] \ No newline at end of file diff --git a/docus/dist/server-modules/actor.html b/docus/dist/server-modules/actor.html new file mode 100644 index 0000000..5d803ea --- /dev/null +++ b/docus/dist/server-modules/actor.html @@ -0,0 +1,164 @@ +Actor Usage Guide - forge-docus
Server Modules

Actor Usage Guide

The actor module stores persistent player character data: identity, loadout, +position, direction, stance, contact fields, state, holster status, rank, and +organization.

Actor Usage Guide

The actor module stores persistent player character data: identity, loadout, +position, direction, stance, contact fields, state, holster status, rank, and +organization.

Storage Model

Actor data is persisted through SurrealDB by the server extension.

{
+  "uid": "76561198000000000",
+  "name": "Player Name",
+  "loadout": {},
+  "position": [1234.5, 6789.0, 0.0],
+  "direction": 90.0,
+  "stance": "STAND",
+  "email": "0160000000@spearnet.mil",
+  "phone_number": "0160000000",
+  "state": "HEALTHY",
+  "holster": true,
+  "rank": null,
+  "organization": "default"
+}
+

Rules validated by the Rust service:

  • uid is authoritative from the command argument and must be a 17-digit Steam +UID.
  • name is optional, but cannot be empty when set and cannot exceed 50 +characters.
  • position must be three finite numbers when set.
  • direction must be in the 0.0 <= direction < 360.0 range.
  • email must contain @ and end with .mil when set.
  • phone_number must start with 0160 and be 10 digits when set.
  • Empty phone_number, email, or organization fields are filled on create.

Commands

All commands are called on the actor group.

CommandArgumentsReturns
actor:getuidActor JSON. If no actor exists, returns a default actor but does not persist it.
actor:createuid, actor_jsonPersisted actor JSON.
actor:updateuid, patch_jsonUpdated actor JSON.
actor:existsuidtrue or false.
actor:deleteuidOK.

Create an Actor

The uid field in the JSON is overwritten with the command UID.

private _actor = createHashMapFromArray [
+    ["uid", getPlayerUID player],
+    ["name", name player],
+    ["loadout", getUnitLoadout player],
+    ["position", getPosATL player],
+    ["direction", getDir player],
+    ["stance", stance player],
+    ["email", ""],
+    ["phone_number", ""],
+    ["state", "HEALTHY"],
+    ["holster", true],
+    ["organization", "default"]
+];
+
+private _result = "forge_server" callExtension ["actor:create", [
+    getPlayerUID player,
+    toJSON _actor
+]];
+

Update an Actor

actor:update accepts a JSON object containing only fields to change.

private _patch = createHashMapFromArray [
+    ["position", getPosATL player],
+    ["direction", getDir player],
+    ["stance", stance player],
+    ["loadout", getUnitLoadout player]
+];
+
+private _result = "forge_server" callExtension ["actor:update", [
+    getPlayerUID player,
+    toJSON _patch
+]];
+

Supported patch fields are name, position, direction, stance, email, +phone_number, state, holster, rank, organization, and loadout. +uid is ignored.

Hot State

The actor:hot:* commands keep a runtime copy of actor data and write it back +only when actor:hot:save runs.

CommandArgumentsReturns
actor:hot:inituidActor JSON from durable storage.
actor:hot:getuidActor JSON.
actor:hot:keysnoneJSON array of hot actor UIDs.
actor:hot:overrideuid, actor_jsonActor JSON.
actor:hot:saveuidCurrent hot actor JSON and async durable save.
actor:hot:removeuidOK.

Use hot state for frequently updated session data such as position and loadout. +Use durable commands for account creation and administrative changes.

Error Handling

private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]];
+private _payload = _result select 0;
+
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Actor error: %1", _payload];
+};
+
+private _actor = fromJSON _payload;
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/actor/_payload.json b/docus/dist/server-modules/actor/_payload.json new file mode 100644 index 0000000..c598302 --- /dev/null +++ b/docus/dist/server-modules/actor/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1011},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-actor":145,"-server-modules-actor-surround":1006},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":49,"body":147,"description":157,"extension":1001,"links":1002,"meta":1003,"navigation":709,"path":50,"seo":1004,"stem":51,"__hash__":1005},"docs\u002F3.server-modules\u002F1.actor.md",{"type":148,"value":149,"toc":993},"minimark",[150,154,158,163,166,439,442,504,508,515,623,627,633,735,739,744,797,827,831,841,939,942,946,989],[151,152,49],"h1",{"id":153},"actor-usage-guide",[155,156,157],"p",{},"The actor module stores persistent player character data: identity, loadout,\nposition, direction, stance, contact fields, state, holster status, rank, and\norganization.",[159,160,162],"h2",{"id":161},"storage-model","Storage Model",[155,164,165],{},"Actor data is persisted through SurrealDB by the server extension.",[167,168,173],"pre",{"className":169,"code":170,"language":171,"meta":172,"style":172},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"uid\": \"76561198000000000\",\n \"name\": \"Player Name\",\n \"loadout\": {},\n \"position\": [1234.5, 6789.0, 0.0],\n \"direction\": 90.0,\n \"stance\": \"STAND\",\n \"email\": \"0160000000@spearnet.mil\",\n \"phone_number\": \"0160000000\",\n \"state\": \"HEALTHY\",\n \"holster\": true,\n \"rank\": null,\n \"organization\": \"default\"\n}\n","json","",[174,175,176,185,213,234,249,282,299,320,341,362,383,398,413,433],"code",{"__ignoreMap":172},[177,178,181],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sMK4o","{\n",[177,186,188,191,195,198,201,204,208,210],{"class":179,"line":187},2,[177,189,190],{"class":183}," \"",[177,192,194],{"class":193},"spNyl","uid",[177,196,197],{"class":183},"\"",[177,199,200],{"class":183},":",[177,202,203],{"class":183}," \"",[177,205,207],{"class":206},"sfazB","76561198000000000",[177,209,197],{"class":183},[177,211,212],{"class":183},",\n",[177,214,216,218,221,223,225,227,230,232],{"class":179,"line":215},3,[177,217,190],{"class":183},[177,219,220],{"class":193},"name",[177,222,197],{"class":183},[177,224,200],{"class":183},[177,226,203],{"class":183},[177,228,229],{"class":206},"Player Name",[177,231,197],{"class":183},[177,233,212],{"class":183},[177,235,237,239,242,244,246],{"class":179,"line":236},4,[177,238,190],{"class":183},[177,240,241],{"class":193},"loadout",[177,243,197],{"class":183},[177,245,200],{"class":183},[177,247,248],{"class":183}," {},\n",[177,250,252,254,257,259,261,264,268,271,274,276,279],{"class":179,"line":251},5,[177,253,190],{"class":183},[177,255,256],{"class":193},"position",[177,258,197],{"class":183},[177,260,200],{"class":183},[177,262,263],{"class":183}," [",[177,265,267],{"class":266},"sbssI","1234.5",[177,269,270],{"class":183},",",[177,272,273],{"class":266}," 6789.0",[177,275,270],{"class":183},[177,277,278],{"class":266}," 0.0",[177,280,281],{"class":183},"],\n",[177,283,285,287,290,292,294,297],{"class":179,"line":284},6,[177,286,190],{"class":183},[177,288,289],{"class":193},"direction",[177,291,197],{"class":183},[177,293,200],{"class":183},[177,295,296],{"class":266}," 90.0",[177,298,212],{"class":183},[177,300,302,304,307,309,311,313,316,318],{"class":179,"line":301},7,[177,303,190],{"class":183},[177,305,306],{"class":193},"stance",[177,308,197],{"class":183},[177,310,200],{"class":183},[177,312,203],{"class":183},[177,314,315],{"class":206},"STAND",[177,317,197],{"class":183},[177,319,212],{"class":183},[177,321,323,325,328,330,332,334,337,339],{"class":179,"line":322},8,[177,324,190],{"class":183},[177,326,327],{"class":193},"email",[177,329,197],{"class":183},[177,331,200],{"class":183},[177,333,203],{"class":183},[177,335,336],{"class":206},"0160000000@spearnet.mil",[177,338,197],{"class":183},[177,340,212],{"class":183},[177,342,344,346,349,351,353,355,358,360],{"class":179,"line":343},9,[177,345,190],{"class":183},[177,347,348],{"class":193},"phone_number",[177,350,197],{"class":183},[177,352,200],{"class":183},[177,354,203],{"class":183},[177,356,357],{"class":206},"0160000000",[177,359,197],{"class":183},[177,361,212],{"class":183},[177,363,365,367,370,372,374,376,379,381],{"class":179,"line":364},10,[177,366,190],{"class":183},[177,368,369],{"class":193},"state",[177,371,197],{"class":183},[177,373,200],{"class":183},[177,375,203],{"class":183},[177,377,378],{"class":206},"HEALTHY",[177,380,197],{"class":183},[177,382,212],{"class":183},[177,384,386,388,391,393,395],{"class":179,"line":385},11,[177,387,190],{"class":183},[177,389,390],{"class":193},"holster",[177,392,197],{"class":183},[177,394,200],{"class":183},[177,396,397],{"class":183}," true,\n",[177,399,401,403,406,408,410],{"class":179,"line":400},12,[177,402,190],{"class":183},[177,404,405],{"class":193},"rank",[177,407,197],{"class":183},[177,409,200],{"class":183},[177,411,412],{"class":183}," null,\n",[177,414,416,418,421,423,425,427,430],{"class":179,"line":415},13,[177,417,190],{"class":183},[177,419,420],{"class":193},"organization",[177,422,197],{"class":183},[177,424,200],{"class":183},[177,426,203],{"class":183},[177,428,429],{"class":206},"default",[177,431,432],{"class":183},"\"\n",[177,434,436],{"class":179,"line":435},14,[177,437,438],{"class":183},"}\n",[155,440,441],{},"Rules validated by the Rust service:",[443,444,445,451,456,461,470,483,492],"ul",{},[446,447,448,450],"li",{},[174,449,194],{}," is authoritative from the command argument and must be a 17-digit Steam\nUID.",[446,452,453,455],{},[174,454,220],{}," is optional, but cannot be empty when set and cannot exceed 50\ncharacters.",[446,457,458,460],{},[174,459,256],{}," must be three finite numbers when set.",[446,462,463,465,466,469],{},[174,464,289],{}," must be in the ",[174,467,468],{},"0.0 \u003C= direction \u003C 360.0"," range.",[446,471,472,474,475,478,479,482],{},[174,473,327],{}," must contain ",[174,476,477],{},"@"," and end with ",[174,480,481],{},".mil"," when set.",[446,484,485,487,488,491],{},[174,486,348],{}," must start with ",[174,489,490],{},"0160"," and be 10 digits when set.",[446,493,494,495,497,498,500,501,503],{},"Empty ",[174,496,348],{},", ",[174,499,327],{},", or ",[174,502,420],{}," fields are filled on create.",[159,505,507],{"id":506},"commands","Commands",[155,509,510,511,514],{},"All commands are called on the ",[174,512,513],{},"actor"," group.",[516,517,518,534],"table",{},[519,520,521],"thead",{},[522,523,524,528,531],"tr",{},[525,526,527],"th",{},"Command",[525,529,530],{},"Arguments",[525,532,533],{},"Returns",[535,536,537,552,569,586,607],"tbody",{},[522,538,539,545,549],{},[540,541,542],"td",{},[174,543,544],{},"actor:get",[540,546,547],{},[174,548,194],{},[540,550,551],{},"Actor JSON. If no actor exists, returns a default actor but does not persist it.",[522,553,554,559,566],{},[540,555,556],{},[174,557,558],{},"actor:create",[540,560,561,497,563],{},[174,562,194],{},[174,564,565],{},"actor_json",[540,567,568],{},"Persisted actor JSON.",[522,570,571,576,583],{},[540,572,573],{},[174,574,575],{},"actor:update",[540,577,578,497,580],{},[174,579,194],{},[174,581,582],{},"patch_json",[540,584,585],{},"Updated actor JSON.",[522,587,588,593,597],{},[540,589,590],{},[174,591,592],{},"actor:exists",[540,594,595],{},[174,596,194],{},[540,598,599,602,603,606],{},[174,600,601],{},"true"," or ",[174,604,605],{},"false",".",[522,608,609,614,618],{},[540,610,611],{},[174,612,613],{},"actor:delete",[540,615,616],{},[174,617,194],{},[540,619,620,606],{},[174,621,622],{},"OK",[159,624,626],{"id":625},"create-an-actor","Create an Actor",[155,628,629,630,632],{},"The ",[174,631,194],{}," field in the JSON is overwritten with the command UID.",[167,634,638],{"className":635,"code":636,"language":637,"meta":172,"style":172},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _actor = createHashMapFromArray [\n [\"uid\", getPlayerUID player],\n [\"name\", name player],\n [\"loadout\", getUnitLoadout player],\n [\"position\", getPosATL player],\n [\"direction\", getDir player],\n [\"stance\", stance player],\n [\"email\", \"\"],\n [\"phone_number\", \"\"],\n [\"state\", \"HEALTHY\"],\n [\"holster\", true],\n [\"organization\", \"default\"]\n];\n\nprivate _result = \"forge_server\" callExtension [\"actor:create\", [\n getPlayerUID player,\n toJSON _actor\n]];\n","sqf",[174,639,640,645,650,655,660,665,670,675,680,685,690,695,700,705,711,717,723,729],{"__ignoreMap":172},[177,641,642],{"class":179,"line":180},[177,643,644],{},"private _actor = createHashMapFromArray [\n",[177,646,647],{"class":179,"line":187},[177,648,649],{}," [\"uid\", getPlayerUID player],\n",[177,651,652],{"class":179,"line":215},[177,653,654],{}," [\"name\", name player],\n",[177,656,657],{"class":179,"line":236},[177,658,659],{}," [\"loadout\", getUnitLoadout player],\n",[177,661,662],{"class":179,"line":251},[177,663,664],{}," [\"position\", getPosATL player],\n",[177,666,667],{"class":179,"line":284},[177,668,669],{}," [\"direction\", getDir player],\n",[177,671,672],{"class":179,"line":301},[177,673,674],{}," [\"stance\", stance player],\n",[177,676,677],{"class":179,"line":322},[177,678,679],{}," [\"email\", \"\"],\n",[177,681,682],{"class":179,"line":343},[177,683,684],{}," [\"phone_number\", \"\"],\n",[177,686,687],{"class":179,"line":364},[177,688,689],{}," [\"state\", \"HEALTHY\"],\n",[177,691,692],{"class":179,"line":385},[177,693,694],{}," [\"holster\", true],\n",[177,696,697],{"class":179,"line":400},[177,698,699],{}," [\"organization\", \"default\"]\n",[177,701,702],{"class":179,"line":415},[177,703,704],{},"];\n",[177,706,707],{"class":179,"line":435},[177,708,710],{"emptyLinePlaceholder":709},true,"\n",[177,712,714],{"class":179,"line":713},15,[177,715,716],{},"private _result = \"forge_server\" callExtension [\"actor:create\", [\n",[177,718,720],{"class":179,"line":719},16,[177,721,722],{}," getPlayerUID player,\n",[177,724,726],{"class":179,"line":725},17,[177,727,728],{}," toJSON _actor\n",[177,730,732],{"class":179,"line":731},18,[177,733,734],{},"]];\n",[159,736,738],{"id":737},"update-an-actor","Update an Actor",[155,740,741,743],{},[174,742,575],{}," accepts a JSON object containing only fields to change.",[167,745,747],{"className":635,"code":746,"language":637,"meta":172,"style":172},"private _patch = createHashMapFromArray [\n [\"position\", getPosATL player],\n [\"direction\", getDir player],\n [\"stance\", stance player],\n [\"loadout\", getUnitLoadout player]\n];\n\nprivate _result = \"forge_server\" callExtension [\"actor:update\", [\n getPlayerUID player,\n toJSON _patch\n]];\n",[174,748,749,754,758,762,766,771,775,779,784,788,793],{"__ignoreMap":172},[177,750,751],{"class":179,"line":180},[177,752,753],{},"private _patch = createHashMapFromArray [\n",[177,755,756],{"class":179,"line":187},[177,757,664],{},[177,759,760],{"class":179,"line":215},[177,761,669],{},[177,763,764],{"class":179,"line":236},[177,765,674],{},[177,767,768],{"class":179,"line":251},[177,769,770],{}," [\"loadout\", getUnitLoadout player]\n",[177,772,773],{"class":179,"line":284},[177,774,704],{},[177,776,777],{"class":179,"line":301},[177,778,710],{"emptyLinePlaceholder":709},[177,780,781],{"class":179,"line":322},[177,782,783],{},"private _result = \"forge_server\" callExtension [\"actor:update\", [\n",[177,785,786],{"class":179,"line":343},[177,787,722],{},[177,789,790],{"class":179,"line":364},[177,791,792],{}," toJSON _patch\n",[177,794,795],{"class":179,"line":385},[177,796,734],{},[155,798,799,800,497,802,497,804,497,806,497,808,212,810,497,812,497,814,497,816,497,818,820,821,823,824,826],{},"Supported patch fields are ",[174,801,220],{},[174,803,256],{},[174,805,289],{},[174,807,306],{},[174,809,327],{},[174,811,348],{},[174,813,369],{},[174,815,390],{},[174,817,405],{},[174,819,420],{},", and ",[174,822,241],{},".\n",[174,825,194],{}," is ignored.",[159,828,830],{"id":829},"hot-state","Hot State",[155,832,629,833,836,837,840],{},[174,834,835],{},"actor:hot:*"," commands keep a runtime copy of actor data and write it back\nonly when ",[174,838,839],{},"actor:hot:save"," runs.",[516,842,843,853],{},[519,844,845],{},[522,846,847,849,851],{},[525,848,527],{},[525,850,530],{},[525,852,533],{},[535,854,855,869,883,896,911,924],{},[522,856,857,862,866],{},[540,858,859],{},[174,860,861],{},"actor:hot:init",[540,863,864],{},[174,865,194],{},[540,867,868],{},"Actor JSON from durable storage.",[522,870,871,876,880],{},[540,872,873],{},[174,874,875],{},"actor:hot:get",[540,877,878],{},[174,879,194],{},[540,881,882],{},"Actor JSON.",[522,884,885,890,893],{},[540,886,887],{},[174,888,889],{},"actor:hot:keys",[540,891,892],{},"none",[540,894,895],{},"JSON array of hot actor UIDs.",[522,897,898,903,909],{},[540,899,900],{},[174,901,902],{},"actor:hot:override",[540,904,905,497,907],{},[174,906,194],{},[174,908,565],{},[540,910,882],{},[522,912,913,917,921],{},[540,914,915],{},[174,916,839],{},[540,918,919],{},[174,920,194],{},[540,922,923],{},"Current hot actor JSON and async durable save.",[522,925,926,931,935],{},[540,927,928],{},[174,929,930],{},"actor:hot:remove",[540,932,933],{},[174,934,194],{},[540,936,937,606],{},[174,938,622],{},[155,940,941],{},"Use hot state for frequently updated session data such as position and loadout.\nUse durable commands for account creation and administrative changes.",[159,943,945],{"id":944},"error-handling","Error Handling",[167,947,949],{"className":635,"code":948,"language":637,"meta":172,"style":172},"private _result = \"forge_server\" callExtension [\"actor:get\", [getPlayerUID player]];\nprivate _payload = _result select 0;\n\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Actor error: %1\", _payload];\n};\n\nprivate _actor = fromJSON _payload;\n",[174,950,951,956,961,965,970,975,980,984],{"__ignoreMap":172},[177,952,953],{"class":179,"line":180},[177,954,955],{},"private _result = \"forge_server\" callExtension [\"actor:get\", [getPlayerUID player]];\n",[177,957,958],{"class":179,"line":187},[177,959,960],{},"private _payload = _result select 0;\n",[177,962,963],{"class":179,"line":215},[177,964,710],{"emptyLinePlaceholder":709},[177,966,967],{"class":179,"line":236},[177,968,969],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[177,971,972],{"class":179,"line":251},[177,973,974],{}," systemChat format [\"Actor error: %1\", _payload];\n",[177,976,977],{"class":179,"line":284},[177,978,979],{},"};\n",[177,981,982],{"class":179,"line":301},[177,983,710],{"emptyLinePlaceholder":709},[177,985,986],{"class":179,"line":322},[177,987,988],{},"private _actor = fromJSON _payload;\n",[990,991,992],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":172,"searchDepth":187,"depth":187,"links":994},[995,996,997,998,999,1000],{"id":161,"depth":187,"text":162},{"id":506,"depth":187,"text":507},{"id":625,"depth":187,"text":626},{"id":737,"depth":187,"text":738},{"id":829,"depth":187,"text":830},{"id":944,"depth":187,"text":945},"md",null,{},{"title":49,"description":157},"lOr0hGaOrJo611Lgdf6VCoSehV0NudH7u2_V75BKoZ0",[1007,1009],{"title":47,"path":43,"stem":44,"description":1008,"children":-1},"These pages document the authoritative server-side workflows in Forge.",{"title":53,"path":54,"stem":55,"description":1010,"children":-1},"The store module processes checkout requests. It charges a payment source and\ngrants purchased items to the player locker, virtual arsenal locker, and\nvirtual garage unlocks.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/bank.html b/docus/dist/server-modules/bank.html new file mode 100644 index 0000000..cd96e91 --- /dev/null +++ b/docus/dist/server-modules/bank.html @@ -0,0 +1,190 @@ +Bank Usage Guide - forge-docus
Server Modules

Bank Usage Guide

The bank module stores player account balances, earnings, PINs, and transaction +strings. The hot-state API also owns the active banking workflows used by the +UI: deposit, withdraw, transfer, checkout charge, and PIN validation.

Bank Usage Guide

The bank module stores player account balances, earnings, PINs, and transaction +strings. The hot-state API also owns the active banking workflows used by the +UI: deposit, withdraw, transfer, checkout charge, and PIN validation.

Storage Model

Bank data is persisted through SurrealDB by the server extension.

{
+  "uid": "76561198000000000",
+  "name": "Player Name",
+  "bank": 1000.0,
+  "cash": 250.0,
+  "earnings": 0.0,
+  "pin": 1234,
+  "transactions": []
+}
+

Rules validated by the Rust service:

  • uid is authoritative from the command argument.
  • name cannot be empty.
  • bank and cash cannot be negative.
  • pin must be a four-digit number.
  • Durable bank:get requires an existing bank account.

Durable Commands

CommandArgumentsReturns
bank:createuid, bank_jsonPersisted bank JSON.
bank:getuidBank JSON.
bank:updateuid, patch_jsonUpdated bank JSON.
bank:existsuidtrue or false.
bank:deleteuidOK.

Create an Account

The uid field in the JSON is overwritten with the command UID.

private _account = createHashMapFromArray [
+    ["uid", getPlayerUID player],
+    ["name", name player],
+    ["bank", 0],
+    ["cash", 0],
+    ["earnings", 0],
+    ["pin", 1234],
+    ["transactions", []]
+];
+
+private _result = "forge_server" callExtension ["bank:create", [
+    getPlayerUID player,
+    toJSON _account
+]];
+

Hot-State Commands

CommandArgumentsReturns
bank:hot:inituidBank JSON loaded into hot state.
bank:hot:getuidBank JSON.
bank:hot:overrideuid, bank_jsonBank JSON.
bank:hot:patchuid, patch_json{ account, patch }.
bank:hot:deposituid, amount, context_json{ account, patch }.
bank:hot:withdrawuid, amount, context_json{ account, patch }.
bank:hot:deposit_earningsuid, amount, context_json{ account, patch }.
bank:hot:transfersource_uid, target_uid, amount, context_jsonTransfer result JSON.
bank:hot:charge_checkoutuid, amount, context_json{ account, patch }.
bank:hot:validate_pinuid, pin, context_json{} on success.
bank:hot:saveuidCurrent hot bank JSON and async durable save.
bank:hot:removeuidOK.

Use hot-state commands for UI workflows. They return patch objects so the UI can +update only changed fields.

Deposit and Withdraw

ATM sessions require atmAuthorized: true. Full bank sessions can set +mode: "bank".

private _context = createHashMapFromArray [
+    ["mode", "atm"],
+    ["atmAuthorized", true]
+];
+
+private _deposit = "forge_server" callExtension ["bank:hot:deposit", [
+    getPlayerUID player,
+    "100",
+    toJSON _context
+]];
+
+private _withdraw = "forge_server" callExtension ["bank:hot:withdraw", [
+    getPlayerUID player,
+    "50",
+    toJSON _context
+]];
+

Transfer

Transfers are only available from the full bank interface. fromField can be +bank or cash.

private _context = createHashMapFromArray [
+    ["mode", "bank"],
+    ["atmAuthorized", false],
+    ["fromField", "bank"]
+];
+
+private _result = "forge_server" callExtension ["bank:hot:transfer", [
+    getPlayerUID player,
+    _targetUid,
+    "250",
+    toJSON _context
+]];
+

Checkout Charge

Checkout charging supports sourceField: "cash" or sourceField: "bank". +Set commit to false to preview the patch without saving.

private _context = createHashMapFromArray [
+    ["sourceField", "bank"],
+    ["commit", true]
+];
+
+private _result = "forge_server" callExtension ["bank:hot:charge_checkout", [
+    getPlayerUID player,
+    "125",
+    toJSON _context
+]];
+

PIN Validation

PIN entry is only valid in ATM mode.

private _context = createHashMapFromArray [["mode", "atm"]];
+
+private _result = "forge_server" callExtension ["bank:hot:validate_pin", [
+    getPlayerUID player,
+    "1234",
+    toJSON _context
+]];
+

Error Handling

private _result = "forge_server" callExtension ["bank:hot:get", [getPlayerUID player]];
+private _payload = _result select 0;
+
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Bank error: %1", _payload];
+};
+
+private _bank = fromJSON _payload;
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/bank/_payload.json b/docus/dist/server-modules/bank/_payload.json new file mode 100644 index 0000000..2c301c0 --- /dev/null +++ b/docus/dist/server-modules/bank/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1149},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-bank":145,"-server-modules-bank-surround":1144},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":61,"body":147,"description":157,"extension":1139,"links":1140,"meta":1141,"navigation":540,"path":62,"seo":1142,"stem":63,"__hash__":1143},"docs\u002F3.server-modules\u002F2.bank.md",{"type":148,"value":149,"toc":1128},"minimark",[150,154,158,163,166,324,327,361,365,473,477,483,566,570,794,797,801,811,890,894,905,964,968,985,1034,1038,1041,1077,1081,1124],[151,152,61],"h1",{"id":153},"bank-usage-guide",[155,156,157],"p",{},"The bank module stores player account balances, earnings, PINs, and transaction\nstrings. The hot-state API also owns the active banking workflows used by the\nUI: deposit, withdraw, transfer, checkout charge, and PIN validation.",[159,160,162],"h2",{"id":161},"storage-model","Storage Model",[155,164,165],{},"Bank data is persisted through SurrealDB by the server extension.",[167,168,173],"pre",{"className":169,"code":170,"language":171,"meta":172,"style":172},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"uid\": \"76561198000000000\",\n \"name\": \"Player Name\",\n \"bank\": 1000.0,\n \"cash\": 250.0,\n \"earnings\": 0.0,\n \"pin\": 1234,\n \"transactions\": []\n}\n","json","",[174,175,176,185,213,234,252,269,286,303,318],"code",{"__ignoreMap":172},[177,178,181],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sMK4o","{\n",[177,186,188,191,195,198,201,204,208,210],{"class":179,"line":187},2,[177,189,190],{"class":183}," \"",[177,192,194],{"class":193},"spNyl","uid",[177,196,197],{"class":183},"\"",[177,199,200],{"class":183},":",[177,202,203],{"class":183}," \"",[177,205,207],{"class":206},"sfazB","76561198000000000",[177,209,197],{"class":183},[177,211,212],{"class":183},",\n",[177,214,216,218,221,223,225,227,230,232],{"class":179,"line":215},3,[177,217,190],{"class":183},[177,219,220],{"class":193},"name",[177,222,197],{"class":183},[177,224,200],{"class":183},[177,226,203],{"class":183},[177,228,229],{"class":206},"Player Name",[177,231,197],{"class":183},[177,233,212],{"class":183},[177,235,237,239,242,244,246,250],{"class":179,"line":236},4,[177,238,190],{"class":183},[177,240,241],{"class":193},"bank",[177,243,197],{"class":183},[177,245,200],{"class":183},[177,247,249],{"class":248},"sbssI"," 1000.0",[177,251,212],{"class":183},[177,253,255,257,260,262,264,267],{"class":179,"line":254},5,[177,256,190],{"class":183},[177,258,259],{"class":193},"cash",[177,261,197],{"class":183},[177,263,200],{"class":183},[177,265,266],{"class":248}," 250.0",[177,268,212],{"class":183},[177,270,272,274,277,279,281,284],{"class":179,"line":271},6,[177,273,190],{"class":183},[177,275,276],{"class":193},"earnings",[177,278,197],{"class":183},[177,280,200],{"class":183},[177,282,283],{"class":248}," 0.0",[177,285,212],{"class":183},[177,287,289,291,294,296,298,301],{"class":179,"line":288},7,[177,290,190],{"class":183},[177,292,293],{"class":193},"pin",[177,295,197],{"class":183},[177,297,200],{"class":183},[177,299,300],{"class":248}," 1234",[177,302,212],{"class":183},[177,304,306,308,311,313,315],{"class":179,"line":305},8,[177,307,190],{"class":183},[177,309,310],{"class":193},"transactions",[177,312,197],{"class":183},[177,314,200],{"class":183},[177,316,317],{"class":183}," []\n",[177,319,321],{"class":179,"line":320},9,[177,322,323],{"class":183},"}\n",[155,325,326],{},"Rules validated by the Rust service:",[328,329,330,336,341,349,354],"ul",{},[331,332,333,335],"li",{},[174,334,194],{}," is authoritative from the command argument.",[331,337,338,340],{},[174,339,220],{}," cannot be empty.",[331,342,343,345,346,348],{},[174,344,241],{}," and ",[174,347,259],{}," cannot be negative.",[331,350,351,353],{},[174,352,293],{}," must be a four-digit number.",[331,355,356,357,360],{},"Durable ",[174,358,359],{},"bank:get"," requires an existing bank account.",[159,362,364],{"id":363},"durable-commands","Durable Commands",[366,367,368,384],"table",{},[369,370,371],"thead",{},[372,373,374,378,381],"tr",{},[375,376,377],"th",{},"Command",[375,379,380],{},"Arguments",[375,382,383],{},"Returns",[385,386,387,406,419,436,457],"tbody",{},[372,388,389,395,403],{},[390,391,392],"td",{},[174,393,394],{},"bank:create",[390,396,397,399,400],{},[174,398,194],{},", ",[174,401,402],{},"bank_json",[390,404,405],{},"Persisted bank JSON.",[372,407,408,412,416],{},[390,409,410],{},[174,411,359],{},[390,413,414],{},[174,415,194],{},[390,417,418],{},"Bank JSON.",[372,420,421,426,433],{},[390,422,423],{},[174,424,425],{},"bank:update",[390,427,428,399,430],{},[174,429,194],{},[174,431,432],{},"patch_json",[390,434,435],{},"Updated bank JSON.",[372,437,438,443,447],{},[390,439,440],{},[174,441,442],{},"bank:exists",[390,444,445],{},[174,446,194],{},[390,448,449,452,453,456],{},[174,450,451],{},"true"," or ",[174,454,455],{},"false",".",[372,458,459,464,468],{},[390,460,461],{},[174,462,463],{},"bank:delete",[390,465,466],{},[174,467,194],{},[390,469,470,456],{},[174,471,472],{},"OK",[159,474,476],{"id":475},"create-an-account","Create an Account",[155,478,479,480,482],{},"The ",[174,481,194],{}," field in the JSON is overwritten with the command UID.",[167,484,488],{"className":485,"code":486,"language":487,"meta":172,"style":172},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _account = createHashMapFromArray [\n [\"uid\", getPlayerUID player],\n [\"name\", name player],\n [\"bank\", 0],\n [\"cash\", 0],\n [\"earnings\", 0],\n [\"pin\", 1234],\n [\"transactions\", []]\n];\n\nprivate _result = \"forge_server\" callExtension [\"bank:create\", [\n getPlayerUID player,\n toJSON _account\n]];\n","sqf",[174,489,490,495,500,505,510,515,520,525,530,535,542,548,554,560],{"__ignoreMap":172},[177,491,492],{"class":179,"line":180},[177,493,494],{},"private _account = createHashMapFromArray [\n",[177,496,497],{"class":179,"line":187},[177,498,499],{}," [\"uid\", getPlayerUID player],\n",[177,501,502],{"class":179,"line":215},[177,503,504],{}," [\"name\", name player],\n",[177,506,507],{"class":179,"line":236},[177,508,509],{}," [\"bank\", 0],\n",[177,511,512],{"class":179,"line":254},[177,513,514],{}," [\"cash\", 0],\n",[177,516,517],{"class":179,"line":271},[177,518,519],{}," [\"earnings\", 0],\n",[177,521,522],{"class":179,"line":288},[177,523,524],{}," [\"pin\", 1234],\n",[177,526,527],{"class":179,"line":305},[177,528,529],{}," [\"transactions\", []]\n",[177,531,532],{"class":179,"line":320},[177,533,534],{},"];\n",[177,536,538],{"class":179,"line":537},10,[177,539,541],{"emptyLinePlaceholder":540},true,"\n",[177,543,545],{"class":179,"line":544},11,[177,546,547],{},"private _result = \"forge_server\" callExtension [\"bank:create\", [\n",[177,549,551],{"class":179,"line":550},12,[177,552,553],{}," getPlayerUID player,\n",[177,555,557],{"class":179,"line":556},13,[177,558,559],{}," toJSON _account\n",[177,561,563],{"class":179,"line":562},14,[177,564,565],{},"]];\n",[159,567,569],{"id":568},"hot-state-commands","Hot-State Commands",[366,571,572,582],{},[369,573,574],{},[372,575,576,578,580],{},[375,577,377],{},[375,579,380],{},[375,581,383],{},[385,583,584,598,611,626,644,665,684,703,725,744,765,779],{},[372,585,586,591,595],{},[390,587,588],{},[174,589,590],{},"bank:hot:init",[390,592,593],{},[174,594,194],{},[390,596,597],{},"Bank JSON loaded into hot state.",[372,599,600,605,609],{},[390,601,602],{},[174,603,604],{},"bank:hot:get",[390,606,607],{},[174,608,194],{},[390,610,418],{},[372,612,613,618,624],{},[390,614,615],{},[174,616,617],{},"bank:hot:override",[390,619,620,399,622],{},[174,621,194],{},[174,623,402],{},[390,625,418],{},[372,627,628,633,639],{},[390,629,630],{},[174,631,632],{},"bank:hot:patch",[390,634,635,399,637],{},[174,636,194],{},[174,638,432],{},[390,640,641,456],{},[174,642,643],{},"{ account, patch }",[372,645,646,651,661],{},[390,647,648],{},[174,649,650],{},"bank:hot:deposit",[390,652,653,399,655,399,658],{},[174,654,194],{},[174,656,657],{},"amount",[174,659,660],{},"context_json",[390,662,663,456],{},[174,664,643],{},[372,666,667,672,680],{},[390,668,669],{},[174,670,671],{},"bank:hot:withdraw",[390,673,674,399,676,399,678],{},[174,675,194],{},[174,677,657],{},[174,679,660],{},[390,681,682,456],{},[174,683,643],{},[372,685,686,691,699],{},[390,687,688],{},[174,689,690],{},"bank:hot:deposit_earnings",[390,692,693,399,695,399,697],{},[174,694,194],{},[174,696,657],{},[174,698,660],{},[390,700,701,456],{},[174,702,643],{},[372,704,705,710,722],{},[390,706,707],{},[174,708,709],{},"bank:hot:transfer",[390,711,712,399,715,399,718,399,720],{},[174,713,714],{},"source_uid",[174,716,717],{},"target_uid",[174,719,657],{},[174,721,660],{},[390,723,724],{},"Transfer result JSON.",[372,726,727,732,740],{},[390,728,729],{},[174,730,731],{},"bank:hot:charge_checkout",[390,733,734,399,736,399,738],{},[174,735,194],{},[174,737,657],{},[174,739,660],{},[390,741,742,456],{},[174,743,643],{},[372,745,746,751,759],{},[390,747,748],{},[174,749,750],{},"bank:hot:validate_pin",[390,752,753,399,755,399,757],{},[174,754,194],{},[174,756,293],{},[174,758,660],{},[390,760,761,764],{},[174,762,763],{},"{}"," on success.",[372,766,767,772,776],{},[390,768,769],{},[174,770,771],{},"bank:hot:save",[390,773,774],{},[174,775,194],{},[390,777,778],{},"Current hot bank JSON and async durable save.",[372,780,781,786,790],{},[390,782,783],{},[174,784,785],{},"bank:hot:remove",[390,787,788],{},[174,789,194],{},[390,791,792,456],{},[174,793,472],{},[155,795,796],{},"Use hot-state commands for UI workflows. They return patch objects so the UI can\nupdate only changed fields.",[159,798,800],{"id":799},"deposit-and-withdraw","Deposit and Withdraw",[155,802,803,804,807,808,456],{},"ATM sessions require ",[174,805,806],{},"atmAuthorized: true",". Full bank sessions can set\n",[174,809,810],{},"mode: \"bank\"",[167,812,814],{"className":485,"code":813,"language":487,"meta":172,"style":172},"private _context = createHashMapFromArray [\n [\"mode\", \"atm\"],\n [\"atmAuthorized\", true]\n];\n\nprivate _deposit = \"forge_server\" callExtension [\"bank:hot:deposit\", [\n getPlayerUID player,\n \"100\",\n toJSON _context\n]];\n\nprivate _withdraw = \"forge_server\" callExtension [\"bank:hot:withdraw\", [\n getPlayerUID player,\n \"50\",\n toJSON _context\n]];\n",[174,815,816,821,826,831,835,839,844,848,853,858,862,866,871,875,880,885],{"__ignoreMap":172},[177,817,818],{"class":179,"line":180},[177,819,820],{},"private _context = createHashMapFromArray [\n",[177,822,823],{"class":179,"line":187},[177,824,825],{}," [\"mode\", \"atm\"],\n",[177,827,828],{"class":179,"line":215},[177,829,830],{}," [\"atmAuthorized\", true]\n",[177,832,833],{"class":179,"line":236},[177,834,534],{},[177,836,837],{"class":179,"line":254},[177,838,541],{"emptyLinePlaceholder":540},[177,840,841],{"class":179,"line":271},[177,842,843],{},"private _deposit = \"forge_server\" callExtension [\"bank:hot:deposit\", [\n",[177,845,846],{"class":179,"line":288},[177,847,553],{},[177,849,850],{"class":179,"line":305},[177,851,852],{}," \"100\",\n",[177,854,855],{"class":179,"line":320},[177,856,857],{}," toJSON _context\n",[177,859,860],{"class":179,"line":537},[177,861,565],{},[177,863,864],{"class":179,"line":544},[177,865,541],{"emptyLinePlaceholder":540},[177,867,868],{"class":179,"line":550},[177,869,870],{},"private _withdraw = \"forge_server\" callExtension [\"bank:hot:withdraw\", [\n",[177,872,873],{"class":179,"line":556},[177,874,553],{},[177,876,877],{"class":179,"line":562},[177,878,879],{}," \"50\",\n",[177,881,883],{"class":179,"line":882},15,[177,884,857],{},[177,886,888],{"class":179,"line":887},16,[177,889,565],{},[159,891,893],{"id":892},"transfer","Transfer",[155,895,896,897,900,901,452,903,456],{},"Transfers are only available from the full bank interface. ",[174,898,899],{},"fromField"," can be\n",[174,902,241],{},[174,904,259],{},[167,906,908],{"className":485,"code":907,"language":487,"meta":172,"style":172},"private _context = createHashMapFromArray [\n [\"mode\", \"bank\"],\n [\"atmAuthorized\", false],\n [\"fromField\", \"bank\"]\n];\n\nprivate _result = \"forge_server\" callExtension [\"bank:hot:transfer\", [\n getPlayerUID player,\n _targetUid,\n \"250\",\n toJSON _context\n]];\n",[174,909,910,914,919,924,929,933,937,942,946,951,956,960],{"__ignoreMap":172},[177,911,912],{"class":179,"line":180},[177,913,820],{},[177,915,916],{"class":179,"line":187},[177,917,918],{}," [\"mode\", \"bank\"],\n",[177,920,921],{"class":179,"line":215},[177,922,923],{}," [\"atmAuthorized\", false],\n",[177,925,926],{"class":179,"line":236},[177,927,928],{}," [\"fromField\", \"bank\"]\n",[177,930,931],{"class":179,"line":254},[177,932,534],{},[177,934,935],{"class":179,"line":271},[177,936,541],{"emptyLinePlaceholder":540},[177,938,939],{"class":179,"line":288},[177,940,941],{},"private _result = \"forge_server\" callExtension [\"bank:hot:transfer\", [\n",[177,943,944],{"class":179,"line":305},[177,945,553],{},[177,947,948],{"class":179,"line":320},[177,949,950],{}," _targetUid,\n",[177,952,953],{"class":179,"line":537},[177,954,955],{}," \"250\",\n",[177,957,958],{"class":179,"line":544},[177,959,857],{},[177,961,962],{"class":179,"line":550},[177,963,565],{},[159,965,967],{"id":966},"checkout-charge","Checkout Charge",[155,969,970,971,452,974,977,978,981,982,984],{},"Checkout charging supports ",[174,972,973],{},"sourceField: \"cash\"",[174,975,976],{},"sourceField: \"bank\"",".\nSet ",[174,979,980],{},"commit"," to ",[174,983,455],{}," to preview the patch without saving.",[167,986,988],{"className":485,"code":987,"language":487,"meta":172,"style":172},"private _context = createHashMapFromArray [\n [\"sourceField\", \"bank\"],\n [\"commit\", true]\n];\n\nprivate _result = \"forge_server\" callExtension [\"bank:hot:charge_checkout\", [\n getPlayerUID player,\n \"125\",\n toJSON _context\n]];\n",[174,989,990,994,999,1004,1008,1012,1017,1021,1026,1030],{"__ignoreMap":172},[177,991,992],{"class":179,"line":180},[177,993,820],{},[177,995,996],{"class":179,"line":187},[177,997,998],{}," [\"sourceField\", \"bank\"],\n",[177,1000,1001],{"class":179,"line":215},[177,1002,1003],{}," [\"commit\", true]\n",[177,1005,1006],{"class":179,"line":236},[177,1007,534],{},[177,1009,1010],{"class":179,"line":254},[177,1011,541],{"emptyLinePlaceholder":540},[177,1013,1014],{"class":179,"line":271},[177,1015,1016],{},"private _result = \"forge_server\" callExtension [\"bank:hot:charge_checkout\", [\n",[177,1018,1019],{"class":179,"line":288},[177,1020,553],{},[177,1022,1023],{"class":179,"line":305},[177,1024,1025],{}," \"125\",\n",[177,1027,1028],{"class":179,"line":320},[177,1029,857],{},[177,1031,1032],{"class":179,"line":537},[177,1033,565],{},[159,1035,1037],{"id":1036},"pin-validation","PIN Validation",[155,1039,1040],{},"PIN entry is only valid in ATM mode.",[167,1042,1044],{"className":485,"code":1043,"language":487,"meta":172,"style":172},"private _context = createHashMapFromArray [[\"mode\", \"atm\"]];\n\nprivate _result = \"forge_server\" callExtension [\"bank:hot:validate_pin\", [\n getPlayerUID player,\n \"1234\",\n toJSON _context\n]];\n",[174,1045,1046,1051,1055,1060,1064,1069,1073],{"__ignoreMap":172},[177,1047,1048],{"class":179,"line":180},[177,1049,1050],{},"private _context = createHashMapFromArray [[\"mode\", \"atm\"]];\n",[177,1052,1053],{"class":179,"line":187},[177,1054,541],{"emptyLinePlaceholder":540},[177,1056,1057],{"class":179,"line":215},[177,1058,1059],{},"private _result = \"forge_server\" callExtension [\"bank:hot:validate_pin\", [\n",[177,1061,1062],{"class":179,"line":236},[177,1063,553],{},[177,1065,1066],{"class":179,"line":254},[177,1067,1068],{}," \"1234\",\n",[177,1070,1071],{"class":179,"line":271},[177,1072,857],{},[177,1074,1075],{"class":179,"line":288},[177,1076,565],{},[159,1078,1080],{"id":1079},"error-handling","Error Handling",[167,1082,1084],{"className":485,"code":1083,"language":487,"meta":172,"style":172},"private _result = \"forge_server\" callExtension [\"bank:hot:get\", [getPlayerUID player]];\nprivate _payload = _result select 0;\n\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Bank error: %1\", _payload];\n};\n\nprivate _bank = fromJSON _payload;\n",[174,1085,1086,1091,1096,1100,1105,1110,1115,1119],{"__ignoreMap":172},[177,1087,1088],{"class":179,"line":180},[177,1089,1090],{},"private _result = \"forge_server\" callExtension [\"bank:hot:get\", [getPlayerUID player]];\n",[177,1092,1093],{"class":179,"line":187},[177,1094,1095],{},"private _payload = _result select 0;\n",[177,1097,1098],{"class":179,"line":215},[177,1099,541],{"emptyLinePlaceholder":540},[177,1101,1102],{"class":179,"line":236},[177,1103,1104],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[177,1106,1107],{"class":179,"line":254},[177,1108,1109],{}," systemChat format [\"Bank error: %1\", _payload];\n",[177,1111,1112],{"class":179,"line":271},[177,1113,1114],{},"};\n",[177,1116,1117],{"class":179,"line":288},[177,1118,541],{"emptyLinePlaceholder":540},[177,1120,1121],{"class":179,"line":305},[177,1122,1123],{},"private _bank = fromJSON _payload;\n",[1125,1126,1127],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":172,"searchDepth":187,"depth":187,"links":1129},[1130,1131,1132,1133,1134,1135,1136,1137,1138],{"id":161,"depth":187,"text":162},{"id":363,"depth":187,"text":364},{"id":475,"depth":187,"text":476},{"id":568,"depth":187,"text":569},{"id":799,"depth":187,"text":800},{"id":892,"depth":187,"text":893},{"id":966,"depth":187,"text":967},{"id":1036,"depth":187,"text":1037},{"id":1079,"depth":187,"text":1080},"md",null,{},{"title":61,"description":157},"sIOXEyzlGQFhd8qUZozTWTtuL76YtpRKFT959rOS7FM",[1145,1147],{"title":57,"path":58,"stem":59,"description":1146,"children":-1},"The task module stores transient mission task metadata for active server or\nmission lifecycle workflows. SQF still owns Arma-only runtime state such as\nobjects and participants.",{"title":65,"path":66,"stem":67,"description":1148,"children":-1},"The CAD module stores transient operational state for dispatch activity,\nassignments, dispatch orders, support requests, group profiles, grouped views,\nand hydrated UI payloads. CAD state is in-memory and follows the active server\nor mission lifecycle.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/cad.html b/docus/dist/server-modules/cad.html new file mode 100644 index 0000000..2b1fbdc --- /dev/null +++ b/docus/dist/server-modules/cad.html @@ -0,0 +1,201 @@ +CAD Usage Guide - forge-docus
Server Modules

CAD Usage Guide

The CAD module stores transient operational state for dispatch activity, +assignments, dispatch orders, support requests, group profiles, grouped views, +and hydrated UI payloads. CAD state is in-memory and follows the active server +or mission lifecycle.

CAD Usage Guide

The CAD module stores transient operational state for dispatch activity, +assignments, dispatch orders, support requests, group profiles, grouped views, +and hydrated UI payloads. CAD state is in-memory and follows the active server +or mission lifecycle.

Data Model

Most CAD records are flexible JSON objects. The service normalizes important +IDs and returns structured mutation results for higher-level workflows.

Common generated IDs:

  • Orders: cad-order:<sequence>
  • Requests: cad-request:<sequence>
  • Assignments usually share a task ID or order ID.

Commands

Activity

CommandArgumentsReturns
cad:activity:appendactivity_jsonOK.
cad:activity:recentlimitRecent activity array JSON.

Assignments

CommandArgumentsReturns
cad:assignments:listnoneAssignment array JSON.
cad:assignments:assignentry_id, assignment_jsonAssignment mutation result JSON.
cad:assignments:acknowledgeentry_id, patch_jsonAssignment mutation result JSON.
cad:assignments:declineentry_id, patch_jsonAssignment mutation result JSON and removes assignment.
cad:assignments:upsertentry_id, assignment_jsonOK.
cad:assignments:deleteentry_idOK.

Orders

CommandArgumentsReturns
cad:orders:listnoneOrder array JSON.
cad:orders:createorder_seed_jsonDispatch order mutation result JSON.
cad:orders:create_from_contextcontext_jsonDispatch order mutation result JSON.
cad:orders:closeentry_idDispatch order mutation result JSON and removes order/assignment.
cad:orders:upsertentry_id, order_jsonOK.
cad:orders:deleteentry_idOK.

Requests

CommandArgumentsReturns
cad:requests:listnoneRequest array JSON.
cad:requests:submitrequest_jsonRequest mutation result JSON.
cad:requests:submit_from_contextcontext_jsonRequest mutation result JSON.
cad:requests:closeentry_idRequest mutation result JSON and removes request.
cad:requests:upsertentry_id, request_jsonOK.
cad:requests:deleteentry_idOK.

Profiles and Views

CommandArgumentsReturns
cad:profiles:listnoneProfile array JSON.
cad:profiles:update_from_contextcontext_jsonProfile mutation result JSON.
cad:profiles:upsertentry_id, profile_jsonOK.
cad:profiles:deleteentry_idOK.
cad:groups:buildgroups_seed_jsonGroup array JSON.
cad:view:hydratehydrate_seed_jsonHydrated CAD payload JSON.

Submit a Support Request

private _fields = createHashMapFromArray [
+    ["pickup_location", "Grid 123456"],
+    ["precedence", "urgent"],
+    ["security", "secure"]
+];
+
+private _context = createHashMapFromArray [
+    ["type", "medevac_9line"],
+    ["fields", _fields],
+    ["groupId", "alpha"],
+    ["groupCallsign", "Alpha 1-1"],
+    ["submittedByUid", getPlayerUID player],
+    ["submittedByName", name player],
+    ["priority", "emergency"],
+    ["position", getPosATL player],
+    ["createdAt", diag_tickTime]
+];
+
+private _result = "forge_server" callExtension ["cad:requests:submit_from_context", [
+    toJSON _context
+]];
+

Supported priority values are routine, priority, and emergency. Unknown +values normalize to priority.

Create a Dispatch Order

private _context = createHashMapFromArray [
+    ["assigneeGroupId", "bravo"],
+    ["assigneeGroupCallsign", "Bravo 1-1"],
+    ["targetGroupId", "alpha"],
+    ["targetGroupCallsign", "Alpha 1-1"],
+    ["targetPosition", getPosATL player],
+    ["createdByUid", getPlayerUID player],
+    ["createdByName", name player],
+    ["requestId", "cad-request:1"],
+    ["requestType", "logreq"],
+    ["requestTitle", "LOGREQ | Alpha 1-1"],
+    ["requestSummary", "Ammo resupply requested"],
+    ["requestFields", createHashMap],
+    ["note", "Support Alpha 1-1 at current position."],
+    ["priority", "priority"],
+    ["createdAt", diag_tickTime]
+];
+
+private _result = "forge_server" callExtension ["cad:orders:create_from_context", [
+    toJSON _context
+]];
+

Assignment Workflow

private _assignment = createHashMapFromArray [
+    ["groupId", "bravo"],
+    ["assigneeGroupCallsign", "Bravo 1-1"],
+    ["assignedByUid", getPlayerUID player],
+    ["assignedByName", name player],
+    ["assignedAt", diag_tickTime],
+    ["state", "assigned"]
+];
+
+"forge_server" callExtension ["cad:assignments:assign", [
+    "task-123",
+    toJSON _assignment
+]];
+
+private _ack = createHashMapFromArray [
+    ["state", "acknowledged"],
+    ["acknowledgedByUid", getPlayerUID player],
+    ["acknowledgedAt", diag_tickTime]
+];
+
+"forge_server" callExtension ["cad:assignments:acknowledge", [
+    "task-123",
+    toJSON _ack
+]];
+

Hydrate the CAD UI

private _session = createHashMapFromArray [
+    ["uid", getPlayerUID player],
+    ["orgId", "default"],
+    ["isDispatcher", true],
+    ["groupId", "alpha"],
+    ["isLeader", true]
+];
+
+private _seed = createHashMapFromArray [
+    ["groups", _liveGroups],
+    ["activeTasks", _activeTasks],
+    ["session", _session]
+];
+
+private _result = "forge_server" callExtension ["cad:view:hydrate", [toJSON _seed]];
+

Error Handling

private _payload = _result select 0;
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["CAD error: %1", _payload];
+};
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/cad/_payload.json b/docus/dist/server-modules/cad/_payload.json new file mode 100644 index 0000000..74c9de0 --- /dev/null +++ b/docus/dist/server-modules/cad/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1209},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-cad":145,"-server-modules-cad-surround":1204},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":65,"body":147,"description":157,"extension":1199,"links":1200,"meta":1201,"navigation":735,"path":66,"seo":1202,"stem":67,"__hash__":1203},"docs\u002F3.server-modules\u002F3.cad.md",{"type":148,"value":149,"toc":1184},"minimark",[150,154,158,163,166,169,189,193,198,254,258,368,372,474,478,578,582,685,689,825,841,845,949,953,1072,1076,1151,1155,1180],[151,152,65],"h1",{"id":153},"cad-usage-guide",[155,156,157],"p",{},"The CAD module stores transient operational state for dispatch activity,\nassignments, dispatch orders, support requests, group profiles, grouped views,\nand hydrated UI payloads. CAD state is in-memory and follows the active server\nor mission lifecycle.",[159,160,162],"h2",{"id":161},"data-model","Data Model",[155,164,165],{},"Most CAD records are flexible JSON objects. The service normalizes important\nIDs and returns structured mutation results for higher-level workflows.",[155,167,168],{},"Common generated IDs:",[170,171,172,180,186],"ul",{},[173,174,175,176],"li",{},"Orders: ",[177,178,179],"code",{},"cad-order:\u003Csequence>",[173,181,182,183],{},"Requests: ",[177,184,185],{},"cad-request:\u003Csequence>",[173,187,188],{},"Assignments usually share a task ID or order ID.",[159,190,192],{"id":191},"commands","Commands",[194,195,197],"h3",{"id":196},"activity","Activity",[199,200,201,217],"table",{},[202,203,204],"thead",{},[205,206,207,211,214],"tr",{},[208,209,210],"th",{},"Command",[208,212,213],{},"Arguments",[208,215,216],{},"Returns",[218,219,220,239],"tbody",{},[205,221,222,228,233],{},[223,224,225],"td",{},[177,226,227],{},"cad:activity:append",[223,229,230],{},[177,231,232],{},"activity_json",[223,234,235,238],{},[177,236,237],{},"OK",".",[205,240,241,246,251],{},[223,242,243],{},[177,244,245],{},"cad:activity:recent",[223,247,248],{},[177,249,250],{},"limit",[223,252,253],{},"Recent activity array JSON.",[194,255,257],{"id":256},"assignments","Assignments",[199,259,260,270],{},[202,261,262],{},[205,263,264,266,268],{},[208,265,210],{},[208,267,213],{},[208,269,216],{},[218,271,272,285,304,320,336,353],{},[205,273,274,279,282],{},[223,275,276],{},[177,277,278],{},"cad:assignments:list",[223,280,281],{},"none",[223,283,284],{},"Assignment array JSON.",[205,286,287,292,301],{},[223,288,289],{},[177,290,291],{},"cad:assignments:assign",[223,293,294,297,298],{},[177,295,296],{},"entry_id",", ",[177,299,300],{},"assignment_json",[223,302,303],{},"Assignment mutation result JSON.",[205,305,306,311,318],{},[223,307,308],{},[177,309,310],{},"cad:assignments:acknowledge",[223,312,313,297,315],{},[177,314,296],{},[177,316,317],{},"patch_json",[223,319,303],{},[205,321,322,327,333],{},[223,323,324],{},[177,325,326],{},"cad:assignments:decline",[223,328,329,297,331],{},[177,330,296],{},[177,332,317],{},[223,334,335],{},"Assignment mutation result JSON and removes assignment.",[205,337,338,343,349],{},[223,339,340],{},[177,341,342],{},"cad:assignments:upsert",[223,344,345,297,347],{},[177,346,296],{},[177,348,300],{},[223,350,351,238],{},[177,352,237],{},[205,354,355,360,364],{},[223,356,357],{},[177,358,359],{},"cad:assignments:delete",[223,361,362],{},[177,363,296],{},[223,365,366,238],{},[177,367,237],{},[194,369,371],{"id":370},"orders","Orders",[199,373,374,384],{},[202,375,376],{},[205,377,378,380,382],{},[208,379,210],{},[208,381,213],{},[208,383,216],{},[218,385,386,398,413,427,441,459],{},[205,387,388,393,395],{},[223,389,390],{},[177,391,392],{},"cad:orders:list",[223,394,281],{},[223,396,397],{},"Order array JSON.",[205,399,400,405,410],{},[223,401,402],{},[177,403,404],{},"cad:orders:create",[223,406,407],{},[177,408,409],{},"order_seed_json",[223,411,412],{},"Dispatch order mutation result JSON.",[205,414,415,420,425],{},[223,416,417],{},[177,418,419],{},"cad:orders:create_from_context",[223,421,422],{},[177,423,424],{},"context_json",[223,426,412],{},[205,428,429,434,438],{},[223,430,431],{},[177,432,433],{},"cad:orders:close",[223,435,436],{},[177,437,296],{},[223,439,440],{},"Dispatch order mutation result JSON and removes order\u002Fassignment.",[205,442,443,448,455],{},[223,444,445],{},[177,446,447],{},"cad:orders:upsert",[223,449,450,297,452],{},[177,451,296],{},[177,453,454],{},"order_json",[223,456,457,238],{},[177,458,237],{},[205,460,461,466,470],{},[223,462,463],{},[177,464,465],{},"cad:orders:delete",[223,467,468],{},[177,469,296],{},[223,471,472,238],{},[177,473,237],{},[194,475,477],{"id":476},"requests","Requests",[199,479,480,490],{},[202,481,482],{},[205,483,484,486,488],{},[208,485,210],{},[208,487,213],{},[208,489,216],{},[218,491,492,504,519,532,546,563],{},[205,493,494,499,501],{},[223,495,496],{},[177,497,498],{},"cad:requests:list",[223,500,281],{},[223,502,503],{},"Request array JSON.",[205,505,506,511,516],{},[223,507,508],{},[177,509,510],{},"cad:requests:submit",[223,512,513],{},[177,514,515],{},"request_json",[223,517,518],{},"Request mutation result JSON.",[205,520,521,526,530],{},[223,522,523],{},[177,524,525],{},"cad:requests:submit_from_context",[223,527,528],{},[177,529,424],{},[223,531,518],{},[205,533,534,539,543],{},[223,535,536],{},[177,537,538],{},"cad:requests:close",[223,540,541],{},[177,542,296],{},[223,544,545],{},"Request mutation result JSON and removes request.",[205,547,548,553,559],{},[223,549,550],{},[177,551,552],{},"cad:requests:upsert",[223,554,555,297,557],{},[177,556,296],{},[177,558,515],{},[223,560,561,238],{},[177,562,237],{},[205,564,565,570,574],{},[223,566,567],{},[177,568,569],{},"cad:requests:delete",[223,571,572],{},[177,573,296],{},[223,575,576,238],{},[177,577,237],{},[194,579,581],{"id":580},"profiles-and-views","Profiles and Views",[199,583,584,594],{},[202,585,586],{},[205,587,588,590,592],{},[208,589,210],{},[208,591,213],{},[208,593,216],{},[218,595,596,608,622,640,655,670],{},[205,597,598,603,605],{},[223,599,600],{},[177,601,602],{},"cad:profiles:list",[223,604,281],{},[223,606,607],{},"Profile array JSON.",[205,609,610,615,619],{},[223,611,612],{},[177,613,614],{},"cad:profiles:update_from_context",[223,616,617],{},[177,618,424],{},[223,620,621],{},"Profile mutation result JSON.",[205,623,624,629,636],{},[223,625,626],{},[177,627,628],{},"cad:profiles:upsert",[223,630,631,297,633],{},[177,632,296],{},[177,634,635],{},"profile_json",[223,637,638,238],{},[177,639,237],{},[205,641,642,647,651],{},[223,643,644],{},[177,645,646],{},"cad:profiles:delete",[223,648,649],{},[177,650,296],{},[223,652,653,238],{},[177,654,237],{},[205,656,657,662,667],{},[223,658,659],{},[177,660,661],{},"cad:groups:build",[223,663,664],{},[177,665,666],{},"groups_seed_json",[223,668,669],{},"Group array JSON.",[205,671,672,677,682],{},[223,673,674],{},[177,675,676],{},"cad:view:hydrate",[223,678,679],{},[177,680,681],{},"hydrate_seed_json",[223,683,684],{},"Hydrated CAD payload JSON.",[159,686,688],{"id":687},"submit-a-support-request","Submit a Support Request",[690,691,696],"pre",{"className":692,"code":693,"language":694,"meta":695,"style":695},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _fields = createHashMapFromArray [\n [\"pickup_location\", \"Grid 123456\"],\n [\"precedence\", \"urgent\"],\n [\"security\", \"secure\"]\n];\n\nprivate _context = createHashMapFromArray [\n [\"type\", \"medevac_9line\"],\n [\"fields\", _fields],\n [\"groupId\", \"alpha\"],\n [\"groupCallsign\", \"Alpha 1-1\"],\n [\"submittedByUid\", getPlayerUID player],\n [\"submittedByName\", name player],\n [\"priority\", \"emergency\"],\n [\"position\", getPosATL player],\n [\"createdAt\", diag_tickTime]\n];\n\nprivate _result = \"forge_server\" callExtension [\"cad:requests:submit_from_context\", [\n toJSON _context\n]];\n","sqf","",[177,697,698,706,712,718,724,730,737,743,749,755,761,767,773,779,785,791,797,802,807,813,819],{"__ignoreMap":695},[699,700,703],"span",{"class":701,"line":702},"line",1,[699,704,705],{},"private _fields = createHashMapFromArray [\n",[699,707,709],{"class":701,"line":708},2,[699,710,711],{}," [\"pickup_location\", \"Grid 123456\"],\n",[699,713,715],{"class":701,"line":714},3,[699,716,717],{}," [\"precedence\", \"urgent\"],\n",[699,719,721],{"class":701,"line":720},4,[699,722,723],{}," [\"security\", \"secure\"]\n",[699,725,727],{"class":701,"line":726},5,[699,728,729],{},"];\n",[699,731,733],{"class":701,"line":732},6,[699,734,736],{"emptyLinePlaceholder":735},true,"\n",[699,738,740],{"class":701,"line":739},7,[699,741,742],{},"private _context = createHashMapFromArray [\n",[699,744,746],{"class":701,"line":745},8,[699,747,748],{}," [\"type\", \"medevac_9line\"],\n",[699,750,752],{"class":701,"line":751},9,[699,753,754],{}," [\"fields\", _fields],\n",[699,756,758],{"class":701,"line":757},10,[699,759,760],{}," [\"groupId\", \"alpha\"],\n",[699,762,764],{"class":701,"line":763},11,[699,765,766],{}," [\"groupCallsign\", \"Alpha 1-1\"],\n",[699,768,770],{"class":701,"line":769},12,[699,771,772],{}," [\"submittedByUid\", getPlayerUID player],\n",[699,774,776],{"class":701,"line":775},13,[699,777,778],{}," [\"submittedByName\", name player],\n",[699,780,782],{"class":701,"line":781},14,[699,783,784],{}," [\"priority\", \"emergency\"],\n",[699,786,788],{"class":701,"line":787},15,[699,789,790],{}," [\"position\", getPosATL player],\n",[699,792,794],{"class":701,"line":793},16,[699,795,796],{}," [\"createdAt\", diag_tickTime]\n",[699,798,800],{"class":701,"line":799},17,[699,801,729],{},[699,803,805],{"class":701,"line":804},18,[699,806,736],{"emptyLinePlaceholder":735},[699,808,810],{"class":701,"line":809},19,[699,811,812],{},"private _result = \"forge_server\" callExtension [\"cad:requests:submit_from_context\", [\n",[699,814,816],{"class":701,"line":815},20,[699,817,818],{}," toJSON _context\n",[699,820,822],{"class":701,"line":821},21,[699,823,824],{},"]];\n",[155,826,827,828,297,831,834,835,838,839,238],{},"Supported priority values are ",[177,829,830],{},"routine",[177,832,833],{},"priority",", and ",[177,836,837],{},"emergency",". Unknown\nvalues normalize to ",[177,840,833],{},[159,842,844],{"id":843},"create-a-dispatch-order","Create a Dispatch Order",[690,846,848],{"className":692,"code":847,"language":694,"meta":695,"style":695},"private _context = createHashMapFromArray [\n [\"assigneeGroupId\", \"bravo\"],\n [\"assigneeGroupCallsign\", \"Bravo 1-1\"],\n [\"targetGroupId\", \"alpha\"],\n [\"targetGroupCallsign\", \"Alpha 1-1\"],\n [\"targetPosition\", getPosATL player],\n [\"createdByUid\", getPlayerUID player],\n [\"createdByName\", name player],\n [\"requestId\", \"cad-request:1\"],\n [\"requestType\", \"logreq\"],\n [\"requestTitle\", \"LOGREQ | Alpha 1-1\"],\n [\"requestSummary\", \"Ammo resupply requested\"],\n [\"requestFields\", createHashMap],\n [\"note\", \"Support Alpha 1-1 at current position.\"],\n [\"priority\", \"priority\"],\n [\"createdAt\", diag_tickTime]\n];\n\nprivate _result = \"forge_server\" callExtension [\"cad:orders:create_from_context\", [\n toJSON _context\n]];\n",[177,849,850,854,859,864,869,874,879,884,889,894,899,904,909,914,919,924,928,932,936,941,945],{"__ignoreMap":695},[699,851,852],{"class":701,"line":702},[699,853,742],{},[699,855,856],{"class":701,"line":708},[699,857,858],{}," [\"assigneeGroupId\", \"bravo\"],\n",[699,860,861],{"class":701,"line":714},[699,862,863],{}," [\"assigneeGroupCallsign\", \"Bravo 1-1\"],\n",[699,865,866],{"class":701,"line":720},[699,867,868],{}," [\"targetGroupId\", \"alpha\"],\n",[699,870,871],{"class":701,"line":726},[699,872,873],{}," [\"targetGroupCallsign\", \"Alpha 1-1\"],\n",[699,875,876],{"class":701,"line":732},[699,877,878],{}," [\"targetPosition\", getPosATL player],\n",[699,880,881],{"class":701,"line":739},[699,882,883],{}," [\"createdByUid\", getPlayerUID player],\n",[699,885,886],{"class":701,"line":745},[699,887,888],{}," [\"createdByName\", name player],\n",[699,890,891],{"class":701,"line":751},[699,892,893],{}," [\"requestId\", \"cad-request:1\"],\n",[699,895,896],{"class":701,"line":757},[699,897,898],{}," [\"requestType\", \"logreq\"],\n",[699,900,901],{"class":701,"line":763},[699,902,903],{}," [\"requestTitle\", \"LOGREQ | Alpha 1-1\"],\n",[699,905,906],{"class":701,"line":769},[699,907,908],{}," [\"requestSummary\", \"Ammo resupply requested\"],\n",[699,910,911],{"class":701,"line":775},[699,912,913],{}," [\"requestFields\", createHashMap],\n",[699,915,916],{"class":701,"line":781},[699,917,918],{}," [\"note\", \"Support Alpha 1-1 at current position.\"],\n",[699,920,921],{"class":701,"line":787},[699,922,923],{}," [\"priority\", \"priority\"],\n",[699,925,926],{"class":701,"line":793},[699,927,796],{},[699,929,930],{"class":701,"line":799},[699,931,729],{},[699,933,934],{"class":701,"line":804},[699,935,736],{"emptyLinePlaceholder":735},[699,937,938],{"class":701,"line":809},[699,939,940],{},"private _result = \"forge_server\" callExtension [\"cad:orders:create_from_context\", [\n",[699,942,943],{"class":701,"line":815},[699,944,818],{},[699,946,947],{"class":701,"line":821},[699,948,824],{},[159,950,952],{"id":951},"assignment-workflow","Assignment Workflow",[690,954,956],{"className":692,"code":955,"language":694,"meta":695,"style":695},"private _assignment = createHashMapFromArray [\n [\"groupId\", \"bravo\"],\n [\"assigneeGroupCallsign\", \"Bravo 1-1\"],\n [\"assignedByUid\", getPlayerUID player],\n [\"assignedByName\", name player],\n [\"assignedAt\", diag_tickTime],\n [\"state\", \"assigned\"]\n];\n\n\"forge_server\" callExtension [\"cad:assignments:assign\", [\n \"task-123\",\n toJSON _assignment\n]];\n\nprivate _ack = createHashMapFromArray [\n [\"state\", \"acknowledged\"],\n [\"acknowledgedByUid\", getPlayerUID player],\n [\"acknowledgedAt\", diag_tickTime]\n];\n\n\"forge_server\" callExtension [\"cad:assignments:acknowledge\", [\n \"task-123\",\n toJSON _ack\n]];\n",[177,957,958,963,968,972,977,982,987,992,996,1000,1005,1010,1015,1019,1023,1028,1033,1038,1043,1047,1051,1056,1061,1067],{"__ignoreMap":695},[699,959,960],{"class":701,"line":702},[699,961,962],{},"private _assignment = createHashMapFromArray [\n",[699,964,965],{"class":701,"line":708},[699,966,967],{}," [\"groupId\", \"bravo\"],\n",[699,969,970],{"class":701,"line":714},[699,971,863],{},[699,973,974],{"class":701,"line":720},[699,975,976],{}," [\"assignedByUid\", getPlayerUID player],\n",[699,978,979],{"class":701,"line":726},[699,980,981],{}," [\"assignedByName\", name player],\n",[699,983,984],{"class":701,"line":732},[699,985,986],{}," [\"assignedAt\", diag_tickTime],\n",[699,988,989],{"class":701,"line":739},[699,990,991],{}," [\"state\", \"assigned\"]\n",[699,993,994],{"class":701,"line":745},[699,995,729],{},[699,997,998],{"class":701,"line":751},[699,999,736],{"emptyLinePlaceholder":735},[699,1001,1002],{"class":701,"line":757},[699,1003,1004],{},"\"forge_server\" callExtension [\"cad:assignments:assign\", [\n",[699,1006,1007],{"class":701,"line":763},[699,1008,1009],{}," \"task-123\",\n",[699,1011,1012],{"class":701,"line":769},[699,1013,1014],{}," toJSON _assignment\n",[699,1016,1017],{"class":701,"line":775},[699,1018,824],{},[699,1020,1021],{"class":701,"line":781},[699,1022,736],{"emptyLinePlaceholder":735},[699,1024,1025],{"class":701,"line":787},[699,1026,1027],{},"private _ack = createHashMapFromArray [\n",[699,1029,1030],{"class":701,"line":793},[699,1031,1032],{}," [\"state\", \"acknowledged\"],\n",[699,1034,1035],{"class":701,"line":799},[699,1036,1037],{}," [\"acknowledgedByUid\", getPlayerUID player],\n",[699,1039,1040],{"class":701,"line":804},[699,1041,1042],{}," [\"acknowledgedAt\", diag_tickTime]\n",[699,1044,1045],{"class":701,"line":809},[699,1046,729],{},[699,1048,1049],{"class":701,"line":815},[699,1050,736],{"emptyLinePlaceholder":735},[699,1052,1053],{"class":701,"line":821},[699,1054,1055],{},"\"forge_server\" callExtension [\"cad:assignments:acknowledge\", [\n",[699,1057,1059],{"class":701,"line":1058},22,[699,1060,1009],{},[699,1062,1064],{"class":701,"line":1063},23,[699,1065,1066],{}," toJSON _ack\n",[699,1068,1070],{"class":701,"line":1069},24,[699,1071,824],{},[159,1073,1075],{"id":1074},"hydrate-the-cad-ui","Hydrate the CAD UI",[690,1077,1079],{"className":692,"code":1078,"language":694,"meta":695,"style":695},"private _session = createHashMapFromArray [\n [\"uid\", getPlayerUID player],\n [\"orgId\", \"default\"],\n [\"isDispatcher\", true],\n [\"groupId\", \"alpha\"],\n [\"isLeader\", true]\n];\n\nprivate _seed = createHashMapFromArray [\n [\"groups\", _liveGroups],\n [\"activeTasks\", _activeTasks],\n [\"session\", _session]\n];\n\nprivate _result = \"forge_server\" callExtension [\"cad:view:hydrate\", [toJSON _seed]];\n",[177,1080,1081,1086,1091,1096,1101,1105,1110,1114,1118,1123,1128,1133,1138,1142,1146],{"__ignoreMap":695},[699,1082,1083],{"class":701,"line":702},[699,1084,1085],{},"private _session = createHashMapFromArray [\n",[699,1087,1088],{"class":701,"line":708},[699,1089,1090],{}," [\"uid\", getPlayerUID player],\n",[699,1092,1093],{"class":701,"line":714},[699,1094,1095],{}," [\"orgId\", \"default\"],\n",[699,1097,1098],{"class":701,"line":720},[699,1099,1100],{}," [\"isDispatcher\", true],\n",[699,1102,1103],{"class":701,"line":726},[699,1104,760],{},[699,1106,1107],{"class":701,"line":732},[699,1108,1109],{}," [\"isLeader\", true]\n",[699,1111,1112],{"class":701,"line":739},[699,1113,729],{},[699,1115,1116],{"class":701,"line":745},[699,1117,736],{"emptyLinePlaceholder":735},[699,1119,1120],{"class":701,"line":751},[699,1121,1122],{},"private _seed = createHashMapFromArray [\n",[699,1124,1125],{"class":701,"line":757},[699,1126,1127],{}," [\"groups\", _liveGroups],\n",[699,1129,1130],{"class":701,"line":763},[699,1131,1132],{}," [\"activeTasks\", _activeTasks],\n",[699,1134,1135],{"class":701,"line":769},[699,1136,1137],{}," [\"session\", _session]\n",[699,1139,1140],{"class":701,"line":775},[699,1141,729],{},[699,1143,1144],{"class":701,"line":781},[699,1145,736],{"emptyLinePlaceholder":735},[699,1147,1148],{"class":701,"line":787},[699,1149,1150],{},"private _result = \"forge_server\" callExtension [\"cad:view:hydrate\", [toJSON _seed]];\n",[159,1152,1154],{"id":1153},"error-handling","Error Handling",[690,1156,1158],{"className":692,"code":1157,"language":694,"meta":695,"style":695},"private _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"CAD error: %1\", _payload];\n};\n",[177,1159,1160,1165,1170,1175],{"__ignoreMap":695},[699,1161,1162],{"class":701,"line":702},[699,1163,1164],{},"private _payload = _result select 0;\n",[699,1166,1167],{"class":701,"line":708},[699,1168,1169],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[699,1171,1172],{"class":701,"line":714},[699,1173,1174],{}," systemChat format [\"CAD error: %1\", _payload];\n",[699,1176,1177],{"class":701,"line":720},[699,1178,1179],{},"};\n",[1181,1182,1183],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":695,"searchDepth":708,"depth":708,"links":1185},[1186,1187,1194,1195,1196,1197,1198],{"id":161,"depth":708,"text":162},{"id":191,"depth":708,"text":192,"children":1188},[1189,1190,1191,1192,1193],{"id":196,"depth":714,"text":197},{"id":256,"depth":714,"text":257},{"id":370,"depth":714,"text":371},{"id":476,"depth":714,"text":477},{"id":580,"depth":714,"text":581},{"id":687,"depth":708,"text":688},{"id":843,"depth":708,"text":844},{"id":951,"depth":708,"text":952},{"id":1074,"depth":708,"text":1075},{"id":1153,"depth":708,"text":1154},"md",null,{},{"title":65,"description":157},"VANsWEF49OB4tZwmlVZ0NzEGZIfaS-nx6IfKliEbIFw",[1205,1207],{"title":61,"path":62,"stem":63,"description":1206,"children":-1},"The bank module stores player account balances, earnings, PINs, and transaction\nstrings. The hot-state API also owns the active banking workflows used by the\nUI: deposit, withdraw, transfer, checkout charge, and PIN validation.",{"title":69,"path":70,"stem":71,"description":1208,"children":-1},"The economy server addon owns Arma-world service behavior for fuel, medical,\nand repair interactions. It does not own money state. Money mutations go\nthrough extension-backed bank and organization hot state before the world\neffect is applied.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/economy.html b/docus/dist/server-modules/economy.html new file mode 100644 index 0000000..33fd521 --- /dev/null +++ b/docus/dist/server-modules/economy.html @@ -0,0 +1,136 @@ +Economy Usage Guide - forge-docus
Server Modules

Economy Usage Guide

The economy server addon owns Arma-world service behavior for fuel, medical, +and repair interactions. It does not own money state. Money mutations go +through extension-backed bank and organization hot state before the world +effect is applied.

Economy Usage Guide

The economy server addon owns Arma-world service behavior for fuel, medical, +and repair interactions. It does not own money state. Money mutations go +through extension-backed bank and organization hot state before the world +effect is applied.

Dependencies

  • forge_server_common for logging, formatting, and player lookup.
  • forge_server_bank for personal medical billing.
  • forge_server_org for organization-funded services and medical fallback +debt.
  • forge_client_actor and forge_client_notifications for targeted client +responses.

Fuel

Fuel is organization-funded.

When refueling stops, fnc_initFEconomyStore.sqf calculates the fuel delta and +cost, charges the player's organization through OrgStore chargeCheckout, and +syncs the organization patch to online members. If organization funds cannot +cover the refuel, the vehicle is rolled back to the fuel level it had when the +session started.

Garage UI refuel requests use the server RefuelService event. The fuel store +calculates missing fuel from the vehicle config fuelCapacity, charges the +player's organization, and fills the vehicle only after the organization charge +succeeds.

Repair

Repair is organization-funded.

Use the repair service event:

[QEGVAR(economy,RepairService), [_target, _unit, _cost]] call CBA_fnc_serverEvent;
+

_cost is optional. Passing -1 uses the configured service repair cost. +The target is only repaired after the organization charge succeeds.

The client garage UI forwards selected nearby vehicle repair requests through +the same event.

Medical

Medical is player-funded first.

When a heal is requested, fnc_initMEconomyStore.sqf uses this billing order:

  1. Charge the player's bank balance when it can cover the medical fee.
  2. Otherwise charge the player's cash when it can cover the fee.
  3. If neither personal balance can cover the fee, charge organization funds.
  4. When organization funds cover the fallback charge, record the same amount as +debt on the player's organization credit line.

The heal only completes after one of those charges succeeds. If personal +billing is unavailable, the heal does not fall back to organization funds +because the server cannot verify that the player is unable to cover the fee.

Medical Debt Repayment

Medical fallback debt uses the existing organization credit-line repayment +flow. The organization treasury is reduced when the service is rendered, and +the player's credit-line amount_due increases by the medical fee. When the +player repays through the bank credit-line repayment action, player bank funds +are moved back into the organization treasury.

Hot-Cache Boundary

The economy addon should stay server-authoritative for world effects such as +vehicle fuel, vehicle repair, healing, respawn placement, and death inventory +movement. Bank and organization balances should continue to mutate through the +extension-backed hot-cache services.

Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/economy/_payload.json b/docus/dist/server-modules/economy/_payload.json new file mode 100644 index 0000000..1eeaa0d --- /dev/null +++ b/docus/dist/server-modules/economy/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":338},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-economy":145,"-server-modules-economy-surround":333},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":69,"body":147,"description":157,"extension":327,"links":328,"meta":329,"navigation":330,"path":70,"seo":331,"stem":71,"__hash__":332},"docs\u002F3.server-modules\u002F4.economy.md",{"type":148,"value":149,"toc":318},"minimark",[150,154,158,163,196,200,203,214,225,229,232,235,251,261,264,268,271,278,293,296,300,307,311,314],[151,152,69],"h1",{"id":153},"economy-usage-guide",[155,156,157],"p",{},"The economy server addon owns Arma-world service behavior for fuel, medical,\nand repair interactions. It does not own money state. Money mutations go\nthrough extension-backed bank and organization hot state before the world\neffect is applied.",[159,160,162],"h2",{"id":161},"dependencies","Dependencies",[164,165,166,174,180,186],"ul",{},[167,168,169,173],"li",{},[170,171,172],"code",{},"forge_server_common"," for logging, formatting, and player lookup.",[167,175,176,179],{},[170,177,178],{},"forge_server_bank"," for personal medical billing.",[167,181,182,185],{},[170,183,184],{},"forge_server_org"," for organization-funded services and medical fallback\ndebt.",[167,187,188,191,192,195],{},[170,189,190],{},"forge_client_actor"," and ",[170,193,194],{},"forge_client_notifications"," for targeted client\nresponses.",[159,197,199],{"id":198},"fuel","Fuel",[155,201,202],{},"Fuel is organization-funded.",[155,204,205,206,209,210,213],{},"When refueling stops, ",[170,207,208],{},"fnc_initFEconomyStore.sqf"," calculates the fuel delta and\ncost, charges the player's organization through ",[170,211,212],{},"OrgStore chargeCheckout",", and\nsyncs the organization patch to online members. If organization funds cannot\ncover the refuel, the vehicle is rolled back to the fuel level it had when the\nsession started.",[155,215,216,217,220,221,224],{},"Garage UI refuel requests use the server ",[170,218,219],{},"RefuelService"," event. The fuel store\ncalculates missing fuel from the vehicle config ",[170,222,223],{},"fuelCapacity",", charges the\nplayer's organization, and fills the vehicle only after the organization charge\nsucceeds.",[159,226,228],{"id":227},"repair","Repair",[155,230,231],{},"Repair is organization-funded.",[155,233,234],{},"Use the repair service event:",[236,237,242],"pre",{"className":238,"code":239,"language":240,"meta":241,"style":241},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[QEGVAR(economy,RepairService), [_target, _unit, _cost]] call CBA_fnc_serverEvent;\n","sqf","",[170,243,244],{"__ignoreMap":241},[245,246,249],"span",{"class":247,"line":248},"line",1,[245,250,239],{},[155,252,253,256,257,260],{},[170,254,255],{},"_cost"," is optional. Passing ",[170,258,259],{},"-1"," uses the configured service repair cost.\nThe target is only repaired after the organization charge succeeds.",[155,262,263],{},"The client garage UI forwards selected nearby vehicle repair requests through\nthe same event.",[159,265,267],{"id":266},"medical","Medical",[155,269,270],{},"Medical is player-funded first.",[155,272,273,274,277],{},"When a heal is requested, ",[170,275,276],{},"fnc_initMEconomyStore.sqf"," uses this billing order:",[279,280,281,284,287,290],"ol",{},[167,282,283],{},"Charge the player's bank balance when it can cover the medical fee.",[167,285,286],{},"Otherwise charge the player's cash when it can cover the fee.",[167,288,289],{},"If neither personal balance can cover the fee, charge organization funds.",[167,291,292],{},"When organization funds cover the fallback charge, record the same amount as\ndebt on the player's organization credit line.",[155,294,295],{},"The heal only completes after one of those charges succeeds. If personal\nbilling is unavailable, the heal does not fall back to organization funds\nbecause the server cannot verify that the player is unable to cover the fee.",[159,297,299],{"id":298},"medical-debt-repayment","Medical Debt Repayment",[155,301,302,303,306],{},"Medical fallback debt uses the existing organization credit-line repayment\nflow. The organization treasury is reduced when the service is rendered, and\nthe player's credit-line ",[170,304,305],{},"amount_due"," increases by the medical fee. When the\nplayer repays through the bank credit-line repayment action, player bank funds\nare moved back into the organization treasury.",[159,308,310],{"id":309},"hot-cache-boundary","Hot-Cache Boundary",[155,312,313],{},"The economy addon should stay server-authoritative for world effects such as\nvehicle fuel, vehicle repair, healing, respawn placement, and death inventory\nmovement. Bank and organization balances should continue to mutate through the\nextension-backed hot-cache services.",[315,316,317],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":241,"searchDepth":319,"depth":319,"links":320},2,[321,322,323,324,325,326],{"id":161,"depth":319,"text":162},{"id":198,"depth":319,"text":199},{"id":227,"depth":319,"text":228},{"id":266,"depth":319,"text":267},{"id":298,"depth":319,"text":299},{"id":309,"depth":319,"text":310},"md",null,{},true,{"title":69,"description":157},"lJi1fhh3OVngURwg54r03VgJ7l-YhNr9VR2saYNlGOE",[334,336],{"title":65,"path":66,"stem":67,"description":335,"children":-1},"The CAD module stores transient operational state for dispatch activity,\nassignments, dispatch orders, support requests, group profiles, grouped views,\nand hydrated UI payloads. CAD state is in-memory and follows the active server\nor mission lifecycle.",{"title":73,"path":74,"stem":75,"description":337,"children":-1},"The garage module stores physical player vehicles. Each record keeps the\nvehicle classname, generated plate UUID, fuel, overall damage, and detailed hit\npoint damage.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/garage.html b/docus/dist/server-modules/garage.html new file mode 100644 index 0000000..4fce907 --- /dev/null +++ b/docus/dist/server-modules/garage.html @@ -0,0 +1,224 @@ +Garage Usage Guide - forge-docus
Server Modules

Garage Usage Guide

The garage module stores physical player vehicles. Each record keeps the +vehicle classname, generated plate UUID, fuel, overall damage, and detailed hit +point damage.

Garage Usage Guide

The garage module stores physical player vehicles. Each record keeps the +vehicle classname, generated plate UUID, fuel, overall damage, and detailed hit +point damage.

Storage Model

Garage data is persisted through SurrealDB by the server extension.

{
+  "plate-uuid": {
+    "plate": "plate-uuid",
+    "classname": "B_Quadbike_01_F",
+    "fuel": 1.0,
+    "damage": 0.0,
+    "hit_points": {
+      "names": ["hitengine"],
+      "selections": ["engine_hitpoint"],
+      "values": [0.0]
+    }
+  }
+}
+

Rules validated by the Rust service:

  • A player garage can contain up to 5 vehicles.
  • garage:add generates a UUID plate automatically.
  • fuel, damage, and every hit point value must be between 0.0 and 1.0.
  • hit_points.names, hit_points.selections, and hit_points.values must have +the same length.
  • garage:get, garage:patch, and garage:remove require an existing garage.
  • garage:add creates an empty garage automatically when one does not exist.

Commands

All commands are called on the garage group.

CommandArgumentsReturns
garage:createuidEmpty vehicle map as JSON.
garage:getuidVehicle map as JSON.
garage:adduid, vehicle_jsonUpdated vehicle map as JSON.
garage:updateuid, vehicles_jsonReplaced vehicle map as JSON.
garage:patchuid, patch_jsonUpdated vehicle map as JSON.
garage:removeuid, remove_jsonUpdated vehicle map as JSON.
garage:deleteuidOK.
garage:existsuidtrue or false.

Error Handling

Every command returns a string payload. Always check for the Error: prefix +before parsing JSON.

private _result = "forge_server" callExtension ["garage:get", [getPlayerUID player]];
+private _payload = _result select 0;
+
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Garage error: %1", _payload];
+};
+
+private _garage = fromJSON _payload;
+

Add a Vehicle

garage:add requires classname, fuel, damage, and hit_points.

private _hitPointData = getAllHitPointsDamage _vehicle;
+private _hitPoints = createHashMapFromArray [
+    ["names", _hitPointData select 0],
+    ["selections", _hitPointData select 1],
+    ["values", _hitPointData select 2]
+];
+
+private _vehicleData = createHashMapFromArray [
+    ["classname", typeOf _vehicle],
+    ["fuel", fuel _vehicle],
+    ["damage", damage _vehicle],
+    ["hit_points", _hitPoints]
+];
+
+private _result = "forge_server" callExtension ["garage:add", [
+    getPlayerUID player,
+    toJSON _vehicleData
+]];
+
+private _payload = _result select 0;
+if (_payload find "Error:" == 0) exitWith {
+    hint format ["Failed to store vehicle: %1", _payload];
+};
+
+private _garage = fromJSON _payload;
+

The returned value is a hash map keyed by generated plate. To find the newly +stored vehicle, compare returned keys before and after the add, or search by +classname if your workflow guarantees a unique pending vehicle.

private _storedPlate = "";
+{
+    private _vehicleRecord = _garage get _x;
+    if ((_vehicleRecord get "classname") == typeOf _vehicle) then {
+        _storedPlate = _x;
+    };
+} forEach keys _garage;
+

Patch a Vehicle

garage:patch updates selected fields for one plate. The plate field is +required. fuel, damage, and hit_points are optional.

private _patch = createHashMapFromArray [
+    ["plate", _vehicle getVariable ["forge_garage_plate", ""]],
+    ["fuel", fuel _vehicle],
+    ["damage", damage _vehicle]
+];
+
+private _result = "forge_server" callExtension ["garage:patch", [
+    getPlayerUID player,
+    toJSON _patch
+]];
+

Remove a Vehicle

garage:remove expects JSON with a plate field.

private _remove = createHashMapFromArray [
+    ["plate", _plate]
+];
+
+private _result = "forge_server" callExtension ["garage:remove", [
+    getPlayerUID player,
+    toJSON _remove
+]];
+

Spawn a Stored Vehicle

fnc_spawnGarageVehicle = {
+    params ["_plate"];
+
+    private _result = "forge_server" callExtension ["garage:get", [getPlayerUID player]];
+    private _payload = _result select 0;
+
+    if (_payload find "Error:" == 0) exitWith {
+        hint format ["Failed to load garage: %1", _payload];
+        objNull
+    };
+
+    private _garage = fromJSON _payload;
+    private _vehicleData = _garage getOrDefault [_plate, createHashMap];
+    if (_vehicleData isEqualTo createHashMap) exitWith {
+        hint "Vehicle plate was not found in your garage.";
+        objNull
+    };
+
+    private _vehicle = (_vehicleData get "classname") createVehicle (player getPos [10, getDir player]);
+    _vehicle setFuel (_vehicleData getOrDefault ["fuel", 1]);
+    _vehicle setDamage (_vehicleData getOrDefault ["damage", 0]);
+    _vehicle setVariable ["forge_garage_plate", _plate, true];
+
+    private _hitPoints = _vehicleData getOrDefault ["hit_points", createHashMap];
+    private _names = _hitPoints getOrDefault ["names", []];
+    private _values = _hitPoints getOrDefault ["values", []];
+
+    {
+        _vehicle setHitPointDamage [_x, _values select _forEachIndex];
+    } forEach _names;
+
+    private _remove = createHashMapFromArray [["plate", _plate]];
+    "forge_server" callExtension ["garage:remove", [getPlayerUID player, toJSON _remove]];
+
+    _vehicle
+};
+

Hot State

The garage:hot:* commands keep a runtime copy of a player's garage and write +it back only when garage:hot:save runs.

CommandArgumentsReturns
garage:hot:inituidVehicle map as JSON.
garage:hot:getuidVehicle map as JSON.
garage:hot:overrideuid, vehicles_jsonVehicle map as JSON.
garage:hot:adduid, vehicle_jsonVehicle map as JSON.
garage:hot:remove_vehicleuid, remove_jsonVehicle map as JSON.
garage:hot:saveuidCurrent hot vehicle map as JSON.
garage:hot:removeuidOK.

Use hot state for session-heavy vehicle workflows. Use the durable commands for +simple store/retrieve operations.

Best Practices

  • Store the generated plate on spawned vehicles with setVariable.
  • Use garage:patch for frequent fuel and damage syncs.
  • Use garage:update only when replacing the whole vehicle map intentionally.
  • Do not delete the world vehicle until garage:add succeeds.
  • Treat vehicle maps as hash maps keyed by plate, not arrays.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/garage/_payload.json b/docus/dist/server-modules/garage/_payload.json new file mode 100644 index 0000000..2b12cbc --- /dev/null +++ b/docus/dist/server-modules/garage/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1356},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-garage":145,"-server-modules-garage-surround":1351},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":73,"body":147,"description":157,"extension":1346,"links":1347,"meta":1348,"navigation":640,"path":74,"seo":1349,"stem":75,"__hash__":1350},"docs\u002F3.server-modules\u002F5.garage.md",{"type":148,"value":149,"toc":1335},"minimark",[150,154,158,163,166,386,389,447,451,458,608,612,619,666,670,683,816,819,858,862,877,927,931,939,980,984,1168,1172,1183,1296,1299,1303,1331],[151,152,73],"h1",{"id":153},"garage-usage-guide",[155,156,157],"p",{},"The garage module stores physical player vehicles. Each record keeps the\nvehicle classname, generated plate UUID, fuel, overall damage, and detailed hit\npoint damage.",[159,160,162],"h2",{"id":161},"storage-model","Storage Model",[155,164,165],{},"Garage data is persisted through SurrealDB by the server extension.",[167,168,173],"pre",{"className":169,"code":170,"language":171,"meta":172,"style":172},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"plate-uuid\": {\n \"plate\": \"plate-uuid\",\n \"classname\": \"B_Quadbike_01_F\",\n \"fuel\": 1.0,\n \"damage\": 0.0,\n \"hit_points\": {\n \"names\": [\"hitengine\"],\n \"selections\": [\"engine_hitpoint\"],\n \"values\": [0.0]\n }\n }\n}\n","json","",[174,175,176,185,204,229,250,268,285,299,325,348,368,374,380],"code",{"__ignoreMap":172},[177,178,181],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sMK4o","{\n",[177,186,188,191,195,198,201],{"class":179,"line":187},2,[177,189,190],{"class":183}," \"",[177,192,194],{"class":193},"spNyl","plate-uuid",[177,196,197],{"class":183},"\"",[177,199,200],{"class":183},":",[177,202,203],{"class":183}," {\n",[177,205,207,210,214,216,218,221,224,226],{"class":179,"line":206},3,[177,208,209],{"class":183}," \"",[177,211,213],{"class":212},"sBMFI","plate",[177,215,197],{"class":183},[177,217,200],{"class":183},[177,219,220],{"class":183}," \"",[177,222,194],{"class":223},"sfazB",[177,225,197],{"class":183},[177,227,228],{"class":183},",\n",[177,230,232,234,237,239,241,243,246,248],{"class":179,"line":231},4,[177,233,209],{"class":183},[177,235,236],{"class":212},"classname",[177,238,197],{"class":183},[177,240,200],{"class":183},[177,242,220],{"class":183},[177,244,245],{"class":223},"B_Quadbike_01_F",[177,247,197],{"class":183},[177,249,228],{"class":183},[177,251,253,255,258,260,262,266],{"class":179,"line":252},5,[177,254,209],{"class":183},[177,256,257],{"class":212},"fuel",[177,259,197],{"class":183},[177,261,200],{"class":183},[177,263,265],{"class":264},"sbssI"," 1.0",[177,267,228],{"class":183},[177,269,271,273,276,278,280,283],{"class":179,"line":270},6,[177,272,209],{"class":183},[177,274,275],{"class":212},"damage",[177,277,197],{"class":183},[177,279,200],{"class":183},[177,281,282],{"class":264}," 0.0",[177,284,228],{"class":183},[177,286,288,290,293,295,297],{"class":179,"line":287},7,[177,289,209],{"class":183},[177,291,292],{"class":212},"hit_points",[177,294,197],{"class":183},[177,296,200],{"class":183},[177,298,203],{"class":183},[177,300,302,305,308,310,312,315,317,320,322],{"class":179,"line":301},8,[177,303,304],{"class":183}," \"",[177,306,307],{"class":264},"names",[177,309,197],{"class":183},[177,311,200],{"class":183},[177,313,314],{"class":183}," [",[177,316,197],{"class":183},[177,318,319],{"class":223},"hitengine",[177,321,197],{"class":183},[177,323,324],{"class":183},"],\n",[177,326,328,330,333,335,337,339,341,344,346],{"class":179,"line":327},9,[177,329,304],{"class":183},[177,331,332],{"class":264},"selections",[177,334,197],{"class":183},[177,336,200],{"class":183},[177,338,314],{"class":183},[177,340,197],{"class":183},[177,342,343],{"class":223},"engine_hitpoint",[177,345,197],{"class":183},[177,347,324],{"class":183},[177,349,351,353,356,358,360,362,365],{"class":179,"line":350},10,[177,352,304],{"class":183},[177,354,355],{"class":264},"values",[177,357,197],{"class":183},[177,359,200],{"class":183},[177,361,314],{"class":183},[177,363,364],{"class":264},"0.0",[177,366,367],{"class":183},"]\n",[177,369,371],{"class":179,"line":370},11,[177,372,373],{"class":183}," }\n",[177,375,377],{"class":179,"line":376},12,[177,378,379],{"class":183}," }\n",[177,381,383],{"class":179,"line":382},13,[177,384,385],{"class":183},"}\n",[155,387,388],{},"Rules validated by the Rust service:",[390,391,392,396,402,417,430,442],"ul",{},[393,394,395],"li",{},"A player garage can contain up to 5 vehicles.",[393,397,398,401],{},[174,399,400],{},"garage:add"," generates a UUID plate automatically.",[393,403,404,406,407,409,410,412,413,416],{},[174,405,257],{},", ",[174,408,275],{},", and every hit point value must be between ",[174,411,364],{}," and ",[174,414,415],{},"1.0",".",[393,418,419,406,422,425,426,429],{},[174,420,421],{},"hit_points.names",[174,423,424],{},"hit_points.selections",", and ",[174,427,428],{},"hit_points.values"," must have\nthe same length.",[393,431,432,406,435,425,438,441],{},[174,433,434],{},"garage:get",[174,436,437],{},"garage:patch",[174,439,440],{},"garage:remove"," require an existing garage.",[393,443,444,446],{},[174,445,400],{}," creates an empty garage automatically when one does not exist.",[159,448,450],{"id":449},"commands","Commands",[155,452,453,454,457],{},"All commands are called on the ",[174,455,456],{},"garage"," group.",[459,460,461,477],"table",{},[462,463,464],"thead",{},[465,466,467,471,474],"tr",{},[468,469,470],"th",{},"Command",[468,472,473],{},"Arguments",[468,475,476],{},"Returns",[478,479,480,496,509,525,542,557,572,588],"tbody",{},[465,481,482,488,493],{},[483,484,485],"td",{},[174,486,487],{},"garage:create",[483,489,490],{},[174,491,492],{},"uid",[483,494,495],{},"Empty vehicle map as JSON.",[465,497,498,502,506],{},[483,499,500],{},[174,501,434],{},[483,503,504],{},[174,505,492],{},[483,507,508],{},"Vehicle map as JSON.",[465,510,511,515,522],{},[483,512,513],{},[174,514,400],{},[483,516,517,406,519],{},[174,518,492],{},[174,520,521],{},"vehicle_json",[483,523,524],{},"Updated vehicle map as JSON.",[465,526,527,532,539],{},[483,528,529],{},[174,530,531],{},"garage:update",[483,533,534,406,536],{},[174,535,492],{},[174,537,538],{},"vehicles_json",[483,540,541],{},"Replaced vehicle map as JSON.",[465,543,544,548,555],{},[483,545,546],{},[174,547,437],{},[483,549,550,406,552],{},[174,551,492],{},[174,553,554],{},"patch_json",[483,556,524],{},[465,558,559,563,570],{},[483,560,561],{},[174,562,440],{},[483,564,565,406,567],{},[174,566,492],{},[174,568,569],{},"remove_json",[483,571,524],{},[465,573,574,579,583],{},[483,575,576],{},[174,577,578],{},"garage:delete",[483,580,581],{},[174,582,492],{},[483,584,585,416],{},[174,586,587],{},"OK",[465,589,590,595,599],{},[483,591,592],{},[174,593,594],{},"garage:exists",[483,596,597],{},[174,598,492],{},[483,600,601,604,605,416],{},[174,602,603],{},"true"," or ",[174,606,607],{},"false",[159,609,611],{"id":610},"error-handling","Error Handling",[155,613,614,615,618],{},"Every command returns a string payload. Always check for the ",[174,616,617],{},"Error:"," prefix\nbefore parsing JSON.",[167,620,624],{"className":621,"code":622,"language":623,"meta":172,"style":172},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _result = \"forge_server\" callExtension [\"garage:get\", [getPlayerUID player]];\nprivate _payload = _result select 0;\n\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Garage error: %1\", _payload];\n};\n\nprivate _garage = fromJSON _payload;\n","sqf",[174,625,626,631,636,642,647,652,657,661],{"__ignoreMap":172},[177,627,628],{"class":179,"line":180},[177,629,630],{},"private _result = \"forge_server\" callExtension [\"garage:get\", [getPlayerUID player]];\n",[177,632,633],{"class":179,"line":187},[177,634,635],{},"private _payload = _result select 0;\n",[177,637,638],{"class":179,"line":206},[177,639,641],{"emptyLinePlaceholder":640},true,"\n",[177,643,644],{"class":179,"line":231},[177,645,646],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[177,648,649],{"class":179,"line":252},[177,650,651],{}," systemChat format [\"Garage error: %1\", _payload];\n",[177,653,654],{"class":179,"line":270},[177,655,656],{},"};\n",[177,658,659],{"class":179,"line":287},[177,660,641],{"emptyLinePlaceholder":640},[177,662,663],{"class":179,"line":301},[177,664,665],{},"private _garage = fromJSON _payload;\n",[159,667,669],{"id":668},"add-a-vehicle","Add a Vehicle",[155,671,672,674,675,406,677,406,679,425,681,416],{},[174,673,400],{}," requires ",[174,676,236],{},[174,678,257],{},[174,680,275],{},[174,682,292],{},[167,684,686],{"className":621,"code":685,"language":623,"meta":172,"style":172},"private _hitPointData = getAllHitPointsDamage _vehicle;\nprivate _hitPoints = createHashMapFromArray [\n [\"names\", _hitPointData select 0],\n [\"selections\", _hitPointData select 1],\n [\"values\", _hitPointData select 2]\n];\n\nprivate _vehicleData = createHashMapFromArray [\n [\"classname\", typeOf _vehicle],\n [\"fuel\", fuel _vehicle],\n [\"damage\", damage _vehicle],\n [\"hit_points\", _hitPoints]\n];\n\nprivate _result = \"forge_server\" callExtension [\"garage:add\", [\n getPlayerUID player,\n toJSON _vehicleData\n]];\n\nprivate _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n hint format [\"Failed to store vehicle: %1\", _payload];\n};\n\nprivate _garage = fromJSON _payload;\n",[174,687,688,693,698,703,708,713,718,722,727,732,737,742,747,751,756,762,768,774,780,785,790,795,801,806,811],{"__ignoreMap":172},[177,689,690],{"class":179,"line":180},[177,691,692],{},"private _hitPointData = getAllHitPointsDamage _vehicle;\n",[177,694,695],{"class":179,"line":187},[177,696,697],{},"private _hitPoints = createHashMapFromArray [\n",[177,699,700],{"class":179,"line":206},[177,701,702],{}," [\"names\", _hitPointData select 0],\n",[177,704,705],{"class":179,"line":231},[177,706,707],{}," [\"selections\", _hitPointData select 1],\n",[177,709,710],{"class":179,"line":252},[177,711,712],{}," [\"values\", _hitPointData select 2]\n",[177,714,715],{"class":179,"line":270},[177,716,717],{},"];\n",[177,719,720],{"class":179,"line":287},[177,721,641],{"emptyLinePlaceholder":640},[177,723,724],{"class":179,"line":301},[177,725,726],{},"private _vehicleData = createHashMapFromArray [\n",[177,728,729],{"class":179,"line":327},[177,730,731],{}," [\"classname\", typeOf _vehicle],\n",[177,733,734],{"class":179,"line":350},[177,735,736],{}," [\"fuel\", fuel _vehicle],\n",[177,738,739],{"class":179,"line":370},[177,740,741],{}," [\"damage\", damage _vehicle],\n",[177,743,744],{"class":179,"line":376},[177,745,746],{}," [\"hit_points\", _hitPoints]\n",[177,748,749],{"class":179,"line":382},[177,750,717],{},[177,752,754],{"class":179,"line":753},14,[177,755,641],{"emptyLinePlaceholder":640},[177,757,759],{"class":179,"line":758},15,[177,760,761],{},"private _result = \"forge_server\" callExtension [\"garage:add\", [\n",[177,763,765],{"class":179,"line":764},16,[177,766,767],{}," getPlayerUID player,\n",[177,769,771],{"class":179,"line":770},17,[177,772,773],{}," toJSON _vehicleData\n",[177,775,777],{"class":179,"line":776},18,[177,778,779],{},"]];\n",[177,781,783],{"class":179,"line":782},19,[177,784,641],{"emptyLinePlaceholder":640},[177,786,788],{"class":179,"line":787},20,[177,789,635],{},[177,791,793],{"class":179,"line":792},21,[177,794,646],{},[177,796,798],{"class":179,"line":797},22,[177,799,800],{}," hint format [\"Failed to store vehicle: %1\", _payload];\n",[177,802,804],{"class":179,"line":803},23,[177,805,656],{},[177,807,809],{"class":179,"line":808},24,[177,810,641],{"emptyLinePlaceholder":640},[177,812,814],{"class":179,"line":813},25,[177,815,665],{},[155,817,818],{},"The returned value is a hash map keyed by generated plate. To find the newly\nstored vehicle, compare returned keys before and after the add, or search by\nclassname if your workflow guarantees a unique pending vehicle.",[167,820,822],{"className":621,"code":821,"language":623,"meta":172,"style":172},"private _storedPlate = \"\";\n{\n private _vehicleRecord = _garage get _x;\n if ((_vehicleRecord get \"classname\") == typeOf _vehicle) then {\n _storedPlate = _x;\n };\n} forEach keys _garage;\n",[174,823,824,829,833,838,843,848,853],{"__ignoreMap":172},[177,825,826],{"class":179,"line":180},[177,827,828],{},"private _storedPlate = \"\";\n",[177,830,831],{"class":179,"line":187},[177,832,184],{},[177,834,835],{"class":179,"line":206},[177,836,837],{}," private _vehicleRecord = _garage get _x;\n",[177,839,840],{"class":179,"line":231},[177,841,842],{}," if ((_vehicleRecord get \"classname\") == typeOf _vehicle) then {\n",[177,844,845],{"class":179,"line":252},[177,846,847],{}," _storedPlate = _x;\n",[177,849,850],{"class":179,"line":270},[177,851,852],{}," };\n",[177,854,855],{"class":179,"line":287},[177,856,857],{},"} forEach keys _garage;\n",[159,859,861],{"id":860},"patch-a-vehicle","Patch a Vehicle",[155,863,864,866,867,869,870,406,872,425,874,876],{},[174,865,437],{}," updates selected fields for one plate. The ",[174,868,213],{}," field is\nrequired. ",[174,871,257],{},[174,873,275],{},[174,875,292],{}," are optional.",[167,878,880],{"className":621,"code":879,"language":623,"meta":172,"style":172},"private _patch = createHashMapFromArray [\n [\"plate\", _vehicle getVariable [\"forge_garage_plate\", \"\"]],\n [\"fuel\", fuel _vehicle],\n [\"damage\", damage _vehicle]\n];\n\nprivate _result = \"forge_server\" callExtension [\"garage:patch\", [\n getPlayerUID player,\n toJSON _patch\n]];\n",[174,881,882,887,892,896,901,905,909,914,918,923],{"__ignoreMap":172},[177,883,884],{"class":179,"line":180},[177,885,886],{},"private _patch = createHashMapFromArray [\n",[177,888,889],{"class":179,"line":187},[177,890,891],{}," [\"plate\", _vehicle getVariable [\"forge_garage_plate\", \"\"]],\n",[177,893,894],{"class":179,"line":206},[177,895,736],{},[177,897,898],{"class":179,"line":231},[177,899,900],{}," [\"damage\", damage _vehicle]\n",[177,902,903],{"class":179,"line":252},[177,904,717],{},[177,906,907],{"class":179,"line":270},[177,908,641],{"emptyLinePlaceholder":640},[177,910,911],{"class":179,"line":287},[177,912,913],{},"private _result = \"forge_server\" callExtension [\"garage:patch\", [\n",[177,915,916],{"class":179,"line":301},[177,917,767],{},[177,919,920],{"class":179,"line":327},[177,921,922],{}," toJSON _patch\n",[177,924,925],{"class":179,"line":350},[177,926,779],{},[159,928,930],{"id":929},"remove-a-vehicle","Remove a Vehicle",[155,932,933,935,936,938],{},[174,934,440],{}," expects JSON with a ",[174,937,213],{}," field.",[167,940,942],{"className":621,"code":941,"language":623,"meta":172,"style":172},"private _remove = createHashMapFromArray [\n [\"plate\", _plate]\n];\n\nprivate _result = \"forge_server\" callExtension [\"garage:remove\", [\n getPlayerUID player,\n toJSON _remove\n]];\n",[174,943,944,949,954,958,962,967,971,976],{"__ignoreMap":172},[177,945,946],{"class":179,"line":180},[177,947,948],{},"private _remove = createHashMapFromArray [\n",[177,950,951],{"class":179,"line":187},[177,952,953],{}," [\"plate\", _plate]\n",[177,955,956],{"class":179,"line":206},[177,957,717],{},[177,959,960],{"class":179,"line":231},[177,961,641],{"emptyLinePlaceholder":640},[177,963,964],{"class":179,"line":252},[177,965,966],{},"private _result = \"forge_server\" callExtension [\"garage:remove\", [\n",[177,968,969],{"class":179,"line":270},[177,970,767],{},[177,972,973],{"class":179,"line":287},[177,974,975],{}," toJSON _remove\n",[177,977,978],{"class":179,"line":301},[177,979,779],{},[159,981,983],{"id":982},"spawn-a-stored-vehicle","Spawn a Stored Vehicle",[167,985,987],{"className":621,"code":986,"language":623,"meta":172,"style":172},"fnc_spawnGarageVehicle = {\n params [\"_plate\"];\n\n private _result = \"forge_server\" callExtension [\"garage:get\", [getPlayerUID player]];\n private _payload = _result select 0;\n\n if (_payload find \"Error:\" == 0) exitWith {\n hint format [\"Failed to load garage: %1\", _payload];\n objNull\n };\n\n private _garage = fromJSON _payload;\n private _vehicleData = _garage getOrDefault [_plate, createHashMap];\n if (_vehicleData isEqualTo createHashMap) exitWith {\n hint \"Vehicle plate was not found in your garage.\";\n objNull\n };\n\n private _vehicle = (_vehicleData get \"classname\") createVehicle (player getPos [10, getDir player]);\n _vehicle setFuel (_vehicleData getOrDefault [\"fuel\", 1]);\n _vehicle setDamage (_vehicleData getOrDefault [\"damage\", 0]);\n _vehicle setVariable [\"forge_garage_plate\", _plate, true];\n\n private _hitPoints = _vehicleData getOrDefault [\"hit_points\", createHashMap];\n private _names = _hitPoints getOrDefault [\"names\", []];\n private _values = _hitPoints getOrDefault [\"values\", []];\n\n {\n _vehicle setHitPointDamage [_x, _values select _forEachIndex];\n } forEach _names;\n\n private _remove = createHashMapFromArray [[\"plate\", _plate]];\n \"forge_server\" callExtension [\"garage:remove\", [getPlayerUID player, toJSON _remove]];\n\n _vehicle\n};\n",[174,988,989,994,999,1003,1008,1013,1017,1022,1027,1032,1036,1040,1045,1050,1055,1060,1064,1068,1072,1077,1082,1087,1092,1096,1101,1106,1112,1117,1123,1129,1135,1140,1146,1152,1157,1163],{"__ignoreMap":172},[177,990,991],{"class":179,"line":180},[177,992,993],{},"fnc_spawnGarageVehicle = {\n",[177,995,996],{"class":179,"line":187},[177,997,998],{}," params [\"_plate\"];\n",[177,1000,1001],{"class":179,"line":206},[177,1002,641],{"emptyLinePlaceholder":640},[177,1004,1005],{"class":179,"line":231},[177,1006,1007],{}," private _result = \"forge_server\" callExtension [\"garage:get\", [getPlayerUID player]];\n",[177,1009,1010],{"class":179,"line":252},[177,1011,1012],{}," private _payload = _result select 0;\n",[177,1014,1015],{"class":179,"line":270},[177,1016,641],{"emptyLinePlaceholder":640},[177,1018,1019],{"class":179,"line":287},[177,1020,1021],{}," if (_payload find \"Error:\" == 0) exitWith {\n",[177,1023,1024],{"class":179,"line":301},[177,1025,1026],{}," hint format [\"Failed to load garage: %1\", _payload];\n",[177,1028,1029],{"class":179,"line":327},[177,1030,1031],{}," objNull\n",[177,1033,1034],{"class":179,"line":350},[177,1035,852],{},[177,1037,1038],{"class":179,"line":370},[177,1039,641],{"emptyLinePlaceholder":640},[177,1041,1042],{"class":179,"line":376},[177,1043,1044],{}," private _garage = fromJSON _payload;\n",[177,1046,1047],{"class":179,"line":382},[177,1048,1049],{}," private _vehicleData = _garage getOrDefault [_plate, createHashMap];\n",[177,1051,1052],{"class":179,"line":753},[177,1053,1054],{}," if (_vehicleData isEqualTo createHashMap) exitWith {\n",[177,1056,1057],{"class":179,"line":758},[177,1058,1059],{}," hint \"Vehicle plate was not found in your garage.\";\n",[177,1061,1062],{"class":179,"line":764},[177,1063,1031],{},[177,1065,1066],{"class":179,"line":770},[177,1067,852],{},[177,1069,1070],{"class":179,"line":776},[177,1071,641],{"emptyLinePlaceholder":640},[177,1073,1074],{"class":179,"line":782},[177,1075,1076],{}," private _vehicle = (_vehicleData get \"classname\") createVehicle (player getPos [10, getDir player]);\n",[177,1078,1079],{"class":179,"line":787},[177,1080,1081],{}," _vehicle setFuel (_vehicleData getOrDefault [\"fuel\", 1]);\n",[177,1083,1084],{"class":179,"line":792},[177,1085,1086],{}," _vehicle setDamage (_vehicleData getOrDefault [\"damage\", 0]);\n",[177,1088,1089],{"class":179,"line":797},[177,1090,1091],{}," _vehicle setVariable [\"forge_garage_plate\", _plate, true];\n",[177,1093,1094],{"class":179,"line":803},[177,1095,641],{"emptyLinePlaceholder":640},[177,1097,1098],{"class":179,"line":808},[177,1099,1100],{}," private _hitPoints = _vehicleData getOrDefault [\"hit_points\", createHashMap];\n",[177,1102,1103],{"class":179,"line":813},[177,1104,1105],{}," private _names = _hitPoints getOrDefault [\"names\", []];\n",[177,1107,1109],{"class":179,"line":1108},26,[177,1110,1111],{}," private _values = _hitPoints getOrDefault [\"values\", []];\n",[177,1113,1115],{"class":179,"line":1114},27,[177,1116,641],{"emptyLinePlaceholder":640},[177,1118,1120],{"class":179,"line":1119},28,[177,1121,1122],{}," {\n",[177,1124,1126],{"class":179,"line":1125},29,[177,1127,1128],{}," _vehicle setHitPointDamage [_x, _values select _forEachIndex];\n",[177,1130,1132],{"class":179,"line":1131},30,[177,1133,1134],{}," } forEach _names;\n",[177,1136,1138],{"class":179,"line":1137},31,[177,1139,641],{"emptyLinePlaceholder":640},[177,1141,1143],{"class":179,"line":1142},32,[177,1144,1145],{}," private _remove = createHashMapFromArray [[\"plate\", _plate]];\n",[177,1147,1149],{"class":179,"line":1148},33,[177,1150,1151],{}," \"forge_server\" callExtension [\"garage:remove\", [getPlayerUID player, toJSON _remove]];\n",[177,1153,1155],{"class":179,"line":1154},34,[177,1156,641],{"emptyLinePlaceholder":640},[177,1158,1160],{"class":179,"line":1159},35,[177,1161,1162],{}," _vehicle\n",[177,1164,1166],{"class":179,"line":1165},36,[177,1167,656],{},[159,1169,1171],{"id":1170},"hot-state","Hot State",[155,1173,1174,1175,1178,1179,1182],{},"The ",[174,1176,1177],{},"garage:hot:*"," commands keep a runtime copy of a player's garage and write\nit back only when ",[174,1180,1181],{},"garage:hot:save"," runs.",[459,1184,1185,1195],{},[462,1186,1187],{},[465,1188,1189,1191,1193],{},[468,1190,470],{},[468,1192,473],{},[468,1194,476],{},[478,1196,1197,1210,1223,1238,1253,1268,1281],{},[465,1198,1199,1204,1208],{},[483,1200,1201],{},[174,1202,1203],{},"garage:hot:init",[483,1205,1206],{},[174,1207,492],{},[483,1209,508],{},[465,1211,1212,1217,1221],{},[483,1213,1214],{},[174,1215,1216],{},"garage:hot:get",[483,1218,1219],{},[174,1220,492],{},[483,1222,508],{},[465,1224,1225,1230,1236],{},[483,1226,1227],{},[174,1228,1229],{},"garage:hot:override",[483,1231,1232,406,1234],{},[174,1233,492],{},[174,1235,538],{},[483,1237,508],{},[465,1239,1240,1245,1251],{},[483,1241,1242],{},[174,1243,1244],{},"garage:hot:add",[483,1246,1247,406,1249],{},[174,1248,492],{},[174,1250,521],{},[483,1252,508],{},[465,1254,1255,1260,1266],{},[483,1256,1257],{},[174,1258,1259],{},"garage:hot:remove_vehicle",[483,1261,1262,406,1264],{},[174,1263,492],{},[174,1265,569],{},[483,1267,508],{},[465,1269,1270,1274,1278],{},[483,1271,1272],{},[174,1273,1181],{},[483,1275,1276],{},[174,1277,492],{},[483,1279,1280],{},"Current hot vehicle map as JSON.",[465,1282,1283,1288,1292],{},[483,1284,1285],{},[174,1286,1287],{},"garage:hot:remove",[483,1289,1290],{},[174,1291,492],{},[483,1293,1294,416],{},[174,1295,587],{},[155,1297,1298],{},"Use hot state for session-heavy vehicle workflows. Use the durable commands for\nsimple store\u002Fretrieve operations.",[159,1300,1302],{"id":1301},"best-practices","Best Practices",[390,1304,1305,1311,1317,1322,1328],{},[393,1306,1307,1308,416],{},"Store the generated plate on spawned vehicles with ",[174,1309,1310],{},"setVariable",[393,1312,1313,1314,1316],{},"Use ",[174,1315,437],{}," for frequent fuel and damage syncs.",[393,1318,1313,1319,1321],{},[174,1320,531],{}," only when replacing the whole vehicle map intentionally.",[393,1323,1324,1325,1327],{},"Do not delete the world vehicle until ",[174,1326,400],{}," succeeds.",[393,1329,1330],{},"Treat vehicle maps as hash maps keyed by plate, not arrays.",[1332,1333,1334],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":172,"searchDepth":187,"depth":187,"links":1336},[1337,1338,1339,1340,1341,1342,1343,1344,1345],{"id":161,"depth":187,"text":162},{"id":449,"depth":187,"text":450},{"id":610,"depth":187,"text":611},{"id":668,"depth":187,"text":669},{"id":860,"depth":187,"text":861},{"id":929,"depth":187,"text":930},{"id":982,"depth":187,"text":983},{"id":1170,"depth":187,"text":1171},{"id":1301,"depth":187,"text":1302},"md",null,{},{"title":73,"description":157},"EH_wB2YH4wCw-T1stsEVmDq0ztTnbpLjX9816UfP4Vk",[1352,1354],{"title":69,"path":70,"stem":71,"description":1353,"children":-1},"The economy server addon owns Arma-world service behavior for fuel, medical,\nand repair interactions. It does not own money state. Money mutations go\nthrough extension-backed bank and organization hot state before the world\neffect is applied.",{"title":77,"path":78,"stem":79,"description":1355,"children":-1},"The locker module stores physical player inventory items by classname. It is\nseparate from the virtual arsenal unlock module documented in\nOwned Storage Usage Guide.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/locker.html b/docus/dist/server-modules/locker.html new file mode 100644 index 0000000..a18bc22 --- /dev/null +++ b/docus/dist/server-modules/locker.html @@ -0,0 +1,214 @@ +Locker Usage Guide - forge-docus
Server Modules

Locker Usage Guide

The locker module stores physical player inventory items by classname. It is +separate from the virtual arsenal unlock module documented in +Owned Storage Usage Guide.

Locker Usage Guide

The locker module stores physical player inventory items by classname. It is +separate from the virtual arsenal unlock module documented in +Owned Storage Usage Guide.

Storage Model

Locker data is persisted through SurrealDB by the server extension.

{
+  "arifle_MX_F": {
+    "category": "weapon",
+    "classname": "arifle_MX_F",
+    "amount": 1
+  }
+}
+

Rules validated by the Rust service:

  • A locker can contain up to 25 unique classnames.
  • category and classname cannot be empty.
  • amount must be greater than 0.
  • locker:add creates an empty locker automatically when one does not exist.
  • locker:get, locker:patch, and locker:remove require an existing locker.
  • locker:remove takes the classname directly, not a JSON object.

Commands

All commands are called on the locker group.

CommandArgumentsReturns
locker:createuidEmpty item map as JSON.
locker:getuidItem map as JSON.
locker:adduid, item_jsonUpdated item map as JSON.
locker:updateuid, items_jsonReplaced item map as JSON.
locker:patchuid, patch_jsonUpdated item map as JSON.
locker:removeuid, classnameUpdated item map as JSON.
locker:deleteuidOK.
locker:existsuidtrue or false.

Error Handling

Every command returns a string payload. Always check for the Error: prefix +before parsing JSON.

private _result = "forge_server" callExtension ["locker:get", [getPlayerUID player]];
+private _payload = _result select 0;
+
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Locker error: %1", _payload];
+};
+
+private _locker = fromJSON _payload;
+

Add an Item

locker:add creates or overwrites one classname entry.

private _item = createHashMapFromArray [
+    ["category", "weapon"],
+    ["classname", "arifle_MX_F"],
+    ["amount", 1]
+];
+
+private _result = "forge_server" callExtension ["locker:add", [
+    getPlayerUID player,
+    toJSON _item
+]];
+
+private _payload = _result select 0;
+if (_payload find "Error:" == 0) exitWith {
+    hint format ["Failed to store item: %1", _payload];
+};
+
+private _locker = fromJSON _payload;
+

Patch an Amount

locker:patch currently patches the amount field for an existing classname.

private _patch = createHashMapFromArray [
+    ["classname", "arifle_MX_F"],
+    ["amount", 5]
+];
+
+private _result = "forge_server" callExtension ["locker:patch", [
+    getPlayerUID player,
+    toJSON _patch
+]];
+

Remove an Item

locker:remove takes the classname as the second argument.

private _result = "forge_server" callExtension ["locker:remove", [
+    getPlayerUID player,
+    "arifle_MX_F"
+]];
+

Retrieve an Item

fnc_retrieveLockerItem = {
+    params ["_classname"];
+
+    private _result = "forge_server" callExtension ["locker:get", [getPlayerUID player]];
+    private _payload = _result select 0;
+
+    if (_payload find "Error:" == 0) exitWith {
+        hint format ["Failed to load locker: %1", _payload];
+        false
+    };
+
+    private _locker = fromJSON _payload;
+    private _item = _locker getOrDefault [_classname, createHashMap];
+    if (_item isEqualTo createHashMap) exitWith {
+        hint "Item was not found in your locker.";
+        false
+    };
+
+    private _amount = _item getOrDefault ["amount", 0];
+    if (_amount <= 0) exitWith {
+        hint "Item is out of stock.";
+        false
+    };
+
+    if !(player canAdd _classname) exitWith {
+        hint "Not enough inventory space.";
+        false
+    };
+
+    player addItem _classname;
+
+    if (_amount > 1) then {
+        private _patch = createHashMapFromArray [
+            ["classname", _classname],
+            ["amount", _amount - 1]
+        ];
+        "forge_server" callExtension ["locker:patch", [getPlayerUID player, toJSON _patch]];
+    } else {
+        "forge_server" callExtension ["locker:remove", [getPlayerUID player, _classname]];
+    };
+
+    true
+};
+

Replace the Whole Locker

locker:update replaces the whole item map. Use it for explicit bulk syncs, +not single-item changes.

private _items = createHashMapFromArray [
+    ["arifle_MX_F", createHashMapFromArray [
+        ["category", "weapon"],
+        ["classname", "arifle_MX_F"],
+        ["amount", 1]
+    ]]
+];
+
+private _result = "forge_server" callExtension ["locker:update", [
+    getPlayerUID player,
+    toJSON _items
+]];
+

Hot State

The locker:hot:* commands keep a runtime copy of a player's locker and write +it back only when locker:hot:save runs.

CommandArgumentsReturns
locker:hot:inituidItem map as JSON.
locker:hot:getuidItem map as JSON.
locker:hot:overrideuid, items_jsonItem map as JSON.
locker:hot:saveuidCurrent hot item map as JSON.
locker:hot:removeuidOK.

Use hot state for session-heavy locker workflows. Use the durable commands for +simple item deposits and withdrawals.

Best Practices

  • Keep categories normalized, for example weapon, magazine, item, or +backpack.
  • Use locker:patch for quantity changes.
  • Use locker:remove when quantity reaches zero.
  • Treat the locker response as a hash map keyed by classname.
  • Check capacity before bulk operations that may exceed 25 unique items.
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/locker/_payload.json b/docus/dist/server-modules/locker/_payload.json new file mode 100644 index 0000000..26ae8fb --- /dev/null +++ b/docus/dist/server-modules/locker/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1212},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-locker":145,"-server-modules-locker-surround":1207},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":77,"body":147,"description":1201,"extension":1202,"links":1203,"meta":1204,"navigation":525,"path":78,"seo":1205,"stem":79,"__hash__":1206},"docs\u002F3.server-modules\u002F6.locker.md",{"type":148,"value":149,"toc":1189},"minimark",[150,154,162,167,170,282,285,333,337,344,493,497,504,552,556,561,653,657,665,710,714,719,742,746,976,980,985,1046,1050,1061,1144,1147,1151,1185],[151,152,77],"h1",{"id":153},"locker-usage-guide",[155,156,157,158,161],"p",{},"The locker module stores physical player inventory items by classname. It is\nseparate from the virtual arsenal unlock module documented in\n",[159,160,85],"a",{"href":86},".",[163,164,166],"h2",{"id":165},"storage-model","Storage Model",[155,168,169],{},"Locker data is persisted through SurrealDB by the server extension.",[171,172,177],"pre",{"className":173,"code":174,"language":175,"meta":176,"style":176},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"arifle_MX_F\": {\n \"category\": \"weapon\",\n \"classname\": \"arifle_MX_F\",\n \"amount\": 1\n }\n}\n","json","",[178,179,180,189,208,234,254,270,276],"code",{"__ignoreMap":176},[181,182,185],"span",{"class":183,"line":184},"line",1,[181,186,188],{"class":187},"sMK4o","{\n",[181,190,192,195,199,202,205],{"class":183,"line":191},2,[181,193,194],{"class":187}," \"",[181,196,198],{"class":197},"spNyl","arifle_MX_F",[181,200,201],{"class":187},"\"",[181,203,204],{"class":187},":",[181,206,207],{"class":187}," {\n",[181,209,211,214,218,220,222,225,229,231],{"class":183,"line":210},3,[181,212,213],{"class":187}," \"",[181,215,217],{"class":216},"sBMFI","category",[181,219,201],{"class":187},[181,221,204],{"class":187},[181,223,224],{"class":187}," \"",[181,226,228],{"class":227},"sfazB","weapon",[181,230,201],{"class":187},[181,232,233],{"class":187},",\n",[181,235,237,239,242,244,246,248,250,252],{"class":183,"line":236},4,[181,238,213],{"class":187},[181,240,241],{"class":216},"classname",[181,243,201],{"class":187},[181,245,204],{"class":187},[181,247,224],{"class":187},[181,249,198],{"class":227},[181,251,201],{"class":187},[181,253,233],{"class":187},[181,255,257,259,262,264,266],{"class":183,"line":256},5,[181,258,213],{"class":187},[181,260,261],{"class":216},"amount",[181,263,201],{"class":187},[181,265,204],{"class":187},[181,267,269],{"class":268},"sbssI"," 1\n",[181,271,273],{"class":183,"line":272},6,[181,274,275],{"class":187}," }\n",[181,277,279],{"class":183,"line":278},7,[181,280,281],{"class":187},"}\n",[155,283,284],{},"Rules validated by the Rust service:",[286,287,288,292,300,308,314,328],"ul",{},[289,290,291],"li",{},"A locker can contain up to 25 unique classnames.",[289,293,294,296,297,299],{},[178,295,217],{}," and ",[178,298,241],{}," cannot be empty.",[289,301,302,304,305,161],{},[178,303,261],{}," must be greater than ",[178,306,307],{},"0",[289,309,310,313],{},[178,311,312],{},"locker:add"," creates an empty locker automatically when one does not exist.",[289,315,316,319,320,323,324,327],{},[178,317,318],{},"locker:get",", ",[178,321,322],{},"locker:patch",", and ",[178,325,326],{},"locker:remove"," require an existing locker.",[289,329,330,332],{},[178,331,326],{}," takes the classname directly, not a JSON object.",[163,334,336],{"id":335},"commands","Commands",[155,338,339,340,343],{},"All commands are called on the ",[178,341,342],{},"locker"," group.",[345,346,347,363],"table",{},[348,349,350],"thead",{},[351,352,353,357,360],"tr",{},[354,355,356],"th",{},"Command",[354,358,359],{},"Arguments",[354,361,362],{},"Returns",[364,365,366,382,395,411,428,443,457,473],"tbody",{},[351,367,368,374,379],{},[369,370,371],"td",{},[178,372,373],{},"locker:create",[369,375,376],{},[178,377,378],{},"uid",[369,380,381],{},"Empty item map as JSON.",[351,383,384,388,392],{},[369,385,386],{},[178,387,318],{},[369,389,390],{},[178,391,378],{},[369,393,394],{},"Item map as JSON.",[351,396,397,401,408],{},[369,398,399],{},[178,400,312],{},[369,402,403,319,405],{},[178,404,378],{},[178,406,407],{},"item_json",[369,409,410],{},"Updated item map as JSON.",[351,412,413,418,425],{},[369,414,415],{},[178,416,417],{},"locker:update",[369,419,420,319,422],{},[178,421,378],{},[178,423,424],{},"items_json",[369,426,427],{},"Replaced item map as JSON.",[351,429,430,434,441],{},[369,431,432],{},[178,433,322],{},[369,435,436,319,438],{},[178,437,378],{},[178,439,440],{},"patch_json",[369,442,410],{},[351,444,445,449,455],{},[369,446,447],{},[178,448,326],{},[369,450,451,319,453],{},[178,452,378],{},[178,454,241],{},[369,456,410],{},[351,458,459,464,468],{},[369,460,461],{},[178,462,463],{},"locker:delete",[369,465,466],{},[178,467,378],{},[369,469,470,161],{},[178,471,472],{},"OK",[351,474,475,480,484],{},[369,476,477],{},[178,478,479],{},"locker:exists",[369,481,482],{},[178,483,378],{},[369,485,486,489,490,161],{},[178,487,488],{},"true"," or ",[178,491,492],{},"false",[163,494,496],{"id":495},"error-handling","Error Handling",[155,498,499,500,503],{},"Every command returns a string payload. Always check for the ",[178,501,502],{},"Error:"," prefix\nbefore parsing JSON.",[171,505,509],{"className":506,"code":507,"language":508,"meta":176,"style":176},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _result = \"forge_server\" callExtension [\"locker:get\", [getPlayerUID player]];\nprivate _payload = _result select 0;\n\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Locker error: %1\", _payload];\n};\n\nprivate _locker = fromJSON _payload;\n","sqf",[178,510,511,516,521,527,532,537,542,546],{"__ignoreMap":176},[181,512,513],{"class":183,"line":184},[181,514,515],{},"private _result = \"forge_server\" callExtension [\"locker:get\", [getPlayerUID player]];\n",[181,517,518],{"class":183,"line":191},[181,519,520],{},"private _payload = _result select 0;\n",[181,522,523],{"class":183,"line":210},[181,524,526],{"emptyLinePlaceholder":525},true,"\n",[181,528,529],{"class":183,"line":236},[181,530,531],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[181,533,534],{"class":183,"line":256},[181,535,536],{}," systemChat format [\"Locker error: %1\", _payload];\n",[181,538,539],{"class":183,"line":272},[181,540,541],{},"};\n",[181,543,544],{"class":183,"line":278},[181,545,526],{"emptyLinePlaceholder":525},[181,547,549],{"class":183,"line":548},8,[181,550,551],{},"private _locker = fromJSON _payload;\n",[163,553,555],{"id":554},"add-an-item","Add an Item",[155,557,558,560],{},[178,559,312],{}," creates or overwrites one classname entry.",[171,562,564],{"className":506,"code":563,"language":508,"meta":176,"style":176},"private _item = createHashMapFromArray [\n [\"category\", \"weapon\"],\n [\"classname\", \"arifle_MX_F\"],\n [\"amount\", 1]\n];\n\nprivate _result = \"forge_server\" callExtension [\"locker:add\", [\n getPlayerUID player,\n toJSON _item\n]];\n\nprivate _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n hint format [\"Failed to store item: %1\", _payload];\n};\n\nprivate _locker = fromJSON _payload;\n",[178,565,566,571,576,581,586,591,595,600,605,611,617,622,627,632,638,643,648],{"__ignoreMap":176},[181,567,568],{"class":183,"line":184},[181,569,570],{},"private _item = createHashMapFromArray [\n",[181,572,573],{"class":183,"line":191},[181,574,575],{}," [\"category\", \"weapon\"],\n",[181,577,578],{"class":183,"line":210},[181,579,580],{}," [\"classname\", \"arifle_MX_F\"],\n",[181,582,583],{"class":183,"line":236},[181,584,585],{}," [\"amount\", 1]\n",[181,587,588],{"class":183,"line":256},[181,589,590],{},"];\n",[181,592,593],{"class":183,"line":272},[181,594,526],{"emptyLinePlaceholder":525},[181,596,597],{"class":183,"line":278},[181,598,599],{},"private _result = \"forge_server\" callExtension [\"locker:add\", [\n",[181,601,602],{"class":183,"line":548},[181,603,604],{}," getPlayerUID player,\n",[181,606,608],{"class":183,"line":607},9,[181,609,610],{}," toJSON _item\n",[181,612,614],{"class":183,"line":613},10,[181,615,616],{},"]];\n",[181,618,620],{"class":183,"line":619},11,[181,621,526],{"emptyLinePlaceholder":525},[181,623,625],{"class":183,"line":624},12,[181,626,520],{},[181,628,630],{"class":183,"line":629},13,[181,631,531],{},[181,633,635],{"class":183,"line":634},14,[181,636,637],{}," hint format [\"Failed to store item: %1\", _payload];\n",[181,639,641],{"class":183,"line":640},15,[181,642,541],{},[181,644,646],{"class":183,"line":645},16,[181,647,526],{"emptyLinePlaceholder":525},[181,649,651],{"class":183,"line":650},17,[181,652,551],{},[163,654,656],{"id":655},"patch-an-amount","Patch an Amount",[155,658,659,661,662,664],{},[178,660,322],{}," currently patches the ",[178,663,261],{}," field for an existing classname.",[171,666,668],{"className":506,"code":667,"language":508,"meta":176,"style":176},"private _patch = createHashMapFromArray [\n [\"classname\", \"arifle_MX_F\"],\n [\"amount\", 5]\n];\n\nprivate _result = \"forge_server\" callExtension [\"locker:patch\", [\n getPlayerUID player,\n toJSON _patch\n]];\n",[178,669,670,675,679,684,688,692,697,701,706],{"__ignoreMap":176},[181,671,672],{"class":183,"line":184},[181,673,674],{},"private _patch = createHashMapFromArray [\n",[181,676,677],{"class":183,"line":191},[181,678,580],{},[181,680,681],{"class":183,"line":210},[181,682,683],{}," [\"amount\", 5]\n",[181,685,686],{"class":183,"line":236},[181,687,590],{},[181,689,690],{"class":183,"line":256},[181,691,526],{"emptyLinePlaceholder":525},[181,693,694],{"class":183,"line":272},[181,695,696],{},"private _result = \"forge_server\" callExtension [\"locker:patch\", [\n",[181,698,699],{"class":183,"line":278},[181,700,604],{},[181,702,703],{"class":183,"line":548},[181,704,705],{}," toJSON _patch\n",[181,707,708],{"class":183,"line":607},[181,709,616],{},[163,711,713],{"id":712},"remove-an-item","Remove an Item",[155,715,716,718],{},[178,717,326],{}," takes the classname as the second argument.",[171,720,722],{"className":506,"code":721,"language":508,"meta":176,"style":176},"private _result = \"forge_server\" callExtension [\"locker:remove\", [\n getPlayerUID player,\n \"arifle_MX_F\"\n]];\n",[178,723,724,729,733,738],{"__ignoreMap":176},[181,725,726],{"class":183,"line":184},[181,727,728],{},"private _result = \"forge_server\" callExtension [\"locker:remove\", [\n",[181,730,731],{"class":183,"line":191},[181,732,604],{},[181,734,735],{"class":183,"line":210},[181,736,737],{}," \"arifle_MX_F\"\n",[181,739,740],{"class":183,"line":236},[181,741,616],{},[163,743,745],{"id":744},"retrieve-an-item","Retrieve an Item",[171,747,749],{"className":506,"code":748,"language":508,"meta":176,"style":176},"fnc_retrieveLockerItem = {\n params [\"_classname\"];\n\n private _result = \"forge_server\" callExtension [\"locker:get\", [getPlayerUID player]];\n private _payload = _result select 0;\n\n if (_payload find \"Error:\" == 0) exitWith {\n hint format [\"Failed to load locker: %1\", _payload];\n false\n };\n\n private _locker = fromJSON _payload;\n private _item = _locker getOrDefault [_classname, createHashMap];\n if (_item isEqualTo createHashMap) exitWith {\n hint \"Item was not found in your locker.\";\n false\n };\n\n private _amount = _item getOrDefault [\"amount\", 0];\n if (_amount \u003C= 0) exitWith {\n hint \"Item is out of stock.\";\n false\n };\n\n if !(player canAdd _classname) exitWith {\n hint \"Not enough inventory space.\";\n false\n };\n\n player addItem _classname;\n\n if (_amount > 1) then {\n private _patch = createHashMapFromArray [\n [\"classname\", _classname],\n [\"amount\", _amount - 1]\n ];\n \"forge_server\" callExtension [\"locker:patch\", [getPlayerUID player, toJSON _patch]];\n } else {\n \"forge_server\" callExtension [\"locker:remove\", [getPlayerUID player, _classname]];\n };\n\n true\n};\n",[178,750,751,756,761,765,770,775,779,784,789,794,799,803,808,813,818,823,827,831,836,842,848,854,859,864,869,875,881,886,891,896,902,907,913,919,925,931,937,943,949,955,960,965,971],{"__ignoreMap":176},[181,752,753],{"class":183,"line":184},[181,754,755],{},"fnc_retrieveLockerItem = {\n",[181,757,758],{"class":183,"line":191},[181,759,760],{}," params [\"_classname\"];\n",[181,762,763],{"class":183,"line":210},[181,764,526],{"emptyLinePlaceholder":525},[181,766,767],{"class":183,"line":236},[181,768,769],{}," private _result = \"forge_server\" callExtension [\"locker:get\", [getPlayerUID player]];\n",[181,771,772],{"class":183,"line":256},[181,773,774],{}," private _payload = _result select 0;\n",[181,776,777],{"class":183,"line":272},[181,778,526],{"emptyLinePlaceholder":525},[181,780,781],{"class":183,"line":278},[181,782,783],{}," if (_payload find \"Error:\" == 0) exitWith {\n",[181,785,786],{"class":183,"line":548},[181,787,788],{}," hint format [\"Failed to load locker: %1\", _payload];\n",[181,790,791],{"class":183,"line":607},[181,792,793],{}," false\n",[181,795,796],{"class":183,"line":613},[181,797,798],{}," };\n",[181,800,801],{"class":183,"line":619},[181,802,526],{"emptyLinePlaceholder":525},[181,804,805],{"class":183,"line":624},[181,806,807],{}," private _locker = fromJSON _payload;\n",[181,809,810],{"class":183,"line":629},[181,811,812],{}," private _item = _locker getOrDefault [_classname, createHashMap];\n",[181,814,815],{"class":183,"line":634},[181,816,817],{}," if (_item isEqualTo createHashMap) exitWith {\n",[181,819,820],{"class":183,"line":640},[181,821,822],{}," hint \"Item was not found in your locker.\";\n",[181,824,825],{"class":183,"line":645},[181,826,793],{},[181,828,829],{"class":183,"line":650},[181,830,798],{},[181,832,834],{"class":183,"line":833},18,[181,835,526],{"emptyLinePlaceholder":525},[181,837,839],{"class":183,"line":838},19,[181,840,841],{}," private _amount = _item getOrDefault [\"amount\", 0];\n",[181,843,845],{"class":183,"line":844},20,[181,846,847],{}," if (_amount \u003C= 0) exitWith {\n",[181,849,851],{"class":183,"line":850},21,[181,852,853],{}," hint \"Item is out of stock.\";\n",[181,855,857],{"class":183,"line":856},22,[181,858,793],{},[181,860,862],{"class":183,"line":861},23,[181,863,798],{},[181,865,867],{"class":183,"line":866},24,[181,868,526],{"emptyLinePlaceholder":525},[181,870,872],{"class":183,"line":871},25,[181,873,874],{}," if !(player canAdd _classname) exitWith {\n",[181,876,878],{"class":183,"line":877},26,[181,879,880],{}," hint \"Not enough inventory space.\";\n",[181,882,884],{"class":183,"line":883},27,[181,885,793],{},[181,887,889],{"class":183,"line":888},28,[181,890,798],{},[181,892,894],{"class":183,"line":893},29,[181,895,526],{"emptyLinePlaceholder":525},[181,897,899],{"class":183,"line":898},30,[181,900,901],{}," player addItem _classname;\n",[181,903,905],{"class":183,"line":904},31,[181,906,526],{"emptyLinePlaceholder":525},[181,908,910],{"class":183,"line":909},32,[181,911,912],{}," if (_amount > 1) then {\n",[181,914,916],{"class":183,"line":915},33,[181,917,918],{}," private _patch = createHashMapFromArray [\n",[181,920,922],{"class":183,"line":921},34,[181,923,924],{}," [\"classname\", _classname],\n",[181,926,928],{"class":183,"line":927},35,[181,929,930],{}," [\"amount\", _amount - 1]\n",[181,932,934],{"class":183,"line":933},36,[181,935,936],{}," ];\n",[181,938,940],{"class":183,"line":939},37,[181,941,942],{}," \"forge_server\" callExtension [\"locker:patch\", [getPlayerUID player, toJSON _patch]];\n",[181,944,946],{"class":183,"line":945},38,[181,947,948],{}," } else {\n",[181,950,952],{"class":183,"line":951},39,[181,953,954],{}," \"forge_server\" callExtension [\"locker:remove\", [getPlayerUID player, _classname]];\n",[181,956,958],{"class":183,"line":957},40,[181,959,798],{},[181,961,963],{"class":183,"line":962},41,[181,964,526],{"emptyLinePlaceholder":525},[181,966,968],{"class":183,"line":967},42,[181,969,970],{}," true\n",[181,972,974],{"class":183,"line":973},43,[181,975,541],{},[163,977,979],{"id":978},"replace-the-whole-locker","Replace the Whole Locker",[155,981,982,984],{},[178,983,417],{}," replaces the whole item map. Use it for explicit bulk syncs,\nnot single-item changes.",[171,986,988],{"className":506,"code":987,"language":508,"meta":176,"style":176},"private _items = createHashMapFromArray [\n [\"arifle_MX_F\", createHashMapFromArray [\n [\"category\", \"weapon\"],\n [\"classname\", \"arifle_MX_F\"],\n [\"amount\", 1]\n ]]\n];\n\nprivate _result = \"forge_server\" callExtension [\"locker:update\", [\n getPlayerUID player,\n toJSON _items\n]];\n",[178,989,990,995,1000,1005,1010,1015,1020,1024,1028,1033,1037,1042],{"__ignoreMap":176},[181,991,992],{"class":183,"line":184},[181,993,994],{},"private _items = createHashMapFromArray [\n",[181,996,997],{"class":183,"line":191},[181,998,999],{}," [\"arifle_MX_F\", createHashMapFromArray [\n",[181,1001,1002],{"class":183,"line":210},[181,1003,1004],{}," [\"category\", \"weapon\"],\n",[181,1006,1007],{"class":183,"line":236},[181,1008,1009],{}," [\"classname\", \"arifle_MX_F\"],\n",[181,1011,1012],{"class":183,"line":256},[181,1013,1014],{}," [\"amount\", 1]\n",[181,1016,1017],{"class":183,"line":272},[181,1018,1019],{}," ]]\n",[181,1021,1022],{"class":183,"line":278},[181,1023,590],{},[181,1025,1026],{"class":183,"line":548},[181,1027,526],{"emptyLinePlaceholder":525},[181,1029,1030],{"class":183,"line":607},[181,1031,1032],{},"private _result = \"forge_server\" callExtension [\"locker:update\", [\n",[181,1034,1035],{"class":183,"line":613},[181,1036,604],{},[181,1038,1039],{"class":183,"line":619},[181,1040,1041],{}," toJSON _items\n",[181,1043,1044],{"class":183,"line":624},[181,1045,616],{},[163,1047,1049],{"id":1048},"hot-state","Hot State",[155,1051,1052,1053,1056,1057,1060],{},"The ",[178,1054,1055],{},"locker:hot:*"," commands keep a runtime copy of a player's locker and write\nit back only when ",[178,1058,1059],{},"locker:hot:save"," runs.",[345,1062,1063,1073],{},[348,1064,1065],{},[351,1066,1067,1069,1071],{},[354,1068,356],{},[354,1070,359],{},[354,1072,362],{},[364,1074,1075,1088,1101,1116,1129],{},[351,1076,1077,1082,1086],{},[369,1078,1079],{},[178,1080,1081],{},"locker:hot:init",[369,1083,1084],{},[178,1085,378],{},[369,1087,394],{},[351,1089,1090,1095,1099],{},[369,1091,1092],{},[178,1093,1094],{},"locker:hot:get",[369,1096,1097],{},[178,1098,378],{},[369,1100,394],{},[351,1102,1103,1108,1114],{},[369,1104,1105],{},[178,1106,1107],{},"locker:hot:override",[369,1109,1110,319,1112],{},[178,1111,378],{},[178,1113,424],{},[369,1115,394],{},[351,1117,1118,1122,1126],{},[369,1119,1120],{},[178,1121,1059],{},[369,1123,1124],{},[178,1125,378],{},[369,1127,1128],{},"Current hot item map as JSON.",[351,1130,1131,1136,1140],{},[369,1132,1133],{},[178,1134,1135],{},"locker:hot:remove",[369,1137,1138],{},[178,1139,378],{},[369,1141,1142,161],{},[178,1143,472],{},[155,1145,1146],{},"Use hot state for session-heavy locker workflows. Use the durable commands for\nsimple item deposits and withdrawals.",[163,1148,1150],{"id":1149},"best-practices","Best Practices",[286,1152,1153,1168,1174,1179,1182],{},[289,1154,1155,1156,319,1158,319,1161,1164,1165,161],{},"Keep categories normalized, for example ",[178,1157,228],{},[178,1159,1160],{},"magazine",[178,1162,1163],{},"item",", or\n",[178,1166,1167],{},"backpack",[289,1169,1170,1171,1173],{},"Use ",[178,1172,322],{}," for quantity changes.",[289,1175,1170,1176,1178],{},[178,1177,326],{}," when quantity reaches zero.",[289,1180,1181],{},"Treat the locker response as a hash map keyed by classname.",[289,1183,1184],{},"Check capacity before bulk operations that may exceed 25 unique items.",[1186,1187,1188],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":176,"searchDepth":191,"depth":191,"links":1190},[1191,1192,1193,1194,1195,1196,1197,1198,1199,1200],{"id":165,"depth":191,"text":166},{"id":335,"depth":191,"text":336},{"id":495,"depth":191,"text":496},{"id":554,"depth":191,"text":555},{"id":655,"depth":191,"text":656},{"id":712,"depth":191,"text":713},{"id":744,"depth":191,"text":745},{"id":978,"depth":191,"text":979},{"id":1048,"depth":191,"text":1049},{"id":1149,"depth":191,"text":1150},"The locker module stores physical player inventory items by classname. It is\nseparate from the virtual arsenal unlock module documented in\nOwned Storage Usage Guide.","md",null,{},{"title":77,"description":1201},"yRC1-bz2AkCaQBkRxr04sEYnq81grmtAwyDVDqAvkaM",[1208,1210],{"title":73,"path":74,"stem":75,"description":1209,"children":-1},"The garage module stores physical player vehicles. Each record keeps the\nvehicle classname, generated plate UUID, fuel, overall damage, and detailed hit\npoint damage.",{"title":81,"path":82,"stem":83,"description":1211,"children":-1},"The organization module stores organization records, members, assets, fleet\nentries, and credit lines. Durable commands manage persisted records directly.\nHot-state commands support the active organization UI workflows.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/organization.html b/docus/dist/server-modules/organization.html new file mode 100644 index 0000000..95fe49f --- /dev/null +++ b/docus/dist/server-modules/organization.html @@ -0,0 +1,230 @@ +Organization Usage Guide - forge-docus
Server Modules

Organization Usage Guide

The organization module stores organization records, members, assets, fleet +entries, and credit lines. Durable commands manage persisted records directly. +Hot-state commands support the active organization UI workflows.

Organization Usage Guide

The organization module stores organization records, members, assets, fleet +entries, and credit lines. Durable commands manage persisted records directly. +Hot-state commands support the active organization UI workflows.

Storage Model

Core organization:

{
+  "id": "default",
+  "owner": "server",
+  "name": "Default Organization",
+  "funds": 0.0,
+  "reputation": 0,
+  "credit_lines": {}
+}
+

Hot organization:

{
+  "id": "default",
+  "owner": "server",
+  "name": "Default Organization",
+  "funds": 0.0,
+  "reputation": 0,
+  "credit_lines": {},
+  "assets": {},
+  "fleet": {},
+  "members": {},
+  "pending_invites": {}
+}
+

Rules validated by the Rust service:

  • id must be non-empty and contain only alphanumeric characters or _.
  • owner must be server or a 17-digit Steam UID.
  • name cannot be empty, cannot exceed 100 characters, and cannot contain +control characters.
  • funds, reputation, and credit line amounts cannot be negative.
  • Player registration is rejected when the player already belongs to a +non-default organization.

Durable Commands

CommandArgumentsReturns
org:createorg_id, org_jsonOrganization JSON.
org:getorg_idOrganization JSON.
org:updateorg_id, patch_jsonUpdated organization JSON.
org:existsorg_idtrue or false.
org:deleteorg_idOK.
org:assets:getorg_idAsset map JSON.
org:assets:updateorg_id, assets_jsonUpdated asset map JSON.
org:fleet:getorg_idFleet map JSON.
org:fleet:updateorg_id, fleet_jsonUpdated fleet map JSON.
org:members:getorg_idMember array JSON.
org:members:addorg_id, member_uidOK.
org:members:removeorg_id, member_uidOK.

Create an Organization

The command key is authoritative for id.

private _org = createHashMapFromArray [
+    ["id", _orgId],
+    ["owner", getPlayerUID player],
+    ["name", "Spearnet Logistics"],
+    ["funds", 0],
+    ["reputation", 0],
+    ["credit_lines", createHashMap]
+];
+
+private _result = "forge_server" callExtension ["org:create", [
+    _orgId,
+    toJSON _org
+]];
+

Update Organization Funds

private _patch = createHashMapFromArray [
+    ["funds", 5000],
+    ["reputation", 10]
+];
+
+private _result = "forge_server" callExtension ["org:update", [
+    _orgId,
+    toJSON _patch
+]];
+

Supported durable patch fields are id, owner, name, funds, +reputation, and credit_lines.

Assets and Fleet

Assets are grouped by category, then classname.

private _assets = createHashMapFromArray [
+    ["ammo", createHashMapFromArray [
+        ["ACE_30Rnd_65x39_caseless_mag", createHashMapFromArray [
+            ["classname", "ACE_30Rnd_65x39_caseless_mag"],
+            ["type", "ammo"],
+            ["quantity", 20]
+        ]]
+    ]]
+];
+
+"forge_server" callExtension ["org:assets:update", [_orgId, toJSON _assets]];
+

Fleet is keyed by an internal fleet entry ID.

private _fleet = createHashMapFromArray [
+    ["B_Truck_01_transport_F_0", createHashMapFromArray [
+        ["classname", "B_Truck_01_transport_F"],
+        ["name", "Transport Truck"],
+        ["type", "cars"],
+        ["status", "Ready"],
+        ["damage", "0%"]
+    ]]
+];
+
+"forge_server" callExtension ["org:fleet:update", [_orgId, toJSON _fleet]];
+

Hot-State Commands

CommandArgumentsReturns
org:hot:initorg_idHot organization JSON.
org:hot:getorg_idHot organization JSON.
org:hot:overrideorg_id, hot_org_jsonHot organization JSON.
org:hot:ensure_membercontext_jsonHot organization JSON.
org:hot:member_invitesmember_uidInvite array JSON.
org:hot:registercontext_jsonRegister result JSON.
org:hot:invite_membercontext_jsonInvite result JSON.
org:hot:accept_invitecontext_jsonInvite decision result JSON.
org:hot:decline_invitecontext_jsonInvite decision result JSON.
org:hot:assign_credit_linecontext_jsonMutation result JSON.
org:hot:repay_credit_linecontext_jsonRepayment result JSON.
org:hot:charge_checkoutcontext_jsonMutation result JSON.
org:hot:add_assetscontext_json, assets_jsonMutation result JSON.
org:hot:add_fleetcontext_json, fleet_jsonMutation result JSON.
org:hot:leavecontext_jsonLeave result JSON.
org:hot:disbandcontext_jsonDisband result JSON.
org:hot:saveorg_idCurrent hot organization JSON and async durable save.
org:hot:removeorg_idOK.

Register from UI Context

private _context = createHashMapFromArray [
+    ["requesterUid", getPlayerUID player],
+    ["requesterName", name player],
+    ["orgId", _orgId],
+    ["orgName", "Spearnet Logistics"],
+    ["existingOrgId", "default"]
+];
+
+private _result = "forge_server" callExtension ["org:hot:register", [toJSON _context]];
+

Invite and Accept

private _invite = createHashMapFromArray [
+    ["requesterUid", getPlayerUID player],
+    ["requesterName", name player],
+    ["orgId", _orgId],
+    ["requesterIsDefaultOrgCeo", false],
+    ["targetUid", _targetUid],
+    ["targetName", _targetName],
+    ["targetOrgId", "default"]
+];
+
+"forge_server" callExtension ["org:hot:invite_member", [toJSON _invite]];
+
+private _decision = createHashMapFromArray [
+    ["requesterUid", _targetUid],
+    ["requesterName", _targetName],
+    ["orgId", _orgId],
+    ["existingOrgId", "default"]
+];
+
+"forge_server" callExtension ["org:hot:accept_invite", [toJSON _decision]];
+

Credit Line Checkout

private _credit = createHashMapFromArray [
+    ["requesterUid", getPlayerUID player],
+    ["orgId", _orgId],
+    ["requesterIsDefaultOrgCeo", false],
+    ["memberUid", _memberUid],
+    ["memberName", _memberName],
+    ["amount", 1000]
+];
+
+"forge_server" callExtension ["org:hot:assign_credit_line", [toJSON _credit]];
+
+private _charge = createHashMapFromArray [
+    ["requesterUid", _memberUid],
+    ["orgId", _orgId],
+    ["requesterIsDefaultOrgCeo", false],
+    ["source", "credit_line"],
+    ["amount", 250],
+    ["commit", true]
+];
+
+"forge_server" callExtension ["org:hot:charge_checkout", [toJSON _charge]];
+

Error Handling

private _payload = _result select 0;
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Organization error: %1", _payload];
+};
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/organization/_payload.json b/docus/dist/server-modules/organization/_payload.json new file mode 100644 index 0000000..5289186 --- /dev/null +++ b/docus/dist/server-modules/organization/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1602},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-organization":145,"-server-modules-organization-surround":1597},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":81,"body":147,"description":157,"extension":1592,"links":1593,"meta":1594,"navigation":798,"path":82,"seo":1595,"stem":83,"__hash__":1596},"docs\u002F3.server-modules\u002F7.organization.md",{"type":148,"value":149,"toc":1580},"minimark",[150,154,158,163,166,311,314,478,481,515,519,738,742,747,821,825,871,887,891,894,952,955,1012,1016,1284,1288,1336,1340,1442,1446,1547,1551,1576],[151,152,81],"h1",{"id":153},"organization-usage-guide",[155,156,157],"p",{},"The organization module stores organization records, members, assets, fleet\nentries, and credit lines. Durable commands manage persisted records directly.\nHot-state commands support the active organization UI workflows.",[159,160,162],"h2",{"id":161},"storage-model","Storage Model",[155,164,165],{},"Core organization:",[167,168,173],"pre",{"className":169,"code":170,"language":171,"meta":172,"style":172},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"id\": \"default\",\n \"owner\": \"server\",\n \"name\": \"Default Organization\",\n \"funds\": 0.0,\n \"reputation\": 0,\n \"credit_lines\": {}\n}\n","json","",[174,175,176,185,213,234,255,273,290,305],"code",{"__ignoreMap":172},[177,178,181],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sMK4o","{\n",[177,186,188,191,195,198,201,204,208,210],{"class":179,"line":187},2,[177,189,190],{"class":183}," \"",[177,192,194],{"class":193},"spNyl","id",[177,196,197],{"class":183},"\"",[177,199,200],{"class":183},":",[177,202,203],{"class":183}," \"",[177,205,207],{"class":206},"sfazB","default",[177,209,197],{"class":183},[177,211,212],{"class":183},",\n",[177,214,216,218,221,223,225,227,230,232],{"class":179,"line":215},3,[177,217,190],{"class":183},[177,219,220],{"class":193},"owner",[177,222,197],{"class":183},[177,224,200],{"class":183},[177,226,203],{"class":183},[177,228,229],{"class":206},"server",[177,231,197],{"class":183},[177,233,212],{"class":183},[177,235,237,239,242,244,246,248,251,253],{"class":179,"line":236},4,[177,238,190],{"class":183},[177,240,241],{"class":193},"name",[177,243,197],{"class":183},[177,245,200],{"class":183},[177,247,203],{"class":183},[177,249,250],{"class":206},"Default Organization",[177,252,197],{"class":183},[177,254,212],{"class":183},[177,256,258,260,263,265,267,271],{"class":179,"line":257},5,[177,259,190],{"class":183},[177,261,262],{"class":193},"funds",[177,264,197],{"class":183},[177,266,200],{"class":183},[177,268,270],{"class":269},"sbssI"," 0.0",[177,272,212],{"class":183},[177,274,276,278,281,283,285,288],{"class":179,"line":275},6,[177,277,190],{"class":183},[177,279,280],{"class":193},"reputation",[177,282,197],{"class":183},[177,284,200],{"class":183},[177,286,287],{"class":269}," 0",[177,289,212],{"class":183},[177,291,293,295,298,300,302],{"class":179,"line":292},7,[177,294,190],{"class":183},[177,296,297],{"class":193},"credit_lines",[177,299,197],{"class":183},[177,301,200],{"class":183},[177,303,304],{"class":183}," {}\n",[177,306,308],{"class":179,"line":307},8,[177,309,310],{"class":183},"}\n",[155,312,313],{},"Hot organization:",[167,315,317],{"className":169,"code":316,"language":171,"meta":172,"style":172},"{\n \"id\": \"default\",\n \"owner\": \"server\",\n \"name\": \"Default Organization\",\n \"funds\": 0.0,\n \"reputation\": 0,\n \"credit_lines\": {},\n \"assets\": {},\n \"fleet\": {},\n \"members\": {},\n \"pending_invites\": {}\n}\n",[174,318,319,323,341,359,377,391,405,418,431,445,459,473],{"__ignoreMap":172},[177,320,321],{"class":179,"line":180},[177,322,184],{"class":183},[177,324,325,327,329,331,333,335,337,339],{"class":179,"line":187},[177,326,190],{"class":183},[177,328,194],{"class":193},[177,330,197],{"class":183},[177,332,200],{"class":183},[177,334,203],{"class":183},[177,336,207],{"class":206},[177,338,197],{"class":183},[177,340,212],{"class":183},[177,342,343,345,347,349,351,353,355,357],{"class":179,"line":215},[177,344,190],{"class":183},[177,346,220],{"class":193},[177,348,197],{"class":183},[177,350,200],{"class":183},[177,352,203],{"class":183},[177,354,229],{"class":206},[177,356,197],{"class":183},[177,358,212],{"class":183},[177,360,361,363,365,367,369,371,373,375],{"class":179,"line":236},[177,362,190],{"class":183},[177,364,241],{"class":193},[177,366,197],{"class":183},[177,368,200],{"class":183},[177,370,203],{"class":183},[177,372,250],{"class":206},[177,374,197],{"class":183},[177,376,212],{"class":183},[177,378,379,381,383,385,387,389],{"class":179,"line":257},[177,380,190],{"class":183},[177,382,262],{"class":193},[177,384,197],{"class":183},[177,386,200],{"class":183},[177,388,270],{"class":269},[177,390,212],{"class":183},[177,392,393,395,397,399,401,403],{"class":179,"line":275},[177,394,190],{"class":183},[177,396,280],{"class":193},[177,398,197],{"class":183},[177,400,200],{"class":183},[177,402,287],{"class":269},[177,404,212],{"class":183},[177,406,407,409,411,413,415],{"class":179,"line":292},[177,408,190],{"class":183},[177,410,297],{"class":193},[177,412,197],{"class":183},[177,414,200],{"class":183},[177,416,417],{"class":183}," {},\n",[177,419,420,422,425,427,429],{"class":179,"line":307},[177,421,190],{"class":183},[177,423,424],{"class":193},"assets",[177,426,197],{"class":183},[177,428,200],{"class":183},[177,430,417],{"class":183},[177,432,434,436,439,441,443],{"class":179,"line":433},9,[177,435,190],{"class":183},[177,437,438],{"class":193},"fleet",[177,440,197],{"class":183},[177,442,200],{"class":183},[177,444,417],{"class":183},[177,446,448,450,453,455,457],{"class":179,"line":447},10,[177,449,190],{"class":183},[177,451,452],{"class":193},"members",[177,454,197],{"class":183},[177,456,200],{"class":183},[177,458,417],{"class":183},[177,460,462,464,467,469,471],{"class":179,"line":461},11,[177,463,190],{"class":183},[177,465,466],{"class":193},"pending_invites",[177,468,197],{"class":183},[177,470,200],{"class":183},[177,472,304],{"class":183},[177,474,476],{"class":179,"line":475},12,[177,477,310],{"class":183},[155,479,480],{},"Rules validated by the Rust service:",[482,483,484,494,502,507,512],"ul",{},[485,486,487,489,490,493],"li",{},[174,488,194],{}," must be non-empty and contain only alphanumeric characters or ",[174,491,492],{},"_",".",[485,495,496,498,499,501],{},[174,497,220],{}," must be ",[174,500,229],{}," or a 17-digit Steam UID.",[485,503,504,506],{},[174,505,241],{}," cannot be empty, cannot exceed 100 characters, and cannot contain\ncontrol characters.",[485,508,509,511],{},[174,510,262],{},", reputation, and credit line amounts cannot be negative.",[485,513,514],{},"Player registration is rejected when the player already belongs to a\nnon-default organization.",[159,516,518],{"id":517},"durable-commands","Durable Commands",[520,521,522,538],"table",{},[523,524,525],"thead",{},[526,527,528,532,535],"tr",{},[529,530,531],"th",{},"Command",[529,533,534],{},"Arguments",[529,536,537],{},"Returns",[539,540,541,561,574,591,611,627,641,658,672,689,703,721],"tbody",{},[526,542,543,549,558],{},[544,545,546],"td",{},[174,547,548],{},"org:create",[544,550,551,554,555],{},[174,552,553],{},"org_id",", ",[174,556,557],{},"org_json",[544,559,560],{},"Organization JSON.",[526,562,563,568,572],{},[544,564,565],{},[174,566,567],{},"org:get",[544,569,570],{},[174,571,553],{},[544,573,560],{},[526,575,576,581,588],{},[544,577,578],{},[174,579,580],{},"org:update",[544,582,583,554,585],{},[174,584,553],{},[174,586,587],{},"patch_json",[544,589,590],{},"Updated organization JSON.",[526,592,593,598,602],{},[544,594,595],{},[174,596,597],{},"org:exists",[544,599,600],{},[174,601,553],{},[544,603,604,607,608,493],{},[174,605,606],{},"true"," or ",[174,609,610],{},"false",[526,612,613,618,622],{},[544,614,615],{},[174,616,617],{},"org:delete",[544,619,620],{},[174,621,553],{},[544,623,624,493],{},[174,625,626],{},"OK",[526,628,629,634,638],{},[544,630,631],{},[174,632,633],{},"org:assets:get",[544,635,636],{},[174,637,553],{},[544,639,640],{},"Asset map JSON.",[526,642,643,648,655],{},[544,644,645],{},[174,646,647],{},"org:assets:update",[544,649,650,554,652],{},[174,651,553],{},[174,653,654],{},"assets_json",[544,656,657],{},"Updated asset map JSON.",[526,659,660,665,669],{},[544,661,662],{},[174,663,664],{},"org:fleet:get",[544,666,667],{},[174,668,553],{},[544,670,671],{},"Fleet map JSON.",[526,673,674,679,686],{},[544,675,676],{},[174,677,678],{},"org:fleet:update",[544,680,681,554,683],{},[174,682,553],{},[174,684,685],{},"fleet_json",[544,687,688],{},"Updated fleet map JSON.",[526,690,691,696,700],{},[544,692,693],{},[174,694,695],{},"org:members:get",[544,697,698],{},[174,699,553],{},[544,701,702],{},"Member array JSON.",[526,704,705,710,717],{},[544,706,707],{},[174,708,709],{},"org:members:add",[544,711,712,554,714],{},[174,713,553],{},[174,715,716],{},"member_uid",[544,718,719,493],{},[174,720,626],{},[526,722,723,728,734],{},[544,724,725],{},[174,726,727],{},"org:members:remove",[544,729,730,554,732],{},[174,731,553],{},[174,733,716],{},[544,735,736,493],{},[174,737,626],{},[159,739,741],{"id":740},"create-an-organization","Create an Organization",[155,743,744,745,493],{},"The command key is authoritative for ",[174,746,194],{},[167,748,752],{"className":749,"code":750,"language":751,"meta":172,"style":172},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _org = createHashMapFromArray [\n [\"id\", _orgId],\n [\"owner\", getPlayerUID player],\n [\"name\", \"Spearnet Logistics\"],\n [\"funds\", 0],\n [\"reputation\", 0],\n [\"credit_lines\", createHashMap]\n];\n\nprivate _result = \"forge_server\" callExtension [\"org:create\", [\n _orgId,\n toJSON _org\n]];\n","sqf",[174,753,754,759,764,769,774,779,784,789,794,800,805,810,815],{"__ignoreMap":172},[177,755,756],{"class":179,"line":180},[177,757,758],{},"private _org = createHashMapFromArray [\n",[177,760,761],{"class":179,"line":187},[177,762,763],{}," [\"id\", _orgId],\n",[177,765,766],{"class":179,"line":215},[177,767,768],{}," [\"owner\", getPlayerUID player],\n",[177,770,771],{"class":179,"line":236},[177,772,773],{}," [\"name\", \"Spearnet Logistics\"],\n",[177,775,776],{"class":179,"line":257},[177,777,778],{}," [\"funds\", 0],\n",[177,780,781],{"class":179,"line":275},[177,782,783],{}," [\"reputation\", 0],\n",[177,785,786],{"class":179,"line":292},[177,787,788],{}," [\"credit_lines\", createHashMap]\n",[177,790,791],{"class":179,"line":307},[177,792,793],{},"];\n",[177,795,796],{"class":179,"line":433},[177,797,799],{"emptyLinePlaceholder":798},true,"\n",[177,801,802],{"class":179,"line":447},[177,803,804],{},"private _result = \"forge_server\" callExtension [\"org:create\", [\n",[177,806,807],{"class":179,"line":461},[177,808,809],{}," _orgId,\n",[177,811,812],{"class":179,"line":475},[177,813,814],{}," toJSON _org\n",[177,816,818],{"class":179,"line":817},13,[177,819,820],{},"]];\n",[159,822,824],{"id":823},"update-organization-funds","Update Organization Funds",[167,826,828],{"className":749,"code":827,"language":751,"meta":172,"style":172},"private _patch = createHashMapFromArray [\n [\"funds\", 5000],\n [\"reputation\", 10]\n];\n\nprivate _result = \"forge_server\" callExtension [\"org:update\", [\n _orgId,\n toJSON _patch\n]];\n",[174,829,830,835,840,845,849,853,858,862,867],{"__ignoreMap":172},[177,831,832],{"class":179,"line":180},[177,833,834],{},"private _patch = createHashMapFromArray [\n",[177,836,837],{"class":179,"line":187},[177,838,839],{}," [\"funds\", 5000],\n",[177,841,842],{"class":179,"line":215},[177,843,844],{}," [\"reputation\", 10]\n",[177,846,847],{"class":179,"line":236},[177,848,793],{},[177,850,851],{"class":179,"line":257},[177,852,799],{"emptyLinePlaceholder":798},[177,854,855],{"class":179,"line":275},[177,856,857],{},"private _result = \"forge_server\" callExtension [\"org:update\", [\n",[177,859,860],{"class":179,"line":292},[177,861,809],{},[177,863,864],{"class":179,"line":307},[177,865,866],{}," toJSON _patch\n",[177,868,869],{"class":179,"line":433},[177,870,820],{},[155,872,873,874,554,876,554,878,554,880,212,882,884,885,493],{},"Supported durable patch fields are ",[174,875,194],{},[174,877,220],{},[174,879,241],{},[174,881,262],{},[174,883,280],{},", and ",[174,886,297],{},[159,888,890],{"id":889},"assets-and-fleet","Assets and Fleet",[155,892,893],{},"Assets are grouped by category, then classname.",[167,895,897],{"className":749,"code":896,"language":751,"meta":172,"style":172},"private _assets = createHashMapFromArray [\n [\"ammo\", createHashMapFromArray [\n [\"ACE_30Rnd_65x39_caseless_mag\", createHashMapFromArray [\n [\"classname\", \"ACE_30Rnd_65x39_caseless_mag\"],\n [\"type\", \"ammo\"],\n [\"quantity\", 20]\n ]]\n ]]\n];\n\n\"forge_server\" callExtension [\"org:assets:update\", [_orgId, toJSON _assets]];\n",[174,898,899,904,909,914,919,924,929,934,939,943,947],{"__ignoreMap":172},[177,900,901],{"class":179,"line":180},[177,902,903],{},"private _assets = createHashMapFromArray [\n",[177,905,906],{"class":179,"line":187},[177,907,908],{}," [\"ammo\", createHashMapFromArray [\n",[177,910,911],{"class":179,"line":215},[177,912,913],{}," [\"ACE_30Rnd_65x39_caseless_mag\", createHashMapFromArray [\n",[177,915,916],{"class":179,"line":236},[177,917,918],{}," [\"classname\", \"ACE_30Rnd_65x39_caseless_mag\"],\n",[177,920,921],{"class":179,"line":257},[177,922,923],{}," [\"type\", \"ammo\"],\n",[177,925,926],{"class":179,"line":275},[177,927,928],{}," [\"quantity\", 20]\n",[177,930,931],{"class":179,"line":292},[177,932,933],{}," ]]\n",[177,935,936],{"class":179,"line":307},[177,937,938],{}," ]]\n",[177,940,941],{"class":179,"line":433},[177,942,793],{},[177,944,945],{"class":179,"line":447},[177,946,799],{"emptyLinePlaceholder":798},[177,948,949],{"class":179,"line":461},[177,950,951],{},"\"forge_server\" callExtension [\"org:assets:update\", [_orgId, toJSON _assets]];\n",[155,953,954],{},"Fleet is keyed by an internal fleet entry ID.",[167,956,958],{"className":749,"code":957,"language":751,"meta":172,"style":172},"private _fleet = createHashMapFromArray [\n [\"B_Truck_01_transport_F_0\", createHashMapFromArray [\n [\"classname\", \"B_Truck_01_transport_F\"],\n [\"name\", \"Transport Truck\"],\n [\"type\", \"cars\"],\n [\"status\", \"Ready\"],\n [\"damage\", \"0%\"]\n ]]\n];\n\n\"forge_server\" callExtension [\"org:fleet:update\", [_orgId, toJSON _fleet]];\n",[174,959,960,965,970,975,980,985,990,995,999,1003,1007],{"__ignoreMap":172},[177,961,962],{"class":179,"line":180},[177,963,964],{},"private _fleet = createHashMapFromArray [\n",[177,966,967],{"class":179,"line":187},[177,968,969],{}," [\"B_Truck_01_transport_F_0\", createHashMapFromArray [\n",[177,971,972],{"class":179,"line":215},[177,973,974],{}," [\"classname\", \"B_Truck_01_transport_F\"],\n",[177,976,977],{"class":179,"line":236},[177,978,979],{}," [\"name\", \"Transport Truck\"],\n",[177,981,982],{"class":179,"line":257},[177,983,984],{}," [\"type\", \"cars\"],\n",[177,986,987],{"class":179,"line":275},[177,988,989],{}," [\"status\", \"Ready\"],\n",[177,991,992],{"class":179,"line":292},[177,993,994],{}," [\"damage\", \"0%\"]\n",[177,996,997],{"class":179,"line":307},[177,998,938],{},[177,1000,1001],{"class":179,"line":433},[177,1002,793],{},[177,1004,1005],{"class":179,"line":447},[177,1006,799],{"emptyLinePlaceholder":798},[177,1008,1009],{"class":179,"line":461},[177,1010,1011],{},"\"forge_server\" callExtension [\"org:fleet:update\", [_orgId, toJSON _fleet]];\n",[159,1013,1015],{"id":1014},"hot-state-commands","Hot-State Commands",[520,1017,1018,1028],{},[523,1019,1020],{},[526,1021,1022,1024,1026],{},[529,1023,531],{},[529,1025,534],{},[529,1027,537],{},[539,1029,1030,1044,1057,1073,1087,1101,1115,1129,1143,1156,1170,1184,1197,1212,1227,1241,1255,1269],{},[526,1031,1032,1037,1041],{},[544,1033,1034],{},[174,1035,1036],{},"org:hot:init",[544,1038,1039],{},[174,1040,553],{},[544,1042,1043],{},"Hot organization JSON.",[526,1045,1046,1051,1055],{},[544,1047,1048],{},[174,1049,1050],{},"org:hot:get",[544,1052,1053],{},[174,1054,553],{},[544,1056,1043],{},[526,1058,1059,1064,1071],{},[544,1060,1061],{},[174,1062,1063],{},"org:hot:override",[544,1065,1066,554,1068],{},[174,1067,553],{},[174,1069,1070],{},"hot_org_json",[544,1072,1043],{},[526,1074,1075,1080,1085],{},[544,1076,1077],{},[174,1078,1079],{},"org:hot:ensure_member",[544,1081,1082],{},[174,1083,1084],{},"context_json",[544,1086,1043],{},[526,1088,1089,1094,1098],{},[544,1090,1091],{},[174,1092,1093],{},"org:hot:member_invites",[544,1095,1096],{},[174,1097,716],{},[544,1099,1100],{},"Invite array JSON.",[526,1102,1103,1108,1112],{},[544,1104,1105],{},[174,1106,1107],{},"org:hot:register",[544,1109,1110],{},[174,1111,1084],{},[544,1113,1114],{},"Register result JSON.",[526,1116,1117,1122,1126],{},[544,1118,1119],{},[174,1120,1121],{},"org:hot:invite_member",[544,1123,1124],{},[174,1125,1084],{},[544,1127,1128],{},"Invite result JSON.",[526,1130,1131,1136,1140],{},[544,1132,1133],{},[174,1134,1135],{},"org:hot:accept_invite",[544,1137,1138],{},[174,1139,1084],{},[544,1141,1142],{},"Invite decision result JSON.",[526,1144,1145,1150,1154],{},[544,1146,1147],{},[174,1148,1149],{},"org:hot:decline_invite",[544,1151,1152],{},[174,1153,1084],{},[544,1155,1142],{},[526,1157,1158,1163,1167],{},[544,1159,1160],{},[174,1161,1162],{},"org:hot:assign_credit_line",[544,1164,1165],{},[174,1166,1084],{},[544,1168,1169],{},"Mutation result JSON.",[526,1171,1172,1177,1181],{},[544,1173,1174],{},[174,1175,1176],{},"org:hot:repay_credit_line",[544,1178,1179],{},[174,1180,1084],{},[544,1182,1183],{},"Repayment result JSON.",[526,1185,1186,1191,1195],{},[544,1187,1188],{},[174,1189,1190],{},"org:hot:charge_checkout",[544,1192,1193],{},[174,1194,1084],{},[544,1196,1169],{},[526,1198,1199,1204,1210],{},[544,1200,1201],{},[174,1202,1203],{},"org:hot:add_assets",[544,1205,1206,554,1208],{},[174,1207,1084],{},[174,1209,654],{},[544,1211,1169],{},[526,1213,1214,1219,1225],{},[544,1215,1216],{},[174,1217,1218],{},"org:hot:add_fleet",[544,1220,1221,554,1223],{},[174,1222,1084],{},[174,1224,685],{},[544,1226,1169],{},[526,1228,1229,1234,1238],{},[544,1230,1231],{},[174,1232,1233],{},"org:hot:leave",[544,1235,1236],{},[174,1237,1084],{},[544,1239,1240],{},"Leave result JSON.",[526,1242,1243,1248,1252],{},[544,1244,1245],{},[174,1246,1247],{},"org:hot:disband",[544,1249,1250],{},[174,1251,1084],{},[544,1253,1254],{},"Disband result JSON.",[526,1256,1257,1262,1266],{},[544,1258,1259],{},[174,1260,1261],{},"org:hot:save",[544,1263,1264],{},[174,1265,553],{},[544,1267,1268],{},"Current hot organization JSON and async durable save.",[526,1270,1271,1276,1280],{},[544,1272,1273],{},[174,1274,1275],{},"org:hot:remove",[544,1277,1278],{},[174,1279,553],{},[544,1281,1282,493],{},[174,1283,626],{},[159,1285,1287],{"id":1286},"register-from-ui-context","Register from UI Context",[167,1289,1291],{"className":749,"code":1290,"language":751,"meta":172,"style":172},"private _context = createHashMapFromArray [\n [\"requesterUid\", getPlayerUID player],\n [\"requesterName\", name player],\n [\"orgId\", _orgId],\n [\"orgName\", \"Spearnet Logistics\"],\n [\"existingOrgId\", \"default\"]\n];\n\nprivate _result = \"forge_server\" callExtension [\"org:hot:register\", [toJSON _context]];\n",[174,1292,1293,1298,1303,1308,1313,1318,1323,1327,1331],{"__ignoreMap":172},[177,1294,1295],{"class":179,"line":180},[177,1296,1297],{},"private _context = createHashMapFromArray [\n",[177,1299,1300],{"class":179,"line":187},[177,1301,1302],{}," [\"requesterUid\", getPlayerUID player],\n",[177,1304,1305],{"class":179,"line":215},[177,1306,1307],{}," [\"requesterName\", name player],\n",[177,1309,1310],{"class":179,"line":236},[177,1311,1312],{}," [\"orgId\", _orgId],\n",[177,1314,1315],{"class":179,"line":257},[177,1316,1317],{}," [\"orgName\", \"Spearnet Logistics\"],\n",[177,1319,1320],{"class":179,"line":275},[177,1321,1322],{}," [\"existingOrgId\", \"default\"]\n",[177,1324,1325],{"class":179,"line":292},[177,1326,793],{},[177,1328,1329],{"class":179,"line":307},[177,1330,799],{"emptyLinePlaceholder":798},[177,1332,1333],{"class":179,"line":433},[177,1334,1335],{},"private _result = \"forge_server\" callExtension [\"org:hot:register\", [toJSON _context]];\n",[159,1337,1339],{"id":1338},"invite-and-accept","Invite and Accept",[167,1341,1343],{"className":749,"code":1342,"language":751,"meta":172,"style":172},"private _invite = createHashMapFromArray [\n [\"requesterUid\", getPlayerUID player],\n [\"requesterName\", name player],\n [\"orgId\", _orgId],\n [\"requesterIsDefaultOrgCeo\", false],\n [\"targetUid\", _targetUid],\n [\"targetName\", _targetName],\n [\"targetOrgId\", \"default\"]\n];\n\n\"forge_server\" callExtension [\"org:hot:invite_member\", [toJSON _invite]];\n\nprivate _decision = createHashMapFromArray [\n [\"requesterUid\", _targetUid],\n [\"requesterName\", _targetName],\n [\"orgId\", _orgId],\n [\"existingOrgId\", \"default\"]\n];\n\n\"forge_server\" callExtension [\"org:hot:accept_invite\", [toJSON _decision]];\n",[174,1344,1345,1350,1354,1358,1362,1367,1372,1377,1382,1386,1390,1395,1399,1404,1410,1416,1421,1426,1431,1436],{"__ignoreMap":172},[177,1346,1347],{"class":179,"line":180},[177,1348,1349],{},"private _invite = createHashMapFromArray [\n",[177,1351,1352],{"class":179,"line":187},[177,1353,1302],{},[177,1355,1356],{"class":179,"line":215},[177,1357,1307],{},[177,1359,1360],{"class":179,"line":236},[177,1361,1312],{},[177,1363,1364],{"class":179,"line":257},[177,1365,1366],{}," [\"requesterIsDefaultOrgCeo\", false],\n",[177,1368,1369],{"class":179,"line":275},[177,1370,1371],{}," [\"targetUid\", _targetUid],\n",[177,1373,1374],{"class":179,"line":292},[177,1375,1376],{}," [\"targetName\", _targetName],\n",[177,1378,1379],{"class":179,"line":307},[177,1380,1381],{}," [\"targetOrgId\", \"default\"]\n",[177,1383,1384],{"class":179,"line":433},[177,1385,793],{},[177,1387,1388],{"class":179,"line":447},[177,1389,799],{"emptyLinePlaceholder":798},[177,1391,1392],{"class":179,"line":461},[177,1393,1394],{},"\"forge_server\" callExtension [\"org:hot:invite_member\", [toJSON _invite]];\n",[177,1396,1397],{"class":179,"line":475},[177,1398,799],{"emptyLinePlaceholder":798},[177,1400,1401],{"class":179,"line":817},[177,1402,1403],{},"private _decision = createHashMapFromArray [\n",[177,1405,1407],{"class":179,"line":1406},14,[177,1408,1409],{}," [\"requesterUid\", _targetUid],\n",[177,1411,1413],{"class":179,"line":1412},15,[177,1414,1415],{}," [\"requesterName\", _targetName],\n",[177,1417,1419],{"class":179,"line":1418},16,[177,1420,1312],{},[177,1422,1424],{"class":179,"line":1423},17,[177,1425,1322],{},[177,1427,1429],{"class":179,"line":1428},18,[177,1430,793],{},[177,1432,1434],{"class":179,"line":1433},19,[177,1435,799],{"emptyLinePlaceholder":798},[177,1437,1439],{"class":179,"line":1438},20,[177,1440,1441],{},"\"forge_server\" callExtension [\"org:hot:accept_invite\", [toJSON _decision]];\n",[159,1443,1445],{"id":1444},"credit-line-checkout","Credit Line Checkout",[167,1447,1449],{"className":749,"code":1448,"language":751,"meta":172,"style":172},"private _credit = createHashMapFromArray [\n [\"requesterUid\", getPlayerUID player],\n [\"orgId\", _orgId],\n [\"requesterIsDefaultOrgCeo\", false],\n [\"memberUid\", _memberUid],\n [\"memberName\", _memberName],\n [\"amount\", 1000]\n];\n\n\"forge_server\" callExtension [\"org:hot:assign_credit_line\", [toJSON _credit]];\n\nprivate _charge = createHashMapFromArray [\n [\"requesterUid\", _memberUid],\n [\"orgId\", _orgId],\n [\"requesterIsDefaultOrgCeo\", false],\n [\"source\", \"credit_line\"],\n [\"amount\", 250],\n [\"commit\", true]\n];\n\n\"forge_server\" callExtension [\"org:hot:charge_checkout\", [toJSON _charge]];\n",[174,1450,1451,1456,1460,1464,1468,1473,1478,1483,1487,1491,1496,1500,1505,1510,1514,1518,1523,1528,1533,1537,1541],{"__ignoreMap":172},[177,1452,1453],{"class":179,"line":180},[177,1454,1455],{},"private _credit = createHashMapFromArray [\n",[177,1457,1458],{"class":179,"line":187},[177,1459,1302],{},[177,1461,1462],{"class":179,"line":215},[177,1463,1312],{},[177,1465,1466],{"class":179,"line":236},[177,1467,1366],{},[177,1469,1470],{"class":179,"line":257},[177,1471,1472],{}," [\"memberUid\", _memberUid],\n",[177,1474,1475],{"class":179,"line":275},[177,1476,1477],{}," [\"memberName\", _memberName],\n",[177,1479,1480],{"class":179,"line":292},[177,1481,1482],{}," [\"amount\", 1000]\n",[177,1484,1485],{"class":179,"line":307},[177,1486,793],{},[177,1488,1489],{"class":179,"line":433},[177,1490,799],{"emptyLinePlaceholder":798},[177,1492,1493],{"class":179,"line":447},[177,1494,1495],{},"\"forge_server\" callExtension [\"org:hot:assign_credit_line\", [toJSON _credit]];\n",[177,1497,1498],{"class":179,"line":461},[177,1499,799],{"emptyLinePlaceholder":798},[177,1501,1502],{"class":179,"line":475},[177,1503,1504],{},"private _charge = createHashMapFromArray [\n",[177,1506,1507],{"class":179,"line":817},[177,1508,1509],{}," [\"requesterUid\", _memberUid],\n",[177,1511,1512],{"class":179,"line":1406},[177,1513,1312],{},[177,1515,1516],{"class":179,"line":1412},[177,1517,1366],{},[177,1519,1520],{"class":179,"line":1418},[177,1521,1522],{}," [\"source\", \"credit_line\"],\n",[177,1524,1525],{"class":179,"line":1423},[177,1526,1527],{}," [\"amount\", 250],\n",[177,1529,1530],{"class":179,"line":1428},[177,1531,1532],{}," [\"commit\", true]\n",[177,1534,1535],{"class":179,"line":1433},[177,1536,793],{},[177,1538,1539],{"class":179,"line":1438},[177,1540,799],{"emptyLinePlaceholder":798},[177,1542,1544],{"class":179,"line":1543},21,[177,1545,1546],{},"\"forge_server\" callExtension [\"org:hot:charge_checkout\", [toJSON _charge]];\n",[159,1548,1550],{"id":1549},"error-handling","Error Handling",[167,1552,1554],{"className":749,"code":1553,"language":751,"meta":172,"style":172},"private _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Organization error: %1\", _payload];\n};\n",[174,1555,1556,1561,1566,1571],{"__ignoreMap":172},[177,1557,1558],{"class":179,"line":180},[177,1559,1560],{},"private _payload = _result select 0;\n",[177,1562,1563],{"class":179,"line":187},[177,1564,1565],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[177,1567,1568],{"class":179,"line":215},[177,1569,1570],{}," systemChat format [\"Organization error: %1\", _payload];\n",[177,1572,1573],{"class":179,"line":236},[177,1574,1575],{},"};\n",[1577,1578,1579],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":172,"searchDepth":187,"depth":187,"links":1581},[1582,1583,1584,1585,1586,1587,1588,1589,1590,1591],{"id":161,"depth":187,"text":162},{"id":517,"depth":187,"text":518},{"id":740,"depth":187,"text":741},{"id":823,"depth":187,"text":824},{"id":889,"depth":187,"text":890},{"id":1014,"depth":187,"text":1015},{"id":1286,"depth":187,"text":1287},{"id":1338,"depth":187,"text":1339},{"id":1444,"depth":187,"text":1445},{"id":1549,"depth":187,"text":1550},"md",null,{},{"title":81,"description":157},"Y4vjjEPJa4IV64tDJwWSmfGqOhldckNTPDy2PpGmT14",[1598,1600],{"title":77,"path":78,"stem":79,"description":1599,"children":-1},"The locker module stores physical player inventory items by classname. It is\nseparate from the virtual arsenal unlock module documented in\nOwned Storage Usage Guide.",{"title":85,"path":86,"stem":87,"description":1601,"children":-1},"Owned storage covers the owned:locker and owned:garage extension command\ngroups. These modules store unlock lists rather than physical item or vehicle\ninstances.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/owned-storage.html b/docus/dist/server-modules/owned-storage.html new file mode 100644 index 0000000..cf2c5bc --- /dev/null +++ b/docus/dist/server-modules/owned-storage.html @@ -0,0 +1,155 @@ +Owned Storage Usage Guide - forge-docus
Server Modules

Owned Storage Usage Guide

Owned storage covers the owned:locker and owned:garage extension command +groups. These modules store unlock lists rather than physical item or vehicle +instances.

Owned Storage Usage Guide

Owned storage covers the owned:locker and owned:garage extension command +groups. These modules store unlock lists rather than physical item or vehicle +instances.

Use these modules for virtual arsenal and virtual garage unlocks. Use +Locker Usage Guide and +Garage Usage Guide for physical inventory and stored +vehicle instances.

Owned Locker Model

{
+  "items": ["FirstAidKit"],
+  "weapons": ["arifle_MX_F"],
+  "magazines": ["30Rnd_65x39_caseless_black_mag"],
+  "backpacks": ["B_AssaultPack_rgr"]
+}
+

Supported owned locker categories:

  • items
  • weapons
  • magazines
  • backpacks

New owned lockers are created with default unlocks from the Rust model.

Owned Garage Model

{
+  "cars": ["B_Quadbike_01_F"],
+  "armor": [],
+  "helis": [],
+  "planes": [],
+  "naval": [],
+  "other": []
+}
+

Supported owned garage categories:

  • cars
  • armor
  • helis
  • planes
  • naval
  • other

The durable owned:garage:remove command currently accepts heli for the +helicopter category. Add, get, and hot remove accept helis.

New owned garages are created with default unlocks from the Rust model.

Owned Locker Commands

CommandArgumentsReturns
owned:locker:createuidFull owned locker JSON.
owned:locker:fetchuidFull owned locker JSON.
owned:locker:getuid, categoryCategory classname array JSON.
owned:locker:adduid, category, classnames_jsonUpdated category array JSON.
owned:locker:removeuid, category, classnameUpdated category array JSON.
owned:locker:deleteuidOK.
owned:locker:existsuidtrue or false.

Owned Garage Commands

CommandArgumentsReturns
owned:garage:createuidFull owned garage JSON.
owned:garage:fetchuidFull owned garage JSON.
owned:garage:getuid, categoryCategory classname array JSON.
owned:garage:adduid, category, classnames_jsonUpdated category array JSON.
owned:garage:removeuid, category, classnameUpdated category array JSON.
owned:garage:deleteuidOK.
owned:garage:existsuidtrue or false.

Add Virtual Arsenal Unlocks

private _classes = ["arifle_MX_F", "hgun_P07_F"];
+
+private _result = "forge_server" callExtension ["owned:locker:add", [
+    getPlayerUID player,
+    "weapons",
+    toJSON _classes
+]];
+

Add Virtual Garage Unlocks

private _classes = ["B_Quadbike_01_F", "B_MRAP_01_F"];
+
+private _result = "forge_server" callExtension ["owned:garage:add", [
+    getPlayerUID player,
+    "cars",
+    toJSON _classes
+]];
+

Remove an Unlock

"forge_server" callExtension ["owned:locker:remove", [
+    getPlayerUID player,
+    "weapons",
+    "arifle_MX_F"
+]];
+
+"forge_server" callExtension ["owned:garage:remove", [
+    getPlayerUID player,
+    "cars",
+    "B_Quadbike_01_F"
+]];
+

Hot-State Commands

Both owned storage modules support hot state.

Owned locker:

CommandArgumentsReturns
owned:locker:hot:inituidFull owned locker JSON.
owned:locker:hot:fetchuidFull owned locker JSON.
owned:locker:hot:getuid, categoryCategory array JSON.
owned:locker:hot:overrideuid, locker_jsonFull owned locker JSON.
owned:locker:hot:saveuidCurrent hot owned locker JSON and async durable save.
owned:locker:hot:removeuidOK.

Owned garage:

CommandArgumentsReturns
owned:garage:hot:inituidFull owned garage JSON.
owned:garage:hot:fetchuidFull owned garage JSON.
owned:garage:hot:getuid, categoryCategory array JSON.
owned:garage:hot:overrideuid, garage_jsonFull owned garage JSON.
owned:garage:hot:adduid, category, classnames_jsonUpdated category array JSON.
owned:garage:hot:remove_itemuid, category, classnameUpdated category array JSON.
owned:garage:hot:saveuidCurrent hot owned garage JSON and async durable save.
owned:garage:hot:removeuidOK.

Error Handling

private _payload = _result select 0;
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Owned storage error: %1", _payload];
+};
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/owned-storage/_payload.json b/docus/dist/server-modules/owned-storage/_payload.json new file mode 100644 index 0000000..f29b8ae --- /dev/null +++ b/docus/dist/server-modules/owned-storage/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1207},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-owned-storage":145,"-server-modules-owned-storage-surround":1202},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":85,"body":147,"description":1196,"extension":1197,"links":1198,"meta":1199,"navigation":777,"path":86,"seo":1200,"stem":87,"__hash__":1201},"docs\u002F3.server-modules\u002F8.owned-storage.md",{"type":148,"value":149,"toc":1185},"minimark",[150,154,167,177,182,306,309,329,332,336,440,443,469,483,486,490,632,636,757,761,804,808,844,848,904,908,911,914,1015,1018,1152,1156,1181],[151,152,85],"h1",{"id":153},"owned-storage-usage-guide",[155,156,157,158,162,163,166],"p",{},"Owned storage covers the ",[159,160,161],"code",{},"owned:locker"," and ",[159,164,165],{},"owned:garage"," extension command\ngroups. These modules store unlock lists rather than physical item or vehicle\ninstances.",[155,168,169,170,173,174,176],{},"Use these modules for virtual arsenal and virtual garage unlocks. Use\n",[171,172,77],"a",{"href":78}," and\n",[171,175,73],{"href":74}," for physical inventory and stored\nvehicle instances.",[178,179,181],"h2",{"id":180},"owned-locker-model","Owned Locker Model",[183,184,189],"pre",{"className":185,"code":186,"language":187,"meta":188,"style":188},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"items\": [\"FirstAidKit\"],\n \"weapons\": [\"arifle_MX_F\"],\n \"magazines\": [\"30Rnd_65x39_caseless_black_mag\"],\n \"backpacks\": [\"B_AssaultPack_rgr\"]\n}\n","json","",[159,190,191,200,230,253,276,300],{"__ignoreMap":188},[192,193,196],"span",{"class":194,"line":195},"line",1,[192,197,199],{"class":198},"sMK4o","{\n",[192,201,203,206,210,213,216,219,221,225,227],{"class":194,"line":202},2,[192,204,205],{"class":198}," \"",[192,207,209],{"class":208},"spNyl","items",[192,211,212],{"class":198},"\"",[192,214,215],{"class":198},":",[192,217,218],{"class":198}," [",[192,220,212],{"class":198},[192,222,224],{"class":223},"sfazB","FirstAidKit",[192,226,212],{"class":198},[192,228,229],{"class":198},"],\n",[192,231,233,235,238,240,242,244,246,249,251],{"class":194,"line":232},3,[192,234,205],{"class":198},[192,236,237],{"class":208},"weapons",[192,239,212],{"class":198},[192,241,215],{"class":198},[192,243,218],{"class":198},[192,245,212],{"class":198},[192,247,248],{"class":223},"arifle_MX_F",[192,250,212],{"class":198},[192,252,229],{"class":198},[192,254,256,258,261,263,265,267,269,272,274],{"class":194,"line":255},4,[192,257,205],{"class":198},[192,259,260],{"class":208},"magazines",[192,262,212],{"class":198},[192,264,215],{"class":198},[192,266,218],{"class":198},[192,268,212],{"class":198},[192,270,271],{"class":223},"30Rnd_65x39_caseless_black_mag",[192,273,212],{"class":198},[192,275,229],{"class":198},[192,277,279,281,284,286,288,290,292,295,297],{"class":194,"line":278},5,[192,280,205],{"class":198},[192,282,283],{"class":208},"backpacks",[192,285,212],{"class":198},[192,287,215],{"class":198},[192,289,218],{"class":198},[192,291,212],{"class":198},[192,293,294],{"class":223},"B_AssaultPack_rgr",[192,296,212],{"class":198},[192,298,299],{"class":198},"]\n",[192,301,303],{"class":194,"line":302},6,[192,304,305],{"class":198},"}\n",[155,307,308],{},"Supported owned locker categories:",[310,311,312,317,321,325],"ul",{},[313,314,315],"li",{},[159,316,209],{},[313,318,319],{},[159,320,237],{},[313,322,323],{},[159,324,260],{},[313,326,327],{},[159,328,283],{},[155,330,331],{},"New owned lockers are created with default unlocks from the Rust model.",[178,333,335],{"id":334},"owned-garage-model","Owned Garage Model",[183,337,339],{"className":185,"code":338,"language":187,"meta":188,"style":188},"{\n \"cars\": [\"B_Quadbike_01_F\"],\n \"armor\": [],\n \"helis\": [],\n \"planes\": [],\n \"naval\": [],\n \"other\": []\n}\n",[159,340,341,345,367,381,394,407,420,435],{"__ignoreMap":188},[192,342,343],{"class":194,"line":195},[192,344,199],{"class":198},[192,346,347,349,352,354,356,358,360,363,365],{"class":194,"line":202},[192,348,205],{"class":198},[192,350,351],{"class":208},"cars",[192,353,212],{"class":198},[192,355,215],{"class":198},[192,357,218],{"class":198},[192,359,212],{"class":198},[192,361,362],{"class":223},"B_Quadbike_01_F",[192,364,212],{"class":198},[192,366,229],{"class":198},[192,368,369,371,374,376,378],{"class":194,"line":232},[192,370,205],{"class":198},[192,372,373],{"class":208},"armor",[192,375,212],{"class":198},[192,377,215],{"class":198},[192,379,380],{"class":198}," [],\n",[192,382,383,385,388,390,392],{"class":194,"line":255},[192,384,205],{"class":198},[192,386,387],{"class":208},"helis",[192,389,212],{"class":198},[192,391,215],{"class":198},[192,393,380],{"class":198},[192,395,396,398,401,403,405],{"class":194,"line":278},[192,397,205],{"class":198},[192,399,400],{"class":208},"planes",[192,402,212],{"class":198},[192,404,215],{"class":198},[192,406,380],{"class":198},[192,408,409,411,414,416,418],{"class":194,"line":302},[192,410,205],{"class":198},[192,412,413],{"class":208},"naval",[192,415,212],{"class":198},[192,417,215],{"class":198},[192,419,380],{"class":198},[192,421,423,425,428,430,432],{"class":194,"line":422},7,[192,424,205],{"class":198},[192,426,427],{"class":208},"other",[192,429,212],{"class":198},[192,431,215],{"class":198},[192,433,434],{"class":198}," []\n",[192,436,438],{"class":194,"line":437},8,[192,439,305],{"class":198},[155,441,442],{},"Supported owned garage categories:",[310,444,445,449,453,457,461,465],{},[313,446,447],{},[159,448,351],{},[313,450,451],{},[159,452,373],{},[313,454,455],{},[159,456,387],{},[313,458,459],{},[159,460,400],{},[313,462,463],{},[159,464,413],{},[313,466,467],{},[159,468,427],{},[155,470,471,472,475,476,479,480,482],{},"The durable ",[159,473,474],{},"owned:garage:remove"," command currently accepts ",[159,477,478],{},"heli"," for the\nhelicopter category. Add, get, and hot remove accept ",[159,481,387],{},".",[155,484,485],{},"New owned garages are created with default unlocks from the Rust model.",[178,487,489],{"id":488},"owned-locker-commands","Owned Locker Commands",[491,492,493,509],"table",{},[494,495,496],"thead",{},[497,498,499,503,506],"tr",{},[500,501,502],"th",{},"Command",[500,504,505],{},"Arguments",[500,507,508],{},"Returns",[510,511,512,528,541,559,578,596,612],"tbody",{},[497,513,514,520,525],{},[515,516,517],"td",{},[159,518,519],{},"owned:locker:create",[515,521,522],{},[159,523,524],{},"uid",[515,526,527],{},"Full owned locker JSON.",[497,529,530,535,539],{},[515,531,532],{},[159,533,534],{},"owned:locker:fetch",[515,536,537],{},[159,538,524],{},[515,540,527],{},[497,542,543,548,556],{},[515,544,545],{},[159,546,547],{},"owned:locker:get",[515,549,550,552,553],{},[159,551,524],{},", ",[159,554,555],{},"category",[515,557,558],{},"Category classname array JSON.",[497,560,561,566,575],{},[515,562,563],{},[159,564,565],{},"owned:locker:add",[515,567,568,552,570,552,572],{},[159,569,524],{},[159,571,555],{},[159,573,574],{},"classnames_json",[515,576,577],{},"Updated category array JSON.",[497,579,580,585,594],{},[515,581,582],{},[159,583,584],{},"owned:locker:remove",[515,586,587,552,589,552,591],{},[159,588,524],{},[159,590,555],{},[159,592,593],{},"classname",[515,595,577],{},[497,597,598,603,607],{},[515,599,600],{},[159,601,602],{},"owned:locker:delete",[515,604,605],{},[159,606,524],{},[515,608,609,482],{},[159,610,611],{},"OK",[497,613,614,619,623],{},[515,615,616],{},[159,617,618],{},"owned:locker:exists",[515,620,621],{},[159,622,524],{},[515,624,625,628,629,482],{},[159,626,627],{},"true"," or ",[159,630,631],{},"false",[178,633,635],{"id":634},"owned-garage-commands","Owned Garage Commands",[491,637,638,648],{},[494,639,640],{},[497,641,642,644,646],{},[500,643,502],{},[500,645,505],{},[500,647,508],{},[510,649,650,664,677,692,709,725,740],{},[497,651,652,657,661],{},[515,653,654],{},[159,655,656],{},"owned:garage:create",[515,658,659],{},[159,660,524],{},[515,662,663],{},"Full owned garage JSON.",[497,665,666,671,675],{},[515,667,668],{},[159,669,670],{},"owned:garage:fetch",[515,672,673],{},[159,674,524],{},[515,676,663],{},[497,678,679,684,690],{},[515,680,681],{},[159,682,683],{},"owned:garage:get",[515,685,686,552,688],{},[159,687,524],{},[159,689,555],{},[515,691,558],{},[497,693,694,699,707],{},[515,695,696],{},[159,697,698],{},"owned:garage:add",[515,700,701,552,703,552,705],{},[159,702,524],{},[159,704,555],{},[159,706,574],{},[515,708,577],{},[497,710,711,715,723],{},[515,712,713],{},[159,714,474],{},[515,716,717,552,719,552,721],{},[159,718,524],{},[159,720,555],{},[159,722,593],{},[515,724,577],{},[497,726,727,732,736],{},[515,728,729],{},[159,730,731],{},"owned:garage:delete",[515,733,734],{},[159,735,524],{},[515,737,738,482],{},[159,739,611],{},[497,741,742,747,751],{},[515,743,744],{},[159,745,746],{},"owned:garage:exists",[515,748,749],{},[159,750,524],{},[515,752,753,628,755,482],{},[159,754,627],{},[159,756,631],{},[178,758,760],{"id":759},"add-virtual-arsenal-unlocks","Add Virtual Arsenal Unlocks",[183,762,766],{"className":763,"code":764,"language":765,"meta":188,"style":188},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _classes = [\"arifle_MX_F\", \"hgun_P07_F\"];\n\nprivate _result = \"forge_server\" callExtension [\"owned:locker:add\", [\n getPlayerUID player,\n \"weapons\",\n toJSON _classes\n]];\n","sqf",[159,767,768,773,779,784,789,794,799],{"__ignoreMap":188},[192,769,770],{"class":194,"line":195},[192,771,772],{},"private _classes = [\"arifle_MX_F\", \"hgun_P07_F\"];\n",[192,774,775],{"class":194,"line":202},[192,776,778],{"emptyLinePlaceholder":777},true,"\n",[192,780,781],{"class":194,"line":232},[192,782,783],{},"private _result = \"forge_server\" callExtension [\"owned:locker:add\", [\n",[192,785,786],{"class":194,"line":255},[192,787,788],{}," getPlayerUID player,\n",[192,790,791],{"class":194,"line":278},[192,792,793],{}," \"weapons\",\n",[192,795,796],{"class":194,"line":302},[192,797,798],{}," toJSON _classes\n",[192,800,801],{"class":194,"line":422},[192,802,803],{},"]];\n",[178,805,807],{"id":806},"add-virtual-garage-unlocks","Add Virtual Garage Unlocks",[183,809,811],{"className":763,"code":810,"language":765,"meta":188,"style":188},"private _classes = [\"B_Quadbike_01_F\", \"B_MRAP_01_F\"];\n\nprivate _result = \"forge_server\" callExtension [\"owned:garage:add\", [\n getPlayerUID player,\n \"cars\",\n toJSON _classes\n]];\n",[159,812,813,818,822,827,831,836,840],{"__ignoreMap":188},[192,814,815],{"class":194,"line":195},[192,816,817],{},"private _classes = [\"B_Quadbike_01_F\", \"B_MRAP_01_F\"];\n",[192,819,820],{"class":194,"line":202},[192,821,778],{"emptyLinePlaceholder":777},[192,823,824],{"class":194,"line":232},[192,825,826],{},"private _result = \"forge_server\" callExtension [\"owned:garage:add\", [\n",[192,828,829],{"class":194,"line":255},[192,830,788],{},[192,832,833],{"class":194,"line":278},[192,834,835],{}," \"cars\",\n",[192,837,838],{"class":194,"line":302},[192,839,798],{},[192,841,842],{"class":194,"line":422},[192,843,803],{},[178,845,847],{"id":846},"remove-an-unlock","Remove an Unlock",[183,849,851],{"className":763,"code":850,"language":765,"meta":188,"style":188},"\"forge_server\" callExtension [\"owned:locker:remove\", [\n getPlayerUID player,\n \"weapons\",\n \"arifle_MX_F\"\n]];\n\n\"forge_server\" callExtension [\"owned:garage:remove\", [\n getPlayerUID player,\n \"cars\",\n \"B_Quadbike_01_F\"\n]];\n",[159,852,853,858,862,866,871,875,879,884,888,893,899],{"__ignoreMap":188},[192,854,855],{"class":194,"line":195},[192,856,857],{},"\"forge_server\" callExtension [\"owned:locker:remove\", [\n",[192,859,860],{"class":194,"line":202},[192,861,788],{},[192,863,864],{"class":194,"line":232},[192,865,793],{},[192,867,868],{"class":194,"line":255},[192,869,870],{}," \"arifle_MX_F\"\n",[192,872,873],{"class":194,"line":278},[192,874,803],{},[192,876,877],{"class":194,"line":302},[192,878,778],{"emptyLinePlaceholder":777},[192,880,881],{"class":194,"line":422},[192,882,883],{},"\"forge_server\" callExtension [\"owned:garage:remove\", [\n",[192,885,886],{"class":194,"line":437},[192,887,788],{},[192,889,891],{"class":194,"line":890},9,[192,892,835],{},[192,894,896],{"class":194,"line":895},10,[192,897,898],{}," \"B_Quadbike_01_F\"\n",[192,900,902],{"class":194,"line":901},11,[192,903,803],{},[178,905,907],{"id":906},"hot-state-commands","Hot-State Commands",[155,909,910],{},"Both owned storage modules support hot state.",[155,912,913],{},"Owned locker:",[491,915,916,926],{},[494,917,918],{},[497,919,920,922,924],{},[500,921,502],{},[500,923,505],{},[500,925,508],{},[510,927,928,941,954,970,986,1000],{},[497,929,930,935,939],{},[515,931,932],{},[159,933,934],{},"owned:locker:hot:init",[515,936,937],{},[159,938,524],{},[515,940,527],{},[497,942,943,948,952],{},[515,944,945],{},[159,946,947],{},"owned:locker:hot:fetch",[515,949,950],{},[159,951,524],{},[515,953,527],{},[497,955,956,961,967],{},[515,957,958],{},[159,959,960],{},"owned:locker:hot:get",[515,962,963,552,965],{},[159,964,524],{},[159,966,555],{},[515,968,969],{},"Category array JSON.",[497,971,972,977,984],{},[515,973,974],{},[159,975,976],{},"owned:locker:hot:override",[515,978,979,552,981],{},[159,980,524],{},[159,982,983],{},"locker_json",[515,985,527],{},[497,987,988,993,997],{},[515,989,990],{},[159,991,992],{},"owned:locker:hot:save",[515,994,995],{},[159,996,524],{},[515,998,999],{},"Current hot owned locker JSON and async durable save.",[497,1001,1002,1007,1011],{},[515,1003,1004],{},[159,1005,1006],{},"owned:locker:hot:remove",[515,1008,1009],{},[159,1010,524],{},[515,1012,1013,482],{},[159,1014,611],{},[155,1016,1017],{},"Owned garage:",[491,1019,1020,1030],{},[494,1021,1022],{},[497,1023,1024,1026,1028],{},[500,1025,502],{},[500,1027,505],{},[500,1029,508],{},[510,1031,1032,1045,1058,1073,1089,1106,1123,1137],{},[497,1033,1034,1039,1043],{},[515,1035,1036],{},[159,1037,1038],{},"owned:garage:hot:init",[515,1040,1041],{},[159,1042,524],{},[515,1044,663],{},[497,1046,1047,1052,1056],{},[515,1048,1049],{},[159,1050,1051],{},"owned:garage:hot:fetch",[515,1053,1054],{},[159,1055,524],{},[515,1057,663],{},[497,1059,1060,1065,1071],{},[515,1061,1062],{},[159,1063,1064],{},"owned:garage:hot:get",[515,1066,1067,552,1069],{},[159,1068,524],{},[159,1070,555],{},[515,1072,969],{},[497,1074,1075,1080,1087],{},[515,1076,1077],{},[159,1078,1079],{},"owned:garage:hot:override",[515,1081,1082,552,1084],{},[159,1083,524],{},[159,1085,1086],{},"garage_json",[515,1088,663],{},[497,1090,1091,1096,1104],{},[515,1092,1093],{},[159,1094,1095],{},"owned:garage:hot:add",[515,1097,1098,552,1100,552,1102],{},[159,1099,524],{},[159,1101,555],{},[159,1103,574],{},[515,1105,577],{},[497,1107,1108,1113,1121],{},[515,1109,1110],{},[159,1111,1112],{},"owned:garage:hot:remove_item",[515,1114,1115,552,1117,552,1119],{},[159,1116,524],{},[159,1118,555],{},[159,1120,593],{},[515,1122,577],{},[497,1124,1125,1130,1134],{},[515,1126,1127],{},[159,1128,1129],{},"owned:garage:hot:save",[515,1131,1132],{},[159,1133,524],{},[515,1135,1136],{},"Current hot owned garage JSON and async durable save.",[497,1138,1139,1144,1148],{},[515,1140,1141],{},[159,1142,1143],{},"owned:garage:hot:remove",[515,1145,1146],{},[159,1147,524],{},[515,1149,1150,482],{},[159,1151,611],{},[178,1153,1155],{"id":1154},"error-handling","Error Handling",[183,1157,1159],{"className":763,"code":1158,"language":765,"meta":188,"style":188},"private _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Owned storage error: %1\", _payload];\n};\n",[159,1160,1161,1166,1171,1176],{"__ignoreMap":188},[192,1162,1163],{"class":194,"line":195},[192,1164,1165],{},"private _payload = _result select 0;\n",[192,1167,1168],{"class":194,"line":202},[192,1169,1170],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[192,1172,1173],{"class":194,"line":232},[192,1174,1175],{}," systemChat format [\"Owned storage error: %1\", _payload];\n",[192,1177,1178],{"class":194,"line":255},[192,1179,1180],{},"};\n",[1182,1183,1184],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":188,"searchDepth":202,"depth":202,"links":1186},[1187,1188,1189,1190,1191,1192,1193,1194,1195],{"id":180,"depth":202,"text":181},{"id":334,"depth":202,"text":335},{"id":488,"depth":202,"text":489},{"id":634,"depth":202,"text":635},{"id":759,"depth":202,"text":760},{"id":806,"depth":202,"text":807},{"id":846,"depth":202,"text":847},{"id":906,"depth":202,"text":907},{"id":1154,"depth":202,"text":1155},"Owned storage covers the owned:locker and owned:garage extension command\ngroups. These modules store unlock lists rather than physical item or vehicle\ninstances.","md",null,{},{"title":85,"description":1196},"nP0406Z4TVsnIwUqdf0Vek8hNgWLWl16LRWagO6eMP0",[1203,1205],{"title":81,"path":82,"stem":83,"description":1204,"children":-1},"The organization module stores organization records, members, assets, fleet\nentries, and credit lines. Durable commands manage persisted records directly.\nHot-state commands support the active organization UI workflows.",{"title":89,"path":90,"stem":91,"description":1206,"children":-1},"The phone module stores contacts, messages, and emails for each UID. It is a\nserver-extension state module backed by SurrealDB.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/phone.html b/docus/dist/server-modules/phone.html new file mode 100644 index 0000000..4c1b40e --- /dev/null +++ b/docus/dist/server-modules/phone.html @@ -0,0 +1,172 @@ +Phone Usage Guide - forge-docus
Server Modules

Phone Usage Guide

The phone module stores contacts, messages, and emails for each UID. It is a +server-extension state module backed by SurrealDB.

Phone Usage Guide

The phone module stores contacts, messages, and emails for each UID. It is a +server-extension state module backed by SurrealDB.

Storage Model

{
+  "contacts": ["76561198000000000", "field_commander"],
+  "messages": [
+    {
+      "id": "phone-message:sender:receiver:1",
+      "from": "sender",
+      "to": "receiver",
+      "message": "Text body",
+      "timestamp": 123.45,
+      "read": false
+    }
+  ],
+  "emails": [
+    {
+      "id": "phone-email:sender:receiver:2",
+      "from": "sender",
+      "to": "receiver",
+      "subject": "Subject",
+      "body": "Email body",
+      "timestamp": 123.45,
+      "read": false
+    }
+  ]
+}
+

Rules validated by the Rust service:

  • UID arguments cannot be empty.
  • Message and email bodies cannot be empty.
  • Empty email subjects become No subject.
  • Player messages and emails cannot target field_commander.
  • field_commander can send messages or emails to players.
  • Deleting a message or email removes it only from the requesting UID's index.

Commands

CommandArgumentsReturns
phone:inituidFull phone payload.
phone:contacts:listuidContact UID array.
phone:contacts:adduid, contact_uidtrue or false.
phone:contacts:removeuid, contact_uidtrue or false.
phone:messages:listuidMessage array.
phone:messages:threaduid, other_uidMessage array for both participants.
phone:messages:sendfrom_uid, to_uid, message, timestampMessage JSON.
phone:messages:mark_readuid, message_idtrue or false.
phone:messages:deleteuid, message_idtrue or false.
phone:emails:listuidEmail array.
phone:emails:sendfrom_uid, to_uid, subject, body, timestampEmail JSON.
phone:emails:mark_readuid, email_idtrue or false.
phone:emails:deleteuid, email_idtrue or false.
phone:removeuidOK.

Initialize Phone State

phone:init creates phone state if needed and seeds self-contact plus +field_commander.

private _result = "forge_server" callExtension ["phone:init", [getPlayerUID player]];
+private _payload = _result select 0;
+
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Phone init failed: %1", _payload];
+};
+
+private _phone = fromJSON _payload;
+

Send a Message

private _timestamp = str diag_tickTime;
+
+private _result = "forge_server" callExtension ["phone:messages:send", [
+    getPlayerUID player,
+    _targetUid,
+    "Move to checkpoint Alpha.",
+    _timestamp
+]];
+

Read a Conversation

private _result = "forge_server" callExtension ["phone:messages:thread", [
+    getPlayerUID player,
+    _otherUid
+]];
+
+private _messages = fromJSON (_result select 0);
+

Send an Email

private _result = "forge_server" callExtension ["phone:emails:send", [
+    getPlayerUID player,
+    _targetUid,
+    "Supply Request",
+    "Requesting resupply at grid 123456.",
+    str diag_tickTime
+]];
+

Mark and Delete Records

"forge_server" callExtension ["phone:messages:mark_read", [
+    getPlayerUID player,
+    _messageId
+]];
+
+"forge_server" callExtension ["phone:emails:delete", [
+    getPlayerUID player,
+    _emailId
+]];
+

Error Handling

private _payload = (_result select 0);
+if (_payload find "Error:" == 0) then {
+    systemChat format ["Phone error: %1", _payload];
+};
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/phone/_payload.json b/docus/dist/server-modules/phone/_payload.json new file mode 100644 index 0000000..06cb92f --- /dev/null +++ b/docus/dist/server-modules/phone/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1139},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-phone":145,"-server-modules-phone-surround":1134},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":89,"body":147,"description":157,"extension":1129,"links":1130,"meta":1131,"navigation":887,"path":90,"seo":1132,"stem":91,"__hash__":1133},"docs\u002F3.server-modules\u002F9.phone.md",{"type":148,"value":149,"toc":1119},"minimark",[150,154,158,163,540,543,573,577,855,859,866,913,917,961,965,997,1001,1038,1042,1087,1091,1115],[151,152,89],"h1",{"id":153},"phone-usage-guide",[155,156,157],"p",{},"The phone module stores contacts, messages, and emails for each UID. It is a\nserver-extension state module backed by SurrealDB.",[159,160,162],"h2",{"id":161},"storage-model","Storage Model",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"contacts\": [\"76561198000000000\", \"field_commander\"],\n \"messages\": [\n {\n \"id\": \"phone-message:sender:receiver:1\",\n \"from\": \"sender\",\n \"to\": \"receiver\",\n \"message\": \"Text body\",\n \"timestamp\": 123.45,\n \"read\": false\n }\n ],\n \"emails\": [\n {\n \"id\": \"phone-email:sender:receiver:2\",\n \"from\": \"sender\",\n \"to\": \"receiver\",\n \"subject\": \"Subject\",\n \"body\": \"Email body\",\n \"timestamp\": 123.45,\n \"read\": false\n }\n ]\n}\n","json","",[171,172,173,182,223,238,244,268,289,310,331,349,364,370,376,390,395,415,434,453,474,495,510,523,528,534],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,181],{"class":180},"sMK4o","{\n",[174,183,185,188,192,195,198,201,203,207,209,212,215,218,220],{"class":176,"line":184},2,[174,186,187],{"class":180}," \"",[174,189,191],{"class":190},"spNyl","contacts",[174,193,194],{"class":180},"\"",[174,196,197],{"class":180},":",[174,199,200],{"class":180}," [",[174,202,194],{"class":180},[174,204,206],{"class":205},"sfazB","76561198000000000",[174,208,194],{"class":180},[174,210,211],{"class":180},",",[174,213,214],{"class":180}," \"",[174,216,217],{"class":205},"field_commander",[174,219,194],{"class":180},[174,221,222],{"class":180},"],\n",[174,224,226,228,231,233,235],{"class":176,"line":225},3,[174,227,187],{"class":180},[174,229,230],{"class":190},"messages",[174,232,194],{"class":180},[174,234,197],{"class":180},[174,236,237],{"class":180}," [\n",[174,239,241],{"class":176,"line":240},4,[174,242,243],{"class":180}," {\n",[174,245,247,250,254,256,258,260,263,265],{"class":176,"line":246},5,[174,248,249],{"class":180}," \"",[174,251,253],{"class":252},"sBMFI","id",[174,255,194],{"class":180},[174,257,197],{"class":180},[174,259,214],{"class":180},[174,261,262],{"class":205},"phone-message:sender:receiver:1",[174,264,194],{"class":180},[174,266,267],{"class":180},",\n",[174,269,271,273,276,278,280,282,285,287],{"class":176,"line":270},6,[174,272,249],{"class":180},[174,274,275],{"class":252},"from",[174,277,194],{"class":180},[174,279,197],{"class":180},[174,281,214],{"class":180},[174,283,284],{"class":205},"sender",[174,286,194],{"class":180},[174,288,267],{"class":180},[174,290,292,294,297,299,301,303,306,308],{"class":176,"line":291},7,[174,293,249],{"class":180},[174,295,296],{"class":252},"to",[174,298,194],{"class":180},[174,300,197],{"class":180},[174,302,214],{"class":180},[174,304,305],{"class":205},"receiver",[174,307,194],{"class":180},[174,309,267],{"class":180},[174,311,313,315,318,320,322,324,327,329],{"class":176,"line":312},8,[174,314,249],{"class":180},[174,316,317],{"class":252},"message",[174,319,194],{"class":180},[174,321,197],{"class":180},[174,323,214],{"class":180},[174,325,326],{"class":205},"Text body",[174,328,194],{"class":180},[174,330,267],{"class":180},[174,332,334,336,339,341,343,347],{"class":176,"line":333},9,[174,335,249],{"class":180},[174,337,338],{"class":252},"timestamp",[174,340,194],{"class":180},[174,342,197],{"class":180},[174,344,346],{"class":345},"sbssI"," 123.45",[174,348,267],{"class":180},[174,350,352,354,357,359,361],{"class":176,"line":351},10,[174,353,249],{"class":180},[174,355,356],{"class":252},"read",[174,358,194],{"class":180},[174,360,197],{"class":180},[174,362,363],{"class":180}," false\n",[174,365,367],{"class":176,"line":366},11,[174,368,369],{"class":180}," }\n",[174,371,373],{"class":176,"line":372},12,[174,374,375],{"class":180}," ],\n",[174,377,379,381,384,386,388],{"class":176,"line":378},13,[174,380,187],{"class":180},[174,382,383],{"class":190},"emails",[174,385,194],{"class":180},[174,387,197],{"class":180},[174,389,237],{"class":180},[174,391,393],{"class":176,"line":392},14,[174,394,243],{"class":180},[174,396,398,400,402,404,406,408,411,413],{"class":176,"line":397},15,[174,399,249],{"class":180},[174,401,253],{"class":252},[174,403,194],{"class":180},[174,405,197],{"class":180},[174,407,214],{"class":180},[174,409,410],{"class":205},"phone-email:sender:receiver:2",[174,412,194],{"class":180},[174,414,267],{"class":180},[174,416,418,420,422,424,426,428,430,432],{"class":176,"line":417},16,[174,419,249],{"class":180},[174,421,275],{"class":252},[174,423,194],{"class":180},[174,425,197],{"class":180},[174,427,214],{"class":180},[174,429,284],{"class":205},[174,431,194],{"class":180},[174,433,267],{"class":180},[174,435,437,439,441,443,445,447,449,451],{"class":176,"line":436},17,[174,438,249],{"class":180},[174,440,296],{"class":252},[174,442,194],{"class":180},[174,444,197],{"class":180},[174,446,214],{"class":180},[174,448,305],{"class":205},[174,450,194],{"class":180},[174,452,267],{"class":180},[174,454,456,458,461,463,465,467,470,472],{"class":176,"line":455},18,[174,457,249],{"class":180},[174,459,460],{"class":252},"subject",[174,462,194],{"class":180},[174,464,197],{"class":180},[174,466,214],{"class":180},[174,468,469],{"class":205},"Subject",[174,471,194],{"class":180},[174,473,267],{"class":180},[174,475,477,479,482,484,486,488,491,493],{"class":176,"line":476},19,[174,478,249],{"class":180},[174,480,481],{"class":252},"body",[174,483,194],{"class":180},[174,485,197],{"class":180},[174,487,214],{"class":180},[174,489,490],{"class":205},"Email body",[174,492,194],{"class":180},[174,494,267],{"class":180},[174,496,498,500,502,504,506,508],{"class":176,"line":497},20,[174,499,249],{"class":180},[174,501,338],{"class":252},[174,503,194],{"class":180},[174,505,197],{"class":180},[174,507,346],{"class":345},[174,509,267],{"class":180},[174,511,513,515,517,519,521],{"class":176,"line":512},21,[174,514,249],{"class":180},[174,516,356],{"class":252},[174,518,194],{"class":180},[174,520,197],{"class":180},[174,522,363],{"class":180},[174,524,526],{"class":176,"line":525},22,[174,527,369],{"class":180},[174,529,531],{"class":176,"line":530},23,[174,532,533],{"class":180}," ]\n",[174,535,537],{"class":176,"line":536},24,[174,538,539],{"class":180},"}\n",[155,541,542],{},"Rules validated by the Rust service:",[544,545,546,550,553,560,565,570],"ul",{},[547,548,549],"li",{},"UID arguments cannot be empty.",[547,551,552],{},"Message and email bodies cannot be empty.",[547,554,555,556,559],{},"Empty email subjects become ",[171,557,558],{},"No subject",".",[547,561,562,563,559],{},"Player messages and emails cannot target ",[171,564,217],{},[547,566,567,569],{},[171,568,217],{}," can send messages or emails to players.",[547,571,572],{},"Deleting a message or email removes it only from the requesting UID's index.",[159,574,576],{"id":575},"commands","Commands",[578,579,580,596],"table",{},[581,582,583],"thead",{},[584,585,586,590,593],"tr",{},[587,588,589],"th",{},"Command",[587,591,592],{},"Arguments",[587,594,595],{},"Returns",[597,598,599,615,629,653,672,686,703,725,745,764,778,800,820,839],"tbody",{},[584,600,601,607,612],{},[602,603,604],"td",{},[171,605,606],{},"phone:init",[602,608,609],{},[171,610,611],{},"uid",[602,613,614],{},"Full phone payload.",[584,616,617,622,626],{},[602,618,619],{},[171,620,621],{},"phone:contacts:list",[602,623,624],{},[171,625,611],{},[602,627,628],{},"Contact UID array.",[584,630,631,636,644],{},[602,632,633],{},[171,634,635],{},"phone:contacts:add",[602,637,638,640,641],{},[171,639,611],{},", ",[171,642,643],{},"contact_uid",[602,645,646,649,650,559],{},[171,647,648],{},"true"," or ",[171,651,652],{},"false",[584,654,655,660,666],{},[602,656,657],{},[171,658,659],{},"phone:contacts:remove",[602,661,662,640,664],{},[171,663,611],{},[171,665,643],{},[602,667,668,649,670,559],{},[171,669,648],{},[171,671,652],{},[584,673,674,679,683],{},[602,675,676],{},[171,677,678],{},"phone:messages:list",[602,680,681],{},[171,682,611],{},[602,684,685],{},"Message array.",[584,687,688,693,700],{},[602,689,690],{},[171,691,692],{},"phone:messages:thread",[602,694,695,640,697],{},[171,696,611],{},[171,698,699],{},"other_uid",[602,701,702],{},"Message array for both participants.",[584,704,705,710,722],{},[602,706,707],{},[171,708,709],{},"phone:messages:send",[602,711,712,640,715,640,718,640,720],{},[171,713,714],{},"from_uid",[171,716,717],{},"to_uid",[171,719,317],{},[171,721,338],{},[602,723,724],{},"Message JSON.",[584,726,727,732,739],{},[602,728,729],{},[171,730,731],{},"phone:messages:mark_read",[602,733,734,640,736],{},[171,735,611],{},[171,737,738],{},"message_id",[602,740,741,649,743,559],{},[171,742,648],{},[171,744,652],{},[584,746,747,752,758],{},[602,748,749],{},[171,750,751],{},"phone:messages:delete",[602,753,754,640,756],{},[171,755,611],{},[171,757,738],{},[602,759,760,649,762,559],{},[171,761,648],{},[171,763,652],{},[584,765,766,771,775],{},[602,767,768],{},[171,769,770],{},"phone:emails:list",[602,772,773],{},[171,774,611],{},[602,776,777],{},"Email array.",[584,779,780,785,797],{},[602,781,782],{},[171,783,784],{},"phone:emails:send",[602,786,787,640,789,640,791,640,793,640,795],{},[171,788,714],{},[171,790,717],{},[171,792,460],{},[171,794,481],{},[171,796,338],{},[602,798,799],{},"Email JSON.",[584,801,802,807,814],{},[602,803,804],{},[171,805,806],{},"phone:emails:mark_read",[602,808,809,640,811],{},[171,810,611],{},[171,812,813],{},"email_id",[602,815,816,649,818,559],{},[171,817,648],{},[171,819,652],{},[584,821,822,827,833],{},[602,823,824],{},[171,825,826],{},"phone:emails:delete",[602,828,829,640,831],{},[171,830,611],{},[171,832,813],{},[602,834,835,649,837,559],{},[171,836,648],{},[171,838,652],{},[584,840,841,846,850],{},[602,842,843],{},[171,844,845],{},"phone:remove",[602,847,848],{},[171,849,611],{},[602,851,852,559],{},[171,853,854],{},"OK",[159,856,858],{"id":857},"initialize-phone-state","Initialize Phone State",[155,860,861,863,864,559],{},[171,862,606],{}," creates phone state if needed and seeds self-contact plus\n",[171,865,217],{},[164,867,871],{"className":868,"code":869,"language":870,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _result = \"forge_server\" callExtension [\"phone:init\", [getPlayerUID player]];\nprivate _payload = _result select 0;\n\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Phone init failed: %1\", _payload];\n};\n\nprivate _phone = fromJSON _payload;\n","sqf",[171,872,873,878,883,889,894,899,904,908],{"__ignoreMap":169},[174,874,875],{"class":176,"line":177},[174,876,877],{},"private _result = \"forge_server\" callExtension [\"phone:init\", [getPlayerUID player]];\n",[174,879,880],{"class":176,"line":184},[174,881,882],{},"private _payload = _result select 0;\n",[174,884,885],{"class":176,"line":225},[174,886,888],{"emptyLinePlaceholder":887},true,"\n",[174,890,891],{"class":176,"line":240},[174,892,893],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[174,895,896],{"class":176,"line":246},[174,897,898],{}," systemChat format [\"Phone init failed: %1\", _payload];\n",[174,900,901],{"class":176,"line":270},[174,902,903],{},"};\n",[174,905,906],{"class":176,"line":291},[174,907,888],{"emptyLinePlaceholder":887},[174,909,910],{"class":176,"line":312},[174,911,912],{},"private _phone = fromJSON _payload;\n",[159,914,916],{"id":915},"send-a-message","Send a Message",[164,918,920],{"className":868,"code":919,"language":870,"meta":169,"style":169},"private _timestamp = str diag_tickTime;\n\nprivate _result = \"forge_server\" callExtension [\"phone:messages:send\", [\n getPlayerUID player,\n _targetUid,\n \"Move to checkpoint Alpha.\",\n _timestamp\n]];\n",[171,921,922,927,931,936,941,946,951,956],{"__ignoreMap":169},[174,923,924],{"class":176,"line":177},[174,925,926],{},"private _timestamp = str diag_tickTime;\n",[174,928,929],{"class":176,"line":184},[174,930,888],{"emptyLinePlaceholder":887},[174,932,933],{"class":176,"line":225},[174,934,935],{},"private _result = \"forge_server\" callExtension [\"phone:messages:send\", [\n",[174,937,938],{"class":176,"line":240},[174,939,940],{}," getPlayerUID player,\n",[174,942,943],{"class":176,"line":246},[174,944,945],{}," _targetUid,\n",[174,947,948],{"class":176,"line":270},[174,949,950],{}," \"Move to checkpoint Alpha.\",\n",[174,952,953],{"class":176,"line":291},[174,954,955],{}," _timestamp\n",[174,957,958],{"class":176,"line":312},[174,959,960],{},"]];\n",[159,962,964],{"id":963},"read-a-conversation","Read a Conversation",[164,966,968],{"className":868,"code":967,"language":870,"meta":169,"style":169},"private _result = \"forge_server\" callExtension [\"phone:messages:thread\", [\n getPlayerUID player,\n _otherUid\n]];\n\nprivate _messages = fromJSON (_result select 0);\n",[171,969,970,975,979,984,988,992],{"__ignoreMap":169},[174,971,972],{"class":176,"line":177},[174,973,974],{},"private _result = \"forge_server\" callExtension [\"phone:messages:thread\", [\n",[174,976,977],{"class":176,"line":184},[174,978,940],{},[174,980,981],{"class":176,"line":225},[174,982,983],{}," _otherUid\n",[174,985,986],{"class":176,"line":240},[174,987,960],{},[174,989,990],{"class":176,"line":246},[174,991,888],{"emptyLinePlaceholder":887},[174,993,994],{"class":176,"line":270},[174,995,996],{},"private _messages = fromJSON (_result select 0);\n",[159,998,1000],{"id":999},"send-an-email","Send an Email",[164,1002,1004],{"className":868,"code":1003,"language":870,"meta":169,"style":169},"private _result = \"forge_server\" callExtension [\"phone:emails:send\", [\n getPlayerUID player,\n _targetUid,\n \"Supply Request\",\n \"Requesting resupply at grid 123456.\",\n str diag_tickTime\n]];\n",[171,1005,1006,1011,1015,1019,1024,1029,1034],{"__ignoreMap":169},[174,1007,1008],{"class":176,"line":177},[174,1009,1010],{},"private _result = \"forge_server\" callExtension [\"phone:emails:send\", [\n",[174,1012,1013],{"class":176,"line":184},[174,1014,940],{},[174,1016,1017],{"class":176,"line":225},[174,1018,945],{},[174,1020,1021],{"class":176,"line":240},[174,1022,1023],{}," \"Supply Request\",\n",[174,1025,1026],{"class":176,"line":246},[174,1027,1028],{}," \"Requesting resupply at grid 123456.\",\n",[174,1030,1031],{"class":176,"line":270},[174,1032,1033],{}," str diag_tickTime\n",[174,1035,1036],{"class":176,"line":291},[174,1037,960],{},[159,1039,1041],{"id":1040},"mark-and-delete-records","Mark and Delete Records",[164,1043,1045],{"className":868,"code":1044,"language":870,"meta":169,"style":169},"\"forge_server\" callExtension [\"phone:messages:mark_read\", [\n getPlayerUID player,\n _messageId\n]];\n\n\"forge_server\" callExtension [\"phone:emails:delete\", [\n getPlayerUID player,\n _emailId\n]];\n",[171,1046,1047,1052,1056,1061,1065,1069,1074,1078,1083],{"__ignoreMap":169},[174,1048,1049],{"class":176,"line":177},[174,1050,1051],{},"\"forge_server\" callExtension [\"phone:messages:mark_read\", [\n",[174,1053,1054],{"class":176,"line":184},[174,1055,940],{},[174,1057,1058],{"class":176,"line":225},[174,1059,1060],{}," _messageId\n",[174,1062,1063],{"class":176,"line":240},[174,1064,960],{},[174,1066,1067],{"class":176,"line":246},[174,1068,888],{"emptyLinePlaceholder":887},[174,1070,1071],{"class":176,"line":270},[174,1072,1073],{},"\"forge_server\" callExtension [\"phone:emails:delete\", [\n",[174,1075,1076],{"class":176,"line":291},[174,1077,940],{},[174,1079,1080],{"class":176,"line":312},[174,1081,1082],{}," _emailId\n",[174,1084,1085],{"class":176,"line":333},[174,1086,960],{},[159,1088,1090],{"id":1089},"error-handling","Error Handling",[164,1092,1094],{"className":868,"code":1093,"language":870,"meta":169,"style":169},"private _payload = (_result select 0);\nif (_payload find \"Error:\" == 0) then {\n systemChat format [\"Phone error: %1\", _payload];\n};\n",[171,1095,1096,1101,1106,1111],{"__ignoreMap":169},[174,1097,1098],{"class":176,"line":177},[174,1099,1100],{},"private _payload = (_result select 0);\n",[174,1102,1103],{"class":176,"line":184},[174,1104,1105],{},"if (_payload find \"Error:\" == 0) then {\n",[174,1107,1108],{"class":176,"line":225},[174,1109,1110],{}," systemChat format [\"Phone error: %1\", _payload];\n",[174,1112,1113],{"class":176,"line":240},[174,1114,903],{},[1116,1117,1118],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":169,"searchDepth":184,"depth":184,"links":1120},[1121,1122,1123,1124,1125,1126,1127,1128],{"id":161,"depth":184,"text":162},{"id":575,"depth":184,"text":576},{"id":857,"depth":184,"text":858},{"id":915,"depth":184,"text":916},{"id":963,"depth":184,"text":964},{"id":999,"depth":184,"text":1000},{"id":1040,"depth":184,"text":1041},{"id":1089,"depth":184,"text":1090},"md",null,{},{"title":89,"description":157},"elJIYhe9Y4PRTMP0qH-9WZBe1BS2fDPtsEpKldSRzNI",[1135,1137],{"title":85,"path":86,"stem":87,"description":1136,"children":-1},"Owned storage covers the owned:locker and owned:garage extension command\ngroups. These modules store unlock lists rather than physical item or vehicle\ninstances.",{"title":99,"path":95,"stem":96,"description":1138,"children":-1},"Forge Client contains the Arma client-side addons that open player interfaces,\nhandle browser events, cache client-visible state, and forward authoritative\nrequests to the server addons.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/store.html b/docus/dist/server-modules/store.html new file mode 100644 index 0000000..6561b07 --- /dev/null +++ b/docus/dist/server-modules/store.html @@ -0,0 +1,198 @@ +Store Usage Guide - forge-docus
Server Modules

Store Usage Guide

The store module processes checkout requests. It charges a payment source and +grants purchased items to the player locker, virtual arsenal locker, and +virtual garage unlocks.

Store Usage Guide

The store module processes checkout requests. It charges a payment source and +grants purchased items to the player locker, virtual arsenal locker, and +virtual garage unlocks.

Server SQF Module

The server addon uses two long-lived module objects:

  • StorefrontStore is the storefront workflow facade. It builds hydrate +payloads, validates checkout requests, calls the Rust store:checkout +command, syncs UI patches, and asks related module stores to save hot state.
  • StoreCatalogService scans configured item and vehicle categories, builds +catalog responses, resolves checkout entries, and calculates authoritative +prices.

Editor-placed store entities are initialized by fnc_initStore during store +post-init. The initializer matches non-null mission namespace objects whose +variable names contain store and sets isStore = true, following the same +pattern used by garage entities.

Checkout Model

store:checkout accepts one JSON context.

{
+  "requesterUid": "76561198000000000",
+  "requesterName": "Player Name",
+  "orgId": "default",
+  "requesterIsDefaultOrgCeo": false,
+  "paymentMethod": "bank",
+  "items": [
+    {
+      "classname": "arifle_MX_F",
+      "category": "weapon",
+      "priceValue": 500,
+      "quantity": 1
+    }
+  ],
+  "vehicles": [
+    {
+      "classname": "B_Quadbike_01_F",
+      "category": "cars",
+      "priceValue": 1500
+    }
+  ]
+}
+

Rules validated by the Rust service:

  • requesterUid is required.
  • At least one item or vehicle is required.
  • The checkout total must be greater than zero.
  • Item categories must be item, attachment, weapon, magazine, or +backpack.
  • Vehicle categories must be cars, armor, helis, planes, naval, or +other.
  • Payment method must be cash, bank, org_funds, or credit_line.
  • Player locker capacity cannot exceed 25 unique items after checkout.
  • Organization funds can only be charged by the org owner or the default org +CEO flag.

Command

CommandArgumentsReturns
store:checkoutcheckout_jsonCheckout result JSON.

Result Model

{
+  "chargedTotal": 2000.0,
+  "paymentMethod": "bank",
+  "message": "Checkout completed. $2,000 charged, 1 locker grant(s), 1 vehicle unlock(s).",
+  "lockerGranted": [],
+  "vehicleGranted": [],
+  "lockerPatch": {},
+  "vaPatch": {},
+  "vgaragePatch": {},
+  "bankPatch": {},
+  "orgPatch": {},
+  "orgTargetUids": []
+}
+

Patch fields are intended for UI updates after checkout. The service commits +all grants and payment changes together, and attempts rollback if a later write +fails.

Player Bank Checkout

private _item = createHashMapFromArray [
+    ["classname", "arifle_MX_F"],
+    ["category", "weapon"],
+    ["priceValue", 500],
+    ["quantity", 1]
+];
+
+private _checkout = createHashMapFromArray [
+    ["requesterUid", getPlayerUID player],
+    ["requesterName", name player],
+    ["orgId", "default"],
+    ["requesterIsDefaultOrgCeo", false],
+    ["paymentMethod", "bank"],
+    ["items", [_item]],
+    ["vehicles", []]
+];
+
+private _result = "forge_server" callExtension ["store:checkout", [toJSON _checkout]];
+

Organization Funds Checkout

When paymentMethod is org_funds, vehicles are also added to the +organization fleet patch.

private _vehicle = createHashMapFromArray [
+    ["classname", "B_Quadbike_01_F"],
+    ["category", "cars"],
+    ["priceValue", 1500]
+];
+
+private _checkout = createHashMapFromArray [
+    ["requesterUid", getPlayerUID player],
+    ["requesterName", name player],
+    ["orgId", _orgId],
+    ["requesterIsDefaultOrgCeo", false],
+    ["paymentMethod", "org_funds"],
+    ["items", []],
+    ["vehicles", [_vehicle]]
+];
+
+private _result = "forge_server" callExtension ["store:checkout", [toJSON _checkout]];
+

Error Handling

private _payload = _result select 0;
+if (_payload find "Error:" == 0) exitWith {
+    hint format ["Checkout failed: %1", _payload];
+};
+
+private _checkoutResult = fromJSON _payload;
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/store/_payload.json b/docus/dist/server-modules/store/_payload.json new file mode 100644 index 0000000..c732bc6 --- /dev/null +++ b/docus/dist/server-modules/store/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1088},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-store":145,"-server-modules-store-surround":1083},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":53,"body":147,"description":157,"extension":1078,"links":1079,"meta":1080,"navigation":878,"path":54,"seo":1081,"stem":55,"__hash__":1082},"docs\u002F3.server-modules\u002F10.store.md",{"type":148,"value":149,"toc":1069},"minimark",[150,154,158,163,166,187,202,206,211,535,538,612,616,652,656,830,833,837,933,937,946,1027,1031,1065],[151,152,53],"h1",{"id":153},"store-usage-guide",[155,156,157],"p",{},"The store module processes checkout requests. It charges a payment source and\ngrants purchased items to the player locker, virtual arsenal locker, and\nvirtual garage unlocks.",[159,160,162],"h2",{"id":161},"server-sqf-module","Server SQF Module",[155,164,165],{},"The server addon uses two long-lived module objects:",[167,168,169,181],"ul",{},[170,171,172,176,177,180],"li",{},[173,174,175],"code",{},"StorefrontStore"," is the storefront workflow facade. It builds hydrate\npayloads, validates checkout requests, calls the Rust ",[173,178,179],{},"store:checkout","\ncommand, syncs UI patches, and asks related module stores to save hot state.",[170,182,183,186],{},[173,184,185],{},"StoreCatalogService"," scans configured item and vehicle categories, builds\ncatalog responses, resolves checkout entries, and calculates authoritative\nprices.",[155,188,189,190,193,194,197,198,201],{},"Editor-placed store entities are initialized by ",[173,191,192],{},"fnc_initStore"," during store\npost-init. The initializer matches non-null mission namespace objects whose\nvariable names contain ",[173,195,196],{},"store"," and sets ",[173,199,200],{},"isStore = true",", following the same\npattern used by garage entities.",[159,203,205],{"id":204},"checkout-model","Checkout Model",[155,207,208,210],{},[173,209,179],{}," accepts one JSON context.",[212,213,218],"pre",{"className":214,"code":215,"language":216,"meta":217,"style":217},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"requesterUid\": \"76561198000000000\",\n \"requesterName\": \"Player Name\",\n \"orgId\": \"default\",\n \"requesterIsDefaultOrgCeo\": false,\n \"paymentMethod\": \"bank\",\n \"items\": [\n {\n \"classname\": \"arifle_MX_F\",\n \"category\": \"weapon\",\n \"priceValue\": 500,\n \"quantity\": 1\n }\n ],\n \"vehicles\": [\n {\n \"classname\": \"B_Quadbike_01_F\",\n \"category\": \"cars\",\n \"priceValue\": 1500\n }\n ]\n}\n","json","",[173,219,220,229,257,278,299,314,335,350,356,379,400,418,433,439,445,459,464,484,504,518,523,529],{"__ignoreMap":217},[221,222,225],"span",{"class":223,"line":224},"line",1,[221,226,228],{"class":227},"sMK4o","{\n",[221,230,232,235,239,242,245,248,252,254],{"class":223,"line":231},2,[221,233,234],{"class":227}," \"",[221,236,238],{"class":237},"spNyl","requesterUid",[221,240,241],{"class":227},"\"",[221,243,244],{"class":227},":",[221,246,247],{"class":227}," \"",[221,249,251],{"class":250},"sfazB","76561198000000000",[221,253,241],{"class":227},[221,255,256],{"class":227},",\n",[221,258,260,262,265,267,269,271,274,276],{"class":223,"line":259},3,[221,261,234],{"class":227},[221,263,264],{"class":237},"requesterName",[221,266,241],{"class":227},[221,268,244],{"class":227},[221,270,247],{"class":227},[221,272,273],{"class":250},"Player Name",[221,275,241],{"class":227},[221,277,256],{"class":227},[221,279,281,283,286,288,290,292,295,297],{"class":223,"line":280},4,[221,282,234],{"class":227},[221,284,285],{"class":237},"orgId",[221,287,241],{"class":227},[221,289,244],{"class":227},[221,291,247],{"class":227},[221,293,294],{"class":250},"default",[221,296,241],{"class":227},[221,298,256],{"class":227},[221,300,302,304,307,309,311],{"class":223,"line":301},5,[221,303,234],{"class":227},[221,305,306],{"class":237},"requesterIsDefaultOrgCeo",[221,308,241],{"class":227},[221,310,244],{"class":227},[221,312,313],{"class":227}," false,\n",[221,315,317,319,322,324,326,328,331,333],{"class":223,"line":316},6,[221,318,234],{"class":227},[221,320,321],{"class":237},"paymentMethod",[221,323,241],{"class":227},[221,325,244],{"class":227},[221,327,247],{"class":227},[221,329,330],{"class":250},"bank",[221,332,241],{"class":227},[221,334,256],{"class":227},[221,336,338,340,343,345,347],{"class":223,"line":337},7,[221,339,234],{"class":227},[221,341,342],{"class":237},"items",[221,344,241],{"class":227},[221,346,244],{"class":227},[221,348,349],{"class":227}," [\n",[221,351,353],{"class":223,"line":352},8,[221,354,355],{"class":227}," {\n",[221,357,359,362,366,368,370,372,375,377],{"class":223,"line":358},9,[221,360,361],{"class":227}," \"",[221,363,365],{"class":364},"sBMFI","classname",[221,367,241],{"class":227},[221,369,244],{"class":227},[221,371,247],{"class":227},[221,373,374],{"class":250},"arifle_MX_F",[221,376,241],{"class":227},[221,378,256],{"class":227},[221,380,382,384,387,389,391,393,396,398],{"class":223,"line":381},10,[221,383,361],{"class":227},[221,385,386],{"class":364},"category",[221,388,241],{"class":227},[221,390,244],{"class":227},[221,392,247],{"class":227},[221,394,395],{"class":250},"weapon",[221,397,241],{"class":227},[221,399,256],{"class":227},[221,401,403,405,408,410,412,416],{"class":223,"line":402},11,[221,404,361],{"class":227},[221,406,407],{"class":364},"priceValue",[221,409,241],{"class":227},[221,411,244],{"class":227},[221,413,415],{"class":414},"sbssI"," 500",[221,417,256],{"class":227},[221,419,421,423,426,428,430],{"class":223,"line":420},12,[221,422,361],{"class":227},[221,424,425],{"class":364},"quantity",[221,427,241],{"class":227},[221,429,244],{"class":227},[221,431,432],{"class":414}," 1\n",[221,434,436],{"class":223,"line":435},13,[221,437,438],{"class":227}," }\n",[221,440,442],{"class":223,"line":441},14,[221,443,444],{"class":227}," ],\n",[221,446,448,450,453,455,457],{"class":223,"line":447},15,[221,449,234],{"class":227},[221,451,452],{"class":237},"vehicles",[221,454,241],{"class":227},[221,456,244],{"class":227},[221,458,349],{"class":227},[221,460,462],{"class":223,"line":461},16,[221,463,355],{"class":227},[221,465,467,469,471,473,475,477,480,482],{"class":223,"line":466},17,[221,468,361],{"class":227},[221,470,365],{"class":364},[221,472,241],{"class":227},[221,474,244],{"class":227},[221,476,247],{"class":227},[221,478,479],{"class":250},"B_Quadbike_01_F",[221,481,241],{"class":227},[221,483,256],{"class":227},[221,485,487,489,491,493,495,497,500,502],{"class":223,"line":486},18,[221,488,361],{"class":227},[221,490,386],{"class":364},[221,492,241],{"class":227},[221,494,244],{"class":227},[221,496,247],{"class":227},[221,498,499],{"class":250},"cars",[221,501,241],{"class":227},[221,503,256],{"class":227},[221,505,507,509,511,513,515],{"class":223,"line":506},19,[221,508,361],{"class":227},[221,510,407],{"class":364},[221,512,241],{"class":227},[221,514,244],{"class":227},[221,516,517],{"class":414}," 1500\n",[221,519,521],{"class":223,"line":520},20,[221,522,438],{"class":227},[221,524,526],{"class":223,"line":525},21,[221,527,528],{"class":227}," ]\n",[221,530,532],{"class":223,"line":531},22,[221,533,534],{"class":227},"}\n",[155,536,537],{},"Rules validated by the Rust service:",[167,539,540,545,548,551,571,591,606,609],{},[170,541,542,544],{},[173,543,238],{}," is required.",[170,546,547],{},"At least one item or vehicle is required.",[170,549,550],{},"The checkout total must be greater than zero.",[170,552,553,554,557,558,557,561,557,563,566,567,570],{},"Item categories must be ",[173,555,556],{},"item",", ",[173,559,560],{},"attachment",[173,562,395],{},[173,564,565],{},"magazine",", or\n",[173,568,569],{},"backpack",".",[170,572,573,574,557,576,557,579,557,582,557,585,566,588,570],{},"Vehicle categories must be ",[173,575,499],{},[173,577,578],{},"armor",[173,580,581],{},"helis",[173,583,584],{},"planes",[173,586,587],{},"naval",[173,589,590],{},"other",[170,592,593,594,557,597,557,599,602,603,570],{},"Payment method must be ",[173,595,596],{},"cash",[173,598,330],{},[173,600,601],{},"org_funds",", or ",[173,604,605],{},"credit_line",[170,607,608],{},"Player locker capacity cannot exceed 25 unique items after checkout.",[170,610,611],{},"Organization funds can only be charged by the org owner or the default org\nCEO flag.",[159,613,615],{"id":614},"command","Command",[617,618,619,634],"table",{},[620,621,622],"thead",{},[623,624,625,628,631],"tr",{},[626,627,615],"th",{},[626,629,630],{},"Arguments",[626,632,633],{},"Returns",[635,636,637],"tbody",{},[623,638,639,644,649],{},[640,641,642],"td",{},[173,643,179],{},[640,645,646],{},[173,647,648],{},"checkout_json",[640,650,651],{},"Checkout result JSON.",[159,653,655],{"id":654},"result-model","Result Model",[212,657,659],{"className":214,"code":658,"language":216,"meta":217,"style":217},"{\n \"chargedTotal\": 2000.0,\n \"paymentMethod\": \"bank\",\n \"message\": \"Checkout completed. $2,000 charged, 1 locker grant(s), 1 vehicle unlock(s).\",\n \"lockerGranted\": [],\n \"vehicleGranted\": [],\n \"lockerPatch\": {},\n \"vaPatch\": {},\n \"vgaragePatch\": {},\n \"bankPatch\": {},\n \"orgPatch\": {},\n \"orgTargetUids\": []\n}\n",[173,660,661,665,681,699,719,733,746,760,773,786,799,812,826],{"__ignoreMap":217},[221,662,663],{"class":223,"line":224},[221,664,228],{"class":227},[221,666,667,669,672,674,676,679],{"class":223,"line":231},[221,668,234],{"class":227},[221,670,671],{"class":237},"chargedTotal",[221,673,241],{"class":227},[221,675,244],{"class":227},[221,677,678],{"class":414}," 2000.0",[221,680,256],{"class":227},[221,682,683,685,687,689,691,693,695,697],{"class":223,"line":259},[221,684,234],{"class":227},[221,686,321],{"class":237},[221,688,241],{"class":227},[221,690,244],{"class":227},[221,692,247],{"class":227},[221,694,330],{"class":250},[221,696,241],{"class":227},[221,698,256],{"class":227},[221,700,701,703,706,708,710,712,715,717],{"class":223,"line":280},[221,702,234],{"class":227},[221,704,705],{"class":237},"message",[221,707,241],{"class":227},[221,709,244],{"class":227},[221,711,247],{"class":227},[221,713,714],{"class":250},"Checkout completed. $2,000 charged, 1 locker grant(s), 1 vehicle unlock(s).",[221,716,241],{"class":227},[221,718,256],{"class":227},[221,720,721,723,726,728,730],{"class":223,"line":301},[221,722,234],{"class":227},[221,724,725],{"class":237},"lockerGranted",[221,727,241],{"class":227},[221,729,244],{"class":227},[221,731,732],{"class":227}," [],\n",[221,734,735,737,740,742,744],{"class":223,"line":316},[221,736,234],{"class":227},[221,738,739],{"class":237},"vehicleGranted",[221,741,241],{"class":227},[221,743,244],{"class":227},[221,745,732],{"class":227},[221,747,748,750,753,755,757],{"class":223,"line":337},[221,749,234],{"class":227},[221,751,752],{"class":237},"lockerPatch",[221,754,241],{"class":227},[221,756,244],{"class":227},[221,758,759],{"class":227}," {},\n",[221,761,762,764,767,769,771],{"class":223,"line":352},[221,763,234],{"class":227},[221,765,766],{"class":237},"vaPatch",[221,768,241],{"class":227},[221,770,244],{"class":227},[221,772,759],{"class":227},[221,774,775,777,780,782,784],{"class":223,"line":358},[221,776,234],{"class":227},[221,778,779],{"class":237},"vgaragePatch",[221,781,241],{"class":227},[221,783,244],{"class":227},[221,785,759],{"class":227},[221,787,788,790,793,795,797],{"class":223,"line":381},[221,789,234],{"class":227},[221,791,792],{"class":237},"bankPatch",[221,794,241],{"class":227},[221,796,244],{"class":227},[221,798,759],{"class":227},[221,800,801,803,806,808,810],{"class":223,"line":402},[221,802,234],{"class":227},[221,804,805],{"class":237},"orgPatch",[221,807,241],{"class":227},[221,809,244],{"class":227},[221,811,759],{"class":227},[221,813,814,816,819,821,823],{"class":223,"line":420},[221,815,234],{"class":227},[221,817,818],{"class":237},"orgTargetUids",[221,820,241],{"class":227},[221,822,244],{"class":227},[221,824,825],{"class":227}," []\n",[221,827,828],{"class":223,"line":435},[221,829,534],{"class":227},[155,831,832],{},"Patch fields are intended for UI updates after checkout. The service commits\nall grants and payment changes together, and attempts rollback if a later write\nfails.",[159,834,836],{"id":835},"player-bank-checkout","Player Bank Checkout",[212,838,842],{"className":839,"code":840,"language":841,"meta":217,"style":217},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _item = createHashMapFromArray [\n [\"classname\", \"arifle_MX_F\"],\n [\"category\", \"weapon\"],\n [\"priceValue\", 500],\n [\"quantity\", 1]\n];\n\nprivate _checkout = createHashMapFromArray [\n [\"requesterUid\", getPlayerUID player],\n [\"requesterName\", name player],\n [\"orgId\", \"default\"],\n [\"requesterIsDefaultOrgCeo\", false],\n [\"paymentMethod\", \"bank\"],\n [\"items\", [_item]],\n [\"vehicles\", []]\n];\n\nprivate _result = \"forge_server\" callExtension [\"store:checkout\", [toJSON _checkout]];\n","sqf",[173,843,844,849,854,859,864,869,874,880,885,890,895,900,905,910,915,920,924,928],{"__ignoreMap":217},[221,845,846],{"class":223,"line":224},[221,847,848],{},"private _item = createHashMapFromArray [\n",[221,850,851],{"class":223,"line":231},[221,852,853],{}," [\"classname\", \"arifle_MX_F\"],\n",[221,855,856],{"class":223,"line":259},[221,857,858],{}," [\"category\", \"weapon\"],\n",[221,860,861],{"class":223,"line":280},[221,862,863],{}," [\"priceValue\", 500],\n",[221,865,866],{"class":223,"line":301},[221,867,868],{}," [\"quantity\", 1]\n",[221,870,871],{"class":223,"line":316},[221,872,873],{},"];\n",[221,875,876],{"class":223,"line":337},[221,877,879],{"emptyLinePlaceholder":878},true,"\n",[221,881,882],{"class":223,"line":352},[221,883,884],{},"private _checkout = createHashMapFromArray [\n",[221,886,887],{"class":223,"line":358},[221,888,889],{}," [\"requesterUid\", getPlayerUID player],\n",[221,891,892],{"class":223,"line":381},[221,893,894],{}," [\"requesterName\", name player],\n",[221,896,897],{"class":223,"line":402},[221,898,899],{}," [\"orgId\", \"default\"],\n",[221,901,902],{"class":223,"line":420},[221,903,904],{}," [\"requesterIsDefaultOrgCeo\", false],\n",[221,906,907],{"class":223,"line":435},[221,908,909],{}," [\"paymentMethod\", \"bank\"],\n",[221,911,912],{"class":223,"line":441},[221,913,914],{}," [\"items\", [_item]],\n",[221,916,917],{"class":223,"line":447},[221,918,919],{}," [\"vehicles\", []]\n",[221,921,922],{"class":223,"line":461},[221,923,873],{},[221,925,926],{"class":223,"line":466},[221,927,879],{"emptyLinePlaceholder":878},[221,929,930],{"class":223,"line":486},[221,931,932],{},"private _result = \"forge_server\" callExtension [\"store:checkout\", [toJSON _checkout]];\n",[159,934,936],{"id":935},"organization-funds-checkout","Organization Funds Checkout",[155,938,939,940,942,943,945],{},"When ",[173,941,321],{}," is ",[173,944,601],{},", vehicles are also added to the\norganization fleet patch.",[212,947,949],{"className":839,"code":948,"language":841,"meta":217,"style":217},"private _vehicle = createHashMapFromArray [\n [\"classname\", \"B_Quadbike_01_F\"],\n [\"category\", \"cars\"],\n [\"priceValue\", 1500]\n];\n\nprivate _checkout = createHashMapFromArray [\n [\"requesterUid\", getPlayerUID player],\n [\"requesterName\", name player],\n [\"orgId\", _orgId],\n [\"requesterIsDefaultOrgCeo\", false],\n [\"paymentMethod\", \"org_funds\"],\n [\"items\", []],\n [\"vehicles\", [_vehicle]]\n];\n\nprivate _result = \"forge_server\" callExtension [\"store:checkout\", [toJSON _checkout]];\n",[173,950,951,956,961,966,971,975,979,983,987,991,996,1000,1005,1010,1015,1019,1023],{"__ignoreMap":217},[221,952,953],{"class":223,"line":224},[221,954,955],{},"private _vehicle = createHashMapFromArray [\n",[221,957,958],{"class":223,"line":231},[221,959,960],{}," [\"classname\", \"B_Quadbike_01_F\"],\n",[221,962,963],{"class":223,"line":259},[221,964,965],{}," [\"category\", \"cars\"],\n",[221,967,968],{"class":223,"line":280},[221,969,970],{}," [\"priceValue\", 1500]\n",[221,972,973],{"class":223,"line":301},[221,974,873],{},[221,976,977],{"class":223,"line":316},[221,978,879],{"emptyLinePlaceholder":878},[221,980,981],{"class":223,"line":337},[221,982,884],{},[221,984,985],{"class":223,"line":352},[221,986,889],{},[221,988,989],{"class":223,"line":358},[221,990,894],{},[221,992,993],{"class":223,"line":381},[221,994,995],{}," [\"orgId\", _orgId],\n",[221,997,998],{"class":223,"line":402},[221,999,904],{},[221,1001,1002],{"class":223,"line":420},[221,1003,1004],{}," [\"paymentMethod\", \"org_funds\"],\n",[221,1006,1007],{"class":223,"line":435},[221,1008,1009],{}," [\"items\", []],\n",[221,1011,1012],{"class":223,"line":441},[221,1013,1014],{}," [\"vehicles\", [_vehicle]]\n",[221,1016,1017],{"class":223,"line":447},[221,1018,873],{},[221,1020,1021],{"class":223,"line":461},[221,1022,879],{"emptyLinePlaceholder":878},[221,1024,1025],{"class":223,"line":466},[221,1026,932],{},[159,1028,1030],{"id":1029},"error-handling","Error Handling",[212,1032,1034],{"className":839,"code":1033,"language":841,"meta":217,"style":217},"private _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n hint format [\"Checkout failed: %1\", _payload];\n};\n\nprivate _checkoutResult = fromJSON _payload;\n",[173,1035,1036,1041,1046,1051,1056,1060],{"__ignoreMap":217},[221,1037,1038],{"class":223,"line":224},[221,1039,1040],{},"private _payload = _result select 0;\n",[221,1042,1043],{"class":223,"line":231},[221,1044,1045],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[221,1047,1048],{"class":223,"line":259},[221,1049,1050],{}," hint format [\"Checkout failed: %1\", _payload];\n",[221,1052,1053],{"class":223,"line":280},[221,1054,1055],{},"};\n",[221,1057,1058],{"class":223,"line":301},[221,1059,879],{"emptyLinePlaceholder":878},[221,1061,1062],{"class":223,"line":316},[221,1063,1064],{},"private _checkoutResult = fromJSON _payload;\n",[1066,1067,1068],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":217,"searchDepth":231,"depth":231,"links":1070},[1071,1072,1073,1074,1075,1076,1077],{"id":161,"depth":231,"text":162},{"id":204,"depth":231,"text":205},{"id":614,"depth":231,"text":615},{"id":654,"depth":231,"text":655},{"id":835,"depth":231,"text":836},{"id":935,"depth":231,"text":936},{"id":1029,"depth":231,"text":1030},"md",null,{},{"title":53,"description":157},"PagD8Wx8XDQTlB6cdVUen7XOkIgjt96Gazqirt2_9qw",[1084,1086],{"title":49,"path":50,"stem":51,"description":1085,"children":-1},"The actor module stores persistent player character data: identity, loadout,\nposition, direction, stance, contact fields, state, holster status, rank, and\norganization.",{"title":57,"path":58,"stem":59,"description":1087,"children":-1},"The task module stores transient mission task metadata for active server or\nmission lifecycle workflows. SQF still owns Arma-only runtime state such as\nobjects and participants.",1776806627742] \ No newline at end of file diff --git a/docus/dist/server-modules/task.html b/docus/dist/server-modules/task.html new file mode 100644 index 0000000..29633b8 --- /dev/null +++ b/docus/dist/server-modules/task.html @@ -0,0 +1,219 @@ +Task Usage Guide - forge-docus
Server Modules

Task Usage Guide

The task module stores transient mission task metadata for active server or +mission lifecycle workflows. SQF still owns Arma-only runtime state such as +objects and participants.

Task Usage Guide

The task module stores transient mission task metadata for active server or +mission lifecycle workflows. SQF still owns Arma-only runtime state such as +objects and participants.

The server addon at arma/server/addons/task also owns task execution: +creating BIS tasks, registering task entities, tracking participants, binding +task ownership, applying player/org rewards, and clearing task state when a +task completes.

Runtime dependencies:

  • forge_server_extension
  • forge_server_common
  • forge_server_actor
  • forge_server_bank
  • forge_server_org
  • forge_client_notifications

Data Model

Catalog entries are flexible JSON objects. The service normalizes these fields +when a catalog entry is inserted or ownership changes:

  • taskId
  • taskID
  • accepted
  • requesterUid
  • orgID

Ownership context:

{
+  "requesterUid": "76561198000000000",
+  "orgId": "default"
+}
+

Commands

CommandArgumentsReturns
task:resetnonetrue.
task:catalog:activenoneActive catalog entry array JSON.
task:catalog:gettask_idCatalog entry JSON or null.
task:catalog:upserttask_id, entry_jsonStored catalog entry JSON.
task:catalog:deletetask_idtrue.
task:ownership:bindtask_id, ownership_jsonOwnership mutation result JSON.
task:ownership:releasetask_idOwnership mutation result JSON.
task:ownership:accepttask_id, ownership_jsonOwnership mutation result JSON.
task:ownership:reward_contexttask_idReward context JSON.
task:status:settask_id, statustrue.
task:status:gettask_idStatus string JSON.
task:status:cleartask_idtrue.
task:defuse:incrementtask_idNew counter value JSON.
task:defuse:gettask_idCounter value JSON.
task:cleartask_idtrue.

Upsert a Catalog Entry

private _entry = createHashMapFromArray [
+    ["title", "Destroy Cache"],
+    ["description", "Destroy the enemy supply cache."],
+    ["reward", 1500]
+];
+
+private _result = "forge_server" callExtension ["task:catalog:upsert", [
+    "task-cache-1",
+    toJSON _entry
+]];
+

Mark a Task Active

"forge_server" callExtension ["task:status:set", [
+    "task-cache-1",
+    "active"
+]];
+
+private _active = "forge_server" callExtension ["task:catalog:active", []];
+

Completed statuses succeeded and failed are also stored as completed status +fallbacks. Clearing status removes active and completed state.

Accept a Task

private _ownership = createHashMapFromArray [
+    ["requesterUid", getPlayerUID player],
+    ["orgId", "default"]
+];
+
+private _result = "forge_server" callExtension ["task:ownership:accept", [
+    "task-cache-1",
+    toJSON _ownership
+]];
+

task:ownership:accept fails if the task is not active or another requester +already accepted it.

Rewards

private _result = "forge_server" callExtension ["task:ownership:reward_context", [
+    "task-cache-1"
+]];
+
+private _context = fromJSON (_result select 0);
+

The reward context contains requesterUid and orgId.

Server Task Flows

The task addon provides these server-owned task flows:

  • attack
  • defend
  • defuse
  • delivery
  • destroy
  • hostage
  • hvt

Mission designers can create tasks in four ways:

  • Eden modules for editor-authored tasks.
  • forge_server_task_fnc_startTask for script-authored tasks.
  • forge_server_task_fnc_handler for pre-registered entities with reputation +gating and ownership binding. This path expects the BIS task and catalog +entry to already exist if map-task and CAD visibility are required.
  • Direct task function calls for server-owned or mission-authored flows that +intentionally fall back to the default org. This path expects the BIS task +to already exist if map-task visibility is required.

The dynamic mission manager can also generate attack tasks from config. That is +system-generated content rather than a hand-authored task creation path.

CAD Compatibility

CAD hydrates assignable tasks from TaskStore.getActiveTaskCatalog. A task must +have a catalog entry and active task status before CAD can show and assign it.

CAD-compatible creation paths:

  • Eden modules: compatible because they delegate to +forge_server_task_fnc_startTask.
  • forge_server_task_fnc_startTask: compatible because it registers the +catalog entry, creates the BIS task, and dispatches through the handler.
  • Dynamic mission manager attack tasks: compatible because the mission manager +uses forge_server_task_fnc_startTask.

Limited or incompatible paths:

  • forge_server_task_fnc_handler: only compatible if a catalog entry was +already registered elsewhere. The handler sets active status and ownership, +but it does not create the BIS task shown in the map task tab or upsert the +catalog entry.
  • Direct task function calls: not CAD-compatible by default. They bypass +startTask and usually do not register the task catalog entry or active +status that CAD hydrates from. They also only call BIS_fnc_taskSetState at +completion/failure; they do not create the BIS task first.

BIS Map Task Prerequisite

Only the Eden task modules and forge_server_task_fnc_startTask create the BIS +task automatically through BIS_fnc_taskCreate.

If a mission uses forge_server_task_fnc_handler directly or calls a task flow +function such as forge_server_task_fnc_attack, the mission must create a BIS +task with the same task ID before the Forge task completes. Otherwise the +success/failure BIS_fnc_taskSetState call has no visible map task to update.

That prerequisite can be satisfied with a vanilla Eden task creation module or +a scripted BIS_fnc_taskCreate call. forge_server_task_fnc_startTask is the +preferred Forge path because it handles BIS task creation, Forge catalog +registration, entity registration, and handler dispatch together.

Eden Modules

Eden task modules are the normal designer-facing path. Place the module, +configure its attributes, and sync it to the relevant entities or grouping +modules.

Available task modules:

  • FORGE_Module_Attack: sync directly to target units or vehicles.
  • FORGE_Module_Destroy: sync directly to objects, vehicles, or units.
  • FORGE_Module_Defuse: sync to FORGE_Module_Explosives and optionally +FORGE_Module_Protected.
  • FORGE_Module_Delivery: sync to FORGE_Module_Cargo; the cargo module syncs +to cargo objects.
  • FORGE_Module_Hostage: sync to FORGE_Module_Hostages and +FORGE_Module_Shooters.
  • FORGE_Module_HVT: sync directly to HVT units.
  • FORGE_Module_Defend: configure the defense marker and wave settings.

These modules delegate to forge_server_task_fnc_startTask.

Scripted Start Task

Use forge_server_task_fnc_startTask when creating tasks from modules, +mission scripts, or generated mission-manager content. It registers task +entities, creates the BIS task, stores the catalog entry, then dispatches +through forge_server_task_fnc_handler.

[
+    "attack",
+    "compound_attack_01",
+    getPosATL leader1,
+    "Attack: East Compound",
+    "Eliminate all hostile forces.",
+    createHashMapFromArray [["targets", [unit1, unit2, unit3]]],
+    createHashMapFromArray [
+        ["limitFail", 0],
+        ["limitSuccess", 3],
+        ["funds", 50000],
+        ["ratingFail", -10],
+        ["ratingSuccess", 20],
+        ["timeLimit", 900]
+    ],
+    0,
+    getPlayerUID player,
+    "script"
+] call forge_server_task_fnc_startTask;
+

Handler Calls

Use forge_server_task_fnc_handler directly when the task entities are already +registered and you want reputation gating plus ownership binding. Create the +BIS task and catalog entry separately if this task should appear in the map +task tab or CAD:

[
+    "delivery",
+    ["delivery_1", 1, 3, "delivery_zone", 250000, -75, 300, false, false, 900],
+    250,
+    getPlayerUID player
+] call forge_server_task_fnc_handler;
+

Direct Task Calls

Direct task function calls still work for mission-authored or server-owned +tasks, but they do not provide a requester UID. Ownership falls back to the +default org. Create the BIS task separately if this task should appear in the +map task tab.

Timer Semantics

Task time limits use 0 for no limit:

  • attack timeLimit
  • destroy timeLimit
  • delivery timeLimit
  • hostage timeLimit
  • HVT timeLimit

Positive values are measured in seconds. Do not pass -1 as a no-limit value; +the task runtime treats any non-zero task time limit as active.

Defuse IED timers are different. iedTimer must be greater than 0, because +IEDs are expected to have an active countdown. The Eden defuse module defaults +to 300 seconds.

Defuse Counter

"forge_server" callExtension ["task:defuse:increment", ["task-cache-1"]];
+private _count = "forge_server" callExtension ["task:defuse:get", ["task-cache-1"]];
+

Error Handling

private _payload = _result select 0;
+if (_payload find "Error:" == 0) exitWith {
+    systemChat format ["Task error: %1", _payload];
+};
+
Copyright © 2026
\ No newline at end of file diff --git a/docus/dist/server-modules/task/_payload.json b/docus/dist/server-modules/task/_payload.json new file mode 100644 index 0000000..e0500a0 --- /dev/null +++ b/docus/dist/server-modules/task/_payload.json @@ -0,0 +1 @@ +[{"data":1,"prerenderedAt":1325},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-task":145,"-server-modules-task-surround":1320},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":57,"body":147,"description":157,"extension":1315,"links":1316,"meta":1317,"navigation":609,"path":58,"seo":1318,"stem":59,"__hash__":1319},"docs\u002F3.server-modules\u002F11.task.md",{"type":148,"value":149,"toc":1297},"minimark",[150,154,158,166,169,203,208,211,238,241,312,316,567,571,635,639,671,682,686,732,737,741,769,776,780,783,820,823,846,849,853,860,863,880,883,901,905,914,927,936,940,943,946,1006,1011,1015,1023,1132,1136,1141,1175,1179,1185,1189,1196,1224,1231,1245,1249,1264,1268,1293],[151,152,57],"h1",{"id":153},"task-usage-guide",[155,156,157],"p",{},"The task module stores transient mission task metadata for active server or\nmission lifecycle workflows. SQF still owns Arma-only runtime state such as\nobjects and participants.",[155,159,160,161,165],{},"The server addon at ",[162,163,164],"code",{},"arma\u002Fserver\u002Faddons\u002Ftask"," also owns task execution:\ncreating BIS tasks, registering task entities, tracking participants, binding\ntask ownership, applying player\u002Forg rewards, and clearing task state when a\ntask completes.",[155,167,168],{},"Runtime dependencies:",[170,171,172,178,183,188,193,198],"ul",{},[173,174,175],"li",{},[162,176,177],{},"forge_server_extension",[173,179,180],{},[162,181,182],{},"forge_server_common",[173,184,185],{},[162,186,187],{},"forge_server_actor",[173,189,190],{},[162,191,192],{},"forge_server_bank",[173,194,195],{},[162,196,197],{},"forge_server_org",[173,199,200],{},[162,201,202],{},"forge_client_notifications",[204,205,207],"h2",{"id":206},"data-model","Data Model",[155,209,210],{},"Catalog entries are flexible JSON objects. The service normalizes these fields\nwhen a catalog entry is inserted or ownership changes:",[170,212,213,218,223,228,233],{},[173,214,215],{},[162,216,217],{},"taskId",[173,219,220],{},[162,221,222],{},"taskID",[173,224,225],{},[162,226,227],{},"accepted",[173,229,230],{},[162,231,232],{},"requesterUid",[173,234,235],{},[162,236,237],{},"orgID",[155,239,240],{},"Ownership context:",[242,243,248],"pre",{"className":244,"code":245,"language":246,"meta":247,"style":247},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"requesterUid\": \"76561198000000000\",\n \"orgId\": \"default\"\n}\n","json","",[162,249,250,259,286,306],{"__ignoreMap":247},[251,252,255],"span",{"class":253,"line":254},"line",1,[251,256,258],{"class":257},"sMK4o","{\n",[251,260,262,265,268,271,274,277,281,283],{"class":253,"line":261},2,[251,263,264],{"class":257}," \"",[251,266,232],{"class":267},"spNyl",[251,269,270],{"class":257},"\"",[251,272,273],{"class":257},":",[251,275,276],{"class":257}," \"",[251,278,280],{"class":279},"sfazB","76561198000000000",[251,282,270],{"class":257},[251,284,285],{"class":257},",\n",[251,287,289,291,294,296,298,300,303],{"class":253,"line":288},3,[251,290,264],{"class":257},[251,292,293],{"class":267},"orgId",[251,295,270],{"class":257},[251,297,273],{"class":257},[251,299,276],{"class":257},[251,301,302],{"class":279},"default",[251,304,305],{"class":257},"\"\n",[251,307,309],{"class":253,"line":308},4,[251,310,311],{"class":257},"}\n",[204,313,315],{"id":314},"commands","Commands",[317,318,319,335],"table",{},[320,321,322],"thead",{},[323,324,325,329,332],"tr",{},[326,327,328],"th",{},"Command",[326,330,331],{},"Arguments",[326,333,334],{},"Returns",[336,337,338,355,367,385,403,418,435,448,463,477,495,509,524,538,552],"tbody",{},[323,339,340,346,349],{},[341,342,343],"td",{},[162,344,345],{},"task:reset",[341,347,348],{},"none",[341,350,351,354],{},[162,352,353],{},"true",".",[323,356,357,362,364],{},[341,358,359],{},[162,360,361],{},"task:catalog:active",[341,363,348],{},[341,365,366],{},"Active catalog entry array JSON.",[323,368,369,374,379],{},[341,370,371],{},[162,372,373],{},"task:catalog:get",[341,375,376],{},[162,377,378],{},"task_id",[341,380,381,382,354],{},"Catalog entry JSON or ",[162,383,384],{},"null",[323,386,387,392,400],{},[341,388,389],{},[162,390,391],{},"task:catalog:upsert",[341,393,394,396,397],{},[162,395,378],{},", ",[162,398,399],{},"entry_json",[341,401,402],{},"Stored catalog entry JSON.",[323,404,405,410,414],{},[341,406,407],{},[162,408,409],{},"task:catalog:delete",[341,411,412],{},[162,413,378],{},[341,415,416,354],{},[162,417,353],{},[323,419,420,425,432],{},[341,421,422],{},[162,423,424],{},"task:ownership:bind",[341,426,427,396,429],{},[162,428,378],{},[162,430,431],{},"ownership_json",[341,433,434],{},"Ownership mutation result JSON.",[323,436,437,442,446],{},[341,438,439],{},[162,440,441],{},"task:ownership:release",[341,443,444],{},[162,445,378],{},[341,447,434],{},[323,449,450,455,461],{},[341,451,452],{},[162,453,454],{},"task:ownership:accept",[341,456,457,396,459],{},[162,458,378],{},[162,460,431],{},[341,462,434],{},[323,464,465,470,474],{},[341,466,467],{},[162,468,469],{},"task:ownership:reward_context",[341,471,472],{},[162,473,378],{},[341,475,476],{},"Reward context JSON.",[323,478,479,484,491],{},[341,480,481],{},[162,482,483],{},"task:status:set",[341,485,486,396,488],{},[162,487,378],{},[162,489,490],{},"status",[341,492,493,354],{},[162,494,353],{},[323,496,497,502,506],{},[341,498,499],{},[162,500,501],{},"task:status:get",[341,503,504],{},[162,505,378],{},[341,507,508],{},"Status string JSON.",[323,510,511,516,520],{},[341,512,513],{},[162,514,515],{},"task:status:clear",[341,517,518],{},[162,519,378],{},[341,521,522,354],{},[162,523,353],{},[323,525,526,531,535],{},[341,527,528],{},[162,529,530],{},"task:defuse:increment",[341,532,533],{},[162,534,378],{},[341,536,537],{},"New counter value JSON.",[323,539,540,545,549],{},[341,541,542],{},[162,543,544],{},"task:defuse:get",[341,546,547],{},[162,548,378],{},[341,550,551],{},"Counter value JSON.",[323,553,554,559,563],{},[341,555,556],{},[162,557,558],{},"task:clear",[341,560,561],{},[162,562,378],{},[341,564,565,354],{},[162,566,353],{},[204,568,570],{"id":569},"upsert-a-catalog-entry","Upsert a Catalog Entry",[242,572,576],{"className":573,"code":574,"language":575,"meta":247,"style":247},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _entry = createHashMapFromArray [\n [\"title\", \"Destroy Cache\"],\n [\"description\", \"Destroy the enemy supply cache.\"],\n [\"reward\", 1500]\n];\n\nprivate _result = \"forge_server\" callExtension [\"task:catalog:upsert\", [\n \"task-cache-1\",\n toJSON _entry\n]];\n","sqf",[162,577,578,583,588,593,598,604,611,617,623,629],{"__ignoreMap":247},[251,579,580],{"class":253,"line":254},[251,581,582],{},"private _entry = createHashMapFromArray [\n",[251,584,585],{"class":253,"line":261},[251,586,587],{}," [\"title\", \"Destroy Cache\"],\n",[251,589,590],{"class":253,"line":288},[251,591,592],{}," [\"description\", \"Destroy the enemy supply cache.\"],\n",[251,594,595],{"class":253,"line":308},[251,596,597],{}," [\"reward\", 1500]\n",[251,599,601],{"class":253,"line":600},5,[251,602,603],{},"];\n",[251,605,607],{"class":253,"line":606},6,[251,608,610],{"emptyLinePlaceholder":609},true,"\n",[251,612,614],{"class":253,"line":613},7,[251,615,616],{},"private _result = \"forge_server\" callExtension [\"task:catalog:upsert\", [\n",[251,618,620],{"class":253,"line":619},8,[251,621,622],{}," \"task-cache-1\",\n",[251,624,626],{"class":253,"line":625},9,[251,627,628],{}," toJSON _entry\n",[251,630,632],{"class":253,"line":631},10,[251,633,634],{},"]];\n",[204,636,638],{"id":637},"mark-a-task-active","Mark a Task Active",[242,640,642],{"className":573,"code":641,"language":575,"meta":247,"style":247},"\"forge_server\" callExtension [\"task:status:set\", [\n \"task-cache-1\",\n \"active\"\n]];\n\nprivate _active = \"forge_server\" callExtension [\"task:catalog:active\", []];\n",[162,643,644,649,653,658,662,666],{"__ignoreMap":247},[251,645,646],{"class":253,"line":254},[251,647,648],{},"\"forge_server\" callExtension [\"task:status:set\", [\n",[251,650,651],{"class":253,"line":261},[251,652,622],{},[251,654,655],{"class":253,"line":288},[251,656,657],{}," \"active\"\n",[251,659,660],{"class":253,"line":308},[251,661,634],{},[251,663,664],{"class":253,"line":600},[251,665,610],{"emptyLinePlaceholder":609},[251,667,668],{"class":253,"line":606},[251,669,670],{},"private _active = \"forge_server\" callExtension [\"task:catalog:active\", []];\n",[155,672,673,674,677,678,681],{},"Completed statuses ",[162,675,676],{},"succeeded"," and ",[162,679,680],{},"failed"," are also stored as completed status\nfallbacks. Clearing status removes active and completed state.",[204,683,685],{"id":684},"accept-a-task","Accept a Task",[242,687,689],{"className":573,"code":688,"language":575,"meta":247,"style":247},"private _ownership = createHashMapFromArray [\n [\"requesterUid\", getPlayerUID player],\n [\"orgId\", \"default\"]\n];\n\nprivate _result = \"forge_server\" callExtension [\"task:ownership:accept\", [\n \"task-cache-1\",\n toJSON _ownership\n]];\n",[162,690,691,696,701,706,710,714,719,723,728],{"__ignoreMap":247},[251,692,693],{"class":253,"line":254},[251,694,695],{},"private _ownership = createHashMapFromArray [\n",[251,697,698],{"class":253,"line":261},[251,699,700],{}," [\"requesterUid\", getPlayerUID player],\n",[251,702,703],{"class":253,"line":288},[251,704,705],{}," [\"orgId\", \"default\"]\n",[251,707,708],{"class":253,"line":308},[251,709,603],{},[251,711,712],{"class":253,"line":600},[251,713,610],{"emptyLinePlaceholder":609},[251,715,716],{"class":253,"line":606},[251,717,718],{},"private _result = \"forge_server\" callExtension [\"task:ownership:accept\", [\n",[251,720,721],{"class":253,"line":613},[251,722,622],{},[251,724,725],{"class":253,"line":619},[251,726,727],{}," toJSON _ownership\n",[251,729,730],{"class":253,"line":625},[251,731,634],{},[155,733,734,736],{},[162,735,454],{}," fails if the task is not active or another requester\nalready accepted it.",[204,738,740],{"id":739},"rewards","Rewards",[242,742,744],{"className":573,"code":743,"language":575,"meta":247,"style":247},"private _result = \"forge_server\" callExtension [\"task:ownership:reward_context\", [\n \"task-cache-1\"\n]];\n\nprivate _context = fromJSON (_result select 0);\n",[162,745,746,751,756,760,764],{"__ignoreMap":247},[251,747,748],{"class":253,"line":254},[251,749,750],{},"private _result = \"forge_server\" callExtension [\"task:ownership:reward_context\", [\n",[251,752,753],{"class":253,"line":261},[251,754,755],{}," \"task-cache-1\"\n",[251,757,758],{"class":253,"line":288},[251,759,634],{},[251,761,762],{"class":253,"line":308},[251,763,610],{"emptyLinePlaceholder":609},[251,765,766],{"class":253,"line":600},[251,767,768],{},"private _context = fromJSON (_result select 0);\n",[155,770,771,772,677,774,354],{},"The reward context contains ",[162,773,232],{},[162,775,293],{},[204,777,779],{"id":778},"server-task-flows","Server Task Flows",[155,781,782],{},"The task addon provides these server-owned task flows:",[170,784,785,790,795,800,805,810,815],{},[173,786,787],{},[162,788,789],{},"attack",[173,791,792],{},[162,793,794],{},"defend",[173,796,797],{},[162,798,799],{},"defuse",[173,801,802],{},[162,803,804],{},"delivery",[173,806,807],{},[162,808,809],{},"destroy",[173,811,812],{},[162,813,814],{},"hostage",[173,816,817],{},[162,818,819],{},"hvt",[155,821,822],{},"Mission designers can create tasks in four ways:",[170,824,825,828,834,840],{},[173,826,827],{},"Eden modules for editor-authored tasks.",[173,829,830,833],{},[162,831,832],{},"forge_server_task_fnc_startTask"," for script-authored tasks.",[173,835,836,839],{},[162,837,838],{},"forge_server_task_fnc_handler"," for pre-registered entities with reputation\ngating and ownership binding. This path expects the BIS task and catalog\nentry to already exist if map-task and CAD visibility are required.",[173,841,842,843,845],{},"Direct task function calls for server-owned or mission-authored flows that\nintentionally fall back to the ",[162,844,302],{}," org. This path expects the BIS task\nto already exist if map-task visibility is required.",[155,847,848],{},"The dynamic mission manager can also generate attack tasks from config. That is\nsystem-generated content rather than a hand-authored task creation path.",[204,850,852],{"id":851},"cad-compatibility","CAD Compatibility",[155,854,855,856,859],{},"CAD hydrates assignable tasks from ",[162,857,858],{},"TaskStore.getActiveTaskCatalog",". A task must\nhave a catalog entry and active task status before CAD can show and assign it.",[155,861,862],{},"CAD-compatible creation paths:",[170,864,865,870,875],{},[173,866,867,868,354],{},"Eden modules: compatible because they delegate to\n",[162,869,832],{},[173,871,872,874],{},[162,873,832],{},": compatible because it registers the\ncatalog entry, creates the BIS task, and dispatches through the handler.",[173,876,877,878,354],{},"Dynamic mission manager attack tasks: compatible because the mission manager\nuses ",[162,879,832],{},[155,881,882],{},"Limited or incompatible paths:",[170,884,885,890],{},[173,886,887,889],{},[162,888,838],{},": only compatible if a catalog entry was\nalready registered elsewhere. The handler sets active status and ownership,\nbut it does not create the BIS task shown in the map task tab or upsert the\ncatalog entry.",[173,891,892,893,896,897,900],{},"Direct task function calls: not CAD-compatible by default. They bypass\n",[162,894,895],{},"startTask"," and usually do not register the task catalog entry or active\nstatus that CAD hydrates from. They also only call ",[162,898,899],{},"BIS_fnc_taskSetState"," at\ncompletion\u002Ffailure; they do not create the BIS task first.",[204,902,904],{"id":903},"bis-map-task-prerequisite","BIS Map Task Prerequisite",[155,906,907,908,910,911,354],{},"Only the Eden task modules and ",[162,909,832],{}," create the BIS\ntask automatically through ",[162,912,913],{},"BIS_fnc_taskCreate",[155,915,916,917,919,920,923,924,926],{},"If a mission uses ",[162,918,838],{}," directly or calls a task flow\nfunction such as ",[162,921,922],{},"forge_server_task_fnc_attack",", the mission must create a BIS\ntask with the same task ID before the Forge task completes. Otherwise the\nsuccess\u002Ffailure ",[162,925,899],{}," call has no visible map task to update.",[155,928,929,930,932,933,935],{},"That prerequisite can be satisfied with a vanilla Eden task creation module or\na scripted ",[162,931,913],{}," call. ",[162,934,832],{}," is the\npreferred Forge path because it handles BIS task creation, Forge catalog\nregistration, entity registration, and handler dispatch together.",[204,937,939],{"id":938},"eden-modules","Eden Modules",[155,941,942],{},"Eden task modules are the normal designer-facing path. Place the module,\nconfigure its attributes, and sync it to the relevant entities or grouping\nmodules.",[155,944,945],{},"Available task modules:",[170,947,948,954,960,973,982,994,1000],{},[173,949,950,953],{},[162,951,952],{},"FORGE_Module_Attack",": sync directly to target units or vehicles.",[173,955,956,959],{},[162,957,958],{},"FORGE_Module_Destroy",": sync directly to objects, vehicles, or units.",[173,961,962,965,966,969,970,354],{},[162,963,964],{},"FORGE_Module_Defuse",": sync to ",[162,967,968],{},"FORGE_Module_Explosives"," and optionally\n",[162,971,972],{},"FORGE_Module_Protected",[173,974,975,965,978,981],{},[162,976,977],{},"FORGE_Module_Delivery",[162,979,980],{},"FORGE_Module_Cargo","; the cargo module syncs\nto cargo objects.",[173,983,984,965,987,990,991,354],{},[162,985,986],{},"FORGE_Module_Hostage",[162,988,989],{},"FORGE_Module_Hostages"," and\n",[162,992,993],{},"FORGE_Module_Shooters",[173,995,996,999],{},[162,997,998],{},"FORGE_Module_HVT",": sync directly to HVT units.",[173,1001,1002,1005],{},[162,1003,1004],{},"FORGE_Module_Defend",": configure the defense marker and wave settings.",[155,1007,1008,1009,354],{},"These modules delegate to ",[162,1010,832],{},[204,1012,1014],{"id":1013},"scripted-start-task","Scripted Start Task",[155,1016,1017,1018,1020,1021,354],{},"Use ",[162,1019,832],{}," when creating tasks from modules,\nmission scripts, or generated mission-manager content. It registers task\nentities, creates the BIS task, stores the catalog entry, then dispatches\nthrough ",[162,1022,838],{},[242,1024,1026],{"className":573,"code":1025,"language":575,"meta":247,"style":247},"[\n \"attack\",\n \"compound_attack_01\",\n getPosATL leader1,\n \"Attack: East Compound\",\n \"Eliminate all hostile forces.\",\n createHashMapFromArray [[\"targets\", [unit1, unit2, unit3]]],\n createHashMapFromArray [\n [\"limitFail\", 0],\n [\"limitSuccess\", 3],\n [\"funds\", 50000],\n [\"ratingFail\", -10],\n [\"ratingSuccess\", 20],\n [\"timeLimit\", 900]\n ],\n 0,\n getPlayerUID player,\n \"script\"\n] call forge_server_task_fnc_startTask;\n",[162,1027,1028,1033,1038,1043,1048,1053,1058,1063,1068,1073,1078,1084,1090,1096,1102,1108,1114,1120,1126],{"__ignoreMap":247},[251,1029,1030],{"class":253,"line":254},[251,1031,1032],{},"[\n",[251,1034,1035],{"class":253,"line":261},[251,1036,1037],{}," \"attack\",\n",[251,1039,1040],{"class":253,"line":288},[251,1041,1042],{}," \"compound_attack_01\",\n",[251,1044,1045],{"class":253,"line":308},[251,1046,1047],{}," getPosATL leader1,\n",[251,1049,1050],{"class":253,"line":600},[251,1051,1052],{}," \"Attack: East Compound\",\n",[251,1054,1055],{"class":253,"line":606},[251,1056,1057],{}," \"Eliminate all hostile forces.\",\n",[251,1059,1060],{"class":253,"line":613},[251,1061,1062],{}," createHashMapFromArray [[\"targets\", [unit1, unit2, unit3]]],\n",[251,1064,1065],{"class":253,"line":619},[251,1066,1067],{}," createHashMapFromArray [\n",[251,1069,1070],{"class":253,"line":625},[251,1071,1072],{}," [\"limitFail\", 0],\n",[251,1074,1075],{"class":253,"line":631},[251,1076,1077],{}," [\"limitSuccess\", 3],\n",[251,1079,1081],{"class":253,"line":1080},11,[251,1082,1083],{}," [\"funds\", 50000],\n",[251,1085,1087],{"class":253,"line":1086},12,[251,1088,1089],{}," [\"ratingFail\", -10],\n",[251,1091,1093],{"class":253,"line":1092},13,[251,1094,1095],{}," [\"ratingSuccess\", 20],\n",[251,1097,1099],{"class":253,"line":1098},14,[251,1100,1101],{}," [\"timeLimit\", 900]\n",[251,1103,1105],{"class":253,"line":1104},15,[251,1106,1107],{}," ],\n",[251,1109,1111],{"class":253,"line":1110},16,[251,1112,1113],{}," 0,\n",[251,1115,1117],{"class":253,"line":1116},17,[251,1118,1119],{}," getPlayerUID player,\n",[251,1121,1123],{"class":253,"line":1122},18,[251,1124,1125],{}," \"script\"\n",[251,1127,1129],{"class":253,"line":1128},19,[251,1130,1131],{},"] call forge_server_task_fnc_startTask;\n",[204,1133,1135],{"id":1134},"handler-calls","Handler Calls",[155,1137,1017,1138,1140],{},[162,1139,838],{}," directly when the task entities are already\nregistered and you want reputation gating plus ownership binding. Create the\nBIS task and catalog entry separately if this task should appear in the map\ntask tab or CAD:",[242,1142,1144],{"className":573,"code":1143,"language":575,"meta":247,"style":247},"[\n \"delivery\",\n [\"delivery_1\", 1, 3, \"delivery_zone\", 250000, -75, 300, false, false, 900],\n 250,\n getPlayerUID player\n] call forge_server_task_fnc_handler;\n",[162,1145,1146,1150,1155,1160,1165,1170],{"__ignoreMap":247},[251,1147,1148],{"class":253,"line":254},[251,1149,1032],{},[251,1151,1152],{"class":253,"line":261},[251,1153,1154],{}," \"delivery\",\n",[251,1156,1157],{"class":253,"line":288},[251,1158,1159],{}," [\"delivery_1\", 1, 3, \"delivery_zone\", 250000, -75, 300, false, false, 900],\n",[251,1161,1162],{"class":253,"line":308},[251,1163,1164],{}," 250,\n",[251,1166,1167],{"class":253,"line":600},[251,1168,1169],{}," getPlayerUID player\n",[251,1171,1172],{"class":253,"line":606},[251,1173,1174],{},"] call forge_server_task_fnc_handler;\n",[204,1176,1178],{"id":1177},"direct-task-calls","Direct Task Calls",[155,1180,1181,1182,1184],{},"Direct task function calls still work for mission-authored or server-owned\ntasks, but they do not provide a requester UID. Ownership falls back to the\n",[162,1183,302],{}," org. Create the BIS task separately if this task should appear in the\nmap task tab.",[204,1186,1188],{"id":1187},"timer-semantics","Timer Semantics",[155,1190,1191,1192,1195],{},"Task time limits use ",[162,1193,1194],{},"0"," for no limit:",[170,1197,1198,1204,1209,1214,1219],{},[173,1199,1200,1201],{},"attack ",[162,1202,1203],{},"timeLimit",[173,1205,1206,1207],{},"destroy ",[162,1208,1203],{},[173,1210,1211,1212],{},"delivery ",[162,1213,1203],{},[173,1215,1216,1217],{},"hostage ",[162,1218,1203],{},[173,1220,1221,1222],{},"HVT ",[162,1223,1203],{},[155,1225,1226,1227,1230],{},"Positive values are measured in seconds. Do not pass ",[162,1228,1229],{},"-1"," as a no-limit value;\nthe task runtime treats any non-zero task time limit as active.",[155,1232,1233,1234,1237,1238,1240,1241,1244],{},"Defuse IED timers are different. ",[162,1235,1236],{},"iedTimer"," must be greater than ",[162,1239,1194],{},", because\nIEDs are expected to have an active countdown. The Eden defuse module defaults\nto ",[162,1242,1243],{},"300"," seconds.",[204,1246,1248],{"id":1247},"defuse-counter","Defuse Counter",[242,1250,1252],{"className":573,"code":1251,"language":575,"meta":247,"style":247},"\"forge_server\" callExtension [\"task:defuse:increment\", [\"task-cache-1\"]];\nprivate _count = \"forge_server\" callExtension [\"task:defuse:get\", [\"task-cache-1\"]];\n",[162,1253,1254,1259],{"__ignoreMap":247},[251,1255,1256],{"class":253,"line":254},[251,1257,1258],{},"\"forge_server\" callExtension [\"task:defuse:increment\", [\"task-cache-1\"]];\n",[251,1260,1261],{"class":253,"line":261},[251,1262,1263],{},"private _count = \"forge_server\" callExtension [\"task:defuse:get\", [\"task-cache-1\"]];\n",[204,1265,1267],{"id":1266},"error-handling","Error Handling",[242,1269,1271],{"className":573,"code":1270,"language":575,"meta":247,"style":247},"private _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Task error: %1\", _payload];\n};\n",[162,1272,1273,1278,1283,1288],{"__ignoreMap":247},[251,1274,1275],{"class":253,"line":254},[251,1276,1277],{},"private _payload = _result select 0;\n",[251,1279,1280],{"class":253,"line":261},[251,1281,1282],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[251,1284,1285],{"class":253,"line":288},[251,1286,1287],{}," systemChat format [\"Task error: %1\", _payload];\n",[251,1289,1290],{"class":253,"line":308},[251,1291,1292],{},"};\n",[1294,1295,1296],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":247,"searchDepth":261,"depth":261,"links":1298},[1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314],{"id":206,"depth":261,"text":207},{"id":314,"depth":261,"text":315},{"id":569,"depth":261,"text":570},{"id":637,"depth":261,"text":638},{"id":684,"depth":261,"text":685},{"id":739,"depth":261,"text":740},{"id":778,"depth":261,"text":779},{"id":851,"depth":261,"text":852},{"id":903,"depth":261,"text":904},{"id":938,"depth":261,"text":939},{"id":1013,"depth":261,"text":1014},{"id":1134,"depth":261,"text":1135},{"id":1177,"depth":261,"text":1178},{"id":1187,"depth":261,"text":1188},{"id":1247,"depth":261,"text":1248},{"id":1266,"depth":261,"text":1267},"md",null,{},{"title":57,"description":157},"KdbrlSiS5YQ3OEJob3r0ceVGYCznKZq-sUb7FfWDctU",[1321,1323],{"title":53,"path":54,"stem":55,"description":1322,"children":-1},"The store module processes checkout requests. It charges a payment source and\ngrants purchased items to the player locker, virtual arsenal locker, and\nvirtual garage unlocks.",{"title":61,"path":62,"stem":63,"description":1324,"children":-1},"The bank module stores player account balances, earnings, PINs, and transaction\nstrings. The hot-state API also owns the active banking workflows used by the\nUI: deposit, withdraw, transfer, checkout charge, and PIN validation.",1776806627742] \ No newline at end of file diff --git a/docus/dist/sitemap.xml b/docus/dist/sitemap.xml new file mode 100644 index 0000000..1f71938 --- /dev/null +++ b/docus/dist/sitemap.xml @@ -0,0 +1,102 @@ + + + + /getting-started + + + /getting-started/architecture + + + /getting-started/module-reference + + + /getting-started/development + + + /getting-started/surrealdb-setup + + + /server-extension + + + /server-extension/api-reference + + + /server-extension/usage-examples + + + /server-modules + + + /server-modules/actor + + + /server-modules/store + + + /server-modules/task + + + /server-modules/bank + + + /server-modules/cad + + + /server-modules/economy + + + /server-modules/garage + + + /server-modules/locker + + + /server-modules/organization + + + /server-modules/owned-storage + + + /server-modules/phone + + + /client-addons + + + /client-addons/main + + + /client-addons/phone + + + /client-addons/store + + + /client-addons/common + + + /client-addons/actor + + + /client-addons/bank + + + /client-addons/cad + + + /client-addons/garage + + + /client-addons/locker + + + /client-addons/notifications + + + /client-addons/organization + + + / + + \ No newline at end of file diff --git a/docus/nuxt.config.ts b/docus/nuxt.config.ts new file mode 100644 index 0000000..231155a --- /dev/null +++ b/docus/nuxt.config.ts @@ -0,0 +1,41 @@ +const baseURL = + process.env.DOCS_BASE_URL || + (process.env.NODE_ENV === 'production' ? '/forge/' : '/'); +const siteUrl = + process.env.DOCS_SITE_URL || + 'https://innovativedevsolutions.github.io'; + +export default defineNuxtConfig({ + extends: ['docus'], + + site: { + url: siteUrl + }, + + llms: { + domain: siteUrl + }, + + robots: { + robotsTxt: false + }, + + app: { + baseURL, + buildAssetsDir: '/_nuxt/' + }, + + nitro: { + preset: 'static', + prerender: { + crawlLinks: true, + routes: ['/'] + } + }, + + devtools: { + enabled: false + }, + + compatibilityDate: '2026-04-21' +}); diff --git a/docus/package-lock.json b/docus/package-lock.json new file mode 100644 index 0000000..64ffcef --- /dev/null +++ b/docus/package-lock.json @@ -0,0 +1,19535 @@ +{ + "name": "forge-docus", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "forge-docus", + "dependencies": { + "@takumi-rs/core": "^1.0.15", + "better-sqlite3": "^12.9.0", + "docus": "^5.10.0", + "nuxt": "^4.4.2" + } + }, + "node_modules/@ai-sdk/gateway": { + "version": "3.0.104", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.23", + "@vercel/oidc": "3.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/mcp": { + "version": "1.0.36", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.23", + "pkce-challenge": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "3.0.8", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "4.0.23", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.8", + "@standard-schema/spec": "^1.1.0", + "eventsource-parser": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/vue": { + "version": "3.0.141", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "4.0.21", + "ai": "6.0.141", + "swrv": "^1.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "vue": "^3.3.4" + } + }, + "node_modules/@ai-sdk/vue/node_modules/@ai-sdk/provider-utils": { + "version": "4.0.21", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.8", + "@standard-schema/spec": "^1.1.0", + "eventsource-parser": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "14.2.1", + "license": "MIT", + "dependencies": { + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + }, + "peerDependencies": { + "@types/json-schema": "^7.0.15" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bomb.sh/tab": { + "version": "0.0.14", + "license": "MIT", + "bin": { + "tab": "dist/bin/cli.mjs" + }, + "peerDependencies": { + "cac": "^6.7.14", + "citty": "^0.1.6 || ^0.2.0", + "commander": "^13.1.0" + }, + "peerDependenciesMeta": { + "cac": { + "optional": true + }, + "citty": { + "optional": true + }, + "commander": { + "optional": true + } + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@clack/core": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "fast-wrap-ansi": "^0.1.3", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@clack/core": "1.2.0", + "fast-string-width": "^1.1.0", + "fast-wrap-ansi": "^0.1.3", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.2", + "license": "MIT OR Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@colordx/core": { + "version": "5.2.0", + "license": "MIT" + }, + "node_modules/@dxup/nuxt": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "@dxup/unimport": "^0.1.2", + "@nuxt/kit": "^4.2.2", + "chokidar": "^5.0.0", + "pathe": "^2.0.3", + "tinyglobby": "^0.2.15" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@dxup/unimport": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.5", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@fastify/accept-negotiator": { + "version": "2.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/@fingerprintjs/botd": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "license": "MIT" + }, + "node_modules/@floating-ui/vue": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6", + "@floating-ui/utils": "^0.2.11", + "vue-demi": ">=0.13.0" + } + }, + "node_modules/@floating-ui/vue/node_modules/vue-demi": { + "version": "0.14.10", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.14", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@iconify-json/lucide": { + "version": "1.2.102", + "license": "ISC", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.79", + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify-json/vscode-icons": { + "version": "1.2.45", + "license": "MIT", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/collections": { + "version": "1.0.674", + "license": "MIT", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/@iconify/vue": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "vue": ">=3" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@internationalized/date": { + "version": "3.12.1", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/date/node_modules/@swc/helpers": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", + "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.6", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number/node_modules/@swc/helpers": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", + "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@intlify/bundle-utils": { + "version": "11.0.7", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "^11.1.12", + "@intlify/shared": "^11.1.12", + "acorn": "^8.8.2", + "esbuild": "^0.25.4", + "escodegen": "^2.1.0", + "estree-walker": "^2.0.2", + "jsonc-eslint-parser": "^2.3.0", + "source-map-js": "^1.2.1", + "yaml-eslint-parser": "^1.2.2" + }, + "engines": { + "node": ">= 20" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/core": { + "version": "11.3.2", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.3.2", + "@intlify/shared": "11.3.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/core-base": { + "version": "11.3.2", + "license": "MIT", + "dependencies": { + "@intlify/devtools-types": "11.3.2", + "@intlify/message-compiler": "11.3.2", + "@intlify/shared": "11.3.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/devtools-types": { + "version": "11.3.2", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.3.2", + "@intlify/shared": "11.3.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/h3": { + "version": "0.7.4", + "license": "MIT", + "dependencies": { + "@intlify/core": "^11.1.12", + "@intlify/utils": "^0.13.0" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/h3/node_modules/@intlify/utils": { + "version": "0.13.0", + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.3.2", + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.3.2", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.3.2", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/unplugin-vue-i18n": { + "version": "11.0.7", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@intlify/bundle-utils": "11.0.7", + "@intlify/shared": "^11.1.12", + "@intlify/vue-i18n-extensions": "^8.0.0", + "@rollup/pluginutils": "^5.1.0", + "@typescript-eslint/scope-manager": "^8.13.0", + "@typescript-eslint/typescript-estree": "^8.13.0", + "debug": "^4.3.3", + "fast-glob": "^3.2.12", + "pathe": "^2.0.3", + "picocolors": "^1.0.0", + "unplugin": "^2.3.4", + "vue": "^3.5.21" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "petite-vue-i18n": "*", + "vue": "^3.2.25", + "vue-i18n": "*" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/unplugin-vue-i18n/node_modules/@typescript-eslint/scope-manager": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@intlify/unplugin-vue-i18n/node_modules/unplugin": { + "version": "2.3.11", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@intlify/utils": { + "version": "0.14.1", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions": { + "version": "8.0.0", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.24.6", + "@intlify/shared": "^10.0.0", + "@vue/compiler-dom": "^3.2.45", + "vue-i18n": "^10.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@intlify/shared": "^9.0.0 || ^10.0.0 || ^11.0.0", + "@vue/compiler-dom": "^3.0.0", + "vue": "^3.0.0", + "vue-i18n": "^9.0.0 || ^10.0.0 || ^11.0.0" + }, + "peerDependenciesMeta": { + "@intlify/shared": { + "optional": true + }, + "@vue/compiler-dom": { + "optional": true + }, + "vue": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/core-base": { + "version": "10.0.8", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "10.0.8", + "@intlify/shared": "10.0.8" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/message-compiler": { + "version": "10.0.8", + "license": "MIT", + "dependencies": { + "@intlify/shared": "10.0.8", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/shared": { + "version": "10.0.8", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/vue-i18n": { + "version": "10.0.8", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "10.0.8", + "@intlify/shared": "10.0.8", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.5.1", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.3", + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/tar": { + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", + "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@miyaneee/rollup-plugin-json5": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "json5": "^2.2.3" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/cli": { + "version": "3.34.0", + "license": "MIT", + "dependencies": { + "@bomb.sh/tab": "^0.0.14", + "@clack/prompts": "^1.1.0", + "c12": "^3.3.3", + "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" + }, + "bin": { + "nuxi": "bin/nuxi.mjs", + "nuxi-ng": "bin/nuxi.mjs", + "nuxt": "bin/nuxi.mjs", + "nuxt-cli": "bin/nuxi.mjs" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + }, + "peerDependencies": { + "@nuxt/schema": "^4.3.1" + }, + "peerDependenciesMeta": { + "@nuxt/schema": { + "optional": true + } + } + }, + "node_modules/@nuxt/cli/node_modules/citty": { + "version": "0.2.2", + "license": "MIT" + }, + "node_modules/@nuxt/cli/node_modules/std-env": { + "version": "3.10.0", + "license": "MIT" + }, + "node_modules/@nuxt/content": { + "version": "3.13.0", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.4.2", + "@nuxtjs/mdc": "^0.21.0", + "@shikijs/langs": "^4.0.2", + "@sqlite.org/sqlite-wasm": "3.50.4-build1", + "@standard-schema/spec": "^1.1.0", + "@webcontainer/env": "^1.1.1", + "c12": "^3.3.3", + "chokidar": "^5.0.0", + "consola": "^3.4.2", + "db0": "^0.3.4", + "defu": "^6.1.4", + "destr": "^2.0.5", + "git-url-parse": "^16.1.0", + "hookable": "^5.5.3", + "isomorphic-git": "^1.37.4", + "jiti": "^2.6.1", + "json-schema-to-typescript-lite": "^15.0.0", + "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", + "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.8", + "socket.io-client": "^4.8.3", + "std-env": "^4.0.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": "^3.0.0", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.2" + }, + "engines": { + "node": ">= 20.19.0" + }, + "peerDependencies": { + "@electric-sql/pglite": "*", + "@libsql/client": "*", + "@valibot/to-json-schema": "^1.5.0", + "better-sqlite3": "^12.5.0", + "sqlite3": "*", + "valibot": "^1.2.0" + }, + "peerDependenciesMeta": { + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@valibot/to-json-schema": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "valibot": { + "optional": true + } + } + }, + "node_modules/@nuxt/content/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@nuxt/content/node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/@nuxt/devalue": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/@nuxt/devtools": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-3.2.4.tgz", + "integrity": "sha512-VPbFy7hlPzWpEZk4BsuVpNuHq1ZYGV9xezjb7/NGuePuNLqeNn74YZugU+PCtva7OwKhEeTXmMK0Mqo/6+nwNA==", + "license": "MIT", + "dependencies": { + "@nuxt/devtools-kit": "3.2.4", + "@nuxt/devtools-wizard": "3.2.4", + "@nuxt/kit": "^4.4.2", + "@vue/devtools-core": "^8.1.0", + "@vue/devtools-kit": "^8.1.0", + "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": "^1.4.2", + "get-port-please": "^3.2.0", + "hookable": "^6.1.0", + "image-meta": "^0.2.2", + "is-installed-globally": "^1.0.0", + "launch-editor": "^2.13.1", + "local-pkg": "^1.1.2", + "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.4", + "simple-git": "^3.33.0", + "sirv": "^3.0.2", + "structured-clone-es": "^2.0.0", + "tinyglobby": "^0.2.15", + "vite-plugin-inspect": "^11.3.3", + "vite-plugin-vue-tracer": "^1.3.0", + "which": "^6.0.1", + "ws": "^8.19.0" + }, + "bin": { + "devtools": "cli.mjs" + }, + "peerDependencies": { + "@vitejs/devtools": "*", + "vite": ">=6.0" + }, + "peerDependenciesMeta": { + "@vitejs/devtools": { + "optional": true + } + } + }, + "node_modules/@nuxt/devtools-kit": { + "version": "3.2.4", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.4.2", + "execa": "^8.0.1" + }, + "peerDependencies": { + "vite": ">=6.0" + } + }, + "node_modules/@nuxt/devtools-wizard": { + "version": "3.2.4", + "license": "MIT", + "dependencies": { + "@clack/prompts": "^1.1.0", + "consola": "^3.4.2", + "diff": "^8.0.3", + "execa": "^8.0.1", + "magicast": "^0.5.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "semver": "^7.7.4" + }, + "bin": { + "devtools-wizard": "cli.mjs" + } + }, + "node_modules/@nuxt/devtools-wizard/node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@nuxt/devtools/node_modules/hookable": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", + "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", + "license": "MIT" + }, + "node_modules/@nuxt/devtools/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@nuxt/devtools/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@nuxt/fonts": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@nuxt/devtools-kit": "^3.2.1", + "@nuxt/kit": "^4.2.2", + "consola": "^3.4.2", + "defu": "^6.1.4", + "fontless": "^0.2.1", + "h3": "^1.15.5", + "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" + } + }, + "node_modules/@nuxt/fonts/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@nuxt/fonts/node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@nuxt/icon": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "@iconify/collections": "^1.0.641", + "@iconify/types": "^2.0.0", + "@iconify/utils": "^3.1.0", + "@iconify/vue": "^5.0.0", + "@nuxt/devtools-kit": "^3.1.1", + "@nuxt/kit": "^4.2.2", + "consola": "^3.4.2", + "local-pkg": "^1.1.2", + "mlly": "^1.8.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.10.0", + "tinyglobby": "^0.2.15" + } + }, + "node_modules/@nuxt/icon/node_modules/@iconify/utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.0.tgz", + "integrity": "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@iconify/types": "^2.0.0", + "mlly": "^1.8.0" + } + }, + "node_modules/@nuxt/icon/node_modules/std-env": { + "version": "3.10.0", + "license": "MIT" + }, + "node_modules/@nuxt/kit": { + "version": "4.4.2", + "license": "MIT", + "dependencies": { + "c12": "^3.3.3", + "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" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/nitro-server": { + "version": "4.4.2", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-typescript": "^7.28.6", + "@nuxt/devalue": "^2.0.2", + "@nuxt/kit": "4.4.2", + "@unhead/vue": "^2.1.12", + "@vue/shared": "^3.5.30", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "devalue": "^5.6.3", + "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", + "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", + "vue": "^3.5.30", + "vue-bundle-renderer": "^2.2.0", + "vue-devtools-stub": "^0.1.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@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 + } + } + }, + "node_modules/@nuxt/nitro-server/node_modules/@unhead/vue": { + "version": "2.1.13", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1", + "unhead": "2.1.13" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.18" + } + }, + "node_modules/@nuxt/nitro-server/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nuxt/nitro-server/node_modules/hookable": { + "version": "6.1.1", + "license": "MIT" + }, + "node_modules/@nuxt/nitro-server/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@nuxt/nitro-server/node_modules/unhead": { + "version": "2.1.13", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/@nuxt/nitro-server/node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@nuxt/schema": { + "version": "4.4.2", + "license": "MIT", + "dependencies": { + "@vue/shared": "^3.5.30", + "defu": "^6.1.4", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "std-env": "^4.0.0" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/telemetry": { + "version": "2.8.0", + "license": "MIT", + "dependencies": { + "citty": "^0.2.1", + "consola": "^3.4.2", + "ofetch": "^2.0.0-alpha.3", + "rc9": "^3.0.0", + "std-env": "^4.0.0" + }, + "bin": { + "nuxt-telemetry": "bin/nuxt-telemetry.mjs" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "@nuxt/kit": ">=3.0.0" + } + }, + "node_modules/@nuxt/telemetry/node_modules/citty": { + "version": "0.2.2", + "license": "MIT" + }, + "node_modules/@nuxt/telemetry/node_modules/ofetch": { + "version": "2.0.0-alpha.3", + "license": "MIT" + }, + "node_modules/@nuxt/vite-builder": { + "version": "4.4.2", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "4.4.2", + "@rollup/plugin-replace": "^6.0.3", + "@vitejs/plugin-vue": "^6.0.4", + "@vitejs/plugin-vue-jsx": "^5.1.4", + "autoprefixer": "^10.4.27", + "consola": "^3.4.2", + "cssnano": "^7.1.3", + "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", + "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", + "vite-node": "^5.3.0", + "vite-plugin-checker": "^0.12.0", + "vue-bundle-renderer": "^2.2.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@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 + } + } + }, + "node_modules/@nuxt/vite-builder/node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/@nuxt/vite-builder/node_modules/caniuse-lite": { + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/@nuxt/vite-builder/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nuxtjs/color-mode": { + "version": "3.5.2", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^3.13.2", + "pathe": "^1.1.2", + "pkg-types": "^1.2.1", + "semver": "^7.6.3" + } + }, + "node_modules/@nuxtjs/color-mode/node_modules/@nuxt/kit": { + "version": "3.21.2", + "license": "MIT", + "dependencies": { + "c12": "^3.3.3", + "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", + "knitwork": "^1.3.0", + "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" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxtjs/color-mode/node_modules/@nuxt/kit/node_modules/pathe": { + "version": "2.0.3", + "license": "MIT" + }, + "node_modules/@nuxtjs/color-mode/node_modules/@nuxt/kit/node_modules/pkg-types": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/@nuxtjs/color-mode/node_modules/pathe": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/@nuxtjs/color-mode/node_modules/pkg-types": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/@nuxtjs/color-mode/node_modules/pkg-types/node_modules/confbox": { + "version": "0.1.8", + "license": "MIT" + }, + "node_modules/@nuxtjs/color-mode/node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "license": "MIT" + }, + "node_modules/@nuxtjs/i18n": { + "version": "10.2.4", + "license": "MIT", + "dependencies": { + "@intlify/core": "^11.2.8", + "@intlify/h3": "^0.7.4", + "@intlify/shared": "^11.2.8", + "@intlify/unplugin-vue-i18n": "^11.0.7", + "@intlify/utils": "^0.14.1", + "@miyaneee/rollup-plugin-json5": "^1.2.0", + "@nuxt/kit": "^4.4.2", + "@rollup/plugin-yaml": "^4.1.2", + "@vue/compiler-sfc": "^3.5.22", + "defu": "^6.1.4", + "devalue": "^5.1.1", + "h3": "^1.15.4", + "knitwork": "^1.2.0", + "magic-string": "^0.30.21", + "mlly": "^1.7.4", + "nuxt-define": "^1.0.0", + "ohash": "^2.0.11", + "oxc-parser": "^0.112.0", + "oxc-transform": "^0.112.0", + "oxc-walker": "^0.7.0", + "pathe": "^2.0.3", + "ufo": "^1.6.1", + "unplugin": "^2.3.11", + "unrouting": "^0.1.5", + "unstorage": "^1.16.1", + "vue-i18n": "^11.1.11", + "vue-router": "^5.0.4" + }, + "engines": { + "node": ">=20.11.1" + }, + "funding": { + "url": "https://github.com/sponsors/bobbiegoede" + } + }, + "node_modules/@nuxtjs/i18n/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@nuxtjs/i18n/node_modules/unplugin": { + "version": "2.3.11", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxtjs/i18n/node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@nuxtjs/mdc": { + "version": "0.21.1", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.4.2", + "@shikijs/core": "^4.0.2", + "@shikijs/engine-javascript": "^4.0.2", + "@shikijs/langs": "^4.0.2", + "@shikijs/themes": "^4.0.2", + "@shikijs/transformers": "^4.0.2", + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "@vue/compiler-core": "^3.5.31", + "consola": "^3.4.2", + "debug": "^4.4.3", + "defu": "^6.1.4", + "destr": "^2.0.5", + "detab": "^3.0.2", + "github-slugger": "^2.0.0", + "hast-util-format": "^1.1.0", + "hast-util-to-mdast": "^10.1.2", + "hast-util-to-string": "^3.0.1", + "mdast-util-to-hast": "^13.2.1", + "micromark-util-sanitize-uri": "^2.0.1", + "parse5": "^8.0.0", + "pathe": "^2.0.3", + "property-information": "^7.1.0", + "rehype-external-links": "^3.0.0", + "rehype-minify-whitespace": "^6.0.2", + "rehype-raw": "^7.0.0", + "rehype-remark": "^10.0.1", + "rehype-slug": "^6.0.0", + "rehype-sort-attribute-values": "^5.0.1", + "rehype-sort-attributes": "^5.0.1", + "remark-emoji": "^5.0.2", + "remark-gfm": "^4.0.1", + "remark-mdc": "^3.10.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-stringify": "^11.0.0", + "scule": "^1.3.0", + "shiki": "^4.0.2", + "ufo": "^1.6.3", + "unified": "^11.0.5", + "unist-builder": "^4.0.0", + "unist-util-visit": "^5.1.0", + "unwasm": "^0.5.3", + "vfile": "^6.0.3" + } + }, + "node_modules/@oxc-minify/binding-android-arm-eabi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-android-arm-eabi/-/binding-android-arm-eabi-0.117.0.tgz", + "integrity": "sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-android-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-android-arm64/-/binding-android-arm64-0.117.0.tgz", + "integrity": "sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-darwin-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-darwin-arm64/-/binding-darwin-arm64-0.117.0.tgz", + "integrity": "sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-darwin-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-darwin-x64/-/binding-darwin-x64-0.117.0.tgz", + "integrity": "sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-freebsd-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-freebsd-x64/-/binding-freebsd-x64-0.117.0.tgz", + "integrity": "sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-arm-gnueabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.117.0.tgz", + "integrity": "sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-arm-musleabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.117.0.tgz", + "integrity": "sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-arm64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.117.0.tgz", + "integrity": "sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-arm64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.117.0.tgz", + "integrity": "sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-ppc64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.117.0.tgz", + "integrity": "sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-riscv64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.117.0.tgz", + "integrity": "sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-riscv64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.117.0.tgz", + "integrity": "sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-s390x-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.117.0.tgz", + "integrity": "sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-x64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.117.0.tgz", + "integrity": "sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-x64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-x64-musl/-/binding-linux-x64-musl-0.117.0.tgz", + "integrity": "sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-openharmony-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-openharmony-arm64/-/binding-openharmony-arm64-0.117.0.tgz", + "integrity": "sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-wasm32-wasi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-wasm32-wasi/-/binding-wasm32-wasi-0.117.0.tgz", + "integrity": "sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-minify/binding-win32-arm64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.117.0.tgz", + "integrity": "sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-win32-ia32-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.117.0.tgz", + "integrity": "sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-win32-x64-msvc": { + "version": "0.117.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.112.0.tgz", + "integrity": "sha512-retxBzJ39Da7Lh/eZTn9+HJgTeDUxZIpuI0urOsmcFsBKXAth3lc1jIvwseQ9qbAI/VrsoFOXiGIzgclARbAHg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.112.0.tgz", + "integrity": "sha512-pRkbBRbuIIsufUWpOJ+JHWfJFNupkidy4sbjfcm37e6xwYrn9LSKMLubPHvNaL1Zf92ZRhGiwaYkEcmaFg2VcA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.112.0.tgz", + "integrity": "sha512-fh6/KQL/cbH5DukT3VkdCqnULLuvVnszVKySD5IgSE0WZb32YZo/cPsPdEv052kk6w3N4agu+NTiMnZjcvhUIg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.112.0.tgz", + "integrity": "sha512-vUBOOY1E30vlu/DoTGDoT1UbLlwu5Yv9tqeBabAwRzwNDz8Skho16VKhsBDUiyqddtpsR3//v6vNk38w4c+6IA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.112.0.tgz", + "integrity": "sha512-hnEtO/9AVnYWzrgnp6L+oPs/6UqlFeteUL6n7magkd2tttgmx1C01hyNNh6nTpZfLzEVJSNJ0S+4NTsK2q2CxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.112.0.tgz", + "integrity": "sha512-WxJrUz3pcIc2hp4lvJbvt/sTL33oX9NPvkD3vDDybE6tc0V++rS+hNOJxwXdD2FDIFPkHs/IEn5asEZFVH+VKw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.112.0.tgz", + "integrity": "sha512-jj8A8WWySaJQqM9XKAIG8U2Q3qxhFQKrXPWv98d1oC35at+L1h+C+V4M3l8BAKhpHKCu3dYlloaAbHd5q1Hw6A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.112.0.tgz", + "integrity": "sha512-G2F8H6FcAExVK5vvhpSh61tqWx5QoaXXUnSsj5FyuDiFT/K7AMMVSQVqnZREDc+YxhrjB0vnKjCcuobXK63kIw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.112.0.tgz", + "integrity": "sha512-3R0iqjM3xYOZCnwgcxOQXH7hrz64/USDIuLbNTM1kZqQzRqaR4w7SwoWKU934zABo8d0op2oSwOp+CV3hZnM7A==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.112.0.tgz", + "integrity": "sha512-lAQf8PQxfgy7h0bmcfSVE3hg3qMueshPYULFsCrHM+8KefGZ9W+ZMvRyU33gLrB4w1O3Fz1orR0hmKMCRxXNrQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.112.0.tgz", + "integrity": "sha512-2QlvQBUhHuAE3ezD4X3CAEKMXdfgInggQ5Bj/7gb5NcYP3GyfLTj7c+mMu+BRwfC9B3AXBNyqHWbqEuuUvZyRQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.112.0.tgz", + "integrity": "sha512-v06iu0osHszgqJ1dLQRb6leWFU1sjG/UQk4MoVBtE6ZPewgfTkby6G9II1SpEAf2onnAuQceVYxQH9iuU3NJqw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.112.0.tgz", + "integrity": "sha512-+5HhNHtxsdcd7+ljXFnn9FOoCNXJX3UPgIfIE6vdwS1HqdGNH6eAcVobuqGOp54l8pvcxDQA6F4cPswCgLrQfQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.112.0.tgz", + "integrity": "sha512-jKwO7ZLNkjxwg7FoCLw+fJszooL9yXRZsDN0AQ1AQUTWq1l8GH/2e44k68N3fcP19jl8O8jGpqLAZcQTYk6skA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.112.0.tgz", + "integrity": "sha512-TYqnuKV/p3eOc+N61E0961nA7DC+gaCeJ3+V2LcjJdTwFMdikqWL6uVk1jlrpUCBrozHDATVUKDZYH7r4FQYjQ==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.112.0.tgz", + "integrity": "sha512-ZhrVmWFifVEFQX4XPwLoVFDHw9tAWH9p9vHsHFH+5uCKdfVR+jje4WxVo6YrokWCboGckoOzHq5KKMOcPZfkRg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.112.0.tgz", + "integrity": "sha512-Gr8X2PUU3hX1g3F5oLWIZB8DhzDmjr5TfOrmn5tlBOo9l8ojPGdKjnIBfObM7X15928vza8QRKW25RTR7jfivg==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.112.0.tgz", + "integrity": "sha512-t5CDLbU70Ea88bGRhvU/dLJTc/Wcrtf2Jp534E8P3cgjAvHDjdKsfDDqBZrhybJ8Jv9v9vW5ngE40EK51BluDA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.112.0.tgz", + "integrity": "sha512-rZH0JynCCwnhe2HfRoyNOl/Kfd9pudoWxgpC5OZhj7j77pMK0UOAa35hYDfrtSOUk2HLzrikV5dPUOY2DpSBSA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.112.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.112.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxc-transform/binding-android-arm-eabi": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm-eabi/-/binding-android-arm-eabi-0.112.0.tgz", + "integrity": "sha512-r4LuBaPnOAi0eUOBNi880Fm2tO2omH7N1FRrL6+nyz/AjQ+QPPLtoyZJva0O+sKi1buyN/7IzM5p9m+5ANSDbg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-android-arm64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm64/-/binding-android-arm64-0.112.0.tgz", + "integrity": "sha512-ve46vQcQrY8eGe8990VSlS9gkD+AogJqbtfOkeua+5sQGQTDgeIRRxOm7ktCo19uZc2bEBwXRJITgosd+NRVmQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-darwin-arm64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-arm64/-/binding-darwin-arm64-0.112.0.tgz", + "integrity": "sha512-ddbmLU3Tr+i7MOynfwAXxUXud3SjJKlv7XNjaq08qiI8Av/QvhXVGc2bMhXkWQSMSBUeTDoiughKjK+Zsb6y/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-darwin-x64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-x64/-/binding-darwin-x64-0.112.0.tgz", + "integrity": "sha512-TKvmNw96jQZPqYb4pRrzLFDailNB3YS14KNn+x2hwRbqc6CqY96S9PYwyOpVpYdxfoRjYO9WgX9SoS+62a1DPA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-freebsd-x64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-freebsd-x64/-/binding-freebsd-x64-0.112.0.tgz", + "integrity": "sha512-YPMkSCDaelO8HHYRMYjm+Q+IfkfIbdtQzwPuasItYkq8UUkNeHNPheNh2JkvQa3c+io3E9ePOgHQ2yihpk7o/Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm-gnueabihf": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.112.0.tgz", + "integrity": "sha512-nA7kzQGNEpuTRknst/IJ3l8hqmDmEda3aun6jkXgp7gKxESjuHeaNH04mKISxvJ7fIacvP2g/wtTSnm4u5jL8Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm-musleabihf": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.112.0.tgz", + "integrity": "sha512-w8GuLmckKlGc3YujaZKhtbFxziCcosvM2l9GnQjCb/yENWLGDiyQOy0BTAgPGdJwpYTiOeJblEXSuXYvlE1Ong==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm64-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.112.0.tgz", + "integrity": "sha512-9LwwGnJ8+WT0rXcrI8M0RJtDNt91eMqcDPPEvJxhRFHIMcHTy5D5xT+fOl3Us0yMqKo3HUWkbfUYqAp4GoZ3Jw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm64-musl": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.112.0.tgz", + "integrity": "sha512-Lg6VOuSd3oXv7J0eGywgqh/086h+qQzIBOD+47pYKMTTJcbDe+f3h/RgGoMKJE5HhiwT5sH1aGEJfIfaYUiVSw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-ppc64-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.112.0.tgz", + "integrity": "sha512-PXzmj82o1moA4IGphYImTRgc2youTi4VRfyFX3CHwLjxPcQ5JtcsgbDt4QUdOzXZ+zC07s5jf2ZzhRapEOlj2w==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-riscv64-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.112.0.tgz", + "integrity": "sha512-vhJsMsVH/6xwa3bt1LGts33FXUkGjaEGDwsRyp4lIfOjSfQVWMtCmWMFNaA0dW9FVWdD2Gt2fSFBSZ+azDxlpg==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-riscv64-musl": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.112.0.tgz", + "integrity": "sha512-cXWFb7z+2IjFUEcXtRwluq9oEG5qnyFCjiu3SWrgYNcWwPdHusv3I/7K5/CTbbi4StoZ5txbi7/iSfDHNyWuRw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-s390x-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.112.0.tgz", + "integrity": "sha512-eEFu4SRqJTJ20/88KRWmp+jpHKAw0Y1DsnSgpEeXyBIIcsOaLIUMU/TfYWUmqRbvbMV9rmOmI3kp5xWYUq6kSQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-x64-gnu": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.112.0.tgz", + "integrity": "sha512-ST1MDT+TlOyZ1c5btrGinRSUW2Jf4Pa+0gdKwsyjDSOC3dxy2ZNkN3mosTf4ywc3J+mxfYKqtjs7zSwHz03ILA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-x64-musl": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-musl/-/binding-linux-x64-musl-0.112.0.tgz", + "integrity": "sha512-ISQoA3pD4cyTGpf9sXXeerH6pL2L6EIpdy6oAy2ttkswyVFDyQNVOVIGIdLZDgbpmqGljxZnWqt/J/N68pQaig==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-openharmony-arm64": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-openharmony-arm64/-/binding-openharmony-arm64-0.112.0.tgz", + "integrity": "sha512-UOGVrGIv7yLJovyEXEyUTADuLq98vd/cbMHFLJweRXD+11I8Tn4jASi4WzdsN8C3BVYGRHrXH2NlSBmhz33a4g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-wasm32-wasi": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-wasm32-wasi/-/binding-wasm32-wasi-0.112.0.tgz", + "integrity": "sha512-XIX7Gpq9koAvzBVHDlVFHM79r5uOVK6kTEsdsN4qaajpjkgtv4tdsAOKIYK6l7fUbsbE6xS+6w1+yRFrDeC1kg==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-transform/binding-win32-arm64-msvc": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.112.0.tgz", + "integrity": "sha512-EgXef9kOne9BNsbYBbuRqxk2hteT0xsAGcx/VbtCBMJYNj8fANFhT271DUSOgfa4DAgrQQmsyt/Kr1aV9mpU9w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-win32-ia32-msvc": { + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.112.0.tgz", + "integrity": "sha512-6QaB0qjNaou2YR+blncHdw7j0e26IOwOIjLbhVGDeuf9+4rjJeiqRXJ2hOtCcS4zblnao/MjdgQuZ3fM0nl+Kw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-win32-x64-msvc": { + "version": "0.112.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm": { + "version": "2.5.6", + "bundleDependencies": [ + "napi-wasm" + ], + "license": "MIT", + "dependencies": { + "is-glob": "^4.0.3", + "napi-wasm": "^1.1.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "license": "MIT" + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.7.0", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/dumper/node_modules/@sindresorhus/is": { + "version": "7.2.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.13", + "license": "MIT" + }, + "node_modules/@rollup/plugin-alias": { + "version": "6.0.0", + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "rollup": ">=4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "29.0.2", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "serialize-javascript": "^7.0.3", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-yaml": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "js-yaml": "^4.1.0", + "tosource": "^2.0.0-alpha.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "cpu": [ + "loong64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "cpu": [ + "loong64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.2", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.2", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/transformers": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "license": "MIT" + }, + "node_modules/@simple-git/args-pathspec": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/@simple-git/argv-parser": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "@simple-git/args-pathspec": "^1.0.3" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "license": "MIT" + }, + "node_modules/@sqlite.org/sqlite-wasm": { + "version": "3.50.4-build1", + "license": "Apache-2.0", + "bin": { + "sqlite-wasm": "bin/index.js" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.3", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.3", + "@tailwindcss/oxide-darwin-arm64": "4.2.3", + "@tailwindcss/oxide-darwin-x64": "4.2.3", + "@tailwindcss/oxide-freebsd-x64": "4.2.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.3", + "@tailwindcss/oxide-linux-x64-musl": "4.2.3", + "@tailwindcss/oxide-wasm32-wasi": "4.2.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.3.tgz", + "integrity": "sha512-0Jmt1U/zPqeKp1+fvgI3qMqrV5b/EcFIbE5Dl5KdPl5Ri6e+95nlYNjfB3w8hJBeASI4IQSnIMz0tdVP1AVO4g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.3.tgz", + "integrity": "sha512-c+/Etn/nghKBhd9fh2diG+3SEV1VTTPLlqH209yleofi28H87Cy6g1vsd3W3kf6r/dR5g4G4TEwHxo2Ydn6yFw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.3.tgz", + "integrity": "sha512-1DrKKsdJTLuLWVdpaLZ0j/g9YbCZyP9xnwSqEvl3gY4ZHdXmX7TwVAHkoWUljOq7JK5zvzIGhrYmfE/2DJ5qaA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.3.tgz", + "integrity": "sha512-HE6HHZYF8k7m80eVQ0RBvRGBdvvLvCpHiT38IRH9JSnBlt1T7gDzWoslWjmpXQFuqlRpzkCpbdKJa3NxWMfgVA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.3.tgz", + "integrity": "sha512-Li2wVd2kkKlKkTdpo7ujHSv6kxD1UYMvulAraikyvVf6AKNZ/VHbm8XoSNimZ+dF7SOFaDD2VAT64SK7WKcbjQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.3.tgz", + "integrity": "sha512-otIiImZaHj9MiDK02ItoWxIVcMTZVAX2F1c32bg9y7ecV0AnN5JHDZqIO8LxWsTuig1d+Bjg0cBWn4A9sGJO9Q==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.3.tgz", + "integrity": "sha512-MmIA32rNEOrjh6wnevlR3OjjlCuwgZ4JMJo7Vrhk4Fk56Vxi7EeF7cekSKwvlrnfcn/ERC1LdcG3sFneU8WdoA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.3.tgz", + "integrity": "sha512-BiCy1YV0IKO+xbD7gyZnENU4jdwDygeGQjncJoeIE5Kp4UqWHFsKUSJ3pp7vYURrqVzwJX2xD5gQeGnoXp4xPQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.3.tgz", + "integrity": "sha512-venvyAu0AMKdr0c1Oz23IJJdZ72zSwKyHrLvqQV1cn49vPAJk3AuVtDkJ1ayk1sYI4M4j8Jv6ZGflpaP0QVSXQ==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.3.tgz", + "integrity": "sha512-e3kColrZZCdtbwIOc07cNQ2zNf1sTPXTYLjjPlsgsaf+ttzAg/hOlDyEgHoOlBGxM88nPxeVaOGe9ThqVzPncg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.3.tgz", + "integrity": "sha512-qpwoUPzfu71cppxOtcz4LXMR1brljS13yOcAAnVHKIL++NJvSQKZBKlP39pVowd+G6Mq34YAbf4CUUYdLWL9gQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.3", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.2.3", + "@tailwindcss/oxide": "4.2.3", + "postcss": "^8.5.6", + "tailwindcss": "4.2.3" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.3", + "@tailwindcss/oxide": "4.2.3", + "tailwindcss": "4.2.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@takumi-rs/core": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core/-/core-1.0.15.tgz", + "integrity": "sha512-zof1cMTKuswcuYpuJxPYQZHSgn2/02Yb4TnZbRKkRL2F5zB3z3p/tlFZc/2pkxvSpJn4YlN2GrOZkYV1Axr6gA==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@takumi-rs/helpers": "1.0.15" + }, + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + }, + "optionalDependencies": { + "@takumi-rs/core-darwin-arm64": "1.0.15", + "@takumi-rs/core-darwin-x64": "1.0.15", + "@takumi-rs/core-linux-arm64-gnu": "1.0.15", + "@takumi-rs/core-linux-arm64-musl": "1.0.15", + "@takumi-rs/core-linux-x64-gnu": "1.0.15", + "@takumi-rs/core-linux-x64-musl": "1.0.15", + "@takumi-rs/core-win32-arm64-msvc": "1.0.15", + "@takumi-rs/core-win32-x64-msvc": "1.0.15" + } + }, + "node_modules/@takumi-rs/core-darwin-arm64": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-darwin-arm64/-/core-darwin-arm64-0.73.1.tgz", + "integrity": "sha512-6DQZ7XM6GArr32n9k6Es3/1X0gJHEnVSdUTVUPVGRQrCmscjV07zrTNXn8VoU81XIl5uHQpRgUT9HhaLPbd/ew==", + "cpu": [ + "arm64" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core-darwin-x64": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-darwin-x64/-/core-darwin-x64-0.73.1.tgz", + "integrity": "sha512-GUggPolYTa2bAuWu3aqZZCSzCo+ZGFsLKzW+pkc6D8n+PrWCko25vbMpkNhG7Cz5a7UcuWUaTba8rBejNKF/HQ==", + "cpu": [ + "x64" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core-linux-arm64-gnu": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-linux-arm64-gnu/-/core-linux-arm64-gnu-0.73.1.tgz", + "integrity": "sha512-NEVs6lu1MeKlZKJjOJdp3pL/lyLpOCr2QHp4zIH4eM5r4kZi2uFj4jgv4U9fqWtiwJaaSdaox4/ffkzBsYcFbw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core-linux-arm64-musl": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-linux-arm64-musl/-/core-linux-arm64-musl-0.73.1.tgz", + "integrity": "sha512-idzxH2JcUo+yD2t7OexbPB5DN+1x88GcpDKoJVvwc2nOxr7KQGdGqALVBOe5i2mNnkUSIr/ZeBz7yBII5bA6ag==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core-linux-x64-gnu": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-linux-x64-gnu/-/core-linux-x64-gnu-0.73.1.tgz", + "integrity": "sha512-XSOf9b0F5lUScBcGegr8PQWuEJXeFdG7rsZLe1MvTVOzrmzqEhLnaK4xckV1ykWF5qWCf78yArqLt+C7mf+u6Q==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core-linux-x64-musl": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-linux-x64-musl/-/core-linux-x64-musl-0.73.1.tgz", + "integrity": "sha512-rHsvVVT+m4+zaIjJxp2dn8ibvjCtXRasByMii6st7zRwioQIibCAMq/Ik/uVcPFpeMBhyai6mGZe0NTWq23ZEA==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core-win32-arm64-msvc": { + "version": "0.73.1", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-win32-arm64-msvc/-/core-win32-arm64-msvc-0.73.1.tgz", + "integrity": "sha512-YEA79NFEAgCI2bs0L/xRWMlBHo8Z1q+Oy/7pPxu4F7Qxy5JVGYwd3UDKnf01os2eNfdNmMI+7t0F5sderk6hiQ==", + "cpu": [ + "arm64" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core-win32-x64-msvc": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-win32-x64-msvc/-/core-win32-x64-msvc-1.0.15.tgz", + "integrity": "sha512-gGq4kGfmqtNRWsJXOXNZHtWbouTSSym8jpoYvAs15eFB5bPuXJznQeZ883OaRDKuqXpPkwNonVKZM15qOSMcCQ==", + "cpu": [ + "x64" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core/node_modules/@takumi-rs/core-darwin-arm64": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-darwin-arm64/-/core-darwin-arm64-1.0.15.tgz", + "integrity": "sha512-yx8JvVVMvEMlk6hyrbJCjPu2Y1RRtCj8RI9qI5b1LnK4gIb1fr4UY+wo7ZCb9UT2c4O87CAOdzWgKaNNyCab1Q==", + "cpu": [ + "arm64" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core/node_modules/@takumi-rs/core-darwin-x64": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-darwin-x64/-/core-darwin-x64-1.0.15.tgz", + "integrity": "sha512-ZIxNwlCVcheOJFw7udy399DWjO/PkCOqjTrWQh9b3e3M7h83YtDSSdGW8qpjqPANS4Yuf0tsNdKBtx3uuPtZJw==", + "cpu": [ + "x64" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core/node_modules/@takumi-rs/core-linux-arm64-gnu": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.0.15.tgz", + "integrity": "sha512-dY/RsyncIXRBO/NK6RY9IRguhtPlW2r0VvMZ8Tkt4gCoRFyE2yC4Cr238zfKOD6YnfIzGKGOnn5WGX6fFKmH+A==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core/node_modules/@takumi-rs/core-linux-arm64-musl": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-linux-arm64-musl/-/core-linux-arm64-musl-1.0.15.tgz", + "integrity": "sha512-gkdhCE/wTuuVR3LcsH3OwT8/i1iaKqmnbaUYU0lgbuYxsgzZ+OgB9ZXS/JjSjlBLcndDC07h6FQ5z7MpMGla8Q==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core/node_modules/@takumi-rs/core-linux-x64-gnu": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-linux-x64-gnu/-/core-linux-x64-gnu-1.0.15.tgz", + "integrity": "sha512-cRmEYeYEmSGVwt2DbQdHvukEmSatOjcpDz8UGdLh43y8XTUFDexfhQ953GHFMinT6RhrD3gntCYVZLI5EEEsfQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core/node_modules/@takumi-rs/core-linux-x64-musl": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-linux-x64-musl/-/core-linux-x64-musl-1.0.15.tgz", + "integrity": "sha512-vmh29lENj8vgDGzVWUOIYOoDqkVgA4yyOYdEElMhclNjqOjtoTX3MDZuYRgHKykuSFhNUNdnxVTePZe9w/xDlQ==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/core/node_modules/@takumi-rs/core-win32-arm64-msvc": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.0.15.tgz", + "integrity": "sha512-LU2aLuvQA0WWPrGzZMDYEgWxxDg+qda4bFi+qcwyT+ZXkOhcNtaCiCVFYJOqpJY5iHo5pHtZynA4HJ5DkjCaXA==", + "cpu": [ + "arm64" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/@takumi-rs/helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@takumi-rs/helpers/-/helpers-1.0.15.tgz", + "integrity": "sha512-Qxt8mQY3QNKbseKsjgZdM4v324nSwBpQ6H4SPIv3jZuy3JUzSXhgtTP395S9/MQToSL6yCBw4L3c02okb2f5Sw==", + "license": "(MIT OR Apache-2.0)", + "peerDependencies": { + "react": "^19.2.5", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.14.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-table": { + "version": "8.21.3", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": ">=3.2" + } + }, + "node_modules/@tanstack/vue-virtual": { + "version": "3.13.24", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.14.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" + } + }, + "node_modules/@tiptap/core": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "3.22.4", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-collaboration": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4", + "@tiptap/y-tiptap": "^3.0.2", + "yjs": "^13" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-drag-handle": { + "version": "3.22.4", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.13" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/extension-collaboration": "3.22.4", + "@tiptap/extension-node-range": "3.22.4", + "@tiptap/pm": "3.22.4", + "@tiptap/y-tiptap": "^3.0.2" + } + }, + "node_modules/@tiptap/extension-drag-handle-vue-3": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-drag-handle": "3.22.4", + "@tiptap/pm": "3.22.4", + "@tiptap/vue-3": "3.22.4", + "vue": "^3.0.0" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@floating-ui/dom": "^1.0.0", + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-image": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-link": { + "version": "3.22.4", + "license": "MIT", + "dependencies": { + "linkifyjs": "^4.3.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list-keymap": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-mention": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4", + "@tiptap/suggestion": "3.22.4" + } + }, + "node_modules/@tiptap/extension-node-range": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-placeholder": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extensions": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/markdown": { + "version": "3.22.4", + "license": "MIT", + "dependencies": { + "marked": "^17.0.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/pm": { + "version": "3.22.4", + "license": "MIT", + "dependencies": { + "prosemirror-changeset": "^2.3.0", + "prosemirror-commands": "^1.6.2", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-keymap": "^1.2.2", + "prosemirror-model": "^1.24.1", + "prosemirror-schema-list": "^1.5.0", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.6.4", + "prosemirror-transform": "^1.10.2", + "prosemirror-view": "^1.38.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "3.22.4", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.22.4", + "@tiptap/extension-blockquote": "^3.22.4", + "@tiptap/extension-bold": "^3.22.4", + "@tiptap/extension-bullet-list": "^3.22.4", + "@tiptap/extension-code": "^3.22.4", + "@tiptap/extension-code-block": "^3.22.4", + "@tiptap/extension-document": "^3.22.4", + "@tiptap/extension-dropcursor": "^3.22.4", + "@tiptap/extension-gapcursor": "^3.22.4", + "@tiptap/extension-hard-break": "^3.22.4", + "@tiptap/extension-heading": "^3.22.4", + "@tiptap/extension-horizontal-rule": "^3.22.4", + "@tiptap/extension-italic": "^3.22.4", + "@tiptap/extension-link": "^3.22.4", + "@tiptap/extension-list": "^3.22.4", + "@tiptap/extension-list-item": "^3.22.4", + "@tiptap/extension-list-keymap": "^3.22.4", + "@tiptap/extension-ordered-list": "^3.22.4", + "@tiptap/extension-paragraph": "^3.22.4", + "@tiptap/extension-strike": "^3.22.4", + "@tiptap/extension-text": "^3.22.4", + "@tiptap/extension-underline": "^3.22.4", + "@tiptap/extensions": "^3.22.4", + "@tiptap/pm": "^3.22.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/suggestion": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/vue-3": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "optionalDependencies": { + "@tiptap/extension-bubble-menu": "^3.22.4", + "@tiptap/extension-floating-menu": "^3.22.4" + }, + "peerDependencies": { + "@floating-ui/dom": "^1.0.0", + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4", + "vue": "^3.0.0" + } + }, + "node_modules/@tiptap/y-tiptap": { + "version": "3.0.3", + "license": "MIT", + "peer": true, + "dependencies": { + "lib0": "^0.2.100" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.7.1", + "prosemirror-state": "^1.2.3", + "prosemirror-view": "^1.9.10", + "y-protocols": "^1.0.1", + "yjs": "^13.5.38" + } + }, + "node_modules/@tiptap/y-tiptap/node_modules/lib0": { + "version": "0.2.117", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.117.tgz", + "integrity": "sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "isomorphic.js": "^0.2.4" + }, + "bin": { + "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js", + "0gentesthtml": "bin/gentesthtml.js", + "0serve": "bin/0serve.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "license": "MIT", + "peer": true + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.6.0", + "license": "MIT", + "dependencies": { + "undici-types": "~7.19.0" + } + }, + "node_modules/@types/parse-path": { + "version": "7.0.3", + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "license": "MIT" + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.0", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.59.0", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.59.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.59.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "license": "ISC" + }, + "node_modules/@vercel/nft": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^13.0.0", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@vercel/oidc": { + "version": "3.2.0", + "license": "Apache-2.0", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.6", + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.13" + }, + "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" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "5.1.5", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-syntax-typescript": "^7.28.6", + "@babel/plugin-transform-typescript": "^7.28.6", + "@rolldown/pluginutils": "^1.0.0-rc.2", + "@vue/babel-plugin-jsx": "^2.0.1" + }, + "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" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-macros/common": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.22", + "ast-kit": "^2.1.2", + "local-pkg": "^1.1.2", + "magic-string-ast": "^1.0.2", + "unplugin-utils": "^0.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/vue-macros" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@vue/babel-helper-vue-transform-on": "2.0.1", + "@vue/babel-plugin-resolve-type": "2.0.1", + "@vue/shared": "^3.5.22" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/parser": "^7.28.4", + "@vue/compiler-sfc": "^3.5.22" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.32", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.32", + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "license": "MIT" + }, + "node_modules/@vue/devtools-core": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.1.1", + "@vue/devtools-shared": "^8.1.1" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.1.1", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/@vue/devtools-kit/node_modules/birpc": { + "version": "2.9.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "8.1.1", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.32", + "@vue/runtime-core": "3.5.32", + "@vue/shared": "3.5.32", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32" + }, + "peerDependencies": { + "vue": "3.5.32" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.32", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "14.2.1", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/integrations": { + "version": "14.2.1", + "license": "MIT", + "dependencies": { + "@vueuse/core": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7 || ^8", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7 || ^8", + "vue": "^3.5.0" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.2.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.2.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@webcontainer/env": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ai": { + "version": "6.0.141", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/gateway": "3.0.83", + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.21", + "@opentelemetry/api": "1.9.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/ai/node_modules/@ai-sdk/gateway": { + "version": "3.0.83", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.21", + "@vercel/oidc": "3.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/ai/node_modules/@ai-sdk/provider-utils": { + "version": "4.0.21", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.8", + "@standard-schema/spec": "^1.1.0", + "eventsource-parser": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/ai/node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ai/node_modules/@vercel/oidc": { + "version": "3.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">= 20" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "3.1.2", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "4.2.0", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/archiver": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils": { + "version": "5.0.2", + "license": "MIT", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/brace-expansion": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "10.5.0", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/archiver-utils/node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/lru-cache": { + "version": "10.4.3", + "license": "ISC" + }, + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "9.0.9", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/path-scurry": { + "version": "1.11.1", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver/node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ast-kit": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.8.3", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "ast-kit": "^2.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/async-lock": { + "version": "1.4.1", + "license": "MIT" + }, + "node_modules/async-sema": { + "version": "3.1.1", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/b4a": { + "version": "1.8.0", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/bail": { + "version": "2.0.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/bare-events": { + "version": "2.8.2", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.7.1", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.8.7", + "license": "Apache-2.0", + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.13.0", + "license": "Apache-2.0", + "dependencies": { + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.4.2", + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.20", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/better-sqlite3": { + "version": "12.9.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.9.0.tgz", + "integrity": "sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/birpc": { + "version": "4.0.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/browserslist/node_modules/caniuse-lite": { + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c12": { + "version": "3.3.4", + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "confbox": "^0.2.4", + "defu": "^6.1.6", + "dotenv": "^17.3.1", + "exsolve": "^1.0.8", + "giget": "^3.2.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.1.0", + "pkg-types": "^2.3.0", + "rc9": "^3.0.1" + }, + "peerDependencies": { + "magicast": "*" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/cac": { + "version": "6.7.14", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-api/node_modules/caniuse-lite": { + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chrome-launcher": { + "version": "1.2.1", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^2.0.1" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.cjs" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/clean-git-ref": { + "version": "2.0.1", + "license": "Apache-2.0" + }, + "node_modules/cliui": { + "version": "9.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/colortranslator": { + "version": "5.0.0", + "license": "Apache-2.0" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/compatx": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/compress-commons": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/compress-commons/node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/confbox": { + "version": "0.2.4", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "license": "MIT" + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/croner": { + "version": "10.0.1", + "funding": [ + { + "type": "other", + "url": "https://paypal.me/hexagonpp" + }, + { + "type": "github", + "url": "https://github.com/sponsors/hexagon" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.4.0", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "license": "MIT", + "optional": true + }, + "node_modules/cssnano": { + "version": "7.1.7", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.15", + "lilconfig": "^3.1.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.15", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.2", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.9", + "postcss-convert-values": "^7.0.11", + "postcss-discard-comments": "^7.0.7", + "postcss-discard-duplicates": "^7.0.3", + "postcss-discard-empty": "^7.0.2", + "postcss-discard-overridden": "^7.0.2", + "postcss-merge-longhand": "^7.0.6", + "postcss-merge-rules": "^7.0.10", + "postcss-minify-font-values": "^7.0.2", + "postcss-minify-gradients": "^7.0.4", + "postcss-minify-params": "^7.0.8", + "postcss-minify-selectors": "^7.1.0", + "postcss-normalize-charset": "^7.0.2", + "postcss-normalize-display-values": "^7.0.2", + "postcss-normalize-positions": "^7.0.3", + "postcss-normalize-repeat-style": "^7.0.3", + "postcss-normalize-string": "^7.0.2", + "postcss-normalize-timing-functions": "^7.0.2", + "postcss-normalize-unicode": "^7.0.8", + "postcss-normalize-url": "^7.0.2", + "postcss-normalize-whitespace": "^7.0.2", + "postcss-ordered-values": "^7.0.3", + "postcss-reduce-initial": "^7.0.8", + "postcss-reduce-transforms": "^7.0.2", + "postcss-svgo": "^7.1.2", + "postcss-unique-selectors": "^7.0.6" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.2", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "license": "MIT" + }, + "node_modules/db0": { + "version": "0.3.4", + "license": "MIT", + "peerDependencies": { + "@electric-sql/pglite": "*", + "@libsql/client": "*", + "better-sqlite3": "*", + "drizzle-orm": "*", + "mysql2": "*", + "sqlite3": "*" + }, + "peerDependenciesMeta": { + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "drizzle-orm": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, + "node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT", + "peer": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "license": "MIT" + }, + "node_modules/denque": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/detab": { + "version": "3.0.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.7.1", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff3": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/docus": { + "version": "5.10.0", + "license": "MIT", + "dependencies": { + "@ai-sdk/gateway": "^3.0.83", + "@ai-sdk/mcp": "^1.0.30", + "@ai-sdk/vue": "3.0.141", + "@iconify-json/lucide": "^1.2.100", + "@iconify-json/simple-icons": "^1.2.75", + "@iconify-json/vscode-icons": "^1.2.45", + "@nuxt/content": "^3.12.0", + "@nuxt/image": "^2.0.0", + "@nuxt/kit": "^4.4.2", + "@nuxt/ui": "^4.6.0", + "@nuxtjs/i18n": "^10.2.4", + "@nuxtjs/mcp-toolkit": "^0.13.2", + "@nuxtjs/mdc": "^0.21.0", + "@nuxtjs/robots": "^6.0.6", + "@shikijs/core": "^4.0.2", + "@shikijs/engine-javascript": "^4.0.2", + "@shikijs/langs": "^4.0.2", + "@shikijs/themes": "^4.0.2", + "@takumi-rs/core": "^0.73.1", + "@vueuse/core": "^14.2.1", + "ai": "6.0.141", + "defu": "^6.1.4", + "exsolve": "^1.0.8", + "git-url-parse": "^16.1.0", + "motion-v": "^2.2.0", + "nuxt-llms": "^0.2.0", + "nuxt-og-image": "^6.3.1", + "pkg-types": "^2.3.0", + "scule": "^1.3.0", + "shiki-stream": "^0.1.4", + "tailwindcss": "^4.2.2", + "ufo": "^1.6.3", + "yaml": "^2.7.1", + "zod": "^4.3.6", + "zod-to-json-schema": "^3.25.2" + }, + "peerDependencies": { + "better-sqlite3": "12.x", + "nuxt": "4.x" + } + }, + "node_modules/docus/node_modules/@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/docus/node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/docus/node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/docus/node_modules/@nuxt/image": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nuxt/image/-/image-2.0.0.tgz", + "integrity": "sha512-otHi6gAoYXKLrp8m27ZjX1PjxOPaltQ4OiUs/BhkW995mF/vXf8SWQTw68fww+Uric0v+XgoVrP9icDi+yT6zw==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.2.0", + "consola": "^3.4.2", + "defu": "^6.1.4", + "h3": "^1.15.4", + "image-meta": "^0.2.2", + "knitwork": "^1.2.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "std-env": "^3.10.0", + "ufo": "^1.6.1" + }, + "engines": { + "node": ">=18.20.6" + }, + "optionalDependencies": { + "ipx": "^3.1.1" + } + }, + "node_modules/docus/node_modules/@nuxt/image/node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, + "node_modules/docus/node_modules/@nuxt/ui": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@nuxt/ui/-/ui-4.6.1.tgz", + "integrity": "sha512-mBbBTaVDTR6ohOoAJUiV4T2RPXo2hyLewGPTiHjy1arzHPNFnmb/Tkl/2/JipF3Y8cahV4LhVUdkWKsdgI1OXw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6", + "@iconify/vue": "^5.0.0", + "@internationalized/date": "^3.12.0", + "@internationalized/number": "^3.6.5", + "@nuxt/fonts": "^0.14.0", + "@nuxt/icon": "^2.2.1", + "@nuxt/kit": "^4.4.2", + "@nuxt/schema": "^4.4.2", + "@nuxtjs/color-mode": "^3.5.2", + "@standard-schema/spec": "^1.1.0", + "@tailwindcss/postcss": "^4.2.2", + "@tailwindcss/vite": "^4.2.2", + "@tanstack/vue-table": "^8.21.3", + "@tanstack/vue-virtual": "^3.13.23", + "@tiptap/core": "^3.21.0", + "@tiptap/extension-bubble-menu": "^3.21.0", + "@tiptap/extension-code": "^3.21.0", + "@tiptap/extension-collaboration": "^3.21.0", + "@tiptap/extension-drag-handle": "^3.21.0", + "@tiptap/extension-drag-handle-vue-3": "^3.21.0", + "@tiptap/extension-floating-menu": "^3.21.0", + "@tiptap/extension-horizontal-rule": "^3.21.0", + "@tiptap/extension-image": "^3.21.0", + "@tiptap/extension-mention": "^3.21.0", + "@tiptap/extension-node-range": "^3.21.0", + "@tiptap/extension-placeholder": "^3.21.0", + "@tiptap/markdown": "^3.21.0", + "@tiptap/pm": "^3.21.0", + "@tiptap/starter-kit": "^3.21.0", + "@tiptap/suggestion": "^3.21.0", + "@tiptap/vue-3": "^3.21.0", + "@unhead/vue": "^2.1.12", + "@vueuse/core": "^14.2.1", + "@vueuse/integrations": "^14.2.1", + "@vueuse/shared": "^14.2.1", + "colortranslator": "^5.0.0", + "consola": "^3.4.2", + "defu": "^6.1.4", + "embla-carousel-auto-height": "^8.6.0", + "embla-carousel-auto-scroll": "^8.6.0", + "embla-carousel-autoplay": "^8.6.0", + "embla-carousel-class-names": "^8.6.0", + "embla-carousel-fade": "^8.6.0", + "embla-carousel-vue": "^8.6.0", + "embla-carousel-wheel-gestures": "^8.1.0", + "fuse.js": "^7.1.0", + "hookable": "^6.1.0", + "knitwork": "^1.3.0", + "magic-string": "^0.30.21", + "mlly": "^1.8.2", + "motion-v": "^2.2.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "reka-ui": "2.9.3", + "scule": "^1.3.0", + "tailwind-merge": "^3.5.0", + "tailwind-variants": "^3.2.2", + "tailwindcss": "^4.2.2", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unplugin": "^3.0.0", + "unplugin-auto-import": "^21.0.0", + "unplugin-vue-components": "^32.0.0", + "vaul-vue": "0.4.1", + "vue-component-type-helpers": "^3.2.6" + }, + "bin": { + "nuxt-ui": "cli/index.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@inertiajs/vue3": "^2.0.7 || ^3.0.0", + "@nuxt/content": "^3.0.0", + "joi": "^18.0.0", + "superstruct": "^2.0.0", + "tailwindcss": "^4.0.0", + "typescript": "^5.6.3 || ^6.0.0", + "valibot": "^1.0.0", + "vue-router": "^4.5.0 || ^5.0.0", + "yup": "^1.7.0", + "zod": "^3.24.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@inertiajs/vue3": { + "optional": true + }, + "@nuxt/content": { + "optional": true + }, + "joi": { + "optional": true + }, + "superstruct": { + "optional": true + }, + "valibot": { + "optional": true + }, + "vue-router": { + "optional": true + }, + "yup": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/docus/node_modules/@nuxtjs/mcp-toolkit": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/@nuxtjs/mcp-toolkit/-/mcp-toolkit-0.13.4.tgz", + "integrity": "sha512-cjV0uCEsFXK8hmqx7TSvhq3oQQ77ECwN07Prun6TSQhEB0ZbkSTvsNwPLuw4+cI13Cbm/G3k9jfKsXhmU65p3Q==", + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.29.0", + "@nuxt/kit": "^4.4.2", + "tinyglobby": "^0.2.15" + }, + "peerDependencies": { + "agents": ">=0.9.0", + "h3": ">=1.15.11", + "secure-exec": ">=0.2.1", + "zod": "^4.1.13" + }, + "peerDependenciesMeta": { + "agents": { + "optional": true + }, + "h3": { + "optional": false + }, + "secure-exec": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/docus/node_modules/@nuxtjs/robots": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-6.0.7.tgz", + "integrity": "sha512-A3PIA++1vGSx8q+EabqW+pqKKAFFE7bXQwwvmFghfCb+AmTC5lrdkDJh+14+XMLqA1fjL39YThGXpPruIknqcw==", + "license": "MIT", + "dependencies": { + "@fingerprintjs/botd": "^2.0.0", + "@nuxt/kit": "^4.4.2", + "consola": "^3.4.2", + "defu": "^6.1.7", + "h3": "^1.15.11", + "nuxt-site-config": "^4.0.8", + "nuxtseo-shared": "^5.1.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "ufo": "^1.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "zod": ">=3" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.127.0.tgz", + "integrity": "sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.127.0.tgz", + "integrity": "sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.127.0.tgz", + "integrity": "sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.127.0.tgz", + "integrity": "sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.127.0.tgz", + "integrity": "sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.127.0.tgz", + "integrity": "sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.127.0.tgz", + "integrity": "sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.127.0.tgz", + "integrity": "sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.127.0.tgz", + "integrity": "sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.127.0.tgz", + "integrity": "sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.127.0.tgz", + "integrity": "sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.127.0.tgz", + "integrity": "sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.127.0.tgz", + "integrity": "sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.127.0.tgz", + "integrity": "sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.127.0.tgz", + "integrity": "sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.127.0.tgz", + "integrity": "sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.127.0.tgz", + "integrity": "sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.9.2", + "@emnapi/runtime": "1.9.2", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.127.0.tgz", + "integrity": "sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.127.0.tgz", + "integrity": "sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.127.0.tgz", + "integrity": "sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/docus/node_modules/@oxc-project/types": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz", + "integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/docus/node_modules/@takumi-rs/core": { + "version": "0.73.1", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@takumi-rs/helpers": "0.73.1" + }, + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + }, + "optionalDependencies": { + "@takumi-rs/core-darwin-arm64": "0.73.1", + "@takumi-rs/core-darwin-x64": "0.73.1", + "@takumi-rs/core-linux-arm64-gnu": "0.73.1", + "@takumi-rs/core-linux-arm64-musl": "0.73.1", + "@takumi-rs/core-linux-x64-gnu": "0.73.1", + "@takumi-rs/core-linux-x64-musl": "0.73.1", + "@takumi-rs/core-win32-arm64-msvc": "0.73.1", + "@takumi-rs/core-win32-x64-msvc": "0.73.1" + } + }, + "node_modules/docus/node_modules/@takumi-rs/core-win32-x64-msvc": { + "version": "0.73.1", + "cpu": [ + "x64" + ], + "license": "(MIT OR Apache-2.0)", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0" + } + }, + "node_modules/docus/node_modules/@takumi-rs/helpers": { + "version": "0.73.1", + "license": "(MIT OR Apache-2.0)" + }, + "node_modules/docus/node_modules/@unhead/vue": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.13.tgz", + "integrity": "sha512-HYy0shaHRnLNW9r85gppO8IiGz0ONWVV3zGdlT8CQ0tbTwixznJCIiyqV4BSV1aIF1jJIye0pd1p/k6Eab8Z/A==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1", + "unhead": "2.1.13" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.18" + } + }, + "node_modules/docus/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/docus/node_modules/culori": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/culori/-/culori-4.0.2.tgz", + "integrity": "sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/docus/node_modules/hookable": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", + "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", + "license": "MIT" + }, + "node_modules/docus/node_modules/jose": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", + "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/docus/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/docus/node_modules/nuxt-og-image": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/nuxt-og-image/-/nuxt-og-image-6.4.5.tgz", + "integrity": "sha512-hGdNrx91b9H6Xh+c9S89y87sv8WJkOL02mHf/gacNUJ4RodQEk/8VNr3zgxU1xJ+JDITqmRGRmhxXCeODXUidA==", + "license": "MIT", + "dependencies": { + "@clack/prompts": "^1.2.0", + "@nuxt/kit": "^4.4.2", + "@vue/compiler-sfc": "^3.5.32", + "chrome-launcher": "^1.2.1", + "consola": "^3.4.2", + "culori": "^4.0.2", + "defu": "^6.1.7", + "devalue": "^5.7.1", + "exsolve": "^1.0.8", + "lightningcss": "^1.32.0", + "magic-string": "^0.30.21", + "magicast": "^0.5.2", + "mocked-exports": "^0.1.1", + "nuxt-site-config": "^4.0.8", + "nuxtseo-shared": "^5.1.3", + "nypm": "^0.6.5", + "ofetch": "^1.5.1", + "ohash": "^2.0.11", + "oxc-parser": "^0.127.0", + "oxc-walker": "^0.7.0", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "radix3": "^1.1.2", + "std-env": "^4.1.0", + "strip-literal": "^3.1.0", + "tinyexec": "^1.1.1", + "tinyglobby": "^0.2.16", + "ufo": "^1.6.3", + "ultrahtml": "^1.6.0", + "unplugin": "^3.0.0" + }, + "bin": { + "nuxt-og-image": "bin/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "@resvg/resvg-js": "^2.6.0", + "@resvg/resvg-wasm": "^2.6.0", + "@takumi-rs/core": "^1.0.0-beta.3", + "@takumi-rs/wasm": "^1.0.0-beta.3", + "@unhead/vue": "^2.0.5 || ^3.0.0", + "fontless": "^0.2.0", + "playwright-core": "^1.50.0", + "satori": ">=0.19.2", + "sharp": "^0.34.0", + "tailwindcss": "^4.0.0", + "unifont": "^0.7.0", + "unstorage": "^1.15.0" + }, + "peerDependenciesMeta": { + "@resvg/resvg-js": { + "optional": true + }, + "@resvg/resvg-wasm": { + "optional": true + }, + "@takumi-rs/core": { + "optional": true + }, + "@takumi-rs/wasm": { + "optional": true + }, + "fontless": { + "optional": true + }, + "playwright-core": { + "optional": true + }, + "satori": { + "optional": true + }, + "sharp": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "unifont": { + "optional": true + } + } + }, + "node_modules/docus/node_modules/oxc-parser": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.127.0.tgz", + "integrity": "sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.127.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-android-arm-eabi": "0.127.0", + "@oxc-parser/binding-android-arm64": "0.127.0", + "@oxc-parser/binding-darwin-arm64": "0.127.0", + "@oxc-parser/binding-darwin-x64": "0.127.0", + "@oxc-parser/binding-freebsd-x64": "0.127.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.127.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.127.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.127.0", + "@oxc-parser/binding-linux-arm64-musl": "0.127.0", + "@oxc-parser/binding-linux-ppc64-gnu": "0.127.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.127.0", + "@oxc-parser/binding-linux-riscv64-musl": "0.127.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.127.0", + "@oxc-parser/binding-linux-x64-gnu": "0.127.0", + "@oxc-parser/binding-linux-x64-musl": "0.127.0", + "@oxc-parser/binding-openharmony-arm64": "0.127.0", + "@oxc-parser/binding-wasm32-wasi": "0.127.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.127.0", + "@oxc-parser/binding-win32-ia32-msvc": "0.127.0", + "@oxc-parser/binding-win32-x64-msvc": "0.127.0" + } + }, + "node_modules/docus/node_modules/reka-ui": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/reka-ui/-/reka-ui-2.9.3.tgz", + "integrity": "sha512-C9lCVxsSC7uYD0Nbgik1+14FNndHNprZmf0zGQt0ZDYIt5KxXV3zD0hEqNcfRUsEEJvVmoRsUkJnASBVBeaaUw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.13", + "@floating-ui/vue": "^1.1.6", + "@internationalized/date": "^3.5.0", + "@internationalized/number": "^3.5.0", + "@tanstack/vue-virtual": "^3.12.0", + "@vueuse/core": "^14.1.0", + "@vueuse/shared": "^14.1.0", + "aria-hidden": "^1.2.4", + "defu": "^6.1.4", + "ohash": "^2.0.11" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/zernonia" + }, + "peerDependencies": { + "vue": ">= 3.4.0" + } + }, + "node_modules/docus/node_modules/unhead": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.1.13.tgz", + "integrity": "sha512-jO9M1sI6b2h/1KpIu4Jeu+ptumLmUKboRRLxys5pYHFeT+lqTzfNHbYUX9bxVDhC1FBszAGuWcUVlmvIPsah8Q==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/docus/node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "peer": true, + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/docus/node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/docus/node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "type-fest": "^5.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "17.4.2", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.340", + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-auto-height": { + "version": "8.6.0", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-auto-scroll": { + "version": "8.6.0", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-autoplay": { + "version": "8.6.0", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-class-names": { + "version": "8.6.0", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-fade": { + "version": "8.6.0", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-vue": { + "version": "8.6.0", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "vue": "^3.2.37" + } + }, + "node_modules/embla-carousel-wheel-gestures": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "wheel-gestures": "^2.2.5" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "embla-carousel": "^8.0.0 || ~8.0.0-rc03" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "license": "MIT" + }, + "node_modules/emojilib": { + "version": "2.4.0", + "license": "MIT" + }, + "node_modules/emoticon": { + "version": "4.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/errx": { + "version": "0.1.0", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.1.tgz", + "integrity": "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.5.5", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT", + "peer": true + }, + "node_modules/espree": { + "version": "11.2.0", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.8", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "5.2.1", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.3.2", + "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/fast-npm-meta": { + "version": "1.5.0", + "license": "MIT", + "bin": { + "fast-npm-meta": "dist/cli.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/fast-string-truncated-width": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^1.2.0" + } + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-wrap-ansi": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "fast-string-width": "^1.1.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "6.0.1", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "license": "ISC", + "peer": true + }, + "node_modules/fontaine": { + "version": "0.8.0", + "license": "MIT", + "dependencies": { + "@capsizecss/unpack": "^4.0.0", + "css-tree": "^3.1.0", + "magic-regexp": "^0.10.0", + "magic-string": "^0.30.21", + "pathe": "^2.0.3", + "ufo": "^1.6.1", + "unplugin": "^2.3.10" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/fontaine/node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/fontaine/node_modules/unplugin": { + "version": "2.3.11", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fontless": { + "version": "0.2.1", + "license": "MIT", + "dependencies": { + "consola": "^3.4.2", + "css-tree": "^3.1.0", + "defu": "^6.1.4", + "esbuild": "^0.27.0", + "fontaine": "0.8.0", + "jiti": "^2.6.1", + "lightningcss": "^1.30.2", + "magic-string": "^0.30.21", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "ufo": "^1.6.1", + "unifont": "^0.7.4", + "unstorage": "^1.17.1" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/fontless/node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/fontless/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/fontless/node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.38.0", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.3.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/krisk" + } + }, + "node_modules/fzf": { + "version": "0.5.2", + "license": "BSD-3-Clause" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port-please": { + "version": "3.2.0", + "license": "MIT" + }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "3.2.0", + "license": "MIT", + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/git-up": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^9.2.0" + } + }, + "node_modules/git-url-parse": { + "version": "16.1.0", + "license": "MIT", + "dependencies": { + "git-up": "^8.1.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "license": "MIT" + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/glob": { + "version": "13.0.6", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "license": "ISC", + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "16.2.0", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/gzip-size": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/h3": { + "version": "1.15.11", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-embedded": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-format": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-minify-whitespace": "^1.0.0", + "hast-util-phrasing": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "html-whitespace-sensitive-tag-names": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-body-ok-link": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-minify-whitespace": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-phrasing": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-is-body-ok-link": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/entities": { + "version": "6.0.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "7.3.0", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast": { + "version": "10.1.2", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-phrasing": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "hast-util-to-text": "^4.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "mdast-util-to-string": "^4.0.0", + "rehype-minify-whitespace": "^6.0.0", + "trim-trailing-lines": "^2.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hey-listen": { + "version": "1.0.8", + "license": "MIT" + }, + "node_modules/hono": { + "version": "4.12.14", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.14.tgz", + "integrity": "sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-whitespace-sensitive-tag-names": { + "version": "3.0.1", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-shutdown": { + "version": "1.2.2", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/httpxy": { + "version": "0.5.0", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "7.0.5", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-meta": { + "version": "0.2.2", + "license": "MIT" + }, + "node_modules/impound": { + "version": "1.1.5", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "es-module-lexer": "^2.0.0", + "pathe": "^2.0.3", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ioredis": { + "version": "5.10.1", + "license": "MIT", + "dependencies": { + "@ioredis/commands": "1.5.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ip-address": { + "version": "10.1.0", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipx": { + "version": "3.1.1", + "license": "MIT", + "optional": true, + "dependencies": { + "@fastify/accept-negotiator": "^2.0.1", + "citty": "^0.1.6", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "etag": "^1.8.1", + "h3": "^1.15.3", + "image-meta": "^0.2.1", + "listhen": "^1.9.0", + "ofetch": "^1.4.1", + "pathe": "^2.0.3", + "sharp": "^0.34.3", + "svgo": "^4.0.0", + "ufo": "^1.6.1", + "unstorage": "^1.16.1", + "xss": "^1.0.15" + }, + "bin": { + "ipx": "bin/ipx.mjs" + } + }, + "node_modules/ipx/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "optional": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/ipx/node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "optional": true, + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-absolute-url": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-ssh": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/isomorphic-git": { + "version": "1.37.5", + "license": "MIT", + "dependencies": { + "async-lock": "^1.4.1", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "ignore": "^5.1.4", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "pify": "^4.0.1", + "readable-stream": "^4.0.0", + "sha.js": "^2.4.12", + "simple-get": "^4.0.1" + }, + "bin": { + "isogit": "cli.cjs" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/isomorphic-git/node_modules/ignore": { + "version": "5.3.2", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/isomorphic.js": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", + "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-to-typescript-lite": { + "version": "15.0.0", + "license": "MIT", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^14.1.1", + "@types/json-schema": "^7.0.15" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "license": "BSD-2-Clause" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "license": "MIT", + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/launch-editor": { + "version": "2.13.2", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lighthouse-logger": { + "version": "2.0.2", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.1", + "marky": "^1.2.2" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "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" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/linkifyjs": { + "version": "4.3.2", + "license": "MIT" + }, + "node_modules/listhen": { + "version": "1.9.1", + "license": "MIT", + "dependencies": { + "@parcel/watcher": "^2.5.6", + "@parcel/watcher-wasm": "^2.5.6", + "citty": "^0.2.2", + "consola": "^3.4.2", + "crossws": ">=0.2.0 <0.5.0", + "defu": "^6.1.6", + "get-port-please": "^3.2.0", + "h3": "^1.15.11", + "http-shutdown": "^1.2.2", + "jiti": "^2.6.1", + "mlly": "^1.8.2", + "node-forge": "^1.4.0", + "pathe": "^2.0.3", + "std-env": "^4.0.0", + "tinyclip": "^0.1.12", + "ufo": "^1.6.3", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "node_modules/listhen/node_modules/citty": { + "version": "0.2.2", + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-regexp": { + "version": "0.10.0", + "license": "MIT", + "dependencies": { + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12", + "mlly": "^1.7.2", + "regexp-tree": "^0.1.27", + "type-level-regexp": "~0.1.17", + "ufo": "^1.5.4", + "unplugin": "^2.0.0" + } + }, + "node_modules/magic-regexp/node_modules/estree-walker": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/magic-regexp/node_modules/unplugin": { + "version": "2.3.11", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magic-string-ast": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.19" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marked": { + "version": "17.0.6", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/marky": { + "version": "1.3.0", + "license": "Apache-2.0" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "4.1.0", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimark": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "10.2.5", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimisted": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/mocked-exports": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/motion-dom": { + "version": "12.38.0", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.36.0" + } + }, + "node_modules/motion-utils": { + "version": "12.36.0", + "license": "MIT" + }, + "node_modules/motion-v": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.38.0", + "hey-listen": "^1.0.8", + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0" + }, + "peerDependencies": { + "@vueuse/core": ">=10.0.0", + "vue": ">=3.0.0" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanotar": { + "version": "0.3.0", + "license": "MIT" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "license": "MIT", + "peer": true + }, + "node_modules/negotiator": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nitropack": { + "version": "2.13.3", + "license": "MIT", + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.4.2", + "@rollup/plugin-alias": "^6.0.0", + "@rollup/plugin-commonjs": "^29.0.2", + "@rollup/plugin-inject": "^5.0.5", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", + "@rollup/plugin-terser": "^1.0.0", + "@vercel/nft": "^1.5.0", + "archiver": "^7.0.1", + "c12": "^3.3.4", + "chokidar": "^5.0.0", + "citty": "^0.2.2", + "compatx": "^0.2.0", + "confbox": "^0.2.4", + "consola": "^3.4.2", + "cookie-es": "^2.0.1", + "croner": "^10.0.1", + "crossws": "^0.3.5", + "db0": "^0.3.4", + "defu": "^6.1.6", + "destr": "^2.0.5", + "dot-prop": "^10.1.0", + "esbuild": "^0.27.5", + "escape-string-regexp": "^5.0.0", + "etag": "^1.8.1", + "exsolve": "^1.0.8", + "globby": "^16.2.0", + "gzip-size": "^7.0.0", + "h3": "^1.15.10", + "hookable": "^5.5.3", + "httpxy": "^0.5.0", + "ioredis": "^5.10.1", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "listhen": "^1.9.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.2", + "mime": "^4.1.0", + "mlly": "^1.8.2", + "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.60.1", + "rollup-plugin-visualizer": "^7.0.1", + "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": "^4.0.0", + "ufo": "^1.6.3", + "ultrahtml": "^1.6.0", + "uncrypto": "^0.1.3", + "unctx": "^2.5.0", + "unenv": "2.0.0-rc.24", + "unimport": "^6.0.2", + "unplugin-utils": "^0.3.1", + "unstorage": "^1.17.5", + "untyped": "^2.0.0", + "unwasm": "^0.5.3", + "youch": "^4.1.1", + "youch-core": "^0.3.3" + }, + "bin": { + "nitro": "dist/cli/index.mjs", + "nitropack": "dist/cli/index.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "xml2js": "^0.6.2" + }, + "peerDependenciesMeta": { + "xml2js": { + "optional": true + } + } + }, + "node_modules/nitropack/node_modules/citty": { + "version": "0.2.2", + "license": "MIT" + }, + "node_modules/nitropack/node_modules/cookie-es": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/nitropack/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nitropack/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/nitropack/node_modules/source-map": { + "version": "0.7.6", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/nitropack/node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/node-abi": { + "version": "3.89.0", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "license": "MIT" + }, + "node_modules/node-emoji": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.4.0", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.37", + "license": "MIT" + }, + "node_modules/nopt": { + "version": "8.1.0", + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nuxt": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-4.4.2.tgz", + "integrity": "sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q==", + "license": "MIT", + "dependencies": { + "@dxup/nuxt": "^0.4.0", + "@nuxt/cli": "^3.34.0", + "@nuxt/devtools": "^3.2.3", + "@nuxt/kit": "4.4.2", + "@nuxt/nitro-server": "4.4.2", + "@nuxt/schema": "4.4.2", + "@nuxt/telemetry": "^2.7.0", + "@nuxt/vite-builder": "4.4.2", + "@unhead/vue": "^2.1.12", + "@vue/shared": "^3.5.30", + "c12": "^3.3.3", + "chokidar": "^5.0.0", + "compatx": "^0.2.0", + "consola": "^3.4.2", + "cookie-es": "^2.0.0", + "defu": "^6.1.4", + "devalue": "^5.6.3", + "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", + "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.5", + "untyped": "^2.0.0", + "vue": "^3.5.30", + "vue-router": "^5.0.3" + }, + "bin": { + "nuxi": "bin/nuxt.mjs", + "nuxt": "bin/nuxt.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@parcel/watcher": "^2.1.0", + "@types/node": ">=18.12.0" + }, + "peerDependenciesMeta": { + "@parcel/watcher": { + "optional": true + }, + "@types/node": { + "optional": true + } + } + }, + "node_modules/nuxt-component-meta": { + "version": "0.17.2", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.2.2", + "citty": "^0.1.6", + "mlly": "^1.8.0", + "ohash": "^2.0.11", + "scule": "^1.3.0", + "typescript": "^5.9.3", + "ufo": "^1.6.2", + "vue-component-meta": "^3.2.2" + }, + "bin": { + "nuxt-component-meta": "bin/nuxt-component-meta.mjs" + } + }, + "node_modules/nuxt-component-meta/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/nuxt-define": { + "version": "1.0.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/bobbiegoede" + } + }, + "node_modules/nuxt-llms": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.2.2" + } + }, + "node_modules/nuxt-site-config": { + "version": "4.0.8", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.4.2", + "h3": "^1.15.11", + "nuxt-site-config-kit": "4.0.8", + "nuxtseo-shared": "^5.1.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "site-config-stack": "4.0.8", + "ufo": "^1.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/nuxt-site-config-kit": { + "version": "4.0.8", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.4.2", + "site-config-stack": "4.0.8", + "std-env": "^4.0.0", + "ufo": "^1.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.117.0.tgz", + "integrity": "sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.117.0.tgz", + "integrity": "sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.117.0.tgz", + "integrity": "sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.117.0.tgz", + "integrity": "sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.117.0.tgz", + "integrity": "sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.117.0.tgz", + "integrity": "sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.117.0.tgz", + "integrity": "sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.117.0.tgz", + "integrity": "sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.117.0.tgz", + "integrity": "sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.117.0.tgz", + "integrity": "sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.117.0.tgz", + "integrity": "sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.117.0.tgz", + "integrity": "sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.117.0.tgz", + "integrity": "sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.117.0.tgz", + "integrity": "sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.117.0.tgz", + "integrity": "sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.117.0.tgz", + "integrity": "sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.117.0.tgz", + "integrity": "sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.117.0.tgz", + "integrity": "sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.117.0.tgz", + "integrity": "sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.117.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-project/types": { + "version": "0.117.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-android-arm-eabi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm-eabi/-/binding-android-arm-eabi-0.117.0.tgz", + "integrity": "sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-android-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm64/-/binding-android-arm64-0.117.0.tgz", + "integrity": "sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-darwin-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-arm64/-/binding-darwin-arm64-0.117.0.tgz", + "integrity": "sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-darwin-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-x64/-/binding-darwin-x64-0.117.0.tgz", + "integrity": "sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-freebsd-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-freebsd-x64/-/binding-freebsd-x64-0.117.0.tgz", + "integrity": "sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-arm-gnueabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.117.0.tgz", + "integrity": "sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-arm-musleabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.117.0.tgz", + "integrity": "sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-arm64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.117.0.tgz", + "integrity": "sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-arm64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.117.0.tgz", + "integrity": "sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-ppc64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.117.0.tgz", + "integrity": "sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-riscv64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.117.0.tgz", + "integrity": "sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-riscv64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.117.0.tgz", + "integrity": "sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-s390x-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.117.0.tgz", + "integrity": "sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-x64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.117.0.tgz", + "integrity": "sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-linux-x64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-musl/-/binding-linux-x64-musl-0.117.0.tgz", + "integrity": "sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-openharmony-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-openharmony-arm64/-/binding-openharmony-arm64-0.117.0.tgz", + "integrity": "sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-wasm32-wasi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-wasm32-wasi/-/binding-wasm32-wasi-0.117.0.tgz", + "integrity": "sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-win32-arm64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.117.0.tgz", + "integrity": "sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-win32-ia32-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.117.0.tgz", + "integrity": "sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-transform/binding-win32-x64-msvc": { + "version": "0.117.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/nuxt/node_modules/@unhead/vue": { + "version": "2.1.13", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1", + "unhead": "2.1.13" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.18" + } + }, + "node_modules/nuxt/node_modules/cookie-es": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/nuxt/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nuxt/node_modules/hookable": { + "version": "6.1.1", + "license": "MIT" + }, + "node_modules/nuxt/node_modules/oxc-parser": { + "version": "0.117.0", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.117.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "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" + } + }, + "node_modules/nuxt/node_modules/oxc-transform": { + "version": "0.117.0", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "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" + } + }, + "node_modules/nuxt/node_modules/unhead": { + "version": "2.1.13", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/nuxtseo-shared": { + "version": "5.1.3", + "license": "MIT", + "dependencies": { + "@clack/prompts": "^1.2.0", + "@nuxt/devtools-kit": "4.0.0-alpha.3", + "@nuxt/kit": "^4.4.2", + "birpc": "^4.0.0", + "consola": "^3.4.2", + "defu": "^6.1.7", + "ofetch": "^1.5.1", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "radix3": "^1.1.2", + "sirv": "^3.0.2", + "std-env": "^4.0.0", + "ufo": "^1.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "@nuxt/schema": "^3.16.0 || ^4.0.0", + "nuxt": "^3.16.0 || ^4.0.0", + "nuxt-site-config": "^3.2.0 || ^4.0.0", + "vue": "^3.5.0", + "zod": "^3.23.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "nuxt-site-config": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/nuxtseo-shared/node_modules/@nuxt/devtools-kit": { + "version": "4.0.0-alpha.3", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.4.2", + "tinyexec": "^1.0.4" + }, + "peerDependencies": { + "vite": ">=6.0" + } + }, + "node_modules/nypm": { + "version": "0.6.5", + "license": "MIT", + "dependencies": { + "citty": "^0.2.0", + "pathe": "^2.0.3", + "tinyexec": "^1.0.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nypm/node_modules/citty": { + "version": "0.2.2", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/ofetch": { + "version": "1.5.1", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "license": "MIT" + }, + "node_modules/on-change": { + "version": "6.0.2", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/on-change?sponsor=1" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/open": { + "version": "11.0.0", + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "license": "MIT", + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/orderedmap": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/oxc-minify": { + "version": "0.117.0", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@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" + } + }, + "node_modules/oxc-parser": { + "version": "0.112.0", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.112.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "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" + } + }, + "node_modules/oxc-transform": { + "version": "0.112.0", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@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" + } + }, + "node_modules/oxc-walker": { + "version": "0.7.0", + "license": "MIT", + "dependencies": { + "magic-regexp": "^0.10.0" + }, + "peerDependencies": { + "oxc-parser": ">=0.98.0" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "license": "BlueOak-1.0.0" + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pako": { + "version": "1.0.11", + "license": "(MIT AND Zlib)" + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "license": "MIT" + }, + "node_modules/parse-path": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "9.2.0", + "license": "MIT", + "dependencies": { + "@types/parse-path": "^7.0.0", + "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "8.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.3.5", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.10", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.1", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.9", + "license": "MIT", + "dependencies": { + "@colordx/core": "^5.2.0", + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.11", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.7", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.3", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.2", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.2", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.10" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.10", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.2", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.4", + "license": "MIT", + "dependencies": { + "@colordx/core": "^5.2.0", + "cssnano-utils": "^5.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.8", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "cssnano-utils": "^5.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-api": "^3.0.0", + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.2", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.8", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.8", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.1.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^4.0.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "7.1.0", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/property-information": { + "version": "7.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/prosemirror-changeset": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.7.1", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.10.2" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.25.4", + "license": "MIT", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.5.1", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.8.5", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.2.3", + "prosemirror-model": "^1.25.4", + "prosemirror-state": "^1.4.4", + "prosemirror-transform": "^1.10.5", + "prosemirror-view": "^1.41.4" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.12.0", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.41.8", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, + "node_modules/protocols": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.1", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/radix3": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/rc9": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "defu": "^6.1.6", + "destr": "^2.0.5" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.9", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/rehype-external-links": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-minify-whitespace": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-minify-whitespace": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-remark": { + "version": "10.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "hast-util-to-mdast": "^10.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "github-slugger": "^2.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-sort-attribute-values": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-sort-attributes": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "5.0.2", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.4", + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.1", + "node-emoji": "^2.1.3", + "unified": "^11.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdc": { + "version": "3.10.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3", + "flat": "^6.0.1", + "mdast-util-from-markdown": "^2.0.2", + "mdast-util-to-markdown": "^2.1.2", + "micromark": "^4.0.2", + "micromark-core-commonmark": "^2.0.3", + "micromark-factory-space": "^2.0.1", + "micromark-factory-whitespace": "^2.0.1", + "micromark-util-character": "^2.1.1", + "micromark-util-types": "^2.0.2", + "parse-entities": "^4.0.2", + "scule": "^1.3.0", + "stringify-entities": "^4.0.4", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "yaml": "^2.8.2" + } + }, + "node_modules/remark-mdc/node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.60.2", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "open": "^11.0.0", + "picomatch": "^4.0.2", + "source-map": "^0.7.4", + "yargs": "^18.0.0" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=22" + }, + "peerDependencies": { + "rolldown": "1.x || ^1.0.0-beta || ^1.0.0-rc", + "rollup": "2.x || 3.x || 4.x" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.6", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "license": "MIT" + }, + "node_modules/rou3": { + "version": "0.8.1", + "license": "MIT" + }, + "node_modules/router": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.6.0", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serialize-javascript": { + "version": "7.0.5", + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/seroval": { + "version": "1.5.2", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/serve-placeholder": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/sharp/node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shiki": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/shiki-stream": { + "version": "0.1.4", + "license": "MIT", + "dependencies": { + "@shikijs/core": "^3.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "react": "^19.0.0", + "solid-js": "^1.9.0", + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "solid-js": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/shiki-stream/node_modules/@shikijs/core": { + "version": "3.23.0", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/shiki-stream/node_modules/@shikijs/types": { + "version": "3.23.0", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-git": { + "version": "3.36.0", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "@simple-git/args-pathspec": "^1.0.3", + "@simple-git/argv-parser": "^1.1.0", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/site-config-stack": { + "version": "4.0.8", + "license": "MIT", + "dependencies": { + "ufo": "^1.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": "^3.5.30" + } + }, + "node_modules/skin-tone": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slugify": { + "version": "1.6.9", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/smob": { + "version": "1.6.1", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/socket.io-client": { + "version": "4.8.3", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/engine.io-client": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz", + "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.18.3", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/socket.io-client/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.6", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/srvx": { + "version": "0.11.15", + "license": "MIT", + "bin": { + "srvx": "bin/srvx.mjs" + }, + "engines": { + "node": ">=20.16.0" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "4.1.0", + "license": "MIT" + }, + "node_modules/streamx": { + "version": "2.25.0", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "license": "MIT" + }, + "node_modules/structured-clone-es": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/stylehacks": { + "version": "7.0.10", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/svgo/node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/svgo/node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/svgo/node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/svgo/node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/swrv": { + "version": "1.2.0", + "license": "Apache-2.0", + "peerDependencies": { + "vue": ">=3.2.26 < 4" + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-variants": { + "version": "3.2.2", + "license": "MIT", + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwind-merge": ">=3.0.0", + "tailwindcss": "*" + }, + "peerDependenciesMeta": { + "tailwind-merge": { + "optional": true + } + } + }, + "node_modules/tailwindcss": { + "version": "4.2.3", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.2", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" + }, + "node_modules/tar-fs/node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar-fs/node_modules/tar-stream": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream": { + "version": "3.1.8", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/terser": { + "version": "5.46.1", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/text-decoder": { + "version": "1.2.7", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "license": "MIT" + }, + "node_modules/tinyclip": { + "version": "0.1.12", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinyexec": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-buffer": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tosource": { + "version": "2.0.0-alpha.3", + "engines": { + "node": ">=10" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trim-trailing-lines": { + "version": "2.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "5.6.0", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-level-regexp": { + "version": "0.1.17", + "license": "MIT" + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "license": "MIT" + }, + "node_modules/unctx": { + "version": "2.5.0", + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21", + "unplugin": "^2.3.11" + } + }, + "node_modules/unctx/node_modules/estree-walker": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unctx/node_modules/unplugin": { + "version": "2.3.11", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/undici-types": { + "version": "7.19.2", + "license": "MIT" + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.4.0", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unifont/node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/unimport": { + "version": "6.1.0", + "license": "MIT", + "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.2", + "pathe": "^2.0.3", + "picomatch": "^4.0.4", + "pkg-types": "^2.3.0", + "scule": "^1.3.0", + "strip-literal": "^3.1.0", + "tinyglobby": "^0.2.16", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unist-builder": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/unplugin-auto-import": { + "version": "21.0.0", + "license": "MIT", + "dependencies": { + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "picomatch": "^4.0.3", + "unimport": "^5.6.0", + "unplugin": "^2.3.11", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^4.0.0", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unplugin-auto-import/node_modules/estree-walker": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unplugin-auto-import/node_modules/unimport": { + "version": "5.7.0", + "license": "MIT", + "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.0", + "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": "^2.3.11", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-auto-import/node_modules/unplugin": { + "version": "2.3.11", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.1", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-vue-components": { + "version": "32.0.0", + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.2", + "obug": "^2.1.1", + "picomatch": "^4.0.3", + "tinyglobby": "^0.2.15", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2 || ^4.0.0", + "vue": "^3.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unrouting": { + "version": "0.1.7", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "ufo": "^1.6.3" + } + }, + "node_modules/unrouting/node_modules/escape-string-regexp": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/untun": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "node_modules/untun/node_modules/pathe": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/untyped": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "defu": "^6.1.4", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/unwasm": { + "version": "0.5.3", + "license": "MIT", + "dependencies": { + "exsolve": "^1.0.8", + "knitwork": "^1.3.0", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uqr": { + "version": "0.1.3", + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vaul-vue": { + "version": "0.4.1", + "dependencies": { + "@vueuse/core": "^10.8.0", + "reka-ui": "^2.0.0", + "vue": "^3.4.5" + }, + "peerDependencies": { + "reka-ui": "^2.0.0", + "vue": "^3.3.0" + } + }, + "node_modules/vaul-vue/node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "license": "MIT" + }, + "node_modules/vaul-vue/node_modules/@vueuse/core": { + "version": "10.11.1", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vaul-vue/node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vaul-vue/node_modules/@vueuse/metadata": { + "version": "10.11.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vaul-vue/node_modules/@vueuse/shared": { + "version": "10.11.1", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vaul-vue/node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vaul-vue/node_modules/reka-ui": { + "version": "2.9.6", + "resolved": "https://registry.npmjs.org/reka-ui/-/reka-ui-2.9.6.tgz", + "integrity": "sha512-K6bL457owpvWONc7hsjFxo3HDC9s6IzhRqShW0w9JSKelPGfRbkHD558UQTn/NH1cvrXVHygKyC7fExFmRketg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.13", + "@floating-ui/vue": "^1.1.6", + "@internationalized/date": "^3.5.0", + "@internationalized/number": "^3.5.0", + "@tanstack/vue-virtual": "^3.12.0", + "@vueuse/core": "^14.1.0", + "@vueuse/shared": "^14.1.0", + "aria-hidden": "^1.2.4", + "defu": "^6.1.5", + "ohash": "^2.0.11" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/zernonia" + }, + "peerDependencies": { + "vue": ">= 3.4.0" + } + }, + "node_modules/vaul-vue/node_modules/reka-ui/node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/vaul-vue/node_modules/reka-ui/node_modules/@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vaul-vue/node_modules/reka-ui/node_modules/@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vaul-vue/node_modules/reka-ui/node_modules/@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "7.3.2", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-dev-rpc": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "birpc": "^2.4.0", + "vite-hot-client": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0" + } + }, + "node_modules/vite-dev-rpc/node_modules/birpc": { + "version": "2.9.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-node": { + "version": "5.3.0", + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "es-module-lexer": "^2.0.0", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "vite": "^7.3.1" + }, + "bin": { + "vite-node": "dist/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://opencollective.com/antfu" + } + }, + "node_modules/vite-plugin-checker": { + "version": "0.12.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "chokidar": "^4.0.3", + "npm-run-path": "^6.0.0", + "picocolors": "^1.1.1", + "picomatch": "^4.0.3", + "tiny-invariant": "^1.3.3", + "tinyglobby": "^0.2.15", + "vscode-uri": "^3.1.0" + }, + "engines": { + "node": ">=16.11" + }, + "peerDependencies": { + "@biomejs/biome": ">=1.7", + "eslint": ">=9.39.1", + "meow": "^13.2.0", + "optionator": "^0.9.4", + "oxlint": ">=1", + "stylelint": ">=16", + "typescript": "*", + "vite": ">=5.4.21", + "vls": "*", + "vti": "*", + "vue-tsc": "~2.2.10 || ^3.0.0" + }, + "peerDependenciesMeta": { + "@biomejs/biome": { + "optional": true + }, + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "oxlint": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/chokidar": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vite-plugin-checker/node_modules/npm-run-path": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-checker/node_modules/path-key": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-checker/node_modules/readdirp": { + "version": "4.1.2", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vite-plugin-checker/node_modules/unicorn-magic": { + "version": "0.3.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "11.3.3", + "license": "MIT", + "dependencies": { + "ansis": "^4.1.0", + "debug": "^4.4.1", + "error-stack-parser-es": "^1.0.5", + "ohash": "^2.0.11", + "open": "^10.2.0", + "perfect-debounce": "^2.0.0", + "sirv": "^3.0.1", + "unplugin-utils": "^0.3.0", + "vite-dev-rpc": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-inspect/node_modules/is-wsl": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect/node_modules/open": { + "version": "10.2.0", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect/node_modules/wsl-utils": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-vue-tracer": { + "version": "1.3.0", + "license": "MIT", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0", + "vue": "^3.5.0" + } + }, + "node_modules/vite-plugin-vue-tracer/node_modules/estree-walker": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.32", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-sfc": "3.5.32", + "@vue/runtime-dom": "3.5.32", + "@vue/server-renderer": "3.5.32", + "@vue/shared": "3.5.32" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-bundle-renderer": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "ufo": "^1.6.1" + } + }, + "node_modules/vue-component-meta": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.2.7", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-meta/node_modules/@vue/language-core": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.7.tgz", + "integrity": "sha512-Gn4q/tRxbpVGLEuARQ43p3YELlNAFgRUVCgW9U5Cr+5q4vfD2bWDWpl3ABbJMXUt5xlE1dF8dkigg2aUq7JYYw==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.1.2", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + } + }, + "node_modules/vue-component-type-helpers": { + "version": "3.2.7", + "license": "MIT" + }, + "node_modules/vue-devtools-stub": { + "version": "0.1.0", + "license": "MIT" + }, + "node_modules/vue-i18n": { + "version": "11.3.2", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.3.2", + "@intlify/devtools-types": "11.3.2", + "@intlify/shared": "11.3.2", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "5.0.4", + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.28.6", + "@vue-macros/common": "^3.1.1", + "@vue/devtools-api": "^8.0.6", + "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", + "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", + "yaml": "^2.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "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 + } + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.1.1" + } + }, + "node_modules/vue-router/node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "license": "MIT" + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wheel-gestures": { + "version": "2.2.48", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.20.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xss": { + "version": "1.0.15", + "license": "MIT", + "optional": true, + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xss/node_modules/commander": { + "version": "2.20.3", + "license": "MIT", + "optional": true + }, + "node_modules/y-protocols": { + "version": "1.0.7", + "license": "MIT", + "peer": true, + "dependencies": { + "lib0": "^0.2.85" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "peerDependencies": { + "yjs": "^13.0.0" + } + }, + "node_modules/y-protocols/node_modules/lib0": { + "version": "0.2.117", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.117.tgz", + "integrity": "sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "isomorphic.js": "^0.2.4" + }, + "bin": { + "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js", + "0gentesthtml": "bin/gentesthtml.js", + "0serve": "bin/0serve.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml-eslint-parser": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yaml-eslint-parser/node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "18.0.0", + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yjs": { + "version": "13.6.30", + "license": "MIT", + "peer": true, + "dependencies": { + "lib0": "^0.2.99" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/yjs/node_modules/lib0": { + "version": "0.2.117", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.117.tgz", + "integrity": "sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "isomorphic.js": "^0.2.4" + }, + "bin": { + "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js", + "0gentesthtml": "bin/gentesthtml.js", + "0serve": "bin/0serve.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/youch": { + "version": "4.1.1", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.6", + "@poppinss/dumper": "^0.7.0", + "@speed-highlight/core": "^1.2.14", + "cookie-es": "^3.0.1", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, + "node_modules/youch/node_modules/@speed-highlight/core": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.15.tgz", + "integrity": "sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==", + "license": "CC0-1.0" + }, + "node_modules/youch/node_modules/cookie-es": { + "version": "3.1.1", + "license": "MIT" + }, + "node_modules/zip-stream": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/docus/package.json b/docus/package.json new file mode 100644 index 0000000..be76a6f --- /dev/null +++ b/docus/package.json @@ -0,0 +1,20 @@ +{ + "name": "forge-docus", + "private": true, + "scripts": { + "sync:content": "node ../tools/sync-docus-docs.mjs", + "predev": "npm run sync:content", + "dev": "nuxt dev --extends docus", + "prebuild": "npm run sync:content", + "build": "nuxt build --extends docus" + }, + "dependencies": { + "@takumi-rs/core": "^1.0.15", + "better-sqlite3": "^12.9.0", + "docus": "^5.10.0", + "nuxt": "^4.4.2" + }, + "overrides": { + "esbuild": "0.27.7" + } +} diff --git a/package.json b/package.json index 637fc5d..4c41651 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,9 @@ "terser": "^5.44.0" }, "scripts": { - "build:webui": "node tools/build-webui.mjs" + "build:webui": "node tools/build-webui.mjs", + "docs:sync": "node tools/sync-docus-docs.mjs", + "docs:dev": "npm --prefix docus run dev", + "docs:build": "npm --prefix docus run build" } } diff --git a/tools/sync-docus-docs.mjs b/tools/sync-docus-docs.mjs new file mode 100644 index 0000000..df4a455 --- /dev/null +++ b/tools/sync-docus-docs.mjs @@ -0,0 +1,623 @@ +import fs from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const docusDir = path.join(repoRoot, 'docus'); +const contentDir = path.join(docusDir, 'content'); + +const generatedPages = [ + { + source: 'docs/FRAMEWORK_ARCHITECTURE.md', + target: '1.getting-started/1.architecture.md' + }, + { + source: 'docs/MODULE_REFERENCE.md', + target: '1.getting-started/2.module-reference.md' + }, + { + source: 'docs/DEVELOPMENT_GUIDE.md', + target: '1.getting-started/3.development.md' + }, + { + source: 'docs/surrealdb-setup.md', + target: '1.getting-started/4.surrealdb-setup.md' + }, + { + source: 'arma/server/docs/README.md', + target: '2.server-extension/0.index.md' + }, + { + source: 'arma/server/docs/api-reference.md', + target: '2.server-extension/1.api-reference.md' + }, + { + source: 'arma/server/docs/usage-examples.md', + target: '2.server-extension/2.usage-examples.md' + }, + { + source: 'docs/ACTOR_USAGE_GUIDE.md', + target: '3.server-modules/1.actor.md' + }, + { + source: 'docs/BANK_USAGE_GUIDE.md', + target: '3.server-modules/2.bank.md' + }, + { + source: 'docs/CAD_USAGE_GUIDE.md', + target: '3.server-modules/3.cad.md' + }, + { + source: 'docs/ECONOMY_USAGE_GUIDE.md', + target: '3.server-modules/4.economy.md' + }, + { + source: 'docs/GARAGE_USAGE_GUIDE.md', + target: '3.server-modules/5.garage.md' + }, + { + source: 'docs/LOCKER_USAGE_GUIDE.md', + target: '3.server-modules/6.locker.md' + }, + { + source: 'docs/ORG_USAGE_GUIDE.md', + target: '3.server-modules/7.organization.md' + }, + { + source: 'docs/OWNED_STORAGE_USAGE_GUIDE.md', + target: '3.server-modules/8.owned-storage.md' + }, + { + source: 'docs/PHONE_USAGE_GUIDE.md', + target: '3.server-modules/9.phone.md' + }, + { + source: 'docs/STORE_USAGE_GUIDE.md', + target: '3.server-modules/10.store.md' + }, + { + source: 'docs/TASK_USAGE_GUIDE.md', + target: '3.server-modules/11.task.md' + }, + { + source: 'docs/CLIENT_USAGE_GUIDE.md', + target: '4.client-addons/0.index.md' + }, + { + source: 'docs/CLIENT_MAIN_USAGE_GUIDE.md', + target: '4.client-addons/1.main.md' + }, + { + source: 'docs/CLIENT_COMMON_USAGE_GUIDE.md', + target: '4.client-addons/2.common.md' + }, + { + source: 'docs/CLIENT_ACTOR_USAGE_GUIDE.md', + target: '4.client-addons/3.actor.md' + }, + { + source: 'docs/CLIENT_BANK_USAGE_GUIDE.md', + target: '4.client-addons/4.bank.md' + }, + { + source: 'docs/CLIENT_CAD_USAGE_GUIDE.md', + target: '4.client-addons/5.cad.md' + }, + { + source: 'docs/CLIENT_GARAGE_USAGE_GUIDE.md', + target: '4.client-addons/6.garage.md' + }, + { + source: 'docs/CLIENT_LOCKER_USAGE_GUIDE.md', + target: '4.client-addons/7.locker.md' + }, + { + source: 'docs/CLIENT_NOTIFICATIONS_USAGE_GUIDE.md', + target: '4.client-addons/8.notifications.md' + }, + { + source: 'docs/CLIENT_ORG_USAGE_GUIDE.md', + target: '4.client-addons/9.organization.md' + }, + { + source: 'docs/CLIENT_PHONE_USAGE_GUIDE.md', + target: '4.client-addons/10.phone.md' + }, + { + source: 'docs/CLIENT_STORE_USAGE_GUIDE.md', + target: '4.client-addons/11.store.md' + } +]; + +const virtualRoutes = new Map([ + ['README.md', '/getting-started'], + ['docs/README.md', '/getting-started'] +]); + +for (const page of generatedPages) { + virtualRoutes.set(toPosix(page.source), toRoute(page.target)); +} + +const staticFiles = [ + { + target: 'index.md', + content: `--- +seo: + title: Forge Framework Documentation + description: Documentation for the Forge Arma 3 framework, covering architecture, persistence, extension APIs, gameplay modules, and client UIs. +--- + +::u-page-hero +#title +Forge Framework Documentation + +#description +Forge is a persistent Arma 3 framework that combines SQF addons, a Rust +\`arma-rs\` extension, SurrealDB persistence, shared domain crates, and +browser-backed player interfaces. + +Use these docs to understand the runtime architecture, extension API surface, +server gameplay modules, and client addon integration patterns. + +#links + :::u-button + --- + color: primary + size: xl + to: /getting-started + trailing-icon: i-lucide-arrow-right + --- + Start here + ::: + + :::u-button + --- + color: neutral + icon: simple-icons-github + size: xl + to: https://github.com/InnovativeDevSolutions/forge + variant: outline + --- + View source + ::: +:: + +::u-page-section +#title +What Forge Covers + +#features + :::u-page-feature + --- + icon: i-lucide-boxes + --- + #title + Domain [Modules]{.text-primary} + + #description + Actor, bank, CAD, garage, locker, organization, phone, store, task, and + owned-storage workflows share a consistent service and extension model. + ::: + + :::u-page-feature + --- + icon: i-lucide-server + --- + #title + Rust [Extension]{.text-primary} + + #description + The server extension keeps command parsing thin, routes domain requests into + services, and persists durable state through SurrealDB. + ::: + + :::u-page-feature + --- + icon: i-lucide-database-zap + --- + #title + Durable [Persistence]{.text-primary} + + #description + Repository traits stay storage-agnostic while concrete adapters in the + extension handle schema and database mapping. + ::: + + :::u-page-feature + --- + icon: i-lucide-monitor-smartphone + --- + #title + Browser [UIs]{.text-primary} + + #description + Client addons host web-based interfaces inside Arma displays and synchronize + state through namespaced browser bridge events. + ::: + + :::u-page-feature + --- + icon: i-lucide-arrow-left-right + --- + #title + Transport [Layer]{.text-primary} + + #description + Large payloads move through chunked request and response transport while + smaller commands still use direct \`callExtension\` paths. + ::: + + :::u-page-feature + --- + icon: i-lucide-wrench + --- + #title + Development [Workflow]{.text-primary} + + #description + The docs cover module boundaries, local validation checks, and where new + domain logic belongs across Rust, SQF, and web UI layers. + ::: +:: + +::u-page-section +#title +Documentation Areas + +#features + :::u-page-feature + --- + icon: i-lucide-rocket + to: /getting-started + --- + #title + [Getting Started]{.text-primary} + + #description + Framework overview, architecture, module reference, and development rules. + ::: + + :::u-page-feature + --- + icon: i-lucide-server-cog + to: /server-extension + --- + #title + Server [Extension]{.text-primary} + + #description + Extension architecture, command surface, and SQF usage examples. + ::: + + :::u-page-feature + --- + icon: i-lucide-layers-3 + to: /server-modules + --- + #title + Server [Modules]{.text-primary} + + #description + Gameplay-domain usage guides for persistence, hot state, and command flows. + ::: + + :::u-page-feature + --- + icon: i-lucide-monitor-smartphone + to: /client-addons + --- + #title + Client [Addons]{.text-primary} + + #description + Browser bridge, client UX entry points, and addon-specific event contracts. + ::: +:: +` + }, + { + target: '1.getting-started/.navigation.yml', + content: `title: Getting Started +icon: i-lucide-rocket +` + }, + { + target: '1.getting-started/0.index.md', + content: `# Getting Started + +Use this section as the main entry point for the Forge framework. + +Forge combines: + +- Arma 3 client addons for UX and browser-hosted interfaces +- Arma 3 server addons for mission integration and authoritative flow control +- a Rust server extension for command routing and persistence +- shared Rust crates for models, repositories, and services +- SurrealDB for durable storage + +## Common Commands + +\`\`\`powershell +cargo test +npm run build:webui +.\\build-arma.ps1 +\`\`\` + +## Start Here + +::u-page-grid + :::u-page-card + --- + icon: i-lucide-network + title: Architecture + to: /getting-started/architecture + --- + Understand how SQF, Rust services, SurrealDB, and browser UIs fit together. + ::: + + :::u-page-card + --- + icon: i-lucide-boxes + title: Module Reference + to: /getting-started/module-reference + --- + Review gameplay domains, infrastructure modules, and extension command groups. + ::: + + :::u-page-card + --- + icon: i-lucide-wrench + title: Development Guide + to: /getting-started/development + --- + See the rules for adding modules and changing boundaries without regressions. + ::: + + :::u-page-card + --- + icon: i-lucide-database + title: SurrealDB Setup + to: /getting-started/surrealdb-setup + --- + Install SurrealDB, match Forge config values, and choose the right setup path + for developers or admin-facing roles. + ::: + + :::u-page-card + --- + icon: i-lucide-server-cog + title: Server Extension + to: /server-extension + --- + Follow the extension architecture, API surface, and SQF usage examples. + ::: + + :::u-page-card + --- + icon: i-lucide-layers-3 + title: Server Modules + to: /server-modules + --- + Dive into the actor, bank, CAD, garage, locker, organization, phone, store, + task, and owned-storage guides. + ::: + + :::u-page-card + --- + icon: i-lucide-monitor-smartphone + title: Client Addons + to: /client-addons + --- + Explore the client bridge model and addon-specific browser integration rules. + ::: +:: +` + }, + { + target: '3.server-modules/.navigation.yml', + content: `title: Server Modules +icon: i-lucide-layers-3 +` + }, + { + target: '3.server-modules/0.index.md', + content: `# Server Module Guides + +These pages document the authoritative server-side workflows in Forge. + +Most modules follow the same shape: + +1. Server SQF gathers game context and validates mission/runtime assumptions. +2. The \`forge_server\` extension routes the request into the matching command group. +3. Services apply business rules through storage-agnostic repository traits. +4. The extension persists durable state through SurrealDB adapters when needed. + +## Gameplay Domains + +::u-page-grid + :::u-page-card + --- + icon: i-lucide-user-round + title: Actor + to: /server-modules/actor + --- + Persistent player identity, position, loadout, contact fields, and hot state. + ::: + + :::u-page-card + --- + icon: i-lucide-wallet + title: Bank + to: /server-modules/bank + --- + Player funds, transfers, PIN validation, checkout charging, and bank hot state. + ::: + + :::u-page-card + --- + icon: i-lucide-map + title: CAD + to: /server-modules/cad + --- + Dispatch requests, assignments, profiles, grouped state, and hydrated views. + ::: + + :::u-page-card + --- + icon: i-lucide-ambulance + title: Economy + to: /server-modules/economy + --- + Fuel, service, and medical charging rules across player and organization funds. + ::: + + :::u-page-card + --- + icon: i-lucide-car-front + title: Garage + to: /server-modules/garage + --- + Vehicle storage, hot-state updates, and persistence of vehicle condition. + ::: + + :::u-page-card + --- + icon: i-lucide-package + title: Locker + to: /server-modules/locker + --- + Player inventory storage, unique item limits, and locker hot-state behavior. + ::: + + :::u-page-card + --- + icon: i-lucide-building-2 + title: Organization + to: /server-modules/organization + --- + Membership, treasury, shared assets, fleet, and organization hot workflows. + ::: + + :::u-page-card + --- + icon: i-lucide-key-round + title: Owned Storage + to: /server-modules/owned-storage + --- + Owner-scoped locker and vehicle unlock storage used by org-linked features. + ::: + + :::u-page-card + --- + icon: i-lucide-smartphone + title: Phone + to: /server-modules/phone + --- + Contacts, message threads, and email state for in-game phone workflows. + ::: + + :::u-page-card + --- + icon: i-lucide-shopping-cart + title: Store + to: /server-modules/store + --- + Checkout orchestration across pricing, grants, payment sources, and rollback. + ::: + + :::u-page-card + --- + icon: i-lucide-flag + title: Task + to: /server-modules/task + --- + Task catalog, ownership, status transitions, defuse counters, and rewards. + ::: +:: +` + }, + { + target: '4.client-addons/.navigation.yml', + content: `title: Client Addons +icon: i-lucide-monitor-smartphone +` + } +]; + +await fs.rm(contentDir, { recursive: true, force: true }); +await fs.mkdir(contentDir, { recursive: true }); + +for (const file of staticFiles) { + await writeContentFile(file.target, file.content); +} + +for (const page of generatedPages) { + const sourceRel = toPosix(page.source); + const sourcePath = path.join(repoRoot, page.source); + const rawContent = await fs.readFile(sourcePath, 'utf8'); + const content = rewriteMarkdownLinks(rawContent, sourceRel); + await writeContentFile(page.target, content); +} + +console.log(`Generated ${staticFiles.length + generatedPages.length} Docus content files.`); + +function rewriteMarkdownLinks(content, sourceRel) { + const sourceDir = path.posix.dirname(sourceRel); + + return content.replace(/\]\(([^)]+)\)/g, (match, rawTarget) => { + if ( + rawTarget.startsWith('http://') || + rawTarget.startsWith('https://') || + rawTarget.startsWith('#') || + rawTarget.startsWith('mailto:') + ) { + return match; + } + + const [targetPath, targetHash] = rawTarget.split('#'); + if (!targetPath || !targetPath.toLowerCase().endsWith('.md')) { + return match; + } + + const normalizedTarget = toPosix( + path.posix.normalize(path.posix.join(sourceDir, targetPath.replace(/\\/g, '/'))) + ); + const route = virtualRoutes.get(normalizedTarget); + if (!route) { + return match; + } + + return `](${route}${targetHash ? `#${targetHash}` : ''})`; + }); +} + +function toRoute(target) { + const withoutExt = toPosix(target).replace(/\.md$/i, ''); + const parts = withoutExt.split('/'); + + if (parts.length === 1 && parts[0] === 'index') { + return '/'; + } + + const mapped = parts + .map((part, index) => { + if (index === parts.length - 1 && (part === '0.index' || part === 'index')) { + return ''; + } + + return part.replace(/^\d+\./, ''); + }) + .filter(Boolean); + + return `/${mapped.join('/')}`; +} + +function toPosix(value) { + return value.replace(/\\/g, '/'); +} + +async function writeContentFile(target, content) { + const targetPath = path.join(contentDir, target); + await fs.mkdir(path.dirname(targetPath), { recursive: true }); + await fs.writeFile(targetPath, content.endsWith('\n') ? content : `${content}\n`, 'utf8'); +}