diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 98e10d6..340d0cd 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -32,6 +32,7 @@ module.exports = { items: [ {text: 'Robots.txt', link: '/robots'}, + {text: 'LLMS.txt', link: '/llms'}, {text: 'Sitemap.xml', link: '/sitemap'}, {text: 'Redirects', link: '/redirects'}, {text: '404 tracking', link: '/notfound'}, diff --git a/docs/llms.md b/docs/llms.md new file mode 100644 index 0000000..4cca1c0 --- /dev/null +++ b/docs/llms.md @@ -0,0 +1,86 @@ +--- +title: LLM.txt - SEO Fields +prev: false +next: false +--- + +# LLM.txt + +### What is llms.txt? +[llms.txt](https://llmstxt.org/) is a standard for providing structured, markdown-formatted information about your website for large language models. It helps AI tools understand your site's content and structure in a concise, machine-readable way. + +### Enabling +You can enable llms.txt from the control panel under **SEO > LLM.txt**. Toggle the "Enable llms.txt" switch to have the plugin handle your `/llms.txt` route. + +### Title & Summary +Two optional fields let you customize the top of your llms.txt output: + +- **Title** — The main heading for your llms.txt file. Defaults to the site name if left empty. +- **Summary** — A brief description of what the website is about. This is rendered as a blockquote in the output. + +### Description Fallback Fields +For each entry type, you can select a field to use as a fallback description when no SEO meta description is set on an entry. Only **Plain Text** and **CKEditor** fields are available as options. + +The description priority for each entry is: +1. SEO meta description (if set) +2. The configured fallback field for that entry type +3. No description + +### Generated Content +The plugin automatically builds the llms.txt content based on your site's sections and category groups: + +- **Singles** — Listed under an "Overview" heading. +- **Channels** — Each channel gets its own heading showing the field types it contains, the total entry count, and up to 5 most recent entries. +- **Structures** — Each structure gets its own heading with entries displayed in their full hierarchy using nested lists. +- **Categories** — Grouped under a "Categories" heading, each group showing its count and up to 5 example categories. + +Sections and category groups are **skipped** if they don't have URLs enabled for the current site or have zero entries. + +### Entry Format +Each entry is rendered as a markdown list item following the llms.txt spec: + +``` +- [Entry Title](https://example.com/entry-url): Description text +``` + +The title is taken from the SEO meta title if set, otherwise the entry title. The description follows the priority described above. + +### Caching +The generated llms.txt output is cached automatically. The cache is invalidated when entries are saved or deleted, and when sections or entry types change. You can also manually clear it from Craft's **Utilities > Clear Caches** tool. + +### Multisite +Each site gets its own llms.txt settings and output. Use the site switcher at the top of the LLM.txt settings page to configure each site independently. + +### Example Output +```markdown +# My Website + +> A brief description of the website. + +## Overview + +- [Home](https://example.com): Welcome to our website +- [About](https://example.com/about): Learn more about us + +## Blog + +Contains: Plain Text, CKEditor +5 entries + +- [Latest Post](https://example.com/blog/latest-post): Summary of the post +- [Another Post](https://example.com/blog/another-post): Another summary + +## Pages + +- [Services](https://example.com/services): Our services + - [Web Development](https://example.com/services/web-development): Custom web solutions + - [Design](https://example.com/services/design): Creative design services + +## Categories + +### Topics (3) + +- [Technology](https://example.com/topics/technology) +- [Design](https://example.com/topics/design) +- [Business](https://example.com/topics/business) +``` diff --git a/src/SeoFields.php b/src/SeoFields.php index 5183462..2017bf8 100644 --- a/src/SeoFields.php +++ b/src/SeoFields.php @@ -48,6 +48,7 @@ use studioespresso\seofields\models\Settings; use studioespresso\seofields\records\NotFoundRecord; use studioespresso\seofields\services\DefaultsService; +use studioespresso\seofields\services\LlmService; use studioespresso\seofields\services\NotFoundService; use studioespresso\seofields\services\RedirectService; use studioespresso\seofields\services\RenderService; @@ -72,6 +73,7 @@ * @property RedirectService $redirectService * @property NotFoundService $notFoundService * @property SchemaService $schemaService + * @property LlmService $llmService * @method Settings getSettings() */ class SeoFields extends Plugin @@ -89,7 +91,7 @@ class SeoFields extends Plugin // Public Properties // ========================================================================= - public string $schemaVersion = "4.0.0"; + public string $schemaVersion = "5.0.0"; public const EVENT_SEOFIELDS_REGISTER_ELEMENT = "registerSeoElement"; @@ -108,6 +110,7 @@ public function init() "redirectService" => RedirectService::class, "notFoundService" => NotFoundService::class, "schemaService" => SchemaService::class, + "llmService" => LlmService::class, ]); if (Craft::$app instanceof ConsoleApplication) { @@ -168,6 +171,12 @@ public function getCpNavItem(): ?array 'url' => 'seo-fields/robots', ]; } + if ($currentUser->can('seo-fields:llm')) { + $subNavs['llm'] = [ + 'label' => 'LLM.txt', + 'url' => 'seo-fields/llm', + ]; + } if ($currentUser->can('seo-fields:sitemap')) { $subNavs['sitemap'] = [ 'label' => 'Sitemap.xml', @@ -242,6 +251,9 @@ function(RegisterUserPermissionsEvent $event) { 'seo-fields:robots' => [ 'label' => Craft::t('seo-fields', 'Robots'), ], + 'seo-fields:llm' => [ + 'label' => Craft::t('seo-fields', 'LLM.txt'), + ], 'seo-fields:sitemap' => [ 'label' => Craft::t('seo-fields', 'Sitemap'), ], @@ -272,6 +284,9 @@ function(RegisterUrlRulesEvent $event) { 'robots.txt' => 'seo-fields/robots/render', ]); } + $event->rules = array_merge($event->rules, [ + 'llms.txt' => 'seo-fields/llm/render', + ]); if (SeoFields::$plugin->getSettings()->sitemapPerSite) { $shouldRender = SeoFields::getInstance()->sitemapService->shouldRenderBySiteId(Craft::$app->getSites()->getCurrentSite()); } else { @@ -298,11 +313,11 @@ function(RegisterUrlRulesEvent $event) { 'seo-fields' => 'seo-fields/defaults/index', 'seo-fields/cp-api/' => 'seo-fields/cp-api/', 'seo-fields//' => 'seo-fields//index', - 'seo-fields/' => 'seo-fields//index', + 'seo-fields/' => 'seo-fields//index', 'seo-fields//' => 'seo-fields//', 'seo-fields//' => 'seo-fields//', 'seo-fields///' => 'seo-fields//', - 'seo-fields//' => 'seo-fields//settings', + 'seo-fields//' => 'seo-fields//settings', ]); } ); @@ -325,6 +340,7 @@ function(SiteEvent $event) { Elements::EVENT_AFTER_SAVE_ELEMENT, function(ElementEvent $event) { SeoFields::$plugin->sitemapService->clearCacheForElement($event->element); + SeoFields::$plugin->llmService->clearCaches(); } ); @@ -333,6 +349,15 @@ function(ElementEvent $event) { Elements::EVENT_AFTER_DELETE_ELEMENT, function(ElementEvent $event) { SeoFields::$plugin->sitemapService->clearCacheForElement($event->element); + SeoFields::$plugin->llmService->clearCaches(); + } + ); + + Event::on( + Entries::class, + Entries::EVENT_AFTER_SAVE_SECTION, + function(SectionEvent $event) { + SeoFields::$plugin->llmService->clearCaches(); } ); @@ -341,6 +366,7 @@ function(ElementEvent $event) { Entries::EVENT_AFTER_DELETE_SECTION, function(SectionEvent $event) { SeoFields::$plugin->sitemapService->clearCaches(); + SeoFields::$plugin->llmService->clearCaches(); } ); @@ -349,6 +375,7 @@ function(SectionEvent $event) { Entries::EVENT_AFTER_DELETE_ENTRY_TYPE, function(EntryTypeEvent $event) { SeoFields::$plugin->sitemapService->clearCaches(); + SeoFields::$plugin->llmService->clearCaches(); } ); @@ -461,6 +488,11 @@ function(RegisterCacheOptionsEvent $event) { "label" => "Sitemap caches (SEO Fields)", "action" => [SeoFields::$plugin->sitemapService, 'clearCaches'], ], + [ + "key" => 'seofields_llm', + "label" => "LLM.txt caches (SEO Fields)", + "action" => [SeoFields::$plugin->llmService, 'clearCaches'], + ], ] ); } diff --git a/src/controllers/LlmController.php b/src/controllers/LlmController.php new file mode 100644 index 0000000..0e6cd9f --- /dev/null +++ b/src/controllers/LlmController.php @@ -0,0 +1,129 @@ +getRequest()->getQueryParam('site')) { + $this->site = Craft::$app->getSites()->getSiteByHandle(Craft::$app->getRequest()->getQueryParam('site')); + } else { + $this->site = Craft::$app->getSites()->getPrimarySite(); + } + parent::init(); + } + + public function actionIndex() + { + $sites = Craft::$app->getSites()->getEditableSites(); + $data = SeoFields::$plugin->defaultsService->getDataBySiteHandle($this->site->handle); + + $crumbs = ['label' => $this->site->name]; + if (Craft::$app->getIsMultiSite()) { + $crumbs['menu'] = [ + 'label' => Craft::t('site', 'Select site'), + 'items' => Cp::siteMenuItems($sites, $this->site), + ]; + } + + $llmData = []; + if ($data->llm) { + $llmData = is_array($data->llm) ? $data->llm : Json::decodeIfJson($data->llm) ?? []; + } + + // Build sections with entry types and their text fields for the description fallback config + $sectionsData = []; + foreach (Craft::$app->getEntries()->getAllSections() as $section) { + $siteSettings = $section->getSiteSettings(); + if (!isset($siteSettings[$this->site->id]) || !$siteSettings[$this->site->id]->hasUrls) { + continue; + } + + $entryTypes = []; + foreach ($section->getEntryTypes() as $entryType) { + $fields = []; + foreach ($entryType->getFieldLayout()->getCustomFields() as $field) { + if (!($field instanceof \craft\fields\PlainText) && !($field instanceof \craft\ckeditor\Field)) { + continue; + } + $fields[] = [ + 'handle' => $field->handle, + 'name' => $field->name, + ]; + } + $entryTypes[] = [ + 'id' => $entryType->id, + 'name' => $entryType->name, + 'fields' => $fields, + ]; + } + + $sectionsData[] = [ + 'name' => $section->name, + 'entryTypes' => $entryTypes, + ]; + } + + return $this->asCpScreen() + ->selectedSubnavItem('llm') + ->title(Craft::t('seo-fields', 'LLM.txt')) + ->crumbs([$crumbs]) + ->action('seo-fields/llm/save') + ->contentTemplate('seo-fields/_llm/_content', [ + 'data' => $data, + 'llmData' => $llmData, + 'site' => $this->site, + 'sectionsData' => $sectionsData, + ]); + } + + public function actionSave() + { + $data = []; + if (Craft::$app->getRequest()->getBodyParam('id')) { + $model = SeoFields::$plugin->defaultsService->getDataById(Craft::$app->getRequest()->getBodyParam('id')); + } else { + $model = new SeoDefaultsModel(); + } + $data['enableLlm'] = Craft::$app->getRequest()->getBodyParam('enableLlm'); + $data['llm'] = Json::encode([ + 'title' => Craft::$app->getRequest()->getBodyParam('llmTitle'), + 'summary' => Craft::$app->getRequest()->getBodyParam('llmSummary'), + 'descriptionFields' => Craft::$app->getRequest()->getBodyParam('descriptionFields', []), + ]); + $data['siteId'] = Craft::$app->getRequest()->getBodyParam('siteId', Craft::$app->getSites()->getPrimarySite()->id); + $model->setAttributes($data); + SeoFields::$plugin->defaultsService->saveDefaults($model, Craft::$app->sites->currentSite->id); + SeoFields::$plugin->llmService->clearCaches(); + } + + public function actionRender(): \yii\web\Response + { + $site = Craft::$app->getSites()->getCurrentSite(); + $llmModel = SeoFields::$plugin->defaultsService->getLlmForSite($site); + + if (!$llmModel) { + throw new \yii\web\NotFoundHttpException(); + } + $llmData = is_array($llmModel->llm) ? $llmModel->llm : Json::decodeIfJson($llmModel->llm) ?? []; + + $markdown = SeoFields::$plugin->llmService->generateMarkdown($site, $llmData); + + $headers = Craft::$app->response->headers; + $headers->add('Content-Type', 'text/markdown; charset=utf-8'); + return $this->asRaw($markdown); + } +} diff --git a/src/migrations/m260213_181738_addLlmSettings.php b/src/migrations/m260213_181738_addLlmSettings.php new file mode 100644 index 0000000..29f81a3 --- /dev/null +++ b/src/migrations/m260213_181738_addLlmSettings.php @@ -0,0 +1,40 @@ +addColumn( + DefaultsRecord::tableName(), + 'enableLlm', + $this->boolean()->after('robots') + ); + $this->addColumn( + DefaultsRecord::tableName(), + 'llm', + $this->json()->after('enableLlm') + ); + + return true; + } + + /** + * @inheritdoc + */ + public function safeDown(): bool + { + echo "m260213_181738_addLlmSettings cannot be reverted.\n"; + return false; + } +} diff --git a/src/models/SeoDefaultsModel.php b/src/models/SeoDefaultsModel.php index f8c34b2..c65553a 100644 --- a/src/models/SeoDefaultsModel.php +++ b/src/models/SeoDefaultsModel.php @@ -23,6 +23,10 @@ class SeoDefaultsModel extends Model public $robots; + public $enableLlm; + + public $llm; + public $schema; public $sitemap; @@ -42,6 +46,8 @@ public function rules(): array 'siteId', 'enableRobots', 'robots', + 'enableLlm', + 'llm', 'schema', 'sitemap', 'id', diff --git a/src/services/DefaultsService.php b/src/services/DefaultsService.php index 6076bfe..6e3ea0a 100644 --- a/src/services/DefaultsService.php +++ b/src/services/DefaultsService.php @@ -33,6 +33,8 @@ public function saveDefaults(SeoDefaultsModel $model, $siteId) $record->setAttribute('siteId', $model->siteId ?? $siteId); $record->setAttribute('enableRobots', $model->enableRobots); $record->setAttribute('robots', $model->robots); + $record->setAttribute('enableLlm', $model->enableLlm); + $record->setAttribute('llm', $model->llm); $record->setAttribute('schema', $model->schema); $record->setAttribute('sitemap', $model->sitemap); @@ -69,6 +71,8 @@ public function getDataBySiteId($siteId) 'id' => $record->id, 'enableRobots' => $record->enableRobots, 'robots' => $record->robots, + 'enableLlm' => $record->enableLlm, + 'llm' => $record->llm, 'schema' => $record->schema, 'sitemap' => $record->sitemap, ]); @@ -110,6 +114,22 @@ public function getRobotsForSite(Site $site) } } + public function getLlmForSite(Site $site) + { + $record = $this->getRecordForSiteId($site->id); + if (!$record || !$record->enableLlm) { + return false; + } + + $model = new SeoDefaultsModel(); + $fields = [ + 'enableLlm' => $record->enableLlm, + 'llm' => $record->llm, + ]; + $model->setAttributes($fields); + return $model; + } + public function getRecordForSiteId($siteId) { $record = DefaultsRecord::findOne( diff --git a/src/services/LlmService.php b/src/services/LlmService.php new file mode 100644 index 0000000..a9ff026 --- /dev/null +++ b/src/services/LlmService.php @@ -0,0 +1,264 @@ +id; + $cacheDependency = new TagDependency([ + 'tags' => [ + self::LLM_CACHE_KEY, + $cacheKey, + ], + ]); + + $duration = Craft::$app->getConfig()->general->devMode ? 1 : null; + + return Craft::$app->getCache()->getOrSet( + $cacheKey, + function() use ($site, $llmData) { + return $this->_buildMarkdown($site, $llmData); + }, + $duration, + $cacheDependency + ); + } + + public function clearCaches(): void + { + TagDependency::invalidate( + Craft::$app->getCache(), + [self::LLM_CACHE_KEY] + ); + } + + private function _buildMarkdown(Site $site, array $llmData): string + { + $lines = []; + $descriptionFields = $llmData['descriptionFields'] ?? []; + + // H1 — title + $title = !empty($llmData['title']) ? $llmData['title'] : $site->name; + $lines[] = '# ' . $title; + $lines[] = ''; + + // Blockquote — summary + if (!empty($llmData['summary'])) { + foreach (explode("\n", $llmData['summary']) as $summaryLine) { + $lines[] = '> ' . $summaryLine; + } + $lines[] = ''; + } + + // Sections + $sections = Craft::$app->getEntries()->getAllSections(); + $singles = []; + $channels = []; + + foreach ($sections as $section) { + $siteSettings = $section->getSiteSettings(); + if (!isset($siteSettings[$site->id]) || !$siteSettings[$site->id]->hasUrls) { + continue; + } + + $count = Entry::find() + ->siteId($site->id) + ->sectionId($section->id) + ->count(); + + if ($count === 0) { + continue; + } + + if ($section->type === 'single') { + $entry = Entry::find() + ->siteId($site->id) + ->sectionId($section->id) + ->one(); + if ($entry && $entry->getUrl()) { + $singles[] = $entry; + } + } else { + $channels[] = [ + 'section' => $section, + 'count' => $count, + ]; + } + } + + // Singles + if (!empty($singles)) { + $lines[] = '## Overview'; + $lines[] = ''; + foreach ($singles as $entry) { + $lines[] = $this->_formatElementLink($entry, $descriptionFields); + } + $lines[] = ''; + } + + // Channels & Structures + foreach ($channels as $channelData) { + $section = $channelData['section']; + $count = $channelData['count']; + + $lines[] = '## ' . $section->name; + $lines[] = ''; + + // Collect field types across all entry types in this section + $fieldNames = []; + foreach ($section->getEntryTypes() as $entryType) { + $fieldLayout = $entryType->getFieldLayout(); + foreach ($fieldLayout->getCustomFields() as $field) { + $displayName = $field::displayName(); + $fieldNames[$displayName] = true; + } + } + if (!empty($fieldNames)) { + $lines[] = 'Contains: ' . implode(', ', array_keys($fieldNames)); + $lines[] = ''; + } + + $lines[] = $count . ' ' . ($count === 1 ? 'entry' : 'entries'); + $lines[] = ''; + + if ($section->type === 'structure') { + // All entries in structure order, nested by level + $entries = Entry::find() + ->siteId($site->id) + ->sectionId($section->id) + ->status('live') + ->orderBy('lft ASC') + ->all(); + + foreach ($entries as $entry) { + if ($entry->getUrl()) { + $indent = str_repeat(' ', $entry->level - 1); + $lines[] = $indent . $this->_formatElementLink($entry, $descriptionFields); + } + } + } else { + // Up to 5 most recent entries for channels + $entries = Entry::find() + ->siteId($site->id) + ->sectionId($section->id) + ->status('live') + ->orderBy('postDate DESC') + ->limit(5) + ->all(); + + foreach ($entries as $entry) { + if ($entry->getUrl()) { + $lines[] = $this->_formatElementLink($entry, $descriptionFields); + } + } + } + $lines[] = ''; + } + + // Category groups + $categoryGroups = Craft::$app->getCategories()->getAllGroups(); + $validGroups = []; + + foreach ($categoryGroups as $group) { + $siteSettings = $group->getSiteSettings(); + if (!isset($siteSettings[$site->id]) || !$siteSettings[$site->id]->hasUrls) { + continue; + } + + $count = Category::find() + ->siteId($site->id) + ->groupId($group->id) + ->count(); + + if ($count === 0) { + continue; + } + + $validGroups[] = [ + 'group' => $group, + 'count' => $count, + ]; + } + + if (!empty($validGroups)) { + $lines[] = '## Categories'; + $lines[] = ''; + + foreach ($validGroups as $groupData) { + $group = $groupData['group']; + $count = $groupData['count']; + + $lines[] = '### ' . $group->name . ' (' . $count . ')'; + $lines[] = ''; + + $categories = Category::find() + ->siteId($site->id) + ->groupId($group->id) + ->limit(5) + ->all(); + + foreach ($categories as $category) { + if ($category->getUrl()) { + $lines[] = $this->_formatElementLink($category, $descriptionFields); + } + } + $lines[] = ''; + } + } + + return implode("\n", $lines); + } + + private function _formatElementLink(Element $element, array $descriptionFields = []): string + { + $fieldHandle = SeoFields::$plugin->getSettings()->fieldHandle; + $title = $element->title; + $description = null; + + if ($fieldHandle && isset($element->$fieldHandle)) { + $seoData = $element->$fieldHandle; + if ($seoData->metaTitle) { + $title = $seoData->metaTitle; + } + if ($seoData->metaDescription) { + $description = $seoData->metaDescription; + } + } + + // Fallback: use the configured description field for this entry type + if (!$description && $element instanceof Entry) { + $entryTypeId = (string) $element->getType()->id; + if (!empty($descriptionFields[$entryTypeId])) { + $fallbackHandle = $descriptionFields[$entryTypeId]; + if (isset($element->$fallbackHandle)) { + $value = (string) $element->$fallbackHandle; + $value = strip_tags($value); + $value = trim($value); + if (!empty($value)) { + $description = $value; + } + } + } + } + + $link = '- [' . $title . '](' . $element->getUrl() . ')'; + if ($description) { + $link .= ': ' . $description; + } + + return $link; + } +} diff --git a/src/templates/_llm/_content.twig b/src/templates/_llm/_content.twig new file mode 100644 index 0000000..4b3d733 --- /dev/null +++ b/src/templates/_llm/_content.twig @@ -0,0 +1,94 @@ +{% import "_includes/forms" as forms %} + + + +{% if data.id is defined %} + {{ forms.hidden({ + name: 'id', + value: data.id + }) }} +{% endif %} + +
+
+

{{ "What is llms.txt?"|t('seo-fields') }}

+
+ {{ "An llms.txt file helps LLMs (Large Language Models) understand your website. It provides a structured markdown summary of your site's content, purpose, and key resources. Learn more about the llms.txt specification."|t('seo-fields')|raw }} +
+
+
+ +{{ forms.lightswitchField({ + label: 'Enable llms.txt'|t('seo-fields'), + instructions: 'Let the plugin handle your llms.txt'|t('seo-fields'), + id: 'enableLlm', + name: 'enableLlm', + value: 1, + on: data.enableLlm is not null ? data.enableLlm, +}) }} + +{{ forms.textField({ + label: 'Title'|t('seo-fields'), + instructions: 'The main heading for your llms.txt file. Defaults to the site name if left empty.'|t('seo-fields'), + id: 'llmTitle', + name: 'llmTitle', + value: llmData.title ?? '', + placeholder: site.name, +}) }} + +{{ forms.textareaField({ + label: 'Summary'|t('seo-fields'), + instructions: 'A brief description of what this website is about. This will be rendered as a blockquote.'|t('seo-fields'), + id: 'llmSummary', + name: 'llmSummary', + value: llmData.summary ?? '', + rows: 3, +}) }} + +{% if sectionsData|length %} +
+
+

{{ "Description fallback field"|t('seo-fields') }}

+
+ {{ "When an entry has no SEO meta description, the selected field will be used as the description in llms.txt."|t('seo-fields') }} +
+
+
+ + + + + + + + + + + {% for section in sectionsData %} + {% for entryType in section.entryTypes %} + {% set currentValue = llmData.descriptionFields[entryType.id ~ ''] ?? '' %} + + + + + + {% endfor %} + {% endfor %} + +
{{ 'Section'|t('seo-fields') }}{{ 'Entry Type'|t('seo-fields') }}{{ 'Fallback field'|t('seo-fields') }}
{% if loop.first %}{{ section.name }}{% endif %}{{ entryType.name }} +
+
+
+ +
+
+
+
+{% endif %} diff --git a/yarn.lock b/yarn.lock index 35c2576..9f3d5ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,15 +2,15 @@ # yarn lockfile v1 -"@algolia/abtesting@1.12.2": - version "1.12.2" - resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.12.2.tgz#1cba5e3c654d02c6d435822a0a0070a5c435daa6" - integrity sha512-oWknd6wpfNrmRcH0vzed3UPX0i17o4kYLM5OMITyMVM2xLgaRbIafoxL0e8mcrNNb0iORCJA0evnNDKRYth5WQ== +"@algolia/abtesting@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.14.1.tgz#91e6ca4004d25a54cc272cb765929351bdfd4379" + integrity sha512-Dkj0BgPiLAaim9sbQ97UKDFHJE/880wgStAM18U++NaJ/2Cws34J5731ovJifr6E3Pv4T2CqvMXf8qLCC417Ew== dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" "@algolia/autocomplete-core@1.17.7": version "1.17.7" @@ -39,121 +39,121 @@ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz#105e84ad9d1a31d3fb86ba20dc890eefe1a313a0" integrity sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg== -"@algolia/client-abtesting@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.46.2.tgz#264a72f0e9d2fe0d0dc5c3d2d16bbb9cfe2ce9e8" - integrity sha512-oRSUHbylGIuxrlzdPA8FPJuwrLLRavOhAmFGgdAvMcX47XsyM+IOGa9tc7/K5SPvBqn4nhppOCEz7BrzOPWc4A== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/client-analytics@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.46.2.tgz#3f00a237508aa0c46c9c02dea9c855e0a78e241f" - integrity sha512-EPBN2Oruw0maWOF4OgGPfioTvd+gmiNwx0HmD9IgmlS+l75DatcBkKOPNJN+0z3wBQWUO5oq602ATxIfmTQ8bA== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/client-common@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.46.2.tgz#7f282fd8f721b0d96958445df2170f4c7dce6aac" - integrity sha512-Hj8gswSJNKZ0oyd0wWissqyasm+wTz1oIsv5ZmLarzOZAp3vFEda8bpDQ8PUhO+DfkbiLyVnAxsPe4cGzWtqkg== - -"@algolia/client-insights@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.46.2.tgz#194b7b529ee8a4ffd5d70037745082996c3b9aa0" - integrity sha512-6dBZko2jt8FmQcHCbmNLB0kCV079Mx/DJcySTL3wirgDBUH7xhY1pOuUTLMiGkqM5D8moVZTvTdRKZUJRkrwBA== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/client-personalization@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.46.2.tgz#d604da7f0a3df1b3e2a9fe338d368e48fb781f8e" - integrity sha512-1waE2Uqh/PHNeDXGn/PM/WrmYOBiUGSVxAWqiJIj73jqPqvfzZgzdakHscIVaDl6Cp+j5dwjsZ5LCgaUr6DtmA== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/client-query-suggestions@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.46.2.tgz#f13bc5897bfbdc19509d430a26e9bbe2402e00c9" - integrity sha512-EgOzTZkyDcNL6DV0V/24+oBJ+hKo0wNgyrOX/mePBM9bc9huHxIY2352sXmoZ648JXXY2x//V1kropF/Spx83w== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/client-search@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.46.2.tgz#771367916aaa3fb7a19d5944f8375504b0568ba6" - integrity sha512-ZsOJqu4HOG5BlvIFnMU0YKjQ9ZI6r3C31dg2jk5kMWPSdhJpYL9xa5hEe7aieE+707dXeMI4ej3diy6mXdZpgA== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/ingestion@1.46.2": - version "1.46.2" - resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.46.2.tgz#2a5d8a592d9f864dfb438722506382af56f8554f" - integrity sha512-1Uw2OslTWiOFDtt83y0bGiErJYy5MizadV0nHnOoHFWMoDqWW0kQoMFI65pXqRSkVvit5zjXSLik2xMiyQJDWQ== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/monitoring@1.46.2": - version "1.46.2" - resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.46.2.tgz#bd199368a49cb799cf12cfe76c49de6dd3021148" - integrity sha512-xk9f+DPtNcddWN6E7n1hyNNsATBCHIqAvVGG2EAGHJc4AFYL18uM/kMTiOKXE/LKDPyy1JhIerrh9oYb7RBrgw== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/recommend@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.46.2.tgz#e74bade1254046ed9be8ccd37f2a116ab9799508" - integrity sha512-NApbTPj9LxGzNw4dYnZmj2BoXiAc8NmbbH6qBNzQgXklGklt/xldTvu+FACN6ltFsTzoNU6j2mWNlHQTKGC5+Q== - dependencies: - "@algolia/client-common" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" - -"@algolia/requester-browser-xhr@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.46.2.tgz#7662480143405e815e1eed99136b4b2acd838ee7" - integrity sha512-ekotpCwpSp033DIIrsTpYlGUCF6momkgupRV/FA3m62SreTSZUKjgK6VTNyG7TtYfq9YFm/pnh65bATP/ZWJEg== - dependencies: - "@algolia/client-common" "5.46.2" - -"@algolia/requester-fetch@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.46.2.tgz#dee07f0131b75f30d083bafd6fb878afe7402eb9" - integrity sha512-gKE+ZFi/6y7saTr34wS0SqYFDcjHW4Wminv8PDZEi0/mE99+hSrbKgJWxo2ztb5eqGirQTgIh1AMVacGGWM1iw== - dependencies: - "@algolia/client-common" "5.46.2" - -"@algolia/requester-node-http@5.46.2": - version "5.46.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.46.2.tgz#7869d67cb2926bbdbfbfed2b4757e547c2e227eb" - integrity sha512-ciPihkletp7ttweJ8Zt+GukSVLp2ANJHU+9ttiSxsJZThXc4Y2yJ8HGVWesW5jN1zrsZsezN71KrMx/iZsOYpg== - dependencies: - "@algolia/client-common" "5.46.2" +"@algolia/client-abtesting@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.48.1.tgz#8b281afa7a79dd25a130cc4a7589bee030cc3f78" + integrity sha512-LV5qCJdj+/m9I+Aj91o+glYszrzd7CX6NgKaYdTOj4+tUYfbS62pwYgUfZprYNayhkQpVFcrW8x8ZlIHpS23Vw== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/client-analytics@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.48.1.tgz#b1a735b3586052a500ad2fd2a8a02d7345739ac2" + integrity sha512-/AVoMqHhPm14CcHq7mwB+bUJbfCv+jrxlNvRjXAuO+TQa+V37N8k1b0ijaRBPdmSjULMd8KtJbQyUyabXOu6Kg== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/client-common@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.48.1.tgz#2332a88d2937eb4a2e3ae6d05786dec4f161fdeb" + integrity sha512-VXO+qu2Ep6ota28ktvBm3sG53wUHS2n7bgLWmce5jTskdlCD0/JrV4tnBm1l7qpla1CeoQb8D7ShFhad+UoSOw== + +"@algolia/client-insights@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.48.1.tgz#ba0718de714832420c44e20a33fc4df7ab3088f3" + integrity sha512-zl+Qyb0nLg+Y5YvKp1Ij+u9OaPaKg2/EPzTwKNiVyOHnQJlFxmXyUZL1EInczAZsEY8hVpPCLtNfhMhfxluXKQ== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/client-personalization@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.48.1.tgz#634c5826ab9c329cefe7897f341f21e508f3d818" + integrity sha512-r89Qf9Oo9mKWQXumRu/1LtvVJAmEDpn8mHZMc485pRfQUMAwSSrsnaw1tQ3sszqzEgAr1c7rw6fjBI+zrAXTOw== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/client-query-suggestions@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.48.1.tgz#cd23455fe5b6a152beb57d52df7b83a24bdd2b19" + integrity sha512-TPKNPKfghKG/bMSc7mQYD9HxHRUkBZA4q1PEmHgICaSeHQscGqL4wBrKkhfPlDV1uYBKW02pbFMUhsOt7p4ZpA== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/client-search@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.48.1.tgz#026bd64e08432c10f85f9362a7bd33413997d945" + integrity sha512-4Fu7dnzQyQmMFknYwTiN/HxPbH4DyxvQ1m+IxpPp5oslOgz8m6PG5qhiGbqJzH4HiT1I58ecDiCAC716UyVA8Q== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/ingestion@1.48.1": + version "1.48.1" + resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.48.1.tgz#6015f95959f92825a71678b7d7b6fc8384e8fffa" + integrity sha512-/RFq3TqtXDUUawwic/A9xylA2P3LDMO8dNhphHAUOU51b1ZLHrmZ6YYJm3df1APz7xLY1aht6okCQf+/vmrV9w== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/monitoring@1.48.1": + version "1.48.1" + resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.48.1.tgz#2ef327e286c6be9a111a48f1061d0ab38e514031" + integrity sha512-Of0jTeAZRyRhC7XzDSjJef0aBkgRcvRAaw0ooYRlOw57APii7lZdq+layuNdeL72BRq1snaJhoMMwkmLIpJScw== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/recommend@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.48.1.tgz#256952a4bd4d07a524b6bb36d6a92636d42193f4" + integrity sha512-bE7JcpFXzxF5zHwj/vkl2eiCBvyR1zQ7aoUdO+GDXxGp0DGw7nI0p8Xj6u8VmRQ+RDuPcICFQcCwRIJT5tDJFw== + dependencies: + "@algolia/client-common" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" + +"@algolia/requester-browser-xhr@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.48.1.tgz#e50c5b406cb27ece45dd2cab8dc9a3058e7e7f74" + integrity sha512-MK3wZ2koLDnvH/AmqIF1EKbJlhRS5j74OZGkLpxI4rYvNi9Jn/C7vb5DytBnQ4KUWts7QsmbdwHkxY5txQHXVw== + dependencies: + "@algolia/client-common" "5.48.1" + +"@algolia/requester-fetch@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.48.1.tgz#537e5dc32b451b7f41f0d6a5111324a30ffa0250" + integrity sha512-2oDT43Y5HWRSIQMPQI4tA/W+TN/N2tjggZCUsqQV440kxzzoPGsvv9QP1GhQ4CoDa+yn6ygUsGp6Dr+a9sPPSg== + dependencies: + "@algolia/client-common" "5.48.1" + +"@algolia/requester-node-http@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.48.1.tgz#587a5774e30a6fd0aac237a37987134183130302" + integrity sha512-xcaCqbhupVWhuBP1nwbk1XNvwrGljozutEiLx06mvqDf3o8cHyEgQSHS4fKJM+UAggaWVnnFW+Nne5aQ8SUJXg== + dependencies: + "@algolia/client-common" "5.48.1" "@babel/helper-string-parser@^7.27.1": version "7.27.1" @@ -165,17 +165,17 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== -"@babel/parser@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" - integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== +"@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== dependencies: - "@babel/types" "^7.28.5" + "@babel/types" "^7.29.0" -"@babel/types@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" - integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== +"@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" @@ -319,9 +319,9 @@ integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== "@iconify-json/simple-icons@^1.2.21": - version "1.2.64" - resolved "https://registry.yarnpkg.com/@iconify-json/simple-icons/-/simple-icons-1.2.64.tgz#f618c8b48fb4540162a9bf97fd46da1d0aaf9958" - integrity sha512-SMmm//tjZBvHnT0EAzZLnBTL6bukSkncM0pwkOXjr0FsAeCqjQtqoxBR0Mp+PazIJjXJKHm1Ju0YgnCIPOodJg== + version "1.2.70" + resolved "https://registry.yarnpkg.com/@iconify-json/simple-icons/-/simple-icons-1.2.70.tgz#21941e2be1b67ebda9d12939da110356bfaa1493" + integrity sha512-CYNRCgN6nBTjN4dNkrBCjHXNR2e4hQihdsZUs/afUNFOWLSYjfihca4EFN05rRvDk4Xoy2n8tym6IxBZmcn+Qg== dependencies: "@iconify/types" "*" @@ -335,115 +335,130 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== -"@rollup/rollup-android-arm-eabi@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz#f3ff5dbde305c4fa994d49aeb0a5db5305eff03b" - integrity sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng== - -"@rollup/rollup-android-arm64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz#c97d6ee47846a7ab1cd38e968adce25444a90a19" - integrity sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw== - -"@rollup/rollup-darwin-arm64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz#a13fc2d82e01eaf8ac823634a3f5f76fd9d0f938" - integrity sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw== - -"@rollup/rollup-darwin-x64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz#db4fa8b2b76d86f7e9b68ce4661fafe9767adf9b" - integrity sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A== - -"@rollup/rollup-freebsd-arm64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz#b2c6039de4b75efd3f29417fcb1a795c75a4e3ee" - integrity sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA== - -"@rollup/rollup-freebsd-x64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz#9ae2a216c94f87912a596a3b3a2ec5199a689ba5" - integrity sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz#69d5de7f781132f138514f2b900c523e38e2461f" - integrity sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ== - -"@rollup/rollup-linux-arm-musleabihf@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz#b6431e5699747f285306ffe8c1194d7af74f801f" - integrity sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA== - -"@rollup/rollup-linux-arm64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz#a32931baec8a0fa7b3288afb72d400ae735112c2" - integrity sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng== - -"@rollup/rollup-linux-arm64-musl@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz#0ad72572b01eb946c0b1a7a6f17ab3be6689a963" - integrity sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg== - -"@rollup/rollup-linux-loong64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz#05681f000310906512279944b5bef38c0cd4d326" - integrity sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw== - -"@rollup/rollup-linux-ppc64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz#9847a8c9dd76d687c3bdbe38d7f5f32c6b2743c8" - integrity sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA== - -"@rollup/rollup-linux-riscv64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz#173f20c278ac770ae3e969663a27d172a4545e87" - integrity sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ== - -"@rollup/rollup-linux-riscv64-musl@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz#db70c2377ae1ef61ef8673354d107ecb3fa7ffed" - integrity sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A== - -"@rollup/rollup-linux-s390x-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz#b2c461778add1c2ee70ec07d1788611548647962" - integrity sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ== - -"@rollup/rollup-linux-x64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz#ab140b356569601f57ab8727bd7306463841894f" - integrity sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ== - -"@rollup/rollup-linux-x64-musl@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz#810134b4a9d0d88576938f2eed38999a653814a1" - integrity sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw== - -"@rollup/rollup-openharmony-arm64@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz#0182bae7a54e748be806acef7a7f726f6949213c" - integrity sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg== - -"@rollup/rollup-win32-arm64-msvc@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz#1f19349bd1c5e454d03e4508a9277b6354985b9d" - integrity sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw== - -"@rollup/rollup-win32-ia32-msvc@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz#234ff739993539f64efac6c2e59704a691a309c2" - integrity sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ== - -"@rollup/rollup-win32-x64-gnu@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz#a4df0507c3be09c152a795cfc0c4f0c225765c5c" - integrity sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ== - -"@rollup/rollup-win32-x64-msvc@4.54.0": - version "4.54.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz#beacb356412eef5dc0164e9edfee51c563732054" - integrity sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg== +"@rollup/rollup-android-arm-eabi@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz#add5e608d4e7be55bc3ca3d962490b8b1890e088" + integrity sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg== + +"@rollup/rollup-android-arm64@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz#10bd0382b73592beee6e9800a69401a29da625c4" + integrity sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w== + +"@rollup/rollup-darwin-arm64@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz#1e99ab04c0b8c619dd7bbde725ba2b87b55bfd81" + integrity sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg== + +"@rollup/rollup-darwin-x64@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz#69e741aeb2839d2e8f0da2ce7a33d8bd23632423" + integrity sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w== + +"@rollup/rollup-freebsd-arm64@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz#3736c232a999c7bef7131355d83ebdf9651a0839" + integrity sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug== + +"@rollup/rollup-freebsd-x64@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz#227dcb8f466684070169942bd3998901c9bfc065" + integrity sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q== + +"@rollup/rollup-linux-arm-gnueabihf@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz#ba004b30df31b724f99ce66e7128248bea17cb0c" + integrity sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw== + +"@rollup/rollup-linux-arm-musleabihf@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz#6929f3e07be6b6da5991f63c6b68b3e473d0a65a" + integrity sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw== + +"@rollup/rollup-linux-arm64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz#06e89fd4a25d21fe5575d60b6f913c0e65297bfa" + integrity sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g== + +"@rollup/rollup-linux-arm64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz#fddabf395b90990d5194038e6cd8c00156ed8ac0" + integrity sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q== + +"@rollup/rollup-linux-loong64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz#04c10bb764bbf09a3c1bd90432e92f58d6603c36" + integrity sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA== + +"@rollup/rollup-linux-loong64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz#f2450361790de80581d8687ea19142d8a4de5c0f" + integrity sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw== + +"@rollup/rollup-linux-ppc64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz#0474f4667259e407eee1a6d38e29041b708f6a30" + integrity sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w== + +"@rollup/rollup-linux-ppc64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz#9f32074819eeb1ddbe51f50ea9dcd61a6745ec33" + integrity sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw== + +"@rollup/rollup-linux-riscv64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz#3fdb9d4b1e29fb6b6a6da9f15654d42eb77b99b2" + integrity sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A== + +"@rollup/rollup-linux-riscv64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz#1de780d64e6be0e3e8762035c22e0d8ea68df8ed" + integrity sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw== + +"@rollup/rollup-linux-s390x-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz#1da022ffd2d9e9f0fd8344ea49e113001fbcac64" + integrity sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg== + +"@rollup/rollup-linux-x64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz#78c16eef9520bd10e1ea7a112593bb58e2842622" + integrity sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg== + +"@rollup/rollup-linux-x64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz#a7598591b4d9af96cb3167b50a5bf1e02dfea06c" + integrity sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw== + +"@rollup/rollup-openbsd-x64@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz#c51d48c07cd6c466560e5bed934aec688ce02614" + integrity sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw== + +"@rollup/rollup-openharmony-arm64@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz#f09921d0b2a0b60afbf3586d2a7a7f208ba6df17" + integrity sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ== + +"@rollup/rollup-win32-arm64-msvc@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz#08d491717135376e4a99529821c94ecd433d5b36" + integrity sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ== + +"@rollup/rollup-win32-ia32-msvc@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz#b0c12aac1104a8b8f26a5e0098e5facbb3e3964a" + integrity sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew== + +"@rollup/rollup-win32-x64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz#b9cccef26f5e6fdc013bf3c0911a3c77428509d0" + integrity sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ== + +"@rollup/rollup-win32-x64-msvc@4.57.1": + version "4.57.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz#a03348e7b559c792b6277cc58874b89ef46e1e72" + integrity sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA== "@shikijs/core@2.5.0", "@shikijs/core@^2.1.0": version "2.5.0" @@ -566,47 +581,47 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz#9e8a512eb174bfc2a333ba959bbf9de428d89ad8" integrity sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA== -"@vue/compiler-core@3.5.26": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.26.tgz#1a91ea90980528bedff7b1c292690bfb30612485" - integrity sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w== +"@vue/compiler-core@3.5.28": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.28.tgz#8298ab91d34b2c0d7d398384cd840471919e7e34" + integrity sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ== dependencies: - "@babel/parser" "^7.28.5" - "@vue/shared" "3.5.26" - entities "^7.0.0" + "@babel/parser" "^7.29.0" + "@vue/shared" "3.5.28" + entities "^7.0.1" estree-walker "^2.0.2" source-map-js "^1.2.1" -"@vue/compiler-dom@3.5.26": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz#66c36b6ed8bdf43236d7188ea332bc9d078eb286" - integrity sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A== +"@vue/compiler-dom@3.5.28": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.28.tgz#4e27b885898f4799d95305dfc56d14c2dcf8e5ba" + integrity sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA== dependencies: - "@vue/compiler-core" "3.5.26" - "@vue/shared" "3.5.26" + "@vue/compiler-core" "3.5.28" + "@vue/shared" "3.5.28" -"@vue/compiler-sfc@3.5.26": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz#fb1c6c4bf9a9e22bb169e039e19437cb6995917a" - integrity sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA== +"@vue/compiler-sfc@3.5.28": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.28.tgz#767aa5290da25a5b555d4c3cae53187159f915d6" + integrity sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g== dependencies: - "@babel/parser" "^7.28.5" - "@vue/compiler-core" "3.5.26" - "@vue/compiler-dom" "3.5.26" - "@vue/compiler-ssr" "3.5.26" - "@vue/shared" "3.5.26" + "@babel/parser" "^7.29.0" + "@vue/compiler-core" "3.5.28" + "@vue/compiler-dom" "3.5.28" + "@vue/compiler-ssr" "3.5.28" + "@vue/shared" "3.5.28" estree-walker "^2.0.2" magic-string "^0.30.21" postcss "^8.5.6" source-map-js "^1.2.1" -"@vue/compiler-ssr@3.5.26": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz#f6e94bccbb5339180779036ddfb614f998a197ea" - integrity sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw== +"@vue/compiler-ssr@3.5.28": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.28.tgz#bfd3d39b3085b77220eaa278e5fbe3c93ffbc9c2" + integrity sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g== dependencies: - "@vue/compiler-dom" "3.5.26" - "@vue/shared" "3.5.26" + "@vue/compiler-dom" "3.5.28" + "@vue/shared" "3.5.28" "@vue/devtools-api@^7.7.0": version "7.7.9" @@ -635,43 +650,43 @@ dependencies: rfdc "^1.4.1" -"@vue/reactivity@3.5.26": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.26.tgz#59a1edf566dc80133c1c26c93711c877e8602c48" - integrity sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ== +"@vue/reactivity@3.5.28": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.28.tgz#8c6f8cf6bb3cfab94a1a7814eb6e2bf181ba8d51" + integrity sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw== dependencies: - "@vue/shared" "3.5.26" + "@vue/shared" "3.5.28" -"@vue/runtime-core@3.5.26": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.26.tgz#3f2c040bcf8018c03a1ab5adb0d788c13c986f0e" - integrity sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q== +"@vue/runtime-core@3.5.28": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.28.tgz#f646861ac99d7b71a69c5b8e710923046ce01875" + integrity sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ== dependencies: - "@vue/reactivity" "3.5.26" - "@vue/shared" "3.5.26" + "@vue/reactivity" "3.5.28" + "@vue/shared" "3.5.28" -"@vue/runtime-dom@3.5.26": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.26.tgz#5954848614883948ecc1f631a67b32cc32f81936" - integrity sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ== +"@vue/runtime-dom@3.5.28": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.28.tgz#86fba16e43ab48d959c8e8a6fb2caec5555d0fd7" + integrity sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA== dependencies: - "@vue/reactivity" "3.5.26" - "@vue/runtime-core" "3.5.26" - "@vue/shared" "3.5.26" + "@vue/reactivity" "3.5.28" + "@vue/runtime-core" "3.5.28" + "@vue/shared" "3.5.28" csstype "^3.2.3" -"@vue/server-renderer@3.5.26": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.26.tgz#269055497fcc75b3984063f866f17c748b565ef4" - integrity sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA== +"@vue/server-renderer@3.5.28": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.28.tgz#c59838d4d6fe89bec949db6ebf8625bd9264ad77" + integrity sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg== dependencies: - "@vue/compiler-ssr" "3.5.26" - "@vue/shared" "3.5.26" + "@vue/compiler-ssr" "3.5.28" + "@vue/shared" "3.5.28" -"@vue/shared@3.5.26", "@vue/shared@^3.5.13": - version "3.5.26" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.26.tgz#1e02ef2d64aced818cd31d81ce5175711dc90a9f" - integrity sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A== +"@vue/shared@3.5.28", "@vue/shared@^3.5.13": + version "3.5.28" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.28.tgz#ed9b6785e9452621ad3ab2f2775e9cba494a9ef4" + integrity sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ== "@vueuse/core@12.8.2", "@vueuse/core@^12.4.0": version "12.8.2" @@ -705,24 +720,24 @@ vue "^3.5.13" algoliasearch@^5.14.2: - version "5.46.2" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.46.2.tgz#3afba0e53f3293e39cfde9b2ef27c583d44bf2a5" - integrity sha512-qqAXW9QvKf2tTyhpDA4qXv1IfBwD2eduSW6tUEBFIfCeE9gn9HQ9I5+MaKoenRuHrzk5sQoNh1/iof8mY7uD6Q== - dependencies: - "@algolia/abtesting" "1.12.2" - "@algolia/client-abtesting" "5.46.2" - "@algolia/client-analytics" "5.46.2" - "@algolia/client-common" "5.46.2" - "@algolia/client-insights" "5.46.2" - "@algolia/client-personalization" "5.46.2" - "@algolia/client-query-suggestions" "5.46.2" - "@algolia/client-search" "5.46.2" - "@algolia/ingestion" "1.46.2" - "@algolia/monitoring" "1.46.2" - "@algolia/recommend" "5.46.2" - "@algolia/requester-browser-xhr" "5.46.2" - "@algolia/requester-fetch" "5.46.2" - "@algolia/requester-node-http" "5.46.2" + version "5.48.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.48.1.tgz#165217346b995e57eed51ed3b2b83f47badd83b4" + integrity sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg== + dependencies: + "@algolia/abtesting" "1.14.1" + "@algolia/client-abtesting" "5.48.1" + "@algolia/client-analytics" "5.48.1" + "@algolia/client-common" "5.48.1" + "@algolia/client-insights" "5.48.1" + "@algolia/client-personalization" "5.48.1" + "@algolia/client-query-suggestions" "5.48.1" + "@algolia/client-search" "5.48.1" + "@algolia/ingestion" "1.48.1" + "@algolia/monitoring" "1.48.1" + "@algolia/recommend" "5.48.1" + "@algolia/requester-browser-xhr" "5.48.1" + "@algolia/requester-fetch" "5.48.1" + "@algolia/requester-node-http" "5.48.1" birpc@^2.3.0: version "2.9.0" @@ -745,9 +760,9 @@ character-entities-legacy@^3.0.0: integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== codemirror@^5.44.0: - version "5.65.20" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.20.tgz#8aa77c2dbfeb2df9b0828bf8e7d64fdd566eeff0" - integrity sha512-i5dLDDxwkFCbhjvL2pNjShsojoL3XHyDwsGv1jqETUoW+lzpBKKqNTUWgQwVAOa0tUm4BwekT455ujafi8payA== + version "5.65.21" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.21.tgz#cacf320606c5450ad3b3da34bb9c666afec21068" + integrity sha512-6teYk0bA0nR3QP0ihGMoxuKzpl5W80FpnHpBJpgy66NK3cZv5b/d/HY8PnRvfSsCG1MTfr92u2WUl+wT0E40mQ== comma-separated-tokens@^2.0.0: version "2.0.3" @@ -783,10 +798,10 @@ emoji-regex-xs@^1.0.0: resolved "https://registry.yarnpkg.com/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz#e8af22e5d9dbd7f7f22d280af3d19d2aab5b0724" integrity sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg== -entities@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.0.tgz#2ae4e443f3f17d152d3f5b0f79b932c1e59deb7a" - integrity sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ== +entities@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.1.tgz#26e8a88889db63417dcb9a1e79a3f1bc92b5976b" + integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA== esbuild@^0.21.3: version "0.21.5" @@ -823,11 +838,11 @@ estree-walker@^2.0.2: integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== focus-trap@^7.6.4: - version "7.7.0" - resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.7.0.tgz#277a8be672a23befc939461c6dab3d7b5a285b96" - integrity sha512-DJJDHpEgoSbP8ZE1MNeU2IzCpfFyFdNZZRilqmfH2XiQsPK6PtD8AfJqWzEBudUQB2yHwZc5iq54rjTaGQ+ljw== + version "7.8.0" + resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.8.0.tgz#b1d9463fa42b93ad7a5223d750493a6c09b672a8" + integrity sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA== dependencies: - tabbable "^6.3.0" + tabbable "^6.4.0" fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" @@ -976,9 +991,9 @@ postcss@^8.4.43, postcss@^8.5.6: source-map-js "^1.2.1" preact@^10.0.0: - version "10.28.1" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.28.1.tgz#83325f0141bc8c97977c64d532429d667a26b411" - integrity sha512-u1/ixq/lVQI0CakKNvLDEcW5zfCjUQfZdK9qqWuIJtsezuyG6pk9TWj75GMuI/EzRSZB/VAE43sNWWZfiy8psw== + version "10.28.3" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.28.3.tgz#3c2171526b3e29628ad1a6c56a9e3ca867bbdee8" + integrity sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA== property-information@^7.0.0: version "7.1.0" @@ -1010,34 +1025,37 @@ rfdc@^1.4.1: integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rollup@^4.20.0: - version "4.54.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.54.0.tgz#930f4dfc41ff94d720006f9f62503612a6c319b8" - integrity sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw== + version "4.57.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.57.1.tgz#947f70baca32db2b9c594267fe9150aa316e5a88" + integrity sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.54.0" - "@rollup/rollup-android-arm64" "4.54.0" - "@rollup/rollup-darwin-arm64" "4.54.0" - "@rollup/rollup-darwin-x64" "4.54.0" - "@rollup/rollup-freebsd-arm64" "4.54.0" - "@rollup/rollup-freebsd-x64" "4.54.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.54.0" - "@rollup/rollup-linux-arm-musleabihf" "4.54.0" - "@rollup/rollup-linux-arm64-gnu" "4.54.0" - "@rollup/rollup-linux-arm64-musl" "4.54.0" - "@rollup/rollup-linux-loong64-gnu" "4.54.0" - "@rollup/rollup-linux-ppc64-gnu" "4.54.0" - "@rollup/rollup-linux-riscv64-gnu" "4.54.0" - "@rollup/rollup-linux-riscv64-musl" "4.54.0" - "@rollup/rollup-linux-s390x-gnu" "4.54.0" - "@rollup/rollup-linux-x64-gnu" "4.54.0" - "@rollup/rollup-linux-x64-musl" "4.54.0" - "@rollup/rollup-openharmony-arm64" "4.54.0" - "@rollup/rollup-win32-arm64-msvc" "4.54.0" - "@rollup/rollup-win32-ia32-msvc" "4.54.0" - "@rollup/rollup-win32-x64-gnu" "4.54.0" - "@rollup/rollup-win32-x64-msvc" "4.54.0" + "@rollup/rollup-android-arm-eabi" "4.57.1" + "@rollup/rollup-android-arm64" "4.57.1" + "@rollup/rollup-darwin-arm64" "4.57.1" + "@rollup/rollup-darwin-x64" "4.57.1" + "@rollup/rollup-freebsd-arm64" "4.57.1" + "@rollup/rollup-freebsd-x64" "4.57.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.57.1" + "@rollup/rollup-linux-arm-musleabihf" "4.57.1" + "@rollup/rollup-linux-arm64-gnu" "4.57.1" + "@rollup/rollup-linux-arm64-musl" "4.57.1" + "@rollup/rollup-linux-loong64-gnu" "4.57.1" + "@rollup/rollup-linux-loong64-musl" "4.57.1" + "@rollup/rollup-linux-ppc64-gnu" "4.57.1" + "@rollup/rollup-linux-ppc64-musl" "4.57.1" + "@rollup/rollup-linux-riscv64-gnu" "4.57.1" + "@rollup/rollup-linux-riscv64-musl" "4.57.1" + "@rollup/rollup-linux-s390x-gnu" "4.57.1" + "@rollup/rollup-linux-x64-gnu" "4.57.1" + "@rollup/rollup-linux-x64-musl" "4.57.1" + "@rollup/rollup-openbsd-x64" "4.57.1" + "@rollup/rollup-openharmony-arm64" "4.57.1" + "@rollup/rollup-win32-arm64-msvc" "4.57.1" + "@rollup/rollup-win32-ia32-msvc" "4.57.1" + "@rollup/rollup-win32-x64-gnu" "4.57.1" + "@rollup/rollup-win32-x64-msvc" "4.57.1" fsevents "~2.3.2" shiki@^2.1.0: @@ -1084,10 +1102,10 @@ superjson@^2.2.2: dependencies: copy-anything "^4" -tabbable@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.3.0.tgz#2e0e6163935387cdeacd44e9334616ca0115a8d3" - integrity sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ== +tabbable@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.4.0.tgz#36eb7a06d80b3924a22095daf45740dea3bf5581" + integrity sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg== trim-lines@^3.0.0: version "3.0.1" @@ -1124,9 +1142,9 @@ unist-util-visit-parents@^6.0.0: unist-util-is "^6.0.0" unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + version "5.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz#9a2a28b0aa76a15e0da70a08a5863a2f060e2468" + integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg== dependencies: "@types/unist" "^3.0.0" unist-util-is "^6.0.0" @@ -1184,15 +1202,15 @@ vitepress@^1.6.0: vue "^3.5.13" vue@^3.5.13: - version "3.5.26" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.26.tgz#03a0b17311e0e593d34b9358fa249b85e3a6d9fb" - integrity sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA== - dependencies: - "@vue/compiler-dom" "3.5.26" - "@vue/compiler-sfc" "3.5.26" - "@vue/runtime-dom" "3.5.26" - "@vue/server-renderer" "3.5.26" - "@vue/shared" "3.5.26" + version "3.5.28" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.28.tgz#067ac9313d24d517c6d59ccbd9f0f6216cbdb00f" + integrity sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg== + dependencies: + "@vue/compiler-dom" "3.5.28" + "@vue/compiler-sfc" "3.5.28" + "@vue/runtime-dom" "3.5.28" + "@vue/server-renderer" "3.5.28" + "@vue/shared" "3.5.28" zwitch@^2.0.4: version "2.0.4"