diff --git a/.gitignore b/.gitignore index 617169f6f..8c2586de6 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,7 @@ yarn-error.log* # Cypress directories and files /test/cypress/videos /test/cypress/screenshots + +# VitePress directories and files +/docs/.vitepress/cache +/docs/.vuepress diff --git a/CHANGELOG.md b/CHANGELOG.md index a7797f810..fbe18a10a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,157 @@ +# Version 25.04 - 2025-01-28 + +### Added 🆕 + +- chore: add task comment by:jorgep +- chore: refs #8198 rollback by:jorgep +- chore: refs #8322 unnecessary prop by:alexm +- feat: refs #7055 added new test case by:provira +- feat: refs #7055 created FilterItemForm test by:provira +- feat: refs #7077 created test for VnInputTime by:provira +- feat: refs #7078 created test for VnJsonValue by:provira +- feat: refs #7087 added more test cases by:provira +- feat: refs #7087 added new test by:provira +- feat: refs #7087 created CardSummary test by:provira +- feat: refs #7088 created test for FetchedTags by:provira +- feat: refs #7202 added new field by:Jon +- feat: refs #7882 Added coords to create a address by:guillermo +- feat: refs #7957 add tooltip and i18n support for search link in VnSearchbar component by:jorgep +- feat: refs #7957 enhance search functionality and improve data filtering logic by:jorgep +- feat: refs #7957 open in new tab by:jorgep +- feat: refs #7957 simplify fn to by:jorgep +- feat: refs #7957 update VnSearchbar component with improved search URL handling and styling enhancements by:jorgep +- feat: refs #8117 filters and values added as needed by:jtubau +- feat: refs #8197 useHasContent and use in VnSection and RightMenu by:alexm +- feat: refs #8219 added invoice out e2e tests by:Jon +- feat: refs #8219 global invoicing e2e by:Jon +- feat: refs #8220 added barcodes e2e test by:Jon +- feat: refs #8220 created items e2e by:Jon +- feat: refs #8220 modified create item form and added respective e2e by:Jon +- feat: refs #8225 added account and invoiceOut modules by:Jon +- feat: refs #8225 added entry module and fixed translations by:Jon +- feat: refs #8225 added invoiceIn and travel module by:Jon +- feat: refs #8225 added moreOptions and use it in customer and ticket summary by:Jon +- feat: refs #8225 added route and shelving module by:Jon +- feat: refs #8225 added worker and zone modules by:Jon +- feat: refs #8225 use it in claim, item and order modules by:Jon +- feat: refs #8258 added button to pass to uppercase by:provira +- feat: refs #8258 added uppercase option to VnInput by:provira +- feat: refs #8258 added uppercase validation on supplier create by:provira +- feat: refs #8298 add price optimum input and update translations for bonus and price optimum by:jgallego +- feat: refs #8316 add entryFilter prop to VnTable component in EntryList by:jtubau +- feat: refs #8322 added department changes by:provira +- feat: refs #8372 workerPBX by:robert +- feat: refs #8381 add initial and final temperature fields to entry forms and summaries by:jgallego +- feat: refs #8381 add initial and final temperature labels in English and Spanish locales by:jgallego +- feat: refs #8381 add toCelsius filter and update temperature fields in entry forms and summaries by:jgallego +- feat: skip tests by:jorgep +- style: refs #7957 update VnSearchbar padding for improved layout by:jorgep + +### Changed 📦 + +- perf: refs #8219 #8219 minor change by:Javier Segarra +- perf: refs #8220 on-fetch and added missing translations by:Jon +- perf: refs #8220 on-fetch by:Jon +- perf: refs #8220 translations by:Jon +- perf: refs #8220 use searchbar selector in e2e tests by:Jon +- perf: remove warning default value by:Javier Segarra +- refactor: redirect using params by:Jon +- refactor: refs #7077 removed some comments by:provira +- refactor: refs #7087 removed unused imports by:provira +- refactor: refs #7100 added const mockData by:jtubau +- refactor: refs #7100 delete unnecesary set prop by:jtubau +- refactor: refs #7100 refactorized with methods by:jtubau +- refactor: refs #7957 remove blank by:jorgep +- refactor: refs #8198 simplify data fetching and filtering logic by:jorgep +- refactor: refs #8198 simplify state management and data fetching in ItemDiary component by:jorgep +- refactor: refs #8219 modified e2e tests and fixed some translations by:Jon +- refactor: refs #8219 modified list test, created cypress download folder and added to gitignore by:Jon +- refactor: refs #8219 requested changes by:Jon +- refactor: refs #8219 use checkNotification command by:Jon +- refactor: refs #8220 added data-cy for e2e tests by:Jon +- refactor: refs #8220 requested changes by:Jon +- refactor: refs #8220 skip failling test and modifed tag test by:Jon +- refactor: refs #8225 requested changes by:Jon +- refactor: refs #8247 use new acl for sysadmin by:Jon +- refactor: refs #8316 added claimFilter by:jtubau +- refactor: refs #8316 added entryFilter by:jtubau +- refactor: refs #8316 add new localization keys and update existing ones for entry components by:jtubau +- refactor: refs #8316 moved localizations to local locale by:jtubau +- refactor: refs #8316 move order localization by:jtubau +- refactor: refs #8316 remove unused OrderSearchbar component by:jtubau +- refactor: refs #8316 update EntryCard to use user-filter prop and remove exprBuilder from EntryList by:jtubau +- refactor: refs #8316 used VnSection and VnCardBeta by:jtubau +- refactor: refs #8322 changed translations by:provira +- refactor: refs #8322 changed Worker component to use VnSection/VnCardBeta by:provira +- refactor: refs #8322 set department inside worker by:alexm +- refactor: skip intermitent failing test by:Jon + +### Fixed 🛠️ + +- feat: refs #8225 added entry module and fixed translations by:Jon +- fix: added missing translations in InvoiceIn by:provira +- fix: changed invoiceIn for InvoiceIn by:provira +- fix: changed translations to only use "invoicein" by:provira +- fix: department descriptor link by:Jon +- fix: e2e tests by:Jon +- fix: entry summary view and build warnings by:Jon +- fix: fixed InvoiceIn filter translations by:provira +- fix: modified setData in customerDescriptor to show the icons by:Jon +- fix: redirect to TicketSale from OrderLines (origin/Fix-RedirectToTicketSale) by:Jon +- fix: redirect when confirming lines by:Jon +- fix: refs #7055 #7055 #7055 fixed some tests by:provira +- fix: refs #7077 removed unused imports by:provira +- fix: refs #7078 added missing case with array by:provira +- fix: refs #7087 fixed some tests by:provira +- fix: refs #7088 changed "vm.vm" to "vm" by:provira +- fix: refs #7088 changed wrapper to vm by:provira +- fix: refs #7699 add icons and hint by:carlossa +- fix: refs #7699 add pwd vnInput by:carlossa +- fix: refs #7699 fix component by:carlossa +- fix: refs #7699 fix password visibility by:carlossa +- fix: refs #7699 fix tfront clean code by:carlossa +- fix: refs #7699 fix vnChangePassword, clean VnInput by:carlossa +- fix: refs #7699 fix vnInputPassword by:carlossa +- fix: refs #7957 add missing closing brace by:jorgep +- fix: refs #7957 css by:jorgep +- fix: refs #7957 rollback by:jorgep +- fix: refs #7957 update data-cy by:jorgep +- fix: refs #7957 update visibility handling for clear icon in VnInput component by:jorgep +- fix: refs #7957 vn-searchbar test by:jorgep +- fix: refs #8117 update salesPersonFk filter options and URL for improved data retrieval by:jtubau +- fix: refs #8197 not use yet by:alexm +- fix: refs #8198 update query param by:jorgep +- fix: refs #8219 fixed e2e tests by:Jon +- fix: refs #8219 fixed summary and global tests by:Jon +- fix: refs #8219 forgotten dataCy by:Jon +- fix: refs #8219 global e2e by:Jon +- fix: refs #8219 requested changes by:Jon +- fix: refs #8220 itemTag test by:Javier Segarra +- fix: refs #8225 invoice in translations by:Jon +- fix: refs #8243 fixed SkeletonSummary by:provira +- fix: refs #8247 conflicts by:Jon +- fix: refs #8247 fixed acls and added lost options by:Jon +- fix: refs #8316 ref="claimFilterRef" by:alexm +- fix: refs #8316 userFilter by:alexm +- fix: refs #8316 use rightMenu by:alexm +- fix: refs #8316 use section-searchbar by:alexm +- fix: refs #8317 disable action buttons when no rows are selected in ItemFixedPrice by:jtubau +- fix: refs #8322 unnecessary section by:alexm +- fix: refs #8338 fixed VnTable translations by:provira +- fix: refs #8338 removed chipLocale property/added more translations by:provira +- fix: refs #8448 e2e by:Jon +- fix: refs #8448 not use croppie by:alexm +- fix: remove departmentCode by:Javier Segarra +- fix: removed unused searchbar by:PAU ROVIRA ROSALENY +- fix: skip failling e2e by:Jon +- fix: sort by name in description by:Jon +- fix: translations by:Jon +- fix: use entryFilter by:alexm +- fix(VnCardBeta): add userFilter by:alexm +- refactor: refs #8219 modified e2e tests and fixed some translations by:Jon +- revert: revert header by:alexm +- test: fix expedition e2e by:alexm + # Version 25.00 - 2025-01-14 ### Added 🆕 diff --git a/cypress.config.js b/cypress.config.js index 500dda5c5..1924144f6 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -30,9 +30,11 @@ export default defineConfig({ testFiles: '**/*.spec.js', supportFile: 'test/cypress/support/unit.js', }, - setupNodeEvents(on, config) { - import('cypress-mochawesome-reporter/plugin').then((plugin) => plugin.default(on)); - // implement node event listeners here + setupNodeEvents: async (on, config) => { + const plugin = await import('cypress-mochawesome-reporter/plugin'); + plugin.default(on); + + return config; }, viewportWidth: 1280, viewportHeight: 720, diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js new file mode 100644 index 000000000..62601da7b --- /dev/null +++ b/docs/.vitepress/config.js @@ -0,0 +1,38 @@ +import { defineConfig } from 'vitepress'; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: 'Lilium', + description: 'Lilium docs', + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Home', link: '/' }, + { text: 'Components', link: '/components/vnInput' }, + { text: 'Composables', link: '/composables/useArrayData' }, + ], + + sidebar: [ + { + items: [ + { + text: 'Components', + collapsible: true, + collapsed: true, + items: [{ text: 'VnInput', link: '/components/vnInput' }], + }, + { + text: 'Composables', + collapsible: true, + collapsed: true, + items: [ + { text: 'useArrayData', link: '/composables/useArrayData' }, + ], + }, + ], + }, + ], + + socialLinks: [{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }], + }, +}); diff --git a/docs/components/vnInput.md b/docs/components/vnInput.md new file mode 100644 index 000000000..33e4348e9 --- /dev/null +++ b/docs/components/vnInput.md @@ -0,0 +1,136 @@ +# VnInput + +`VnInput` is a custom input component that provides various useful features such as validation, input clearing, and more. + +## Props + +### `modelValue` + +- **Type:** `String | Number` +- **Default:** `null` +- **Description:** The value of the model bound to the component. + +### `isOutlined` + +- **Type:** `Boolean` +- **Default:** `false` +- **Description:** If `true`, the component is rendered with an outlined style. + +### `info` + +- **Type:** `String` +- **Default:** `''` +- **Description:** Additional information displayed alongside the component. + +### `clearable` + +- **Type:** `Boolean` +- **Default:** `true` +- **Description:** If `true`, the component shows a button to clear the input. + +### `emptyToNull` + +- **Type:** `Boolean` +- **Default:** `true` +- **Description:** If `true`, converts empty inputs to `null`. + +### `insertable` + +- **Type:** `Boolean` +- **Default:** `false` +- **Description:** If `true`, allows the insertion of new values. + +### `maxlength` + +- **Type:** `Number` +- **Default:** `null` +- **Description:** The maximum number of characters allowed in the input. + +### `uppercase` + +- **Type:** `Boolean` +- **Default:** `false` +- **Description:** If `true`, converts the input text to uppercase. + +## Emits + +### `update:modelValue` + +- **Description:** Emits the updated model value. +- **Behavior:** This event is emitted whenever the input value changes. It is used to update the model value bound to the component. + +### `update:options` + +- **Description:** Emits the updated options. +- **Behavior:** This event is emitted when the component's options change. It is useful for components with dynamic options. + +### `keyup.enter` + +- **Description:** Emits an event when the Enter key is pressed. +- **Behavior:** This event is emitted whenever the Enter key is pressed while the input is focused. It can be used to handle specific actions when the input is confirmed. + +### `remove` + +- **Description:** Emits an event to remove the current value. +- **Behavior:** This event is emitted when the clear button (close icon) is clicked. It is used to handle the removal of the current input value. + +## Functions + +### `focus` + +- **Description:** Focuses the input. +- **Behavior:** This function is exposed so it can be called from outside the component. It uses `vnInputRef.value.focus()` to focus the input. + +### `handleKeydown` + +- **Description:** Handles the `keydown` event of the input. +- **Behavior:** This function is called whenever a key is pressed while the input is focused. If the pressed key is `Backspace`, it does nothing. If `insertable` is `true` and the pressed key is a number, it calls `handleInsertMode`. + +### `handleInsertMode` + +- **Description:** Handles the insertion mode of values. +- **Behavior:** This function is called when `insertable` is `true` and a numeric key is pressed. It inserts the value at the cursor position and updates the input value. Then, it moves the cursor to the correct position. + +### `handleUppercase` + +- **Description:** Converts the input value to uppercase. +- **Behavior:** This function is called when the uppercase icon is clicked. It converts the current input value to uppercase. + +## Usage + +```vue + + + +``` diff --git a/docs/composables/useArrayData.md b/docs/composables/useArrayData.md new file mode 100644 index 000000000..5033097fc --- /dev/null +++ b/docs/composables/useArrayData.md @@ -0,0 +1,215 @@ +# useArrayData + +`useArrayData` is a composable function that provides a set of utilities for managing array data in a Vue component. It leverages Pinia for state management and provides various methods for fetching, filtering, and manipulating data. + +## Usage + +```javascript +import { useArrayData } from 'src/composables/useArrayData'; + +const { + fetch, + applyFilter, + addFilter, + getCurrentFilter, + setCurrentFilter, + addFilterWhere, + addOrder, + deleteOrder, + refresh, + destroy, + loadMore, + store, + totalRows, + updateStateParams, + isLoading, + deleteOption, + reset, + resetPagination, +} = useArrayData('myKey', userOptions); +``` + +## Parameters + +### `key` + +- **Type:** `String` +- **Description:** A unique key to identify the data store. + +### `userOptions` + +- **Type:** `Object` +- **Description:** An object containing user-defined options for configuring the data store. + +## Methods + +### `fetch` + +Fetches data from the server. + +#### Parameters + +- **`options`** : An object with the following properties: +- `append` (Boolean): Whether to append the fetched data to the existing data. +- `updateRouter` (Boolean): Whether to update the router with the current filter. + +#### Returns + +- **`Promise`** : A promise that resolves with the fetched data. + +### `applyFilter` + +Applies a filter to the data. + +#### Parameters + +- **`filter`** : An object containing the filter criteria. +- **`params`** : Additional parameters for the filter. +- **`fetchOptions`** : Options for the fetch method. + +#### Returns + +- **`Promise`** : A promise that resolves with the filtered data. + +### `addFilter` + +Adds a filter to the existing filters. + +#### Parameters + +- **`filter`** : An object containing the filter criteria. +- **`params`** : Additional parameters for the filter. + +#### Returns + +- **`Promise`** : A promise that resolves with the updated filter and parameters. + +### `getCurrentFilter` + +Gets the current filter applied to the data. + +#### Returns + +- **`Object`** : The current filter and parameters. + +### `setCurrentFilter` + +Sets the current filter for the data. + +#### Returns + +- **`Object`** : The current filter and parameters. + +### `addFilterWhere` + +Adds a `where` clause to the existing filters. + +#### Parameters + +- **`where`** : An object containing the `where` clause. + +#### Returns + +- **`Promise`** : A promise that resolves when the filter is applied. + +### `addOrder` + +Adds an order to the existing orders. + +#### Parameters + +- **`field`** : The field to order by. +- **`direction`** : The direction of the order (`ASC` or `DESC`). + +#### Returns + +- **`Promise`** : A promise that resolves with the updated order. + +### `deleteOrder` + +Deletes an order from the existing orders. + +#### Parameters + +- **`field`** : The field to delete the order for. + +#### Returns + +- **`Promise`** : A promise that resolves when the order is deleted. + +### `refresh` + +Refreshes the data by re-fetching it from the server. + +#### Returns + +- **`Promise`** : A promise that resolves with the refreshed data. + +### `destroy` + +Destroys the data store for the given key. + +### `loadMore` + +Loads more data by incrementing the pagination. + +#### Returns + +- **`Promise`** : A promise that resolves with the additional data. + +### `updateStateParams` + +Updates the state parameters with the given data. + +#### Parameters + +- **`data`** : The data to update the state parameters with. + +### `deleteOption` + +Deletes an option from the store. + +#### Parameters + +- **`option`** : The option to delete. + +### `reset` + +Resets the store to its default state. + +#### Parameters + +- **`opts`** : An array of options to reset. + +### `resetPagination` + +Resets the pagination for the store. + +## Computed Properties + +### `totalRows` + +- **Description:** The total number of rows in the data. +- **Type:** `Number` + +### `isLoading` + +- **Description:** Whether the data is currently being loaded. +- **Type:** `Boolean` + +```vue + +``` + +``` + +``` diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..814c2c433 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,13 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: 'Lilium' + text: 'Lilium docs' + tagline: Powered by Verdnatura + actions: + - theme: brand + text: Docs + link: /components/vnInput +--- diff --git a/package.json b/package.json index 30340dfba..d23ed0ced 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "salix-front", - "version": "25.06.0", + "version": "25.08.0", "description": "Salix frontend", "productName": "Salix", "author": "Verdnatura", @@ -18,7 +18,10 @@ "test:unit:ci": "vitest run", "commitlint": "commitlint --edit", "prepare": "npx husky install", - "addReferenceTag": "node .husky/addReferenceTag.js" + "addReferenceTag": "node .husky/addReferenceTag.js", + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" }, "dependencies": { "@quasar/cli": "^2.4.1", @@ -54,6 +57,7 @@ "postcss": "^8.4.23", "prettier": "^3.4.2", "sass": "^1.83.4", + "vitepress": "^1.6.3", "vitest": "^0.34.0" }, "engines": { @@ -67,4 +71,4 @@ "vite": "^6.0.11", "vitest": "^0.31.1" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a922425a5..31a01e69c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,12 +100,175 @@ devDependencies: sass: specifier: ^1.83.4 version: 1.83.4 + vitepress: + specifier: ^1.6.3 + version: 1.6.3(@algolia/client-search@5.20.0)(@types/node@22.10.7)(axios@1.7.9)(postcss@8.5.1)(sass@1.83.4)(search-insights@2.17.3)(typescript@5.7.3) vitest: specifier: ^0.34.0 version: 0.34.6(sass@1.83.4) packages: + /@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3): + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3): + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0): + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + '@algolia/client-search': 5.20.0 + algoliasearch: 5.20.0 + dev: true + + /@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0): + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 5.20.0 + algoliasearch: 5.20.0 + dev: true + + /@algolia/client-abtesting@5.20.0: + resolution: {integrity: sha512-YaEoNc1Xf2Yk6oCfXXkZ4+dIPLulCx8Ivqj0OsdkHWnsI3aOJChY5qsfyHhDBNSOhqn2ilgHWxSfyZrjxBcAww==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/client-analytics@5.20.0: + resolution: {integrity: sha512-CIT9ni0+5sYwqehw+t5cesjho3ugKQjPVy/iPiJvtJX4g8Cdb6je6SPt2uX72cf2ISiXCAX9U3cY0nN0efnRDw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/client-common@5.20.0: + resolution: {integrity: sha512-iSTFT3IU8KNpbAHcBUJw2HUrPnMXeXLyGajmCL7gIzWOsYM4GabZDHXOFx93WGiXMti1dymz8k8R+bfHv1YZmA==} + engines: {node: '>= 14.0.0'} + dev: true + + /@algolia/client-insights@5.20.0: + resolution: {integrity: sha512-w9RIojD45z1csvW1vZmAko82fqE/Dm+Ovsy2ElTsjFDB0HMAiLh2FO86hMHbEXDPz6GhHKgGNmBRiRP8dDPgJg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/client-personalization@5.20.0: + resolution: {integrity: sha512-p/hftHhrbiHaEcxubYOzqVV4gUqYWLpTwK+nl2xN3eTrSW9SNuFlAvUBFqPXSVBqc6J5XL9dNKn3y8OA1KElSQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/client-query-suggestions@5.20.0: + resolution: {integrity: sha512-m4aAuis5vZi7P4gTfiEs6YPrk/9hNTESj3gEmGFgfJw3hO2ubdS4jSId1URd6dGdt0ax2QuapXufcrN58hPUcw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/client-search@5.20.0: + resolution: {integrity: sha512-KL1zWTzrlN4MSiaK1ea560iCA/UewMbS4ZsLQRPoDTWyrbDKVbztkPwwv764LAqgXk0fvkNZvJ3IelcK7DqhjQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/ingestion@1.20.0: + resolution: {integrity: sha512-shj2lTdzl9un4XJblrgqg54DoK6JeKFO8K8qInMu4XhE2JuB8De6PUuXAQwiRigZupbI0xq8aM0LKdc9+qiLQA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/monitoring@1.20.0: + resolution: {integrity: sha512-aF9blPwOhKtWvkjyyXh9P5peqmhCA1XxLBRgItT+K6pbT0q4hBDQrCid+pQZJYy4HFUKjB/NDDwyzFhj/rwKhw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/recommend@5.20.0: + resolution: {integrity: sha512-T6B/WPdZR3b89/F9Vvk6QCbt/wrLAtrGoL8z4qPXDFApQ8MuTFWbleN/4rHn6APWO3ps+BUePIEbue2rY5MlRw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + + /@algolia/requester-browser-xhr@5.20.0: + resolution: {integrity: sha512-t6//lXsq8E85JMenHrI6mhViipUT5riNhEfCcvtRsTV+KIBpC6Od18eK864dmBhoc5MubM0f+sGpKOqJIlBSCg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + dev: true + + /@algolia/requester-fetch@5.20.0: + resolution: {integrity: sha512-FHxYGqRY+6bgjKsK4aUsTAg6xMs2S21elPe4Y50GB0Y041ihvw41Vlwy2QS6K9ldoftX4JvXodbKTcmuQxywdQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + dev: true + + /@algolia/requester-node-http@5.20.0: + resolution: {integrity: sha512-kmtQClq/w3vtPteDSPvaW9SPZL/xrIgMrxZyAgsFwrJk0vJxqyC5/hwHmrCraDnStnGSADnLpBf4SpZnwnkwWw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.20.0 + dev: true + /@babel/code-frame@7.26.2: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -347,6 +510,49 @@ packages: - supports-color dev: true + /@docsearch/css@3.8.2: + resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} + dev: true + + /@docsearch/js@3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.3): + resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} + dependencies: + '@docsearch/react': 3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.3) + preact: 10.25.4 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react@3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.3): + resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + '@docsearch/css': 3.8.2 + algoliasearch: 5.20.0 + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + dev: true + /@esbuild/aix-ppc64@0.21.5: resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -875,6 +1081,16 @@ packages: engines: {node: '>=18.18'} dev: true + /@iconify-json/simple-icons@1.2.21: + resolution: {integrity: sha512-aqbIuVshMZ2fNEhm25//9DoKudboXF3CpoEQJJlHl9gVSVNOTr4cgaCIZvgSEYmys2HHEfmhcpoZIhoEFZS8SQ==} + dependencies: + '@iconify/types': 2.0.0 + dev: true + + /@iconify/types@2.0.0: + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + dev: true + /@inquirer/figures@1.0.9: resolution: {integrity: sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==} engines: {node: '>=18'} @@ -1568,6 +1784,62 @@ packages: dev: true optional: true + /@shikijs/core@2.1.0: + resolution: {integrity: sha512-v795KDmvs+4oV0XD05YLzfDMe9ISBgNjtFxP4PAEv5DqyeghO1/TwDqs9ca5/E6fuO95IcAcWqR6cCX9TnqLZA==} + dependencies: + '@shikijs/engine-javascript': 2.1.0 + '@shikijs/engine-oniguruma': 2.1.0 + '@shikijs/types': 2.1.0 + '@shikijs/vscode-textmate': 10.0.1 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.4 + dev: true + + /@shikijs/engine-javascript@2.1.0: + resolution: {integrity: sha512-cgIUdAliOsoaa0rJz/z+jvhrpRd+fVAoixVFEVxUq5FA+tHgBZAIfVJSgJNVRj2hs/wZ1+4hMe82eKAThVh0nQ==} + dependencies: + '@shikijs/types': 2.1.0 + '@shikijs/vscode-textmate': 10.0.1 + oniguruma-to-es: 2.3.0 + dev: true + + /@shikijs/engine-oniguruma@2.1.0: + resolution: {integrity: sha512-Ujik33wEDqgqY2WpjRDUBECGcKPv3eGGkoXPujIXvokLaRmGky8NisSk8lHUGeSFxo/Cz5sgFej9sJmA9yeepg==} + dependencies: + '@shikijs/types': 2.1.0 + '@shikijs/vscode-textmate': 10.0.1 + dev: true + + /@shikijs/langs@2.1.0: + resolution: {integrity: sha512-Jn0gS4rPgerMDPj1ydjgFzZr5fAIoMYz4k7ZT3LJxWWBWA6lokK0pumUwVtb+MzXtlpjxOaQejLprmLbvMZyww==} + dependencies: + '@shikijs/types': 2.1.0 + dev: true + + /@shikijs/themes@2.1.0: + resolution: {integrity: sha512-oS2mU6+bz+8TKutsjBxBA7Z3vrQk21RCmADLpnu8cy3tZD6Rw0FKqDyXNtwX52BuIDKHxZNmRlTdG3vtcYv3NQ==} + dependencies: + '@shikijs/types': 2.1.0 + dev: true + + /@shikijs/transformers@2.1.0: + resolution: {integrity: sha512-3sfvh6OKUVkT5wZFU1xxiq1qqNIuCwUY3yOb9ZGm19y80UZ/eoroLE2orGNzfivyTxR93GfXXZC/ghPR0/SBow==} + dependencies: + '@shikijs/core': 2.1.0 + '@shikijs/types': 2.1.0 + dev: true + + /@shikijs/types@2.1.0: + resolution: {integrity: sha512-OFOdHA6VEVbiQvepJ8yqicC6VmBrKxFFhM2EsHHrZESqLVAXOSeRDiuSYV185lIgp15TVic5vYBYNhTsk1xHLg==} + dependencies: + '@shikijs/vscode-textmate': 10.0.1 + '@types/hast': 3.0.4 + dev: true + + /@shikijs/vscode-textmate@10.0.1: + resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} + dev: true + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -1687,6 +1959,12 @@ packages: resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} dev: true + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.3 + dev: true + /@types/http-cache-semantics@4.0.4: resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} dev: false @@ -1715,6 +1993,27 @@ packages: '@types/node': 22.10.7 dev: false + /@types/linkify-it@5.0.0: + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + dev: true + + /@types/markdown-it@14.1.2: + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + dev: true + + /@types/mdast@4.0.4: + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + dependencies: + '@types/unist': 3.0.3 + dev: true + + /@types/mdurl@2.0.0: + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + dev: true + /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: true @@ -1766,6 +2065,14 @@ packages: resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==} dev: true + /@types/unist@3.0.3: + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + dev: true + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + /@types/yauzl@2.10.3: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true @@ -1774,6 +2081,21 @@ packages: dev: true optional: true + /@ungap/structured-clone@1.3.0: + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + dev: true + + /@vitejs/plugin-vue@5.2.1(vite@5.4.14)(vue@3.5.13): + resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.4.14(@types/node@22.10.7)(sass@1.83.4) + vue: 3.5.13(typescript@5.7.3) + dev: true + /@vitejs/plugin-vue@5.2.1(vite@6.0.11)(vue@3.5.13): resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -1860,6 +2182,30 @@ packages: /@vue/devtools-api@6.6.4: resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + /@vue/devtools-api@7.7.1: + resolution: {integrity: sha512-Cexc8GimowoDkJ6eNelOPdYIzsu2mgNyp0scOQ3tiaYSb9iok6LOESSsJvHaI+ib3joRfqRJNLkHFjhNuWA5dg==} + dependencies: + '@vue/devtools-kit': 7.7.1 + dev: true + + /@vue/devtools-kit@7.7.1: + resolution: {integrity: sha512-yhZ4NPnK/tmxGtLNQxmll90jIIXdb2jAhPF76anvn5M/UkZCiLJy28bYgPIACKZ7FCosyKoaope89/RsFJll1w==} + dependencies: + '@vue/devtools-shared': 7.7.1 + birpc: 0.2.19 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.2 + dev: true + + /@vue/devtools-shared@7.7.1: + resolution: {integrity: sha512-BtgF7kHq4BHG23Lezc/3W2UhK2ga7a8ohAIAGJMBr4BkxUFzhqntQtCiuL1ijo2ztWnmusymkirgqUrXoQKumA==} + dependencies: + rfdc: 1.4.1 + dev: true + /@vue/reactivity@3.5.13: resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} dependencies: @@ -1898,6 +2244,79 @@ packages: vue-component-type-helpers: 2.2.0 dev: true + /@vueuse/core@12.5.0(typescript@5.7.3): + resolution: {integrity: sha512-GVyH1iYqNANwcahAx8JBm6awaNgvR/SwZ1fjr10b8l1HIgDp82ngNbfzJUgOgWEoxjL+URAggnlilAEXwCOZtg==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 12.5.0 + '@vueuse/shared': 12.5.0(typescript@5.7.3) + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - typescript + dev: true + + /@vueuse/integrations@12.5.0(axios@1.7.9)(focus-trap@7.6.4)(typescript@5.7.3): + resolution: {integrity: sha512-HYLt8M6mjUfcoUOzyBcX2RjpfapIwHPBmQJtTmXOQW845Y/Osu9VuTJ5kPvnmWJ6IUa05WpblfOwZ+P0G4iZsQ==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + 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 + dependencies: + '@vueuse/core': 12.5.0(typescript@5.7.3) + '@vueuse/shared': 12.5.0(typescript@5.7.3) + axios: 1.7.9 + focus-trap: 7.6.4 + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - typescript + dev: true + + /@vueuse/metadata@12.5.0: + resolution: {integrity: sha512-Ui7Lo2a7AxrMAXRF+fAp9QsXuwTeeZ8fIB9wsLHqzq9MQk+2gMYE2IGJW48VMJ8ecvCB3z3GsGLKLbSasQ5Qlg==} + dev: true + + /@vueuse/shared@12.5.0(typescript@5.7.3): + resolution: {integrity: sha512-vMpcL1lStUU6O+kdj6YdHDixh0odjPAUM15uJ9f7MY781jcYkIwFA4iv2EfoIPO6vBmvutI1HxxAwmf0cx5ISQ==} + dependencies: + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - typescript + dev: true + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1986,6 +2405,25 @@ packages: require-from-string: 2.0.2 dev: true + /algoliasearch@5.20.0: + resolution: {integrity: sha512-groO71Fvi5SWpxjI9Ia+chy0QBwT61mg6yxJV27f5YFf+Mw+STT75K6SHySpP8Co5LsCrtsbCH5dJZSRtkSKaQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-abtesting': 5.20.0 + '@algolia/client-analytics': 5.20.0 + '@algolia/client-common': 5.20.0 + '@algolia/client-insights': 5.20.0 + '@algolia/client-personalization': 5.20.0 + '@algolia/client-query-suggestions': 5.20.0 + '@algolia/client-search': 5.20.0 + '@algolia/ingestion': 1.20.0 + '@algolia/monitoring': 1.20.0 + '@algolia/recommend': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 + dev: true + /ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: @@ -2145,7 +2583,6 @@ packages: proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: false /b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -2180,6 +2617,10 @@ packages: engines: {node: '>=8'} dev: true + /birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + dev: true + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -2414,6 +2855,10 @@ packages: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: true + /chai@4.5.0: resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} engines: {node: '>=4'} @@ -2439,6 +2884,14 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: true + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: true + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true @@ -2623,6 +3076,10 @@ packages: dependencies: delayed-stream: 1.0.0 + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: true + /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -2766,6 +3223,13 @@ packages: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} + /copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.16 + dev: true + /core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: true @@ -3082,6 +3546,11 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -3094,6 +3563,12 @@ packages: dev: true optional: true + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: true + /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3187,6 +3662,10 @@ packages: sax: 1.1.4 dev: true + /emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3792,6 +4271,12 @@ packages: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} dev: true + /focus-trap@7.6.4: + resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} + dependencies: + tabbable: 6.2.0 + dev: true + /follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -3800,7 +4285,6 @@ packages: peerDependenciesMeta: debug: optional: true - dev: false /foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} @@ -4107,11 +4591,37 @@ packages: dependencies: function-bind: 1.1.2 + /hast-util-to-html@9.0.4: + resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + dev: true + + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.4 + dev: true + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: true + /html-minifier-terser@7.2.0: resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} engines: {node: ^14.13.1 || >=16.0.0} @@ -4126,6 +4636,10 @@ packages: terser: 5.37.0 dev: true + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: true + /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: false @@ -4430,6 +4944,11 @@ packages: engines: {node: '>=10'} dev: true + /is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + dev: true + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -4809,10 +5328,28 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + /mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + /math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + /mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + dev: true + /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -4837,6 +5374,33 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} + /micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + dev: true + + /micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + dev: true + + /micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + dev: true + + /micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + dev: true + + /micromark-util-types@2.0.1: + resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + dev: true + /micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -4921,6 +5485,14 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dev: true + /minisearch@7.1.1: + resolution: {integrity: sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==} + dev: true + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -5154,6 +5726,14 @@ packages: mimic-fn: 4.0.0 dev: false + /oniguruma-to-es@2.3.0: + resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} + dependencies: + emoji-regex-xs: 1.0.0 + regex: 5.1.1 + regex-recursion: 5.1.1 + dev: true + /open@10.1.0: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} @@ -5385,6 +5965,10 @@ packages: /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true @@ -5455,6 +6039,10 @@ packages: picocolors: 1.1.1 source-map-js: 1.2.1 + /preact@10.25.4: + resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5501,6 +6089,10 @@ packages: react-is: 16.13.1 dev: true + /property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + dev: true + /proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -5517,7 +6109,6 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -5667,6 +6258,23 @@ packages: tslib: 1.14.1 dev: true + /regex-recursion@5.1.1: + resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} + dependencies: + regex: 5.1.1 + regex-utilities: 2.3.0 + dev: true + + /regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + dev: true + + /regex@5.1.1: + resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} + dependencies: + regex-utilities: 2.3.0 + dev: true + /registry-auth-token@5.0.3: resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==} engines: {node: '>=14'} @@ -6089,6 +6697,10 @@ packages: resolution: {integrity: sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==} dev: true + /search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + dev: true + /selfsigned@2.4.1: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} @@ -6174,6 +6786,19 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shiki@2.1.0: + resolution: {integrity: sha512-yvKPdNGLXZv7WC4bl7JBbU3CEcUxnBanvMez8MG3gZXKpClGL4bHqFyLhTx+2zUvbjClUANs/S22HXb7aeOgmA==} + dependencies: + '@shikijs/core': 2.1.0 + '@shikijs/engine-javascript': 2.1.0 + '@shikijs/engine-oniguruma': 2.1.0 + '@shikijs/langs': 2.1.0 + '@shikijs/themes': 2.1.0 + '@shikijs/types': 2.1.0 + '@shikijs/vscode-textmate': 10.0.1 + '@types/hast': 3.0.4 + dev: true + /side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -6266,6 +6891,15 @@ packages: engines: {node: '>= 8'} dev: true + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: true + + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + /split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -6341,6 +6975,13 @@ packages: safe-buffer: 5.2.1 dev: true + /stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -6397,6 +7038,13 @@ packages: ts-interface-checker: 0.1.13 dev: true + /superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + dependencies: + copy-anything: 3.0.5 + dev: true + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -6422,6 +7070,10 @@ packages: engines: {node: '>=16.0.0'} dev: true + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true + /tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} dependencies: @@ -6558,6 +7210,10 @@ packages: hasBin: true dev: true + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: true + /ts-essentials@9.4.2(typescript@5.7.3): resolution: {integrity: sha512-mB/cDhOvD7pg3YCLk2rOtejHjjdSi9in/IBYE13S+8WA5FBSraYf4V/ws55uvs0IvQ/l0wBOlXy5yBNZ9Bl8ZQ==} peerDependencies: @@ -6696,6 +7352,39 @@ packages: crypto-random-string: 4.0.0 dev: false + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + dependencies: + '@types/unist': 3.0.3 + dev: true + + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.3 + dev: true + + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.3 + dev: true + + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + dev: true + + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: true + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -6791,6 +7480,20 @@ packages: extsprintf: 1.3.0 dev: true + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + dev: true + + /vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + dev: true + /vite-jsconfig-paths@2.0.1(vite@6.0.11): resolution: {integrity: sha512-rabcTTfKs0MdAsQWcZjbIMo5fcp6jthZce7uFEPgVPgpSY+RNOwjzIJOPES6cB/GJZLSoLGfHM9kt5HNmJvp7A==} peerDependencies: @@ -6935,6 +7638,65 @@ packages: fsevents: 2.3.3 dev: true + /vitepress@1.6.3(@algolia/client-search@5.20.0)(@types/node@22.10.7)(axios@1.7.9)(postcss@8.5.1)(sass@1.83.4)(search-insights@2.17.3)(typescript@5.7.3): + resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + dependencies: + '@docsearch/css': 3.8.2 + '@docsearch/js': 3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.21 + '@shikijs/core': 2.1.0 + '@shikijs/transformers': 2.1.0 + '@shikijs/types': 2.1.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.2.1(vite@5.4.14)(vue@3.5.13) + '@vue/devtools-api': 7.7.1 + '@vue/shared': 3.5.13 + '@vueuse/core': 12.5.0(typescript@5.7.3) + '@vueuse/integrations': 12.5.0(axios@1.7.9)(focus-trap@7.6.4)(typescript@5.7.3) + focus-trap: 7.6.4 + mark.js: 8.11.1 + minisearch: 7.1.1 + postcss: 8.5.1 + shiki: 2.1.0 + vite: 5.4.14(@types/node@22.10.7)(sass@1.83.4) + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + dev: true + /vitest@0.34.6(sass@1.83.4): resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} engines: {node: '>=v14.18.0'} @@ -7321,3 +8083,7 @@ packages: compress-commons: 6.0.2 readable-stream: 4.7.0 dev: true + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: true diff --git a/proxy-serve.js b/proxy-serve.js new file mode 100644 index 000000000..415968c85 --- /dev/null +++ b/proxy-serve.js @@ -0,0 +1,6 @@ +export default [ + { + path: '/api', + rule: { target: 'http://0.0.0.0:3000' }, + }, +]; diff --git a/quasar.config.js b/quasar.config.js index 2ea356afb..6d545c026 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -179,7 +179,6 @@ export default configure(function (/* ctx */) { 'render', // keep this as last one ], }, - // https://v2.quasar.dev/quasar-cli/developing-pwa/configuring-pwa pwa: { workboxMode: 'generateSW', // or 'injectManifest' diff --git a/src/boot/keyShortcut.js b/src/boot/keyShortcut.js index 5afb5b74a..6da06c8bf 100644 --- a/src/boot/keyShortcut.js +++ b/src/boot/keyShortcut.js @@ -1,6 +1,6 @@ export default { - mounted: function (el, binding) { - const shortcut = binding.value ?? '+'; + mounted(el, binding) { + const shortcut = binding.value || '+'; const { key, ctrl, alt, callback } = typeof shortcut === 'string' @@ -8,25 +8,24 @@ export default { key: shortcut, ctrl: true, alt: true, - callback: () => - document - .querySelector(`button[shortcut="${shortcut}"]`) - ?.click(), + callback: () => el?.click(), } : binding.value; + if (!el.hasAttribute('shortcut')) { + el.setAttribute('shortcut', key); + } + const handleKeydown = (event) => { if (event.key === key && (!ctrl || event.ctrlKey) && (!alt || event.altKey)) { callback(); } }; - // Attach the event listener to the window window.addEventListener('keydown', handleKeydown); - el._handleKeydown = handleKeydown; }, - unmounted: function (el) { + unmounted(el) { if (el._handleKeydown) { window.removeEventListener('keydown', el._handleKeydown); } diff --git a/src/components/CreateBankEntityForm.vue b/src/components/CreateBankEntityForm.vue index 2da3aa994..7c4b94a6a 100644 --- a/src/components/CreateBankEntityForm.vue +++ b/src/components/CreateBankEntityForm.vue @@ -14,7 +14,7 @@ const { t } = useI18n(); const bicInputRef = ref(null); const state = useState(); -const customer = computed(() => state.get('customer')); +const customer = computed(() => state.get('Customer')); const countriesFilter = { fields: ['id', 'name', 'code'], diff --git a/src/components/CrudModel.vue b/src/components/CrudModel.vue index 58b4146bf..d569dfda1 100644 --- a/src/components/CrudModel.vue +++ b/src/components/CrudModel.vue @@ -149,7 +149,7 @@ function filter(value, update, filterOptions) { (ref) => { ref.setOptionIndex(-1); ref.moveOptionSelection(1, true); - } + }, ); } @@ -215,7 +215,7 @@ async function remove(data) { if (preRemove.length) { newData = newData.filter( - (form) => !preRemove.some((index) => index == form.$index) + (form) => !preRemove.some((index) => index == form.$index), ); const changes = getChanges(); if (!changes.creates?.length && !changes.updates?.length) diff --git a/src/components/FormModel.vue b/src/components/FormModel.vue index 2e580257c..59141d374 100644 --- a/src/components/FormModel.vue +++ b/src/components/FormModel.vue @@ -84,7 +84,7 @@ const $props = defineProps({ }, reload: { type: Boolean, - default: false, + default: true, }, defaultTrim: { type: Boolean, @@ -97,7 +97,7 @@ const $props = defineProps({ }); const emit = defineEmits(['onFetch', 'onDataSaved']); const modelValue = computed( - () => $props.model ?? `formModel_${route?.meta?.title ?? route.name}` + () => $props.model ?? `formModel_${route?.meta?.title ?? route.name}`, ).value; const componentIsRendered = ref(false); const arrayData = useArrayData(modelValue); @@ -105,8 +105,8 @@ const isLoading = ref(false); // Si elegimos observar los cambios del form significa que inicialmente las actions estaran deshabilitadas const isResetting = ref(false); const hasChanges = ref(!$props.observeFormChanges); -const originalData = ref({}); -const formData = computed(() => state.get(modelValue)); +const originalData = computed(() => state.get(modelValue)); +const formData = ref({}); const defaultButtons = computed(() => ({ save: { dataCy: 'saveDefaultBtn', @@ -127,8 +127,6 @@ const defaultButtons = computed(() => ({ })); onMounted(async () => { - originalData.value = JSON.parse(JSON.stringify($props.formInitialData ?? {})); - nextTick(() => (componentIsRendered.value = true)); // Podemos enviarle al form la estructura de data inicial sin necesidad de fetchearla @@ -148,7 +146,7 @@ onMounted(async () => { JSON.stringify(newVal) !== JSON.stringify(originalData.value); isResetting.value = false; }, - { deep: true } + { deep: true }, ); } }); @@ -156,16 +154,24 @@ onMounted(async () => { if (!$props.url) watch( () => arrayData.store.data, - (val) => updateAndEmit('onFetch', val) + (val) => updateAndEmit('onFetch', val), ); +watch( + originalData, + (val) => { + if (val) formData.value = JSON.parse(JSON.stringify(val)); + }, + { immediate: true }, +); + watch( () => [$props.url, $props.filter], async () => { - originalData.value = null; + state.set(modelValue, null); reset(); await fetch(); - } + }, ); onBeforeRouteLeave((to, from, next) => { @@ -197,7 +203,6 @@ async function fetch() { updateAndEmit('onFetch', data); } catch (e) { state.set(modelValue, {}); - originalData.value = {}; throw e; } } @@ -236,6 +241,7 @@ async function saveAndGo() { } function reset() { + formData.value = JSON.parse(JSON.stringify(originalData.value)); updateAndEmit('onFetch', originalData.value); if ($props.observeFormChanges) { hasChanges.value = false; @@ -254,13 +260,12 @@ function filter(value, update, filterOptions) { (ref) => { ref.setOptionIndex(-1); ref.moveOptionSelection(1, true); - } + }, ); } function updateAndEmit(evt, val, res) { state.set(modelValue, val); - originalData.value = val && JSON.parse(JSON.stringify(val)); if (!$props.url) arrayData.store.data = val; emit(evt, state.get(modelValue), res); diff --git a/src/components/ItemsFilterPanel.vue b/src/components/ItemsFilterPanel.vue index 084feb377..48f607a30 100644 --- a/src/components/ItemsFilterPanel.vue +++ b/src/components/ItemsFilterPanel.vue @@ -31,7 +31,6 @@ const props = defineProps({ const route = useRoute(); const itemTypesOptions = ref([]); -const suppliersOptions = ref([]); const tagOptions = ref([]); const tagValues = ref([]); const categoryList = ref(null); @@ -40,13 +39,13 @@ const selectedTypeFk = ref(getParamWhere(route.query.table, 'typeFk', false)); const selectedCategory = computed(() => { return (categoryList.value || []).find( - (category) => category?.id === selectedCategoryFk.value + (category) => category?.id === selectedCategoryFk.value, ); }); const selectedType = computed(() => { return (itemTypesOptions.value || []).find( - (type) => type?.id === selectedTypeFk.value + (type) => type?.id === selectedTypeFk.value, ); }); @@ -134,13 +133,6 @@ const setCategoryList = (data) => {