From e01327f938d648e97c468e9ff3dcc81968283dd6 Mon Sep 17 00:00:00 2001 From: Justin Poehnelt Date: Mon, 25 Nov 2024 16:08:29 -0700 Subject: [PATCH] feat: rewrite without lit and cleanup public interface (#16) --- .github/docs.js | 28 - .gitignore | 5 +- .storybook/main.ts | 8 +- .storybook/page.mdx | 9 + .storybook/preview.ts | 9 +- .vscode/settings.json | 12 + README.md | 210 +- biome.json | 5 - .../drive-picker.test.ts => cem.config.js | 10 +- custom-elements.json | 768 +--- examples/drive-picker.html | 40 - docs/logo.jpg => logo.jpg | Bin package.json | 161 +- pnpm-lock.yaml | 3983 +++++++---------- scripts/docs.ts | 171 + scripts/lib/builder.ts | 82 + scripts/lib/cells.ts | 79 + .../drive-picker-docs-view-element.ts | 210 +- src/drive-picker/drive-picker-element.ts | 443 +- src/drive-picker/drive-picker.stories.ts | 84 - src/drive-picker/index.ts | 10 +- src/index.ts | 16 +- src/stories/drive-picker-docs-view.stories.ts | 77 + src/stories/drive-picker.stories.ts | 85 + src/stories/utils/attribute-helpers.ts | 33 + src/stories/utils/common.ts | 42 + src/stories/utils/lazy-preview-element.ts | 70 + src/stories/utils/manifest-helpers.ts | 90 + src/utils.ts | 68 +- tsconfig.json | 14 +- tsup.config.ts | 87 + 31 files changed, 2982 insertions(+), 3927 deletions(-) delete mode 100644 .github/docs.js create mode 100644 .storybook/page.mdx rename src/drive-picker/drive-picker.test.ts => cem.config.js (82%) delete mode 100644 examples/drive-picker.html rename docs/logo.jpg => logo.jpg (100%) create mode 100644 scripts/docs.ts create mode 100644 scripts/lib/builder.ts create mode 100644 scripts/lib/cells.ts delete mode 100644 src/drive-picker/drive-picker.stories.ts create mode 100644 src/stories/drive-picker-docs-view.stories.ts create mode 100644 src/stories/drive-picker.stories.ts create mode 100644 src/stories/utils/attribute-helpers.ts create mode 100644 src/stories/utils/common.ts create mode 100644 src/stories/utils/lazy-preview-element.ts create mode 100644 src/stories/utils/manifest-helpers.ts create mode 100644 tsup.config.ts diff --git a/.github/docs.js b/.github/docs.js deleted file mode 100644 index 581bc87..0000000 --- a/.github/docs.js +++ /dev/null @@ -1,28 +0,0 @@ -import fs from "node:fs"; -import prettier from "prettier"; - -const START = ""; -const END = ""; - -// read docs files -const docs = ["docs/drive-picker.md", "docs/drive-picker-docs-view.md"] - .map((file) => { - const anchor = file.split("/").pop().replace(/\.md$/, ""); - return `\n${fs.readFileSync(file, "utf-8")}`; - }) - .join("\n") - .replace(/^(#+)/gm, (_, p1) => `${p1}#`) - .trim(); - -// insert into README.md -const readme = fs.readFileSync("README.md", "utf-8"); - -const startIdx = readme.indexOf(START) + START.length; -const endIdx = readme.indexOf(END); - -const updated = await prettier.format( - `${readme.substring(0, startIdx)}\n${docs}\n${readme.substring(endIdx)}`, - { parser: "markdown" }, -); - -fs.writeFileSync("README.md", updated); diff --git a/.gitignore b/.gitignore index 0579dc8..e18c9bb 100644 --- a/.gitignore +++ b/.gitignore @@ -13,8 +13,8 @@ coverage dist dist-ssr *.local - -# Editor directories and files +*storybook.log +storybook-static !.vscode/extensions.json .idea .DS_Store @@ -24,6 +24,5 @@ dist-ssr *.sln *.sw? *.tgz -*storybook.log docs/**/*.md diff --git a/.storybook/main.ts b/.storybook/main.ts index c610d3b..d29b9ed 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -17,8 +17,12 @@ import type { StorybookConfig } from "@storybook/web-components-vite"; const config: StorybookConfig = { - stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], - addons: ["@storybook/addon-actions", "@storybook/addon-essentials"], + stories: [ + "**/*.mdx", + "../src/**/*.mdx", + "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)", + ], + addons: ["@storybook/addon-essentials"], framework: { name: "@storybook/web-components-vite", options: {}, diff --git a/.storybook/page.mdx b/.storybook/page.mdx new file mode 100644 index 0000000..8a8159c --- /dev/null +++ b/.storybook/page.mdx @@ -0,0 +1,9 @@ +import { Meta, Canvas, Controls, Stories } from "@storybook/blocks"; + + + + + + + + \ No newline at end of file diff --git a/.storybook/preview.ts b/.storybook/preview.ts index f40e398..fb63bad 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -15,8 +15,7 @@ */ import type { Preview } from "@storybook/web-components"; -// @ts-ignore -import DocumentationTemplate from "./DocumentationTemplate.mdx"; +import Page from "./page.mdx"; const preview: Preview = { parameters: { @@ -27,12 +26,10 @@ const preview: Preview = { }, }, docs: { - stories: { - inline: false, - }, - page: DocumentationTemplate, + page: Page, }, }, + tags: ["autodocs"], }; export default preview; diff --git a/.vscode/settings.json b/.vscode/settings.json index 90200c3..61d9d9f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,17 @@ "editor.defaultFormatter": "biomejs.biome", "[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[json]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[mdx]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" } } diff --git a/README.md b/README.md index d73c5a3..813779d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![](./docs/logo.jpg) +![](./logo.jpg) [![npm](https://img.shields.io/npm/v/@googleworkspace/drive-picker-element)](https://www.npmjs.com/package/@googleworkspace/drive-picker-element) [![Test](https://github.com/googleworkspace/drive-picker-element/actions/workflows/test.yml/badge.svg)](https://github.com/googleworkspace/drive-picker-element/actions/workflows/test.yml) @@ -6,7 +6,16 @@ ## Description -A Web Component for [Google Drive Picker]. +The [Google Drive Picker] web components provides a convenient way to integrate the Google Picker API into your web applications. The Google Picker API is a JavaScript API that allows users to select or upload Google Drive files. This component acts as a "File Open" dialog for accessing and interacting with files stored on Google Drive. + +## Index + +- [Install](#install) +- [Usage](#usage) +- [Support](#support) +- [Reference](#reference) + - [``](#drive-picker) + - [``](#drive-picker-docs-view) ## Install @@ -21,7 +30,7 @@ yarn add @googleworkspace/drive-picker-element ``` ```sh -pnpm add @googleworkspace/drive-picker-element +pnpm i @googleworkspace/drive-picker-element ``` ## Usage @@ -32,130 +41,95 @@ import "@googleworkspace/drive-picker-element"; ```html - - - + ``` -See the components and the official reference documentation for more details: - -| Status | Component | Reference Docs | -| ----------------------------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| ✅ | [\](#drive-picker) | [PickerBuilder API Reference](https://developers.google.com/drive/picker/reference#picker-builder) | -| ✅ | [\](#drive-picker-docs-view) | [DocsView API Reference](https://developers.google.com/drive/picker/reference#docs-view) | -| ❌ - [ToDo](https://github.com/googleworkspace/drive-picker-element/issues/4) | [\](#drive-picker-docs-view) | [DocsUploadView API Reference](https://developers.google.com/drive/picker/reference#docs-upload-view) | - -To report issues or feature requests for the underlying Drive Picker, please use the [issue tracker](https://developers.google.com/drive/picker/support#developer_product_feedback). - - - - - -## drive-picker - -The `drive-picker` web component provides a convenient way to integrate the Google Picker API into your web applications. The Google Picker API is a JavaScript API that allows users to select or upload Google Drive files. This component acts as a "File Open" dialog for accessing and interacting with files stored on Google Drive. - -Features: - -- Provides a similar look-and-feel to the Google Drive UI. -- Offers several views showing previews and thumbnail images of Drive files. -- Displays as an inline, modal window, ensuring users never leave the main application. - -Note: The Google Picker API does not support file organization, moving, or copying. For these operations, you should use either the Google Drive API or the Drive UI. - -### Example - -```html - - - -``` +> Note: If you wish to register the component with a different name, `import { DrivePickerElement, DrivePickerDocsViewElement } from @googleworkspace/drive-picker-element/drive-picker` and call `customElements.define()` manually. -### Properties +## Support -| Property | Attribute | Type | Default | Description | -| -------------- | ---------------- | ---------------------- | -------------------------------------------- | ----------------------------------------------------- | -| `appId` | `app-id` | `string` | | The Google Drive app ID. | -| `clientId` | `client-id` | `string` | | The Google API client ID. | -| `developerKey` | `developerKey` | `string \| undefined` | | The Google API developer key. | -| `height` | `height` | `number \| undefined` | | The height of the picker dialog. | -| `hideTitleBar` | `hide-title-bar` | `boolean \| undefined` | | Whether to hide the title bar of the picker dialog. | -| `locale` | `locale` | `string \| undefined` | | The locale of the picker dialog. | -| `maxItems` | `max-items` | `number \| undefined` | | The maximum number of items that the user can select. | -| `multiselect` | `multiselect` | `boolean \| undefined` | | Whether the user can select multiple items. | -| `oauthToken` | `oauth-token` | `string \| undefined` | | The OAuth token to authenticate the user. | -| `origin` | `origin` | `string \| undefined` | | The origin of the picker dialog. | -| `relayUrl` | `relay-url` | `string \| undefined` | | The relay URL to use for cross-origin communication. | -| `scope` | `scope` | `string` | "https://www.googleapis.com/auth/drive.file" | The scope of the OAuth token. | -| `title` | `title` | `string` | "" | The title of the picker dialog. | -| `visible` | `visible` | `boolean` | true | Whether the picker dialog is visible. | -| `width` | `width` | `number \| undefined` | | The width of the picker dialog. | +To report issues or feature requests for the underlying Drive Picker, please use the [Google Picker issue tracker](https://developers.google.com/drive/picker/support#developer_product_feedback). For all other issues, please use the [GitHub issue tracker](https://github.com/googleworkspace/drive-picker-element/issues). -### Methods +## Reference -| Method | Type | -| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| `addEventListener` | `(type: "cancel" \| "picked", listener: (ev: CustomEvent): void, options?: boolean \| AddEventListenerOptions \| undefined) => void` | -| `removeEventListener` | `(type: "cancel" \| "picked", listener: (ev: CustomEvent): void, options?: boolean \| EventListenerOptions \| undefined) => void` | - -### Events - -| Event | Type | Description | -| -------- | ------------------------------------------- | -------------------------------------------------- | -| `cancel` | `CustomEvent` | Triggered when the user cancels the picker dialog. | -| `picked` | `CustomEvent` | Triggered when the user picks one or more items. | - -### Slots - -| Name | Description | -| ---- | ------------------------------------------------------------------------------------------------------------------------------ | -| | The View elements to display in the picker. Each View element should implement a property `view` of type `google.picker.View`. | - - - -## drive-picker-docs-view - -The `drive-picker-docs-view` element is used to define a view for the Google Drive Picker. - -### Example - -```html - -``` + -### Properties - -| Property | Attribute | Modifiers | Type | Default | Description | -| --------------------- | ----------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `enableDrives` | `enable-drives` | | `boolean \| undefined` | | Indicates whether to enable drives in the view. | -| `includeFolders` | `include-folders` | | `boolean \| undefined` | | Indicates whether to include folders in the view. | -| `label` | `label` | | `string \| undefined` | | | -| `mimeTypes` | `mime-types` | | `string \| undefined` | | The MIME types to filter the view by. | -| `mode` | `mode` | | `"GRID" \| "LIST"` | "GRID" | The mode of the view. This should be one of the values of the `google.picker.DocsViewMode` enum. | -| `ownedByMe` | `owned-by-me` | | `boolean \| undefined` | | Indicates whether to show only files owned by the user in the view. | -| `parent` | `parent` | | `string \| undefined` | | The ID of the parent folder to restrict the view to. | -| `query` | `query` | | `string \| undefined` | | The query string to filter the view by. | -| `selectFolderEnabled` | `select-folder-enabled` | | `boolean \| undefined` | | Indicates whether selecting folders is enabled in the view. | -| `starred` | `starred` | | `boolean \| undefined` | | Indicates whether to show only starred files in the view. | -| `view` | | readonly | `DocsView` | | Gets the Google Drive Picker view based on the current property values. | -| `viewId` | `view-id` | | `"DOCS" \| "DOCS_IMAGES" \| "DOCS_IMAGES_AND_VIDEOS" \| "DOCS_VIDEOS" \| "DOCUMENTS" \| "DRAWINGS" \| "FOLDERS" \| "FORMS" \| "PDFS" \| "PRESENTATIONS" \| "SPREADSHEETS" \| "IMAGE_SEARCH" \| ... 7 more ... \| "YOUTUBE"` | "DOCS" | The ID of the view. This should be one of the values of the
`google.picker.ViewId` enum.

Note: The default value is `DOCS` which corresponds to the
`google.picker.ViewId.DOCS` enum value in the Google Drive Picker API and
corresponsds to all Google Drive document types. | +### `` + +The `drive-picker` web component provides a convenient way to declaratively +build +[`google.picker.Picker`](https://developers.google.com/drive/picker/reference/picker) +by using the component attributes and +[`google.picker.PickerBuilder`](https://developers.google.com/drive/picker/reference/picker.pickerbuilder) +and load OAuth tokens. + +#### Attributes + +| Name | Type | Description | +| ---------------- | ---------------------------- | --------------------------------------------------- | +| `app-id` | `string` | The Google Drive app ID. | +| `client-id` | `string` | The OAuth 2.0 client ID. | +| `developer-key` | `string` | The API key for accessing Google Picker API. | +| `hide-title-bar` | `"default"\|"true"\|"false"` | Hides the title bar of the picker if set to true. | +| `locale` | `string` | The locale to use for the picker. | +| `max-items` | `number` | The maximum number of items that can be selected. | +| `mine-only` | `boolean` | If set to true, only shows files owned by the user. | +| `multiselect` | `boolean` | Enables multiple file selection if set to true. | +| `nav-hidden` | `boolean` | Hides the navigation pane if set to true. | +| `oauth-token` | `string` | The OAuth 2.0 token for authentication. | +| `origin` | `string` | The origin parameter for the picker. | +| `relay-url` | `string` | The relay URL for the picker. | +| `scope` | `string` | The OAuth 2.0 scope for the picker. | +| `title` | `string` | The title of the picker. | + +#### Events + +| Name | Type | Description | +| ---------------------- | ------------- | ---------------------------------------------------------------------------------- | +| `picker:authenticated` | `CustomEvent` | Triggered when the user authenticates with the provided OAuth client ID and scope. | +| `picker:canceled` | \`\` | Triggered when the user cancels the picker dialog. | +| `picker:picked` | \`\` | Triggered when the user picks one or more items. | +| `picker:loaded` | \`\` | Triggered when the picker is loaded. | + +#### Slots + +| Name | Description | +| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| default | The default slot contains View elements to display in the picker. Each View element should implement a property `view` of type `google.picker.View`. | + +#### Properties + +| Name | Type | Description | +| --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `visible` | `boolean` | Controls the visibility of the picker after the picker dialog has been closed. If any of the attributes change, the picker will be rebuilt and the visibility will be reset. | + +### `` + +The `drive-picker-docs-view` element is used to define a [`google.picker.DocsView`](https://developers.google.com/drive/picker/reference/picker.docsview). + +#### Attributes + +| Name | Type | Description | +| ----------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| `enable-drives` | `"default"\|"true"\|"false"` | Whether to allow the user to select files from shared drives. | +| `include-folders` | `"default"\|"true"\|"false"` | Whether to include folders in the view. | +| `mime-types` | `string` | A comma-separated list of MIME types to filter the view. | +| `mode` | `string` | The mode of the view. | +| `owned-by-me` | `"default"\|"true"\|"false"` | Whether to show files owned by the user. | +| `parent` | `string` | The ID of the folder to view. | +| `query` | `string` | The query string to filter the view. | +| `select-folder-enabled` | `"default"\|"true"\|"false"` | Whether to allow the user to select folders. | +| `starred` | `"default"\|"true"\|"false"` | Whether to show starred files. | +| `view-id` | `string` | The `keyof typeof google.picker.ViewId`. For example, `"DOCS"`, which is equivalent to `google.picker.ViewId.DOCS`. | + +#### Properties + +| Name | Type | Description | +| ------ | ------------------------ | ------------------------------------------------------------------------ | +| `view` | `google.picker.DocsView` | Gets the Google Drive Picker view based on the current attribute values. | -## Development - -```sh -pnpm install -pnpm build -pnpm serve -pnpm storybook -``` - [Google Drive Picker]: https://developers.google.com/drive/picker/guides/overview +[Google Drive Picker Reference]: https://developers.google.com/drive/picker/reference/picker diff --git a/biome.json b/biome.json index ec6ded2..8719650 100644 --- a/biome.json +++ b/biome.json @@ -1,10 +1,5 @@ { "organizeImports": { "enabled": true }, - "formatter": { - "indentStyle": "tab", - "indentWidth": 2, - "ignore": ["*.json"] - }, "linter": { "enabled": true, "rules": { diff --git a/src/drive-picker/drive-picker.test.ts b/cem.config.js similarity index 82% rename from src/drive-picker/drive-picker.test.ts rename to cem.config.js index b0b4f01..57f45f2 100644 --- a/src/drive-picker/drive-picker.test.ts +++ b/cem.config.js @@ -14,9 +14,7 @@ * limitations under the License. */ -import { expect } from "@open-wc/testing"; -import "./drive-picker-element"; - -it("skeleton", () => { - expect(1 + 2).equal(3); -}); +export default { + globs: ["src/**/*.ts"], + exclude: ["src/**/utils.ts", "src/stories/**/*"], +}; diff --git a/custom-elements.json b/custom-elements.json index 505545b..934bf3f 100644 --- a/custom-elements.json +++ b/custom-elements.json @@ -4,100 +4,23 @@ "modules": [ { "kind": "javascript-module", - "path": "dist/drive-picker.js", - "declarations": [ - { - "kind": "variable", - "name": "DrivePickerElement", - "default": "class extends LitElement { constructor() { super(...arguments); this.scope = \"https://www.googleapis.com/auth/drive.file\"; this.title = \"\"; this.visible = true; } /** * The `google.Picker.View` objects to display in the picker as defined by the slot elements. */ get views() { return nestedViews(this) ?? [new google.picker.DocsView()]; } async connectedCallback() { super.connectedCallback(); await loadApi(); this.observer = new MutationObserver((mutations) => { const filteredMutations = mutations.filter( (mutation) => mutation.type === \"childList\" || mutation.type === \"attributes\" && mutation.target !== this ); if (filteredMutations.length) { this.requestUpdate(); } }); this.observer?.observe(this, { childList: true, subtree: true, attributes: true }); } update(changedProperties) { if (!(changedProperties.size === 1 && changedProperties.has(\"visible\"))) { this.picker?.dispose(); this.picker = void 0; } if (changedProperties.has(\"oauthToken\")) { this._oauthToken = this.oauthToken; } if (this.visible && changedProperties.has(\"clientId\") || changedProperties.has(\"scope\") || !this._oauthToken) { retrieveAccessToken(this.clientId, this.scope).then((oauthToken) => { this._oauthToken = oauthToken; this.requestUpdate(); }); } super.update(changedProperties); } render() { if (!this.picker) { this.build(); } this.picker?.setVisible(this.visible); return html``; } build() { if (!this._oauthToken) { return; } let builder = new google.picker.PickerBuilder().setOAuthToken(this._oauthToken).setCallback((data) => { this.callbackToDispatchEvent(data); }); for (const view of this.views) { builder = builder.addView(view); } builder = setBuilderProperties(builder, this); this.picker = builder.build(); } callbackToDispatchEvent(data) { this.visible = Boolean(this.picker?.isVisible()); this.dispatch(data.action, data); } disconnectedCallback() { this.picker?.dispose(); super.disconnectedCallback(); } dispatch(type, detail) { return this.dispatchEvent(new CustomEvent(type, { detail })); } createRenderRoot() { return this; } }" - } - ], + "path": "src/index.ts", + "declarations": [], "exports": [ { - "kind": "js", - "name": "DrivePickerElement", + "kind": "custom-element-definition", + "name": "drive-picker", "declaration": { "name": "DrivePickerElement", - "module": "dist/drive-picker.js" + "module": "/src/drive-picker" } - } - ] - }, - { - "kind": "javascript-module", - "path": "dist/drive-picker.stories.js", - "declarations": [ - { - "kind": "variable", - "name": "drive_picker_stories_default", - "default": "meta" - }, - { - "kind": "variable", - "name": "Primary", - "type": { - "text": "object" - }, - "default": "{ args: { visible: true, clientId: \"675807958095-nsptdcn5qdb6pl44cge1c6ghact9t5q0.apps.googleusercontent.com\", developerKey: \"AIzaSyAdqZwr-cdocUdGbt9l0zc5s58jnrGseOY\", appId: \"675807958095\" } }" }, { - "kind": "variable", - "name": "DocsView", - "type": { - "text": "object" - }, - "default": "{ args: { visible: true, clientId: \"675807958095-nsptdcn5qdb6pl44cge1c6ghact9t5q0.apps.googleusercontent.com\", developerKey: \"AIzaSyAdqZwr-cdocUdGbt9l0zc5s58jnrGseOY\", appId: \"675807958095\" }, render: (props) => drivePickerTemplate( props, html2`` ) }" - } - ], - "exports": [ - { - "kind": "js", - "name": "DocsView", - "declaration": { - "name": "DocsView", - "module": "dist/drive-picker.stories.js" - } - }, - { - "kind": "js", - "name": "Primary", - "declaration": { - "name": "Primary", - "module": "dist/drive-picker.stories.js" - } - }, - { - "kind": "js", - "name": "default", - "declaration": { - "name": "drive_picker_stories_default", - "module": "dist/drive-picker.stories.js" - } - } - ] - }, - { - "kind": "javascript-module", - "path": "dist/index.js", - "declarations": [ - { - "kind": "variable", - "name": "DrivePickerElement", - "default": "class extends LitElement { constructor() { super(...arguments); this.scope = \"https://www.googleapis.com/auth/drive.file\"; this.title = \"\"; this.visible = true; } /** * The `google.Picker.View` objects to display in the picker as defined by the slot elements. */ get views() { return nestedViews(this) ?? [new google.picker.DocsView()]; } async connectedCallback() { super.connectedCallback(); await loadApi(); this.observer = new MutationObserver((mutations) => { const filteredMutations = mutations.filter( (mutation) => mutation.type === \"childList\" || mutation.type === \"attributes\" && mutation.target !== this ); if (filteredMutations.length) { this.requestUpdate(); } }); this.observer?.observe(this, { childList: true, subtree: true, attributes: true }); } update(changedProperties) { if (!(changedProperties.size === 1 && changedProperties.has(\"visible\"))) { this.picker?.dispose(); this.picker = void 0; } if (changedProperties.has(\"oauthToken\")) { this._oauthToken = this.oauthToken; } if (this.visible && changedProperties.has(\"clientId\") || changedProperties.has(\"scope\") || !this._oauthToken) { retrieveAccessToken(this.clientId, this.scope).then((oauthToken) => { this._oauthToken = oauthToken; this.requestUpdate(); }); } super.update(changedProperties); } render() { if (!this.picker) { this.build(); } this.picker?.setVisible(this.visible); return html``; } build() { if (!this._oauthToken) { return; } let builder = new google.picker.PickerBuilder().setOAuthToken(this._oauthToken).setCallback((data) => { this.callbackToDispatchEvent(data); }); for (const view of this.views) { builder = builder.addView(view); } builder = setBuilderProperties(builder, this); this.picker = builder.build(); } callbackToDispatchEvent(data) { this.visible = Boolean(this.picker?.isVisible()); this.dispatch(data.action, data); } disconnectedCallback() { this.picker?.dispose(); super.disconnectedCallback(); } dispatch(type, detail) { return this.dispatchEvent(new CustomEvent(type, { detail })); } createRenderRoot() { return this; } }" - }, - { - "kind": "variable", - "name": "DrivePickerDocsViewElement", - "default": "class extends LitElement2 { constructor() { super(...arguments); this.viewId = \"DOCS\"; this.mode = \"GRID\"; } /** * Gets the Google Drive Picker view based on the current property values. * @returns {google.picker.DocsView} The Google Drive picker view. */ get view() { const view = new google.picker.DocsView( this.viewId && google.picker.ViewId[this.viewId] ); if (this.label) { view.setLabel(this.label); } if (this.enableDrives !== void 0) { view.setEnableDrives(this.enableDrives); } if (this.includeFolders !== void 0) { view.setIncludeFolders(this.includeFolders); } if (this.mimeTypes) { view.setMimeTypes(this.mimeTypes); } if (this.mode) { view.setMode(google.picker.DocsViewMode[this.mode]); } if (this.ownedByMe !== void 0) { view.setOwnedByMe(this.ownedByMe); } if (this.parent) { view.setParent(this.parent); } if (this.query) { view.setQuery(this.query); } if (this.selectFolderEnabled !== void 0) { view.setSelectFolderEnabled(this.selectFolderEnabled); } if (this.starred !== void 0) { view.setStarred(this.starred); } return view; } }" - } - ], - "exports": [ - { - "kind": "js", - "name": "DrivePickerDocsViewElement", + "kind": "custom-element-definition", + "name": "drive-picker-docs-view", "declaration": { "name": "DrivePickerDocsViewElement", - "module": "dist/index.js" + "module": "/src/drive-picker" } }, { @@ -105,213 +28,28 @@ "name": "DrivePickerElement", "declaration": { "name": "DrivePickerElement", - "module": "dist/index.js" - } - } - ] - }, - { - "kind": "javascript-module", - "path": "dist/types.js", - "declarations": [], - "exports": [] - }, - { - "kind": "javascript-module", - "path": "src/index.ts", - "declarations": [], - "exports": [ - { - "kind": "js", - "name": "*", - "declaration": { - "name": "*", - "package": "./drive-picker" - } - } - ] - }, - { - "kind": "javascript-module", - "path": "src/utils.ts", - "declarations": [ - { - "kind": "function", - "name": "loadApi", - "parameters": [ - { - "name": "api", - "default": "\"client:picker\"" - } - ] - }, - { - "kind": "function", - "name": "retrieveAccessToken", - "return": { - "type": { - "text": "Promise" - } - }, - "parameters": [ - { - "name": "clientId", - "type": { - "text": "string" - } - }, - { - "name": "scope", - "type": { - "text": "string" - } - } - ] - }, - { - "kind": "function", - "name": "injectScript", - "return": { - "type": { - "text": "Promise" - } - }, - "parameters": [ - { - "name": "src", - "type": { - "text": "string" - } - } - ] - } - ], - "exports": [ - { - "kind": "js", - "name": "loadApi", - "declaration": { - "name": "loadApi", - "module": "src/utils.ts" - } - }, - { - "kind": "js", - "name": "retrieveAccessToken", - "declaration": { - "name": "retrieveAccessToken", - "module": "src/utils.ts" + "module": "src/index.ts" } }, { "kind": "js", - "name": "injectScript", + "name": "DrivePickerDocsViewElement", "declaration": { - "name": "injectScript", - "module": "src/utils.ts" + "name": "DrivePickerDocsViewElement", + "module": "src/index.ts" } } ] }, { "kind": "javascript-module", - "path": "src/drive-picker/drive-picker-docs-view.ts", + "path": "src/drive-picker/drive-picker-docs-view-element.ts", "declarations": [ { "kind": "class", - "description": "The `drive-picker-docs-view` element is used to define a view for the Google Drive Picker.", + "description": "The `drive-picker-docs-view` element is used to define a [`google.picker.DocsView`](https://developers.google.com/drive/picker/reference/picker.docsview).", "name": "DrivePickerDocsViewElement", "members": [ - { - "kind": "field", - "name": "label", - "type": { - "text": "string | undefined" - }, - "attribute": "label" - }, - { - "kind": "field", - "name": "viewId", - "type": { - "text": "ViewId" - }, - "default": "\"DOCS\"", - "attribute": "view-id" - }, - { - "kind": "field", - "name": "mimeTypes", - "type": { - "text": "string | undefined" - }, - "attribute": "mime-types" - }, - { - "kind": "field", - "name": "query", - "type": { - "text": "string | undefined" - }, - "attribute": "query" - }, - { - "kind": "field", - "name": "enableDrives", - "type": { - "text": "boolean | undefined" - }, - "attribute": "enable-drives" - }, - { - "kind": "field", - "name": "includeFolders", - "type": { - "text": "boolean | undefined" - }, - "attribute": "include-folders" - }, - { - "kind": "field", - "name": "selectFolderEnabled", - "type": { - "text": "boolean | undefined" - }, - "attribute": "select-folder-enabled" - }, - { - "kind": "field", - "name": "mode", - "type": { - "text": "DocsViewMode" - }, - "default": "\"GRID\"", - "attribute": "mode" - }, - { - "kind": "field", - "name": "ownedByMe", - "type": { - "text": "boolean | undefined" - }, - "attribute": "owned-by-me" - }, - { - "kind": "field", - "name": "parent", - "type": { - "text": "string | undefined" - }, - "attribute": "parent" - }, - { - "kind": "field", - "name": "starred", - "type": { - "text": "boolean | undefined" - }, - "attribute": "starred" - }, { "kind": "field", "name": "view", @@ -319,99 +57,98 @@ "text": "google.picker.DocsView" }, "privacy": "public", - "description": "Gets the Google Drive Picker view based on the current property values.", + "description": "Gets the Google Drive Picker view based on the current attribute values.", "return": { "type": { "text": "google.picker.DocsView" } }, "readonly": true + }, + { + "kind": "field", + "name": "viewId", + "type": { + "text": "google.picker.ViewId | undefined" + }, + "privacy": "private", + "readonly": true } ], "attributes": [ { - "name": "label", + "name": "enable-drives", "type": { - "text": "string | undefined" + "text": "\"default\"|\"true\"|\"false\"" }, - "fieldName": "label" + "description": "Whether to allow the user to select files from shared drives." }, { - "name": "view-id", + "name": "include-folders", "type": { - "text": "ViewId" + "text": "\"default\"|\"true\"|\"false\"" }, - "default": "\"DOCS\"", - "fieldName": "viewId" + "description": "Whether to include folders in the view." }, { "name": "mime-types", "type": { - "text": "string | undefined" - }, - "fieldName": "mimeTypes" - }, - { - "name": "query", - "type": { - "text": "string | undefined" + "text": "string" }, - "fieldName": "query" + "description": "A comma-separated list of MIME types to filter the view." }, { - "name": "enable-drives", + "name": "mode", "type": { - "text": "boolean | undefined" + "text": "string" }, - "fieldName": "enableDrives" + "description": "The mode of the view." }, { - "name": "include-folders", + "name": "owned-by-me", "type": { - "text": "boolean | undefined" + "text": "\"default\"|\"true\"|\"false\"" }, - "fieldName": "includeFolders" + "description": "Whether to show files owned by the user." }, { - "name": "select-folder-enabled", + "name": "parent", "type": { - "text": "boolean | undefined" + "text": "string" }, - "fieldName": "selectFolderEnabled" + "description": "The ID of the folder to view." }, { - "name": "mode", + "name": "query", "type": { - "text": "DocsViewMode" + "text": "string" }, - "default": "\"GRID\"", - "fieldName": "mode" + "description": "The query string to filter the view." }, { - "name": "owned-by-me", + "name": "select-folder-enabled", "type": { - "text": "boolean | undefined" + "text": "\"default\"|\"true\"|\"false\"" }, - "fieldName": "ownedByMe" + "description": "Whether to allow the user to select folders." }, { - "name": "parent", + "name": "starred", "type": { - "text": "string | undefined" + "text": "\"default\"|\"true\"|\"false\"" }, - "fieldName": "parent" + "description": "Whether to show starred files." }, { - "name": "starred", + "name": "view-id", "type": { - "text": "boolean | undefined" + "text": "string" }, - "fieldName": "starred" + "description": "The `keyof typeof google.picker.ViewId`. For example, `\"DOCS\"`, which is equivalent to `google.picker.ViewId.DOCS`." } ], "superclass": { - "name": "LitElement", - "package": "lit" + "name": "HTMLElement" }, "tagName": "drive-picker-docs-view", "customElement": true @@ -423,86 +160,22 @@ "name": "DrivePickerDocsViewElement", "declaration": { "name": "DrivePickerDocsViewElement", - "module": "src/drive-picker/drive-picker-docs-view.ts" - } - }, - { - "kind": "custom-element-definition", - "name": "drive-picker-docs-view", - "declaration": { - "name": "DrivePickerDocsViewElement", - "module": "src/drive-picker/drive-picker-docs-view.ts" + "module": "src/drive-picker/drive-picker-docs-view-element.ts" } } ] }, { "kind": "javascript-module", - "path": "src/drive-picker/drive-picker.stories.ts", - "declarations": [ - { - "kind": "variable", - "name": "meta", - "type": { - "text": "Meta" - }, - "default": "{ title: \"Drive Picker\", tags: [\"autodocs\"], decorators: [withActions], parameters: { actions: { handles: [\"picked\", \"cancel\"] }, }, render: (props: DrivePickerElementProps) => drivePickerTemplate(props), argTypes: { appId: { control: \"text\" }, clientId: { control: \"text\" }, oauthToken: { control: \"text\" }, visible: { control: \"boolean\" }, }, args: { visible: true, }, }" - }, - { - "kind": "variable", - "name": "Primary", - "type": { - "text": "Story" - }, - "default": "{ args: { visible: true, clientId: \"675807958095-nsptdcn5qdb6pl44cge1c6ghact9t5q0.apps.googleusercontent.com\", developerKey: \"AIzaSyAdqZwr-cdocUdGbt9l0zc5s58jnrGseOY\", appId: \"675807958095\", }, }" - }, - { - "kind": "variable", - "name": "DocsView", - "type": { - "text": "Story" - }, - "default": "{ args: { visible: true, clientId: \"675807958095-nsptdcn5qdb6pl44cge1c6ghact9t5q0.apps.googleusercontent.com\", developerKey: \"AIzaSyAdqZwr-cdocUdGbt9l0zc5s58jnrGseOY\", appId: \"675807958095\", }, render: (props: DrivePickerElementProps) => drivePickerTemplate( props, html`` ), }" - } - ], - "exports": [ - { - "kind": "js", - "name": "default", - "declaration": { - "name": "meta", - "module": "src/drive-picker/drive-picker.stories.ts" - } - }, - { - "kind": "js", - "name": "Primary", - "declaration": { - "name": "Primary", - "module": "src/drive-picker/drive-picker.stories.ts" - } - }, - { - "kind": "js", - "name": "DocsView", - "declaration": { - "name": "DocsView", - "module": "src/drive-picker/drive-picker.stories.ts" - } - } - ] - }, - { - "kind": "javascript-module", - "path": "src/drive-picker/drive-picker.ts", + "path": "src/drive-picker/drive-picker-element.ts", "declarations": [ { "kind": "class", - "description": "The `drive-picker` web component provides a convenient way to integrate the Google Picker API into your web applications. The Google Picker API is a JavaScript API that allows users to select or upload Google Drive files. This component acts as a \"File Open\" dialog for accessing and interacting with files stored on Google Drive.\n\nFeatures:\n- Provides a similar look-and-feel to the Google Drive UI.\n- Offers several views showing previews and thumbnail images of Drive files.\n- Displays as an inline, modal window, ensuring users never leave the main application.\n\nNote: The Google Picker API does not support file organization, moving, or copying. For these operations, you should use either the Google Drive API or the Drive UI.", + "description": "The `drive-picker` web component provides a convenient way to declaratively\nbuild\n[`google.picker.Picker`](https://developers.google.com/drive/picker/reference/picker)\nby using the component attributes and\n[`google.picker.PickerBuilder`](https://developers.google.com/drive/picker/reference/picker.pickerbuilder)\nand load OAuth tokens.", "name": "DrivePickerElement", "slots": [ { - "description": "The View elements to display in the picker. Each View element should implement a property `view` of type `google.picker.View`.", + "description": "The default slot contains View elements to display in the picker. Each View element should implement a property `view` of type `google.picker.View`.", "name": "" } ], @@ -521,134 +194,23 @@ "type": { "text": "MutationObserver | undefined" }, - "privacy": "protected" - }, - { - "kind": "field", - "name": "_oauthToken", - "type": { - "text": "string | undefined" - }, "privacy": "private" }, { "kind": "field", - "name": "appId", + "name": "google", "type": { - "text": "string" + "text": "typeof google | undefined" }, - "description": "The Google Drive app ID.", - "attribute": "app-id" - }, - { - "kind": "field", - "name": "clientId", - "type": { - "text": "string" - }, - "description": "The Google API client ID.", - "attribute": "client-id" - }, - { - "kind": "field", - "name": "developerKey", - "type": { - "text": "string | undefined" - }, - "description": "The Google API developer key.", - "attribute": "developerKey" - }, - { - "kind": "field", - "name": "height", - "type": { - "text": "number | undefined" - }, - "description": "The height of the picker dialog.", - "attribute": "height" - }, - { - "kind": "field", - "name": "hideTitleBar", - "type": { - "text": "boolean | undefined" - }, - "description": "Whether to hide the title bar of the picker dialog.", - "attribute": "hide-title-bar" - }, - { - "kind": "field", - "name": "locale", - "type": { - "text": "string | undefined" - }, - "description": "The locale of the picker dialog.", - "attribute": "locale" - }, - { - "kind": "field", - "name": "maxItems", - "type": { - "text": "number | undefined" - }, - "description": "The maximum number of items that the user can select.", - "attribute": "max-items" - }, - { - "kind": "field", - "name": "multiselect", - "type": { - "text": "boolean | undefined" - }, - "description": "Whether the user can select multiple items.", - "attribute": "multiselect" - }, - { - "kind": "field", - "name": "oauthToken", - "type": { - "text": "string | undefined" - }, - "description": "The OAuth token to authenticate the user.", - "attribute": "oauth-token" - }, - { - "kind": "field", - "name": "origin", - "type": { - "text": "string | undefined" - }, - "description": "The origin of the picker dialog.", - "attribute": "origin" - }, - { - "kind": "field", - "name": "relayUrl", - "type": { - "text": "string | undefined" - }, - "description": "The relay URL to use for cross-origin communication.", - "attribute": "relay-url" - }, - { - "kind": "field", - "name": "scope", - "type": { - "text": "string" - }, - "default": "\"https://www.googleapis.com/auth/drive.file\"", - "description": "The scope of the OAuth token.", - "attribute": "scope" + "privacy": "private" }, { "kind": "field", - "name": "title", + "name": "loading", "type": { - "text": "string" + "text": "Promise | undefined" }, - "default": "\"\"", - "description": "The title of the picker dialog.", - "attribute": "title" + "privacy": "private" }, { "kind": "field", @@ -656,34 +218,24 @@ "type": { "text": "boolean" }, - "default": "true", - "description": "Whether the picker dialog is visible.", - "attribute": "visible", - "reflects": true + "privacy": "public", + "description": "Controls the visibility of the picker after the picker dialog has been\nclosed. If any of the attributes change, the picker will be rebuilt and\nthe visibility will be reset." }, { - "kind": "field", - "name": "width", - "type": { - "text": "number | undefined" - }, - "description": "The width of the picker dialog.", - "attribute": "width" + "kind": "method", + "name": "build", + "privacy": "private" }, { "kind": "field", "name": "views", "type": { - "text": "View[]" + "text": "(View | google.picker.ViewId)[]" }, + "privacy": "private", "description": "The `google.Picker.View` objects to display in the picker as defined by the slot elements.", "readonly": true }, - { - "kind": "method", - "name": "build", - "privacy": "private" - }, { "kind": "method", "name": "callbackToDispatchEvent", @@ -696,41 +248,33 @@ } } ] - }, - { - "kind": "method", - "name": "dispatch", - "privacy": "private", - "parameters": [ - { - "name": "type", - "type": { - "text": "\"cancel\" | \"picked\"" - } - }, - { - "name": "detail", - "type": { - "text": "google.picker.ResponseObject" - } - } - ] } ], "events": [ { - "name": "type", + "name": "picker:authenticated", + "type": { + "text": "CustomEvent" + }, + "description": "Triggered when the user authenticates with the provided OAuth client ID and scope." + }, + { + "name": "eventType", "type": { "text": "CustomEvent" } }, { "description": "Triggered when the user cancels the picker dialog.", - "name": "cancel" + "name": "picker:canceled" }, { "description": "Triggered when the user picks one or more items.", - "name": "picked" + "name": "picker:picked" + }, + { + "description": "Triggered when the picker is loaded.", + "name": "picker:loaded" } ], "attributes": [ @@ -739,128 +283,102 @@ "type": { "text": "string" }, - "description": "The Google Drive app ID.", - "fieldName": "appId" + "description": "The Google Drive app ID." }, { "name": "client-id", "type": { "text": "string" }, - "description": "The Google API client ID.", - "fieldName": "clientId" + "description": "The OAuth 2.0 client ID." }, { - "name": "developerKey", + "name": "developer-key", "type": { - "text": "string | undefined" - }, - "description": "The Google API developer key.", - "fieldName": "developerKey" - }, - { - "name": "height", - "type": { - "text": "number | undefined" + "text": "string" }, - "description": "The height of the picker dialog.", - "fieldName": "height" + "description": "The API key for accessing Google Picker API." }, { "name": "hide-title-bar", "type": { - "text": "boolean | undefined" + "text": "\"default\"|\"true\"|\"false\"" }, - "description": "Whether to hide the title bar of the picker dialog.", - "fieldName": "hideTitleBar" + "description": "Hides the title bar of the picker if set to true." }, { "name": "locale", "type": { - "text": "string | undefined" + "text": "string" }, - "description": "The locale of the picker dialog.", - "fieldName": "locale" + "description": "The locale to use for the picker." }, { "name": "max-items", "type": { - "text": "number | undefined" + "text": "number" }, - "description": "The maximum number of items that the user can select.", - "fieldName": "maxItems" + "description": "The maximum number of items that can be selected." }, { - "name": "multiselect", + "name": "mine-only", "type": { - "text": "boolean | undefined" + "text": "boolean" }, - "description": "Whether the user can select multiple items.", - "fieldName": "multiselect" + "description": "If set to true, only shows files owned by the user." }, { - "name": "oauth-token", + "name": "multiselect", "type": { - "text": "string | undefined" + "text": "boolean" }, - "description": "The OAuth token to authenticate the user.", - "fieldName": "oauthToken" + "description": "Enables multiple file selection if set to true." }, { - "name": "origin", + "name": "nav-hidden", "type": { - "text": "string | undefined" + "text": "boolean" }, - "description": "The origin of the picker dialog.", - "fieldName": "origin" + "description": "Hides the navigation pane if set to true." }, { - "name": "relay-url", + "name": "oauth-token", "type": { - "text": "string | undefined" + "text": "string" }, - "description": "The relay URL to use for cross-origin communication.", - "fieldName": "relayUrl" + "description": "The OAuth 2.0 token for authentication." }, { - "name": "scope", + "name": "origin", "type": { "text": "string" }, - "default": "\"https://www.googleapis.com/auth/drive.file\"", - "description": "The scope of the OAuth token.", - "fieldName": "scope" + "description": "The origin parameter for the picker." }, { - "name": "title", + "name": "relay-url", "type": { "text": "string" }, - "default": "\"\"", - "description": "The title of the picker dialog.", - "fieldName": "title" + "description": "The relay URL for the picker." }, { - "name": "visible", + "name": "scope", "type": { - "text": "boolean" + "text": "string" }, - "default": "true", - "description": "Whether the picker dialog is visible.", - "fieldName": "visible" + "description": "The OAuth 2.0 scope for the picker." }, { - "name": "width", + "name": "title", "type": { - "text": "number | undefined" + "text": "string" }, - "description": "The width of the picker dialog.", - "fieldName": "width" + "description": "The title of the picker." } ], "superclass": { - "name": "LitElement", - "package": "lit" + "name": "HTMLElement" }, "tagName": "drive-picker", "customElement": true @@ -872,15 +390,7 @@ "name": "DrivePickerElement", "declaration": { "name": "DrivePickerElement", - "module": "src/drive-picker/drive-picker.ts" - } - }, - { - "kind": "custom-element-definition", - "name": "drive-picker", - "declaration": { - "name": "DrivePickerElement", - "module": "src/drive-picker/drive-picker.ts" + "module": "src/drive-picker/drive-picker-element.ts" } } ] @@ -895,15 +405,7 @@ "name": "DrivePickerElement", "declaration": { "name": "DrivePickerElement", - "module": "\"./drive-picker\"" - } - }, - { - "kind": "js", - "name": "DrivePickerElementProps", - "declaration": { - "name": "DrivePickerElementProps", - "module": "\"./drive-picker\"" + "module": "\"./drive-picker-element\"" } }, { @@ -911,15 +413,7 @@ "name": "DrivePickerDocsViewElement", "declaration": { "name": "DrivePickerDocsViewElement", - "module": "\"./drive-picker-docs-view\"" - } - }, - { - "kind": "js", - "name": "DrivePickerDocsViewElementProps", - "declaration": { - "name": "DrivePickerDocsViewElementProps", - "module": "\"./drive-picker-docs-view\"" + "module": "\"./drive-picker-docs-view-element\"" } } ] @@ -929,24 +423,6 @@ "path": "src/drive-picker/types.ts", "declarations": [], "exports": [] - }, - { - "kind": "javascript-module", - "path": "coverage/lcov-report/block-navigation.js", - "declarations": [], - "exports": [] - }, - { - "kind": "javascript-module", - "path": "coverage/lcov-report/prettify.js", - "declarations": [], - "exports": [] - }, - { - "kind": "javascript-module", - "path": "coverage/lcov-report/sorter.js", - "declarations": [], - "exports": [] } ] } diff --git a/examples/drive-picker.html b/examples/drive-picker.html deleted file mode 100644 index de30bbe..0000000 --- a/examples/drive-picker.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - diff --git a/docs/logo.jpg b/logo.jpg similarity index 100% rename from docs/logo.jpg rename to logo.jpg diff --git a/package.json b/package.json index 3e5b16e..d1b0266 100644 --- a/package.json +++ b/package.json @@ -9,134 +9,105 @@ "url": "https://justin.poehnelt.com" }, "type": "module", - "main": "dist/index.js", - "module": "dist/index.js", - "types": "dist/index.d.ts", + "exports": { + ".": { + "browser": "./dist/index.iife.min.js", + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./drive-picker": { + "types": "./dist/drive-picker/index.d.ts", + "import": "./dist/drive-picker/index.js" + }, + "./package.json": "./package.json" + }, + "files": ["dist", "src", "custom-elements.json"], "homepage": "https://github.com/googleworkspace/drive-picker-element", "repository": { "type": "git", "url": "https://github.com/googleworkspace/drive-picker-element.git" }, "scripts": { - "prepare": "husky", "build": "wireit", - "build:docs": "wireit", - "serve": "wireit", "check": "tsc --noEmit", + "format": "biome check --fix .", "lint": "biome check .", - "format": "biome check --write .", - "test": "wireit", - "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" - }, - "dependencies": { - "lit": "^3.1.2" + "prepack": "pnpm build", + "prepare": "husky", + "storybook": "wireit", + "test": "echo \"No tests yet.\"" }, "devDependencies": { "@biomejs/biome": "1.8.3", - "@chromatic-com/storybook": "^1.5.0", "@custom-elements-manifest/analyzer": "^0.10.2", - "@open-wc/lit-helpers": "^0.7.0", - "@open-wc/testing": "^4.0.0", - "@storybook/addon-actions": "^8.1.9", - "@storybook/addon-essentials": "^8.1.9", - "@storybook/addon-links": "^8.1.9", - "@storybook/blocks": "^8.1.9", - "@storybook/test": "^8.1.9", - "@storybook/web-components": "^8.1.9", - "@storybook/web-components-vite": "^8.1.9", + "@storybook/addon-essentials": "^8.4.4", + "@storybook/blocks": "^8.4.4", + "@storybook/csf": "^0.1.11", + "@storybook/types": "^8.4.4", + "@storybook/web-components": "^8.4.4", + "@storybook/web-components-vite": "^8.4.4", "@types/gapi": "^0.0.47", "@types/google.accounts": "^0.0.14", "@types/google.picker": "^0.0.44", + "@types/mdast": "^4.0.4", + "@types/memoizee": "^0.4.11", "@types/mocha": "^10.0.6", "@types/node": "^22.4.1", - "@web/dev-server": "^0.4.5", - "@web/test-runner": "^0.18.2", - "@web/test-runner-playwright": "^0.11.0", - "chai": "^5.1.1", + "@types/unist": "^3.0.3", + "browserslist": "^4.24.0", + "browserslist-to-esbuild": "^2.1.1", + "custom-elements-manifest": "^2.1.0", "husky": "^9.1.4", "lint-staged": "^15.2.9", - "playwright": "^1.44.0", + "mdast-util-from-markdown": "^2.0.2", "prettier": "^3.3.3", - "storybook": "^8.1.9", + "remark": "^15.0.1", + "remark-behead": "^3.1.0", + "remark-gfm": "^4.0.0", + "remark-github": "^12.0.0", + "remark-toc": "^9.0.0", + "storybook": "^8.4.4", "tsup": "^8.0.2", - "typescript": "^5.2.2", - "web-component-analyzer": "^2.0.0", + "tsx": "^4.19.2", + "typescript": "^5.6.3", "wireit": "^0.14.4" }, - "customElements": "custom-elements.json", + "customElements": "dist/custom-elements.json", "wireit": { "build": { - "clean": true, - "command": "tsup --dts --format esm --target es2020 --splitting false --sourcemap src/**/*.ts", "dependencies": [ - "build:vscode", - "build:docs" - ], - "files": [ - "src/**/*.ts" - ], - "output": [ - "dist/**/*.js", - "dist/**/*.d.ts" + "build:components", + "build:manifest", + "build:readme", + "build:storybook" ] }, - "build:json": { - "command": "cem analyze --litelement --outdir dist --exclude '**/*.test.ts'", - "files": [ - "src/**/*.ts" - ], - "output": [ - "dist/custom-elements.json" - ] + "build:components": { + "command": "tsup", + "files": ["src/**/*.ts", "tsup.config.ts"], + "output": ["dist/**/*.(js|ts|map)"] }, - "build:vscode": { - "command": "wca src --outFile dist/custom-data-vscode.json --format vscode", - "files": [ - "src/**/*.ts" - ], - "output": [ - "dist/custom-data-vscode.json" - ] + "build:manifest": { + "command": "cem analyze --config cem.config.js && biome check --fix custom-elements.json", + "files": ["src/**/*.ts", "cem.config.js"], + "output": ["custom-elements.json"] }, - "build:docs": { + "build:readme": { "clean": false, - "command": "wca src --outDir docs --format 'md' --visibility 'public' --inlineTypes && node ./.github/docs.js", - "dependencies": [ - "build:docs-wca" - ], - "files": [ - "docs/**/*.md", - "README.md" - ], - "output": [ - "README.md" - ] + "command": "tsx ./scripts/docs.ts", + "files": ["custom-elements.json", "scripts/**/*.ts", "README.md"], + "output": ["README.md"], + "dependencies": ["build:manifest"] }, - "build:docs-wca": { - "command": "wca src --outDir docs --format 'md' --visibility 'public' --inlineTypes", - "files": [ - "src/**/*.ts" - ], - "output": [ - "docs/*.md" - ] + "build:storybook": { + "command": "storybook build", + "files": ["src/**/*.ts", "stories/**/*.ts"], + "output": ["dist/storybook"] }, - "serve": { - "command": "wds --node-resolve --watch --open examples/drive-picker.html", - "dependencies": [ - { - "cascade": true, - "script": "build" - } - ], - "service": true - }, - "test": { - "command": "wtr dist/*.test.js --node-resolve --coverage --reporter spec --playwright --browsers chromium", - "dependencies": [ - "build" - ] + "storybook": { + "service": true, + "command": "storybook dev -p 6006", + "dependencies": ["build:manifest"] } }, "husky": { @@ -145,7 +116,7 @@ } }, "lint-staged": { - "*": "pnpm build:docs && pnpm format && pnpm lint && pnpm check" + "*": "pnpm build && pnpm format && pnpm lint && pnpm check" }, "publishConfig": { "access": "public", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b25d5c..e606c4e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,48 +4,31 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - lit: - specifier: ^3.1.2 - version: 3.1.3 - devDependencies: '@biomejs/biome': specifier: 1.8.3 version: 1.8.3 - '@chromatic-com/storybook': - specifier: ^1.5.0 - version: 1.9.0(react@18.3.1) '@custom-elements-manifest/analyzer': specifier: ^0.10.2 version: 0.10.2 - '@open-wc/lit-helpers': - specifier: ^0.7.0 - version: 0.7.0(lit@3.1.3) - '@open-wc/testing': - specifier: ^4.0.0 - version: 4.0.0 - '@storybook/addon-actions': - specifier: ^8.1.9 - version: 8.4.1(storybook@8.4.1) '@storybook/addon-essentials': - specifier: ^8.1.9 - version: 8.4.1(@types/react@18.3.12)(storybook@8.4.1) - '@storybook/addon-links': - specifier: ^8.1.9 - version: 8.4.1(react@18.3.1)(storybook@8.4.1) + specifier: ^8.4.4 + version: 8.4.4(@types/react@18.3.12)(storybook@8.4.4) '@storybook/blocks': - specifier: ^8.1.9 - version: 8.4.1(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.1) - '@storybook/test': - specifier: ^8.1.9 - version: 8.4.1(storybook@8.4.1) + specifier: ^8.4.4 + version: 8.4.4(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.4) + '@storybook/csf': + specifier: ^0.1.11 + version: 0.1.11 + '@storybook/types': + specifier: ^8.4.4 + version: 8.4.4(storybook@8.4.4) '@storybook/web-components': - specifier: ^8.1.9 - version: 8.4.1(lit@3.1.3)(storybook@8.4.1) + specifier: ^8.4.4 + version: 8.4.4(lit@3.2.1)(storybook@8.4.4) '@storybook/web-components-vite': - specifier: ^8.1.9 - version: 8.4.1(lit@3.1.3)(storybook@8.4.1)(vite@5.4.10) + specifier: ^8.4.4 + version: 8.4.4(lit@3.2.1)(storybook@8.4.4)(vite@5.4.11) '@types/gapi': specifier: ^0.0.47 version: 0.0.47 @@ -55,89 +38,75 @@ devDependencies: '@types/google.picker': specifier: ^0.0.44 version: 0.0.44 + '@types/mdast': + specifier: ^4.0.4 + version: 4.0.4 + '@types/memoizee': + specifier: ^0.4.11 + version: 0.4.11 '@types/mocha': specifier: ^10.0.6 version: 10.0.6 '@types/node': specifier: ^22.4.1 version: 22.4.1 - '@web/dev-server': - specifier: ^0.4.5 - version: 0.4.5 - '@web/test-runner': - specifier: ^0.18.2 - version: 0.18.2 - '@web/test-runner-playwright': - specifier: ^0.11.0 - version: 0.11.0 - chai: - specifier: ^5.1.1 - version: 5.1.1 + '@types/unist': + specifier: ^3.0.3 + version: 3.0.3 + browserslist: + specifier: ^4.24.0 + version: 4.24.0 + browserslist-to-esbuild: + specifier: ^2.1.1 + version: 2.1.1(browserslist@4.24.0) + custom-elements-manifest: + specifier: ^2.1.0 + version: 2.1.0 husky: specifier: ^9.1.4 version: 9.1.4 lint-staged: specifier: ^15.2.9 version: 15.2.9 - playwright: - specifier: ^1.44.0 - version: 1.44.0 + mdast-util-from-markdown: + specifier: ^2.0.2 + version: 2.0.2 prettier: specifier: ^3.3.3 version: 3.3.3 + remark: + specifier: ^15.0.1 + version: 15.0.1 + remark-behead: + specifier: ^3.1.0 + version: 3.1.0 + remark-gfm: + specifier: ^4.0.0 + version: 4.0.0 + remark-github: + specifier: ^12.0.0 + version: 12.0.0 + remark-toc: + specifier: ^9.0.0 + version: 9.0.0 storybook: - specifier: ^8.1.9 - version: 8.4.1(prettier@3.3.3) + specifier: ^8.4.4 + version: 8.4.4(prettier@3.3.3) tsup: specifier: ^8.0.2 version: 8.0.2(typescript@5.6.3) + tsx: + specifier: ^4.19.2 + version: 4.19.2 typescript: - specifier: ^5.2.2 + specifier: ^5.6.3 version: 5.6.3 - web-component-analyzer: - specifier: ^2.0.0 - version: 2.0.0 wireit: specifier: ^0.14.4 version: 0.14.4 packages: - /@75lb/deep-merge@1.1.1: - resolution: {integrity: sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==} - engines: {node: '>=12.17'} - dependencies: - lodash.assignwith: 4.2.0 - typical: 7.1.1 - dev: true - - /@adobe/css-tools@4.4.0: - resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} - dev: true - - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.5 - picocolors: 1.0.1 - dev: true - - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.24.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - dev: true - /@babel/runtime@7.26.0: resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} @@ -233,21 +202,6 @@ packages: dev: true optional: true - /@chromatic-com/storybook@1.9.0(react@18.3.1): - resolution: {integrity: sha512-vYQ+TcfktEE3GHnLZXHCzXF/sN9dw+KivH8a5cmPyd9YtQs7fZtHrEgsIjWpYycXiweKMo1Lm1RZsjxk8DH3rA==} - engines: {node: '>=16.0.0', yarn: '>=1.22.18'} - dependencies: - chromatic: 11.16.3 - filesize: 10.1.6 - jsonfile: 6.1.0 - react-confetti: 6.1.0(react@18.3.1) - strip-ansi: 7.1.0 - transitivePeerDependencies: - - '@chromatic-com/cypress' - - '@chromatic-com/playwright' - - react - dev: true - /@custom-elements-manifest/analyzer@0.10.2: resolution: {integrity: sha512-YkfAfaNGSulnXxyIAHU3K8Z7bYGmIU2MlPvEaQPXnWUaIFMo0p3VEVYvByvENnVCQKPPDyjlkCm73u/zRnRvMA==} hasBin: true @@ -288,6 +242,24 @@ packages: dev: true optional: true + /@esbuild/aix-ppc64@0.23.1: + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/aix-ppc64@0.24.0: + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.19.12: resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} @@ -306,6 +278,24 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.23.1: + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.24.0: + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.19.12: resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} @@ -324,6 +314,24 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.23.1: + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.24.0: + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.19.12: resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} @@ -342,6 +350,24 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.23.1: + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.24.0: + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.19.12: resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} @@ -360,6 +386,24 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.23.1: + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.24.0: + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.19.12: resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} @@ -378,6 +422,24 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.23.1: + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.24.0: + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.19.12: resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} @@ -396,6 +458,24 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.23.1: + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.24.0: + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.19.12: resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} @@ -414,6 +494,24 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.23.1: + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.24.0: + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.19.12: resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} @@ -432,6 +530,24 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.23.1: + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.24.0: + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.19.12: resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} @@ -450,6 +566,24 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.23.1: + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.24.0: + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.19.12: resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} @@ -468,6 +602,24 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.23.1: + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.24.0: + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.19.12: resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} @@ -486,6 +638,24 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.23.1: + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.24.0: + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.19.12: resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} @@ -504,6 +674,24 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.23.1: + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.24.0: + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.19.12: resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} @@ -522,6 +710,24 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.23.1: + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.24.0: + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.19.12: resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} @@ -540,6 +746,24 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.23.1: + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.24.0: + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.19.12: resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} @@ -558,6 +782,24 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.23.1: + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.24.0: + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.19.12: resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} @@ -576,9 +818,27 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} + /@esbuild/linux-x64@0.23.1: + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.24.0: + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true @@ -594,6 +854,42 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.23.1: + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.24.0: + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64@0.23.1: + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64@0.24.0: + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.19.12: resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} @@ -612,6 +908,24 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.23.1: + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.24.0: + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.19.12: resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} @@ -630,6 +944,24 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.23.1: + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.24.0: + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.19.12: resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} @@ -648,6 +980,24 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.23.1: + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.24.0: + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.19.12: resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} @@ -666,6 +1016,24 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.23.1: + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.24.0: + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.19.12: resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} @@ -684,11 +1052,23 @@ packages: dev: true optional: true - /@esm-bundle/chai@4.3.4-fix.0: - resolution: {integrity: sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw==} - dependencies: - '@types/chai': 4.3.16 + /@esbuild/win32-x64@0.23.1: + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.24.0: + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true dev: true + optional: true /@github/catalyst@1.6.0: resolution: {integrity: sha512-u8A+DameixqpeyHzvnJWTGj+wfiskQOYHzSiJscCWVfMkIT3rxnbHMtGh3lMthaRY21nbUOK71WcsCnCrXhBJQ==} @@ -742,11 +1122,13 @@ packages: /@lit-labs/ssr-dom-shim@1.2.0: resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} + dev: true /@lit/reactive-element@2.0.4: resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} dependencies: '@lit-labs/ssr-dom-shim': 1.2.0 + dev: true /@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1): resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} @@ -780,59 +1162,6 @@ packages: fastq: 1.17.1 dev: true - /@open-wc/dedupe-mixin@1.4.0: - resolution: {integrity: sha512-Sj7gKl1TLcDbF7B6KUhtvr+1UCxdhMbNY5KxdU5IfMFWqL8oy1ZeAcCANjoB1TL0AJTcPmcCFsCbHf8X2jGDUA==} - dev: true - - /@open-wc/lit-helpers@0.7.0(lit@3.1.3): - resolution: {integrity: sha512-4NBlx5ve0EvZplCRJbESm0MdMbRCw16alP2y76KAAAwzmFFXXrUj5hFwhw55+sSg5qaRRx6sY+s7usKgnNo3TQ==} - peerDependencies: - lit: ^2.0.0 || ^3.0.0 - dependencies: - lit: 3.1.3 - dev: true - - /@open-wc/scoped-elements@3.0.5: - resolution: {integrity: sha512-q4U+hFTQQRyorJILOpmBm6PY2hgjCnQe214nXJNjbJMQ9EvT55oyZ7C8BY5aFYJkytUyBoawlMpZt4F2xjdzHw==} - dependencies: - '@open-wc/dedupe-mixin': 1.4.0 - lit: 3.1.3 - dev: true - - /@open-wc/semantic-dom-diff@0.20.1: - resolution: {integrity: sha512-mPF/RPT2TU7Dw41LEDdaeP6eyTOWBD4z0+AHP4/d0SbgcfJZVRymlIB6DQmtz0fd2CImIS9kszaMmwMt92HBPA==} - dependencies: - '@types/chai': 4.3.16 - '@web/test-runner-commands': 0.9.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@open-wc/testing-helpers@3.0.1: - resolution: {integrity: sha512-hyNysSatbgT2FNxHJsS3rGKcLEo6+HwDFu1UQL6jcSQUabp/tj3PyX7UnXL3H5YGv0lJArdYLSnvjLnjn3O2fw==} - dependencies: - '@open-wc/scoped-elements': 3.0.5 - lit: 3.1.3 - lit-html: 3.1.3 - dev: true - - /@open-wc/testing@4.0.0: - resolution: {integrity: sha512-KI70O0CJEpBWs3jrTju4BFCy7V/d4tFfYWkg8pMzncsDhD7TYNHLw5cy+s1FHXIgVFetnMDhPpwlKIPvtTQW7w==} - dependencies: - '@esm-bundle/chai': 4.3.4-fix.0 - '@open-wc/semantic-dom-diff': 0.20.1 - '@open-wc/testing-helpers': 3.0.1 - '@types/chai-dom': 1.11.3 - '@types/sinon-chai': 3.2.12 - chai-a11y-axe: 1.5.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -840,56 +1169,6 @@ packages: dev: true optional: true - /@puppeteer/browsers@2.2.3: - resolution: {integrity: sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==} - engines: {node: '>=18'} - hasBin: true - dependencies: - debug: 4.3.4 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.4.0 - semver: 7.6.0 - tar-fs: 3.0.5 - unbzip2-stream: 1.4.3 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@rollup/plugin-node-resolve@15.2.3(rollup@4.17.2): - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 4.17.2 - dev: true - - /@rollup/pluginutils@5.1.0(rollup@4.17.2): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 4.17.2 - dev: true - /@rollup/rollup-android-arm-eabi@4.17.2: resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} cpu: [arm] @@ -898,8 +1177,8 @@ packages: dev: true optional: true - /@rollup/rollup-android-arm-eabi@4.24.3: - resolution: {integrity: sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==} + /@rollup/rollup-android-arm-eabi@4.27.2: + resolution: {integrity: sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==} cpu: [arm] os: [android] requiresBuild: true @@ -914,8 +1193,8 @@ packages: dev: true optional: true - /@rollup/rollup-android-arm64@4.24.3: - resolution: {integrity: sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==} + /@rollup/rollup-android-arm64@4.27.2: + resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==} cpu: [arm64] os: [android] requiresBuild: true @@ -930,8 +1209,8 @@ packages: dev: true optional: true - /@rollup/rollup-darwin-arm64@4.24.3: - resolution: {integrity: sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==} + /@rollup/rollup-darwin-arm64@4.27.2: + resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==} cpu: [arm64] os: [darwin] requiresBuild: true @@ -946,24 +1225,24 @@ packages: dev: true optional: true - /@rollup/rollup-darwin-x64@4.24.3: - resolution: {integrity: sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==} + /@rollup/rollup-darwin-x64@4.27.2: + resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-freebsd-arm64@4.24.3: - resolution: {integrity: sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==} + /@rollup/rollup-freebsd-arm64@4.27.2: + resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==} cpu: [arm64] os: [freebsd] requiresBuild: true dev: true optional: true - /@rollup/rollup-freebsd-x64@4.24.3: - resolution: {integrity: sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==} + /@rollup/rollup-freebsd-x64@4.27.2: + resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==} cpu: [x64] os: [freebsd] requiresBuild: true @@ -978,8 +1257,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.24.3: - resolution: {integrity: sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==} + /@rollup/rollup-linux-arm-gnueabihf@4.27.2: + resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} cpu: [arm] os: [linux] requiresBuild: true @@ -994,8 +1273,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.24.3: - resolution: {integrity: sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==} + /@rollup/rollup-linux-arm-musleabihf@4.27.2: + resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} cpu: [arm] os: [linux] requiresBuild: true @@ -1010,8 +1289,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.24.3: - resolution: {integrity: sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==} + /@rollup/rollup-linux-arm64-gnu@4.27.2: + resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} cpu: [arm64] os: [linux] requiresBuild: true @@ -1026,8 +1305,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.24.3: - resolution: {integrity: sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==} + /@rollup/rollup-linux-arm64-musl@4.27.2: + resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} cpu: [arm64] os: [linux] requiresBuild: true @@ -1042,8 +1321,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.24.3: - resolution: {integrity: sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==} + /@rollup/rollup-linux-powerpc64le-gnu@4.27.2: + resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} cpu: [ppc64] os: [linux] requiresBuild: true @@ -1058,8 +1337,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.24.3: - resolution: {integrity: sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==} + /@rollup/rollup-linux-riscv64-gnu@4.27.2: + resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} cpu: [riscv64] os: [linux] requiresBuild: true @@ -1074,8 +1353,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.24.3: - resolution: {integrity: sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==} + /@rollup/rollup-linux-s390x-gnu@4.27.2: + resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} cpu: [s390x] os: [linux] requiresBuild: true @@ -1090,8 +1369,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.24.3: - resolution: {integrity: sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==} + /@rollup/rollup-linux-x64-gnu@4.27.2: + resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} cpu: [x64] os: [linux] requiresBuild: true @@ -1106,8 +1385,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.24.3: - resolution: {integrity: sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==} + /@rollup/rollup-linux-x64-musl@4.27.2: + resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} cpu: [x64] os: [linux] requiresBuild: true @@ -1122,8 +1401,8 @@ packages: dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.24.3: - resolution: {integrity: sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==} + /@rollup/rollup-win32-arm64-msvc@4.27.2: + resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} cpu: [arm64] os: [win32] requiresBuild: true @@ -1138,8 +1417,8 @@ packages: dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.24.3: - resolution: {integrity: sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==} + /@rollup/rollup-win32-ia32-msvc@4.27.2: + resolution: {integrity: sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==} cpu: [ia32] os: [win32] requiresBuild: true @@ -1154,156 +1433,138 @@ packages: dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.24.3: - resolution: {integrity: sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==} + /@rollup/rollup-win32-x64-msvc@4.27.2: + resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /@storybook/addon-actions@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-D6KohTIA4JCHNol1X7Whp4LpOVU4cS5FfyOorwYo/WIzpHrUYc4Pw/+ex6DOmU/kgrk14mr8d9obVehKW7iNtA==} + /@storybook/addon-actions@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-+Dd6alcieS6UN7IKhXLuhyQYQMu9HG/Tdr790a4EOQKpJM1NxIMuPuUH3fAoKfa9VhtI1BxTBr7zNtzg9Akqhg==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) uuid: 9.0.1 dev: true - /@storybook/addon-backgrounds@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-DIT1E9R9Sds8KTC+0m2X5cVa8hTNcKY1XKYTI9QdzQvdZzOt+K93AJqq2x8k5glingqUVpB6v2fSDmCUXp4+4g==} + /@storybook/addon-backgrounds@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-asaGD4ruIPFthyhpByQSJagvtNN7EGKdHj5yMnsMvkSXnN0r1uVkI2/Z37hmLt02Qbzf6OQiBPW5TDL+X+EEBg==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) ts-dedent: 2.2.0 dev: true - /@storybook/addon-controls@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-3ahbYdDx7iFUd4X1KelMSuPqVnladc0bH4m6DQZyN+wkRxdRlOD6iOGuOe2qi1Gv0b2VuVAt253i75tK/TPNLw==} + /@storybook/addon-controls@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-FbZRbwJQggLz6M3zB6scCp1SDGwQ5zdiD6sjBilZzgGO5rBFqG0A8PoOyr4iPrLU2y/NZBdRrJBD+6MkaJ+yzw==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) ts-dedent: 2.2.0 dev: true - /@storybook/addon-docs@8.4.1(@types/react@18.3.12)(storybook@8.4.1): - resolution: {integrity: sha512-yPD/NssJf7pMJzaKvma02C6yX8ykPVnEjhRbNYcBNM8s8g/cT5JkROvIB+FOb4T81yhdfbGg9bGkpAXGX270IQ==} + /@storybook/addon-docs@8.4.4(@types/react@18.3.12)(storybook@8.4.4): + resolution: {integrity: sha512-wuHaStfpd2rkAN5Lf0qmvE3JKTHTEDbnAMTvfs9inzGBL0iAwBLjW48/ll7lLkJ2E3k/FQtaevNpuc7C52u1Bw==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.12)(react@18.3.1) - '@storybook/blocks': 8.4.1(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.1) - '@storybook/csf-plugin': 8.4.1(storybook@8.4.1) - '@storybook/react-dom-shim': 8.4.1(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.1) + '@storybook/blocks': 8.4.4(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.4) + '@storybook/csf-plugin': 8.4.4(storybook@8.4.4) + '@storybook/react-dom-shim': 8.4.4(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.4) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - - webpack-sources dev: true - /@storybook/addon-essentials@8.4.1(@types/react@18.3.12)(storybook@8.4.1): - resolution: {integrity: sha512-Hmb5fpVzQgyCacDtHeE7HJqIfolzeOnedsLyJVYVpKns/uOWXqpDuU8Fc0s3yTjr1QPIRKtbqV1STxoyXj2how==} + /@storybook/addon-essentials@8.4.4(@types/react@18.3.12)(storybook@8.4.4): + resolution: {integrity: sha512-0ObUQ98zZkeWqP2k3Un5jny3WxT3THgUKZUGD+mR8eq6CuTmJ3bUXWzDHreuDxQwgr8s5f04XD8IcRvjZ9IRgA==} peerDependencies: - storybook: ^8.4.1 - dependencies: - '@storybook/addon-actions': 8.4.1(storybook@8.4.1) - '@storybook/addon-backgrounds': 8.4.1(storybook@8.4.1) - '@storybook/addon-controls': 8.4.1(storybook@8.4.1) - '@storybook/addon-docs': 8.4.1(@types/react@18.3.12)(storybook@8.4.1) - '@storybook/addon-highlight': 8.4.1(storybook@8.4.1) - '@storybook/addon-measure': 8.4.1(storybook@8.4.1) - '@storybook/addon-outline': 8.4.1(storybook@8.4.1) - '@storybook/addon-toolbars': 8.4.1(storybook@8.4.1) - '@storybook/addon-viewport': 8.4.1(storybook@8.4.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: ^8.4.4 + dependencies: + '@storybook/addon-actions': 8.4.4(storybook@8.4.4) + '@storybook/addon-backgrounds': 8.4.4(storybook@8.4.4) + '@storybook/addon-controls': 8.4.4(storybook@8.4.4) + '@storybook/addon-docs': 8.4.4(@types/react@18.3.12)(storybook@8.4.4) + '@storybook/addon-highlight': 8.4.4(storybook@8.4.4) + '@storybook/addon-measure': 8.4.4(storybook@8.4.4) + '@storybook/addon-outline': 8.4.4(storybook@8.4.4) + '@storybook/addon-toolbars': 8.4.4(storybook@8.4.4) + '@storybook/addon-viewport': 8.4.4(storybook@8.4.4) + storybook: 8.4.4(prettier@3.3.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - - webpack-sources dev: true - /@storybook/addon-highlight@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-BBkUd6+i7lUEWZwoJDlUIwrs7EXkk+EoREUi27iiA1Lilw+NNhoC3kcBmj3+MccjRyeMeIWAgYyXF5qeB2s/JQ==} + /@storybook/addon-highlight@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-k7EUxiMe8RCasmgfa6ZKx7UG6kU9RooTYGwqY5TG5xAQOzDwKn4qom+OYkT/9/6lORhJrUe2GgQLCrq/WGpS1A==} peerDependencies: - storybook: ^8.4.1 - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.4.1(prettier@3.3.3) - dev: true - - /@storybook/addon-links@8.4.1(react@18.3.1)(storybook@8.4.1): - resolution: {integrity: sha512-wg83rNKo6mq5apV7f1qMn4q8xZ8wVx/42EEWxTOmnM37Q5kXltEBu+rUyBpPNDU8zBuXr/MRKIhK5h2k4WfWcg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.1 - peerDependenciesMeta: - react: - optional: true + storybook: ^8.4.4 dependencies: - '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - react: 18.3.1 - storybook: 8.4.1(prettier@3.3.3) - ts-dedent: 2.2.0 + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/addon-measure@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-Pg1ROj29hKt7grL/HmbIJ10WrkZf1Unx35SsP373bkPQ1ggYi9oxGqtfNchTF2zCb1xUpIikLYSJgkwdjqWxhA==} + /@storybook/addon-measure@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-KsjrwrXwrI+z7hKKfjyY1w1b0gLSLZmp15vIRJMELybWV0+4bZFLJGwMBOQFx+aWBED8yZrRV9OjTmoczawsZg==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) tiny-invariant: 1.3.3 dev: true - /@storybook/addon-outline@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-LPZ0gGHfbru66Lkw1whnc3F/r1hfnoORBoF98Hp+cjH34gR4t8te6xq5qSiupRUULGdSLdBRs/4EGRBeELfVjQ==} + /@storybook/addon-outline@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-CVS1dm6BNUWKGrJj9E1ThBp5Khe6Yw+Hhz6OFxrPZfoTr6RstwoTmvSpKjDUCn8zj6ujoORdiQUh1FsHOxAPBg==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) ts-dedent: 2.2.0 dev: true - /@storybook/addon-toolbars@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-yrzX6BFeJM5KFY0+ZAYfRax2QgWi2e5vF6yPz+MGIPr4nhHay0wTkOHhkBhIPBjQO9x0vqc7MS2EBDydCBWqlg==} + /@storybook/addon-toolbars@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-ENPshJMDpfzOJ4Tgm1hSzQoaEmgDxCtP6C8LKk4MOd3X92MJ7p6kfb3y3R1BLg4E/g90qp6lKPFdcohS2tKCgQ==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/addon-viewport@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-O6DcuUfXQTytjl7mj4ld4ZX9x2pUUWKUx1TxiuMuH0EKb612RyYcdpXpDQQwsIzLV/f2BOetk9jmO2/MymfbWQ==} + /@storybook/addon-viewport@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-SRHJlLhf3tu7+sYNfVIYTeMegn6aiv4HGX97ZLvL76NWWBU8BntQ1LKMki7475mWiZNUFMoYYPsHlG+HU9FAtg==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: memoizerific: 1.11.3 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/blocks@8.4.1(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.1): - resolution: {integrity: sha512-C4w5T5fhg0iONXozHQ1bh9im2Lr1BiY7Bj/9XoFjkc5YeCzxlMpujFA6Nmo4ToUFW90QbvKN7/QVhbrtY9O1Jg==} + /@storybook/blocks@8.4.4(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.4): + resolution: {integrity: sha512-LwM3guL7uWpYR1a/SY0KZjCUskTKEaS22eF7GK8iXAV5BY4KpKr6ArW4O9orK29KtFwKhDZQLcMcECsOJBVk/A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.1 + storybook: ^8.4.4 peerDependenciesMeta: react: optional: true @@ -1314,35 +1575,33 @@ packages: '@storybook/icons': 1.2.12(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) ts-dedent: 2.2.0 dev: true - /@storybook/builder-vite@8.4.1(storybook@8.4.1)(vite@5.4.10): - resolution: {integrity: sha512-//v2S+/huVTZB1tqVH7hpGQtEaRUFyhVFuf4Qk+xPuJItE6sgY4z8Iaz5vONTNMUouei867CXQRPQr3gCa3QVQ==} + /@storybook/builder-vite@8.4.4(storybook@8.4.4)(vite@5.4.11): + resolution: {integrity: sha512-UfPzE0p2xvBK7sA853N3VN+Plfw6/DIVppwbgsaRdzie52QXZQrl60u0igD47DHi6+xbqCBWDz7up4h3k00Z5A==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 vite: ^4.0.0 || ^5.0.0 dependencies: - '@storybook/csf-plugin': 8.4.1(storybook@8.4.1) + '@storybook/csf-plugin': 8.4.4(storybook@8.4.4) browser-assert: 1.2.1 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) ts-dedent: 2.2.0 - vite: 5.4.10(@types/node@22.4.1) - transitivePeerDependencies: - - webpack-sources + vite: 5.4.11(@types/node@22.4.1) dev: true - /@storybook/components@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-bMPclbBhrWxhFlwqrC/h4fPLl05ouoi5D8SkQTHjeVxWN9eDnMVi76xM0YDct302Z3f0x5S3plIulp+4XRxrvg==} + /@storybook/components@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-0BSZVmsk23C0BSRKx3liZSVQFXtoF86XQFdNQxjrXIwdHIEN7TcL3DwcxeVUU5ilGp7HeDgAydGNIPGgTeEe6g==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/core@8.4.1(prettier@3.3.3): - resolution: {integrity: sha512-q3Q4OFBj7MHHbIFYk/Beejlqv5j7CC3+VWhGcr0TK3SGvdCIZ7EliYuc5JIOgDlEPsnTIk+lkgWI4LAA9mLzSw==} + /@storybook/core@8.4.4(prettier@3.3.3): + resolution: {integrity: sha512-WjTmJpsHsFCd7tQ/8jFpDWjhntauXcWYYTcEZk56Pq4miyNrrXhV0S80Gxv3Uvzk0jocgtT2AKf8rQuH2UkQEg==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: @@ -1352,30 +1611,28 @@ packages: '@storybook/csf': 0.1.11 better-opn: 3.0.2 browser-assert: 1.2.1 - esbuild: 0.19.12 - esbuild-register: 3.6.0(esbuild@0.19.12) + esbuild: 0.24.0 + esbuild-register: 3.6.0(esbuild@0.24.0) jsdoc-type-pratt-parser: 4.1.0 prettier: 3.3.3 process: 0.11.10 recast: 0.23.9 - semver: 7.6.2 + semver: 7.6.3 util: 0.12.5 - ws: 8.17.0 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /@storybook/csf-plugin@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-MdQkyq6mJ31lBsWCG9VNtx8O0oLSc5h4kvWDPyIP6Dn58K0Hv2z9qvxxSvtFjXA7ES9X+ivjorTke1kearifhg==} + /@storybook/csf-plugin@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-4+6SUhp5sEJN9BY5RuxcFKvJbOqCzIUp9oHSSz36hkP07a4QH+SwxfEd0U7JRfmPpB63L+izywTzWhdADiAMOQ==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: - storybook: 8.4.1(prettier@3.3.3) - unplugin: 1.15.0 - transitivePeerDependencies: - - webpack-sources + storybook: 8.4.4(prettier@3.3.3) + unplugin: 1.16.0 dev: true /@storybook/csf@0.1.11: @@ -1399,691 +1656,183 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: true - /@storybook/instrumenter@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-MgrhrLVW78jqno+Dh9h9Es06Ja3867TlrIUd8B3K3U1hsCFUQuFKXJBuGjNJF8U0QJY/aSIRnAgUBurHdVkPcw==} - peerDependencies: - storybook: ^8.4.1 - dependencies: - '@storybook/global': 5.0.0 - '@vitest/utils': 2.1.4 - storybook: 8.4.1(prettier@3.3.3) - dev: true - - /@storybook/manager-api@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-7hb2k4zsp6lREGZbQ85QOlsC8EIMZXuY9Pg12VUgaZd+LmLjLuaqtrxRz3SwIgIWsRpFun9AHO0X37DmYNGTSw==} + /@storybook/manager-api@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-rmNPcbEyzakEHoaecUbhkW7WWOkyZ0z7ywH4d5/s0ZuQS57Px2N+ZLVgRJwYK+YNHiJYqDf1BTln9YJ/Mt1L6Q==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/preview-api@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-VdnESYfXCUasNtMd5s1Q8DPqMnAUdpROn8mE8UAD79Cy7DSNesI1q0SATuJqh5iYCT/+3Tpjfghsr2zC/mOh8w==} + /@storybook/preview-api@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-iZrWQcjRBqBHFdDXVxGpw6mHBZMCMYqhWXdyJ0d1S2y3PwcfOjkcXlQ1UiAenFHlA6dKrcYw8luKUQTL9bKReA==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/react-dom-shim@8.4.1(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.1): - resolution: {integrity: sha512-XhvuqkpqtcUjDA8XE4osq140SCddX3VHMdj+IwlrMdoSl32CAya01TH5YDDx6YMy6hM/QQbyVKaemG7RB/oU4Q==} + /@storybook/react-dom-shim@8.4.4(react-dom@18.3.1)(react@18.3.1)(storybook@8.4.4): + resolution: {integrity: sha512-kufv2FDK3kjADBo+/aKHsUn9T5E4p9IBAmCoIvXBGRDumPRds7Pt3MB4ODKlg+IumR7LMEq0jTJkn27ZRTuUmw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/test@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-najn9kCxB8NaHykhD7Fv+Iq0FnxmIJYOJlYiI8NMgVLwaSDFf6gnqAY6HHVPRqkhej8TuT1L2e2RxKqzWEB+mA==} + /@storybook/theming@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-iq4yt3Fx35ZV5owNC//E6G+QPV19xHHVN2Ugi3p7KOSFK3chuXX9mxZ1rfir+t+U30a5EPOEnlsY3/1LXn7aTw==} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 dependencies: - '@storybook/csf': 0.1.11 - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.1(storybook@8.4.1) - '@testing-library/dom': 10.4.0 - '@testing-library/jest-dom': 6.5.0 - '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/expect': 2.0.5 - '@vitest/spy': 2.0.5 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/theming@8.4.1(storybook@8.4.1): - resolution: {integrity: sha512-Sz24isryVFZaVahXkjgnCsMAQqQeeKg41AtLsldlYdesIo6fr5tc6/SkTUy+CYadK4Dkhqp+vVRDnwToYYRGhA==} + /@storybook/types@8.4.4(storybook@8.4.4): + resolution: {integrity: sha512-NUeIhecJ+i2ul/u/ftV+f9gBT2cUOuLjgy1a+l0UbJd7n3wwN17vX2zrrDkrGG3dp3edr8bWMGjAN3WERJje1A==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) dev: true - /@storybook/web-components-vite@8.4.1(lit@3.1.3)(storybook@8.4.1)(vite@5.4.10): - resolution: {integrity: sha512-Mne1LaQzcnDHHKz8BfWB86syyl/ReipvPdRt1/DeluFmfNzcwlSYrt2BfBMPKuKWzkyvsY4xaFdo0oF4GkG1aQ==} + /@storybook/web-components-vite@8.4.4(lit@3.2.1)(storybook@8.4.4)(vite@5.4.11): + resolution: {integrity: sha512-9iufvCB/Qp2pNEam8V471WVhlG1aQ/kwqyubJBraBjGeQ/eKobK+dt08OSF+8YKciqIX65CIZ4ubKlIYhBsBfA==} engines: {node: '>=18.0.0'} peerDependencies: - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: - '@storybook/builder-vite': 8.4.1(storybook@8.4.1)(vite@5.4.10) - '@storybook/web-components': 8.4.1(lit@3.1.3)(storybook@8.4.1) + '@storybook/builder-vite': 8.4.4(storybook@8.4.4)(vite@5.4.11) + '@storybook/web-components': 8.4.4(lit@3.2.1)(storybook@8.4.4) magic-string: 0.30.12 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.4(prettier@3.3.3) transitivePeerDependencies: - lit - vite - - webpack-sources dev: true - /@storybook/web-components@8.4.1(lit@3.1.3)(storybook@8.4.1): - resolution: {integrity: sha512-FSO9zXFtejb2YobnoSR9rtyu1WW6+pPz6j5Y9GxOh4RAyM+Euhi0HxiPDWxiBD16/vrxRwQIyh8EFbKYL1JyMg==} + /@storybook/web-components@8.4.4(lit@3.2.1)(storybook@8.4.4): + resolution: {integrity: sha512-L8z6Rg2u9LexleGq3uX7aDd+UZKx9T3ofUfS/yjC6UiSAh6JaBDs1EtpScjNvaXGh8oLdDVk0iQTxR2qCfqaBw==} engines: {node: '>=18.0.0'} peerDependencies: lit: ^2.0.0 || ^3.0.0 - storybook: ^8.4.1 + storybook: ^8.4.4 dependencies: - '@storybook/components': 8.4.1(storybook@8.4.1) + '@storybook/components': 8.4.4(storybook@8.4.4) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.1(storybook@8.4.1) - '@storybook/preview-api': 8.4.1(storybook@8.4.1) - '@storybook/theming': 8.4.1(storybook@8.4.1) - lit: 3.1.3 - storybook: 8.4.1(prettier@3.3.3) + '@storybook/manager-api': 8.4.4(storybook@8.4.4) + '@storybook/preview-api': 8.4.4(storybook@8.4.4) + '@storybook/theming': 8.4.4(storybook@8.4.4) + lit: 3.2.1 + storybook: 8.4.4(prettier@3.3.3) tiny-invariant: 1.3.3 ts-dedent: 2.2.0 dev: true - /@testing-library/dom@10.4.0: - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/runtime': 7.26.0 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - - /@testing-library/jest-dom@6.5.0: - resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - dependencies: - '@adobe/css-tools': 4.4.0 - aria-query: 5.3.2 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - lodash: 4.17.21 - redent: 3.0.0 - dev: true - - /@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0): - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: - '@testing-library/dom': 10.4.0 + '@types/ms': 0.7.34 dev: true - /@tootallnate/quickjs-emscripten@0.23.0: - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/accepts@1.3.7: - resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} - dependencies: - '@types/node': 22.4.1 + /@types/estree@1.0.6: + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} dev: true - /@types/aria-query@5.0.4: - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + /@types/gapi@0.0.47: + resolution: {integrity: sha512-/ZsLuq6BffMgbKMtZyDZ8vwQvTyKhKQ1G2K6VyWCgtHHhfSSXbk4+4JwImZiTjWNXfI2q1ZStAwFFHSkNoTkHA==} dev: true - /@types/babel__code-frame@7.0.6: - resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} + /@types/google.accounts@0.0.14: + resolution: {integrity: sha512-HqIVkVzpiLWhlajhQQd4rIV7czanFvXblJI2J1fSrL+VKQuQwwZ63m35D/mI0flsqKE6p/hNrAG0Yn4FD6JvNA==} dev: true - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 22.4.1 + /@types/google.picker@0.0.44: + resolution: {integrity: sha512-/YbgUisLlNH3boqxKWPNHFZnp1u53mPpe2OgkZlyG+obYKpuziToVlONR8btlY7spzLkbR428xoO447n7rS+JA==} dev: true - /@types/chai-dom@1.11.3: - resolution: {integrity: sha512-EUEZI7uID4ewzxnU7DJXtyvykhQuwe+etJ1wwOiJyQRTH/ifMWKX+ghiXkxCUvNJ6IQDodf0JXhuP6zZcy2qXQ==} + /@types/mdast@4.0.4: + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} dependencies: - '@types/chai': 4.3.16 + '@types/unist': 3.0.3 dev: true - /@types/chai@4.3.16: - resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + /@types/mdx@2.0.13: + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} dev: true - /@types/co-body@6.1.3: - resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==} - dependencies: - '@types/node': 22.4.1 - '@types/qs': 6.9.15 + /@types/memoizee@0.4.11: + resolution: {integrity: sha512-2gyorIBZu8GoDr9pYjROkxWWcFtHCquF7TVbN2I+/OvgZhnIGQS0vX5KJz4lXNKb8XOSfxFOSG5OLru1ESqLUg==} dev: true - /@types/command-line-args@5.2.3: - resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} + /@types/mocha@10.0.6: + resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 22.4.1 + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/content-disposition@0.5.8: - resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + /@types/node@22.4.1: + resolution: {integrity: sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg==} + dependencies: + undici-types: 6.19.8 dev: true - /@types/convert-source-map@2.0.3: - resolution: {integrity: sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==} + /@types/prop-types@15.7.13: + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} dev: true - /@types/cookies@0.9.0: - resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + /@types/react@18.3.12: + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} dependencies: - '@types/connect': 3.4.38 - '@types/express': 4.17.21 - '@types/keygrip': 1.0.6 - '@types/node': 22.4.1 + '@types/prop-types': 15.7.13 + csstype: 3.1.3 dev: true - /@types/debounce@1.2.4: - resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: true - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + /@types/ungap__structured-clone@1.2.0: + resolution: {integrity: sha512-ZoaihZNLeZSxESbk9PUAPZOlSpcKx81I1+4emtULDVmBLkYutTcMlCj2K9VNlf9EWODxdO6gkAqEaLorXwZQVA==} dev: true - /@types/estree@1.0.6: - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + /@types/unist@2.0.11: + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} dev: true - /@types/express-serve-static-core@4.19.0: - resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} - dependencies: - '@types/node': 22.4.1 - '@types/qs': 6.9.15 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 + /@types/unist@3.0.3: + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} dev: true - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.0 - '@types/qs': 6.9.15 - '@types/serve-static': 1.15.7 + /@types/uuid@9.0.8: + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} dev: true - /@types/gapi@0.0.47: - resolution: {integrity: sha512-/ZsLuq6BffMgbKMtZyDZ8vwQvTyKhKQ1G2K6VyWCgtHHhfSSXbk4+4JwImZiTjWNXfI2q1ZStAwFFHSkNoTkHA==} + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@types/google.accounts@0.0.14: - resolution: {integrity: sha512-HqIVkVzpiLWhlajhQQd4rIV7czanFvXblJI2J1fSrL+VKQuQwwZ63m35D/mI0flsqKE6p/hNrAG0Yn4FD6JvNA==} + /@web/config-loader@0.1.3: + resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} + engines: {node: '>=10.0.0'} + dependencies: + semver: 7.6.2 dev: true - /@types/google.picker@0.0.44: - resolution: {integrity: sha512-/YbgUisLlNH3boqxKWPNHFZnp1u53mPpe2OgkZlyG+obYKpuziToVlONR8btlY7spzLkbR428xoO447n7rS+JA==} - dev: true - - /@types/http-assert@1.5.5: - resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} - dev: true - - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true - - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true - - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: true - - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: true - - /@types/keygrip@1.0.6: - resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} - dev: true - - /@types/koa-compose@3.2.8: - resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} - dependencies: - '@types/koa': 2.15.0 - dev: true - - /@types/koa@2.15.0: - resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} - dependencies: - '@types/accepts': 1.3.7 - '@types/content-disposition': 0.5.8 - '@types/cookies': 0.9.0 - '@types/http-assert': 1.5.5 - '@types/http-errors': 2.0.4 - '@types/keygrip': 1.0.6 - '@types/koa-compose': 3.2.8 - '@types/node': 22.4.1 - dev: true - - /@types/mdx@2.0.13: - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - dev: true - - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true - - /@types/mocha@10.0.6: - resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} - dev: true - - /@types/node@22.4.1: - resolution: {integrity: sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg==} - dependencies: - undici-types: 6.19.8 - dev: true - - /@types/parse5@6.0.3: - resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - dev: true - - /@types/prop-types@15.7.13: - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - dev: true - - /@types/qs@6.9.15: - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: true - - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true - - /@types/react@18.3.12: - resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} - dependencies: - '@types/prop-types': 15.7.13 - csstype: 3.1.3 - dev: true - - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true - - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 22.4.1 - dev: true - - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 22.4.1 - '@types/send': 0.17.4 - dev: true - - /@types/sinon-chai@3.2.12: - resolution: {integrity: sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==} - dependencies: - '@types/chai': 4.3.16 - '@types/sinon': 17.0.3 - dev: true - - /@types/sinon@17.0.3: - resolution: {integrity: sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==} - dependencies: - '@types/sinonjs__fake-timers': 8.1.5 - dev: true - - /@types/sinonjs__fake-timers@8.1.5: - resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} - dev: true - - /@types/trusted-types@2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - - /@types/uuid@9.0.8: - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - dev: true - - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - dependencies: - '@types/node': 22.4.1 - dev: true - - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - requiresBuild: true - dependencies: - '@types/node': 22.4.1 - dev: true - optional: true - - /@vitest/expect@2.0.5: - resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - dependencies: - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 - chai: 5.1.1 - tinyrainbow: 1.2.0 - dev: true - - /@vitest/pretty-format@2.0.5: - resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - dependencies: - tinyrainbow: 1.2.0 - dev: true - - /@vitest/pretty-format@2.1.4: - resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} - dependencies: - tinyrainbow: 1.2.0 - dev: true - - /@vitest/spy@2.0.5: - resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - dependencies: - tinyspy: 3.0.2 - dev: true - - /@vitest/utils@2.0.5: - resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - dependencies: - '@vitest/pretty-format': 2.0.5 - estree-walker: 3.0.3 - loupe: 3.1.1 - tinyrainbow: 1.2.0 - dev: true - - /@vitest/utils@2.1.4: - resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} - dependencies: - '@vitest/pretty-format': 2.1.4 - loupe: 3.1.2 - tinyrainbow: 1.2.0 - dev: true - - /@web/browser-logs@0.4.0: - resolution: {integrity: sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==} - engines: {node: '>=18.0.0'} - dependencies: - errorstacks: 2.4.1 - dev: true - - /@web/config-loader@0.1.3: - resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} - engines: {node: '>=10.0.0'} - dependencies: - semver: 7.6.2 - dev: true - - /@web/config-loader@0.3.1: - resolution: {integrity: sha512-IYjHXUgSGGNpO3YJQ9foLcazbJlAWDdJGRe9be7aOhon0Nd6Na5JIOJAej7jsMu76fKHr4b4w2LfIdNQ4fJ8pA==} - engines: {node: '>=18.0.0'} - dev: true - - /@web/dev-server-core@0.7.2: - resolution: {integrity: sha512-Q/0jpF13Ipk+qGGQ+Yx/FW1TQBYazpkfgYHHo96HBE7qv4V4KKHqHglZcSUxti/zd4bToxX1cFTz8dmbTlb8JA==} - engines: {node: '>=18.0.0'} - dependencies: - '@types/koa': 2.15.0 - '@types/ws': 7.4.7 - '@web/parse5-utils': 2.1.0 - chokidar: 3.6.0 - clone: 2.1.2 - es-module-lexer: 1.5.2 - get-stream: 6.0.1 - is-stream: 2.0.1 - isbinaryfile: 5.0.2 - koa: 2.15.3 - koa-etag: 4.0.0 - koa-send: 5.0.1 - koa-static: 5.0.0 - lru-cache: 8.0.5 - mime-types: 2.1.35 - parse5: 6.0.1 - picomatch: 2.3.1 - ws: 7.5.9 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/dev-server-rollup@0.6.3: - resolution: {integrity: sha512-dzMwQRBk9Rhpfoo7vvQGvRP18sDELejJCwxsMdt509aLouIB6fviv0i87DJQWbXH24hBeq6+jSILI3JTtVaPZQ==} - engines: {node: '>=18.0.0'} - dependencies: - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.17.2) - '@web/dev-server-core': 0.7.2 - nanocolors: 0.2.13 - parse5: 6.0.1 - rollup: 4.17.2 - whatwg-url: 11.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/dev-server@0.4.5: - resolution: {integrity: sha512-R11sODOLFcm51f2uir51KE4QXRSYakDaeBeJdrUutPCmYUDEk86GjYBR3R1wslimnwGPIjhFDsXNMfASxYfgAQ==} - engines: {node: '>=18.0.0'} - hasBin: true - dependencies: - '@babel/code-frame': 7.24.2 - '@types/command-line-args': 5.2.3 - '@web/config-loader': 0.3.1 - '@web/dev-server-core': 0.7.2 - '@web/dev-server-rollup': 0.6.3 - camelcase: 6.3.0 - command-line-args: 5.2.1 - command-line-usage: 7.0.1 - debounce: 1.2.1 - deepmerge: 4.3.1 - ip: 2.0.1 - nanocolors: 0.2.13 - open: 8.4.2 - portfinder: 1.0.32 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/parse5-utils@2.1.0: - resolution: {integrity: sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==} - engines: {node: '>=18.0.0'} - dependencies: - '@types/parse5': 6.0.3 - parse5: 6.0.1 - dev: true - - /@web/test-runner-chrome@0.16.0: - resolution: {integrity: sha512-Edc6Y49aVB6k18S5IOj9OCX3rEf8F3jptIu0p95+imqxmcutFEh1GNmlAk2bQGnXS0U6uVY7Xbf61fiaXUQqhg==} - engines: {node: '>=18.0.0'} - dependencies: - '@web/test-runner-core': 0.13.2 - '@web/test-runner-coverage-v8': 0.8.0 - async-mutex: 0.4.0 - chrome-launcher: 0.15.2 - puppeteer-core: 22.8.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/test-runner-commands@0.9.0: - resolution: {integrity: sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==} - engines: {node: '>=18.0.0'} - dependencies: - '@web/test-runner-core': 0.13.2 - mkdirp: 1.0.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/test-runner-core@0.13.2: - resolution: {integrity: sha512-G0D3mv9jvR+5xILENchPP9v1ZjBf3QVlzarMLR5jedCNbgntzcayF0LeW5wh5uyafGZJH28cYm9jGrJvGipoPQ==} - engines: {node: '>=18.0.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@types/babel__code-frame': 7.0.6 - '@types/co-body': 6.1.3 - '@types/convert-source-map': 2.0.3 - '@types/debounce': 1.2.4 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@web/browser-logs': 0.4.0 - '@web/dev-server-core': 0.7.2 - chokidar: 3.6.0 - cli-cursor: 3.1.0 - co-body: 6.1.0 - convert-source-map: 2.0.0 - debounce: 1.2.1 - dependency-graph: 0.11.0 - globby: 11.1.0 - ip: 2.0.1 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.1.7 - log-update: 4.0.0 - nanocolors: 0.2.13 - nanoid: 3.3.7 - open: 8.4.2 - picomatch: 2.3.1 - source-map: 0.7.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/test-runner-coverage-v8@0.8.0: - resolution: {integrity: sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==} - engines: {node: '>=18.0.0'} - dependencies: - '@web/test-runner-core': 0.13.2 - istanbul-lib-coverage: 3.2.2 - lru-cache: 8.0.5 - picomatch: 2.3.1 - v8-to-istanbul: 9.2.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/test-runner-mocha@0.9.0: - resolution: {integrity: sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==} - engines: {node: '>=18.0.0'} - dependencies: - '@web/test-runner-core': 0.13.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/test-runner-playwright@0.11.0: - resolution: {integrity: sha512-s+f43DSAcssKYVOD9SuzueUcctJdHzq1by45gAnSCKa9FQcaTbuYe8CzmxA21g+NcL5+ayo4z+MA9PO4H+PssQ==} - engines: {node: '>=18.0.0'} - dependencies: - '@web/test-runner-core': 0.13.2 - '@web/test-runner-coverage-v8': 0.8.0 - playwright: 1.44.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@web/test-runner@0.18.2: - resolution: {integrity: sha512-jA+957ic31aG/f1mr1b+HYzf/uTu4QsvFhyVgTKi2s5YQYGBbtfzx9PnYi47MVC9K9OHRbW8cq2Urds9qwSU3w==} - engines: {node: '>=18.0.0'} - hasBin: true - dependencies: - '@web/browser-logs': 0.4.0 - '@web/config-loader': 0.3.1 - '@web/dev-server': 0.4.5 - '@web/test-runner-chrome': 0.16.0 - '@web/test-runner-commands': 0.9.0 - '@web/test-runner-core': 0.13.2 - '@web/test-runner-mocha': 0.9.0 - camelcase: 6.3.0 - command-line-args: 5.1.2 - command-line-usage: 7.0.1 - convert-source-map: 2.0.0 - diff: 5.2.0 - globby: 11.1.0 - nanocolors: 0.2.13 - portfinder: 1.0.32 - source-map: 0.7.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: true - - /acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 + /acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true dev: true /ansi-escapes@7.0.0: @@ -2103,13 +1852,6 @@ packages: engines: {node: '>=12'} dev: true - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -2117,11 +1859,6 @@ packages: color-convert: 2.0.1 dev: true - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -2139,17 +1876,6 @@ packages: picomatch: 2.3.1 dev: true - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - dependencies: - dequal: 2.0.3 - dev: true - - /aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - dev: true - /array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} @@ -2165,40 +1891,11 @@ packages: engines: {node: '>=8'} dev: true - /assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - dev: true - - /ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - dependencies: - tslib: 2.6.2 - dev: true - /ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} dependencies: - tslib: 2.6.2 - dev: true - - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true - - /async-mutex@0.4.0: - resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==} - dependencies: - tslib: 2.6.2 - dev: true - - /async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} - dependencies: - lodash: 4.17.21 + tslib: 2.8.1 dev: true /available-typed-arrays@1.0.7: @@ -2208,66 +1905,14 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /axe-core@4.9.1: - resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} - engines: {node: '>=4'} - dev: true - - /b4a@1.6.6: - resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} dev: true /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /bare-events@2.2.2: - resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==} - requiresBuild: true - dev: true - optional: true - - /bare-fs@2.3.0: - resolution: {integrity: sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==} - requiresBuild: true - dependencies: - bare-events: 2.2.2 - bare-path: 2.1.2 - bare-stream: 1.0.0 - dev: true - optional: true - - /bare-os@2.3.0: - resolution: {integrity: sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==} - requiresBuild: true - dev: true - optional: true - - /bare-path@2.1.2: - resolution: {integrity: sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==} - requiresBuild: true - dependencies: - bare-os: 2.3.0 - dev: true - optional: true - - /bare-stream@1.0.0: - resolution: {integrity: sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==} - requiresBuild: true - dependencies: - streamx: 2.16.1 - dev: true - optional: true - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - dev: true - /better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -2304,20 +1949,26 @@ packages: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} dev: true - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true - - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + /browserslist-to-esbuild@2.1.1(browserslist@4.24.0): + resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + browserslist: '*' dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + browserslist: 4.24.0 + meow: 13.2.0 dev: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} + /browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001669 + electron-to-chromium: 1.5.41 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) dev: true /bundle-require@4.1.0(esbuild@0.19.12): @@ -2330,24 +1981,11 @@ packages: load-tsconfig: 0.2.5 dev: true - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true - /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} dev: true - /cache-content-type@1.0.1: - resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} - engines: {node: '>= 6.0.0'} - dependencies: - mime-types: 2.1.35 - ylru: 1.4.0 - dev: true - /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -2359,58 +1997,12 @@ packages: set-function-length: 1.2.2 dev: true - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true - - /chai-a11y-axe@1.5.0: - resolution: {integrity: sha512-V/Vg/zJDr9aIkaHJ2KQu7lGTQQm5ZOH4u1k5iTMvIXuSVlSuUo0jcSpSqf9wUn9zl6oQXa4e4E0cqH18KOgKlQ==} - dependencies: - axe-core: 4.9.1 - dev: true - - /chai@5.1.1: - resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} - engines: {node: '>=12'} - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.1 - loupe: 3.1.1 - pathval: 2.0.0 - dev: true - - /chalk-template@0.4.0: - resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} - engines: {node: '>=12'} - dependencies: - chalk: 4.1.2 - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + /caniuse-lite@1.0.30001669: + resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} dev: true - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: true /chalk@5.3.0: @@ -2418,9 +2010,8 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true - /check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} dev: true /chokidar@3.5.2: @@ -2453,50 +2044,6 @@ packages: fsevents: 2.3.3 dev: true - /chromatic@11.16.3: - resolution: {integrity: sha512-bckarRbZ3M1BvsmhLqEMschuQPk2FlSD9cvy8383JwoVvaIqLr0dv1tI/DPM4LMuXOjTjeBSZZINVH9r3RMiiA==} - hasBin: true - peerDependencies: - '@chromatic-com/cypress': ^0.*.* || ^1.0.0 - '@chromatic-com/playwright': ^0.*.* || ^1.0.0 - peerDependenciesMeta: - '@chromatic-com/cypress': - optional: true - '@chromatic-com/playwright': - optional: true - dev: true - - /chrome-launcher@0.15.2: - resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} - engines: {node: '>=12.13.0'} - hasBin: true - dependencies: - '@types/node': 22.4.1 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 - transitivePeerDependencies: - - supports-color - dev: true - - /chromium-bidi@0.5.19(devtools-protocol@0.0.1273771): - resolution: {integrity: sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg==} - peerDependencies: - devtools-protocol: '*' - dependencies: - devtools-protocol: 0.0.1273771 - mitt: 3.0.1 - urlpattern-polyfill: 10.0.0 - zod: 3.22.4 - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - /cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -2512,40 +2059,6 @@ packages: string-width: 7.2.0 dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - dev: true - - /co-body@6.1.0: - resolution: {integrity: sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==} - dependencies: - inflation: 2.1.0 - qs: 6.12.1 - raw-body: 2.5.2 - type-is: 1.6.18 - dev: true - - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -2553,10 +2066,6 @@ packages: color-name: 1.1.4 dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true @@ -2575,26 +2084,6 @@ packages: typical: 4.0.0 dev: true - /command-line-args@5.2.1: - resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} - engines: {node: '>=4.0.0'} - dependencies: - array-back: 3.1.0 - find-replace: 3.0.0 - lodash.camelcase: 4.3.0 - typical: 4.0.0 - dev: true - - /command-line-usage@7.0.1: - resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} - engines: {node: '>=12.20.0'} - dependencies: - array-back: 6.2.2 - chalk-template: 0.4.0 - table-layout: 3.0.2 - typical: 7.1.1 - dev: true - /commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -2610,30 +2099,6 @@ packages: engines: {node: '>= 12.0.0'} dev: true - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true - - /cookies@0.9.1: - resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - keygrip: 1.1.0 - dev: true - /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -2643,10 +2108,6 @@ packages: which: 2.0.2 dev: true - /css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: true - /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true @@ -2655,28 +2116,17 @@ packages: resolution: {integrity: sha512-j59k0ExGCKA8T6Mzaq+7axc+KVHwpEphEERU7VZ99260npu/p/9kd+Db+I3cGKxHkM5y6q5gnlXn00mzRQkX2A==} dev: true - /data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} + /custom-elements-manifest@2.1.0: + resolution: {integrity: sha512-4TU+YhBQpCGYWonsZVTOPx6aYJXenOiSRT7TNGvDB7ipa4SZSJKed1DYXG77XKL9JFZ86sDSDVkwgv1mqw3V3A==} dev: true /debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: true - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -2686,8 +2136,8 @@ packages: ms: 2.1.2 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2698,8 +2148,8 @@ packages: ms: 2.1.2 dev: true - /debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2707,21 +2157,13 @@ packages: supports-color: optional: true dependencies: - ms: 2.1.2 + ms: 2.1.3 dev: true - /deep-eql@5.0.1: - resolution: {integrity: sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==} - engines: {node: '>=6'} - dev: true - - /deep-equal@1.0.1: - resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} - dev: true - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 dev: true /define-data-property@1.1.4: @@ -2738,51 +2180,15 @@ packages: engines: {node: '>=8'} dev: true - /degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - dev: true - - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true - - /dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dev: true - /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} - dev: true - - /devtools-protocol@0.0.1273771: - resolution: {integrity: sha512-QDbb27xcTVReQQW/GHJsdQqGKwYBE7re7gxehj467kKP2DKuYBUj6i2k5LRiAC66J1yZG/9gsxooz/s9pcm0Og==} - dev: true - - /diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 dev: true /dir-glob@3.0.1: @@ -2792,20 +2198,12 @@ packages: path-type: 4.0.0 dev: true - /dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dev: true - - /dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dev: true - /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + /electron-to-chromium@1.5.41: + resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==} dev: true /emoji-regex@10.3.0: @@ -2820,26 +2218,11 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true - - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - /environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} dev: true - /errorstacks@2.4.1: - resolution: {integrity: sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==} - dev: true - /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -2856,17 +2239,13 @@ packages: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-module-lexer@1.5.2: - resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} - dev: true - - /esbuild-register@3.6.0(esbuild@0.19.12): + /esbuild-register@3.6.0(esbuild@0.24.0): resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.6 - esbuild: 0.19.12 + debug: 4.3.7 + esbuild: 0.24.0 transitivePeerDependencies: - supports-color dev: true @@ -2930,38 +2309,81 @@ packages: '@esbuild/sunos-x64': 0.21.5 '@esbuild/win32-arm64': 0.21.5 '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - dev: true - - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + '@esbuild/win32-x64': 0.21.5 dev: true - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} + /esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 + requiresBuild: true optionalDependencies: - source-map: 0.6.1 + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + dev: true + + /esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + dev: true + + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} dev: true /esprima@4.0.1: @@ -2970,31 +2392,6 @@ packages: hasBin: true dev: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true - - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - dependencies: - '@types/estree': 1.0.5 - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true - /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true @@ -3029,22 +2426,8 @@ packages: strip-final-newline: 3.0.0 dev: true - /extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - dependencies: - debug: 4.3.4 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - dev: true - - /fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true /fast-glob@3.3.2: @@ -3064,17 +2447,6 @@ packages: reusify: 1.0.4 dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - dependencies: - pend: 1.2.0 - dev: true - - /filesize@10.1.6: - resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} - engines: {node: '>= 10.4.0'} - dev: true - /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3110,28 +2482,6 @@ packages: signal-exit: 4.1.0 dev: true - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true - - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3144,20 +2494,11 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - /get-east-asian-width@1.2.0: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} dev: true - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true - /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -3169,13 +2510,6 @@ packages: hasown: 2.0.2 dev: true - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -3186,16 +2520,14 @@ packages: engines: {node: '>=16'} dev: true - /get-uri@6.0.3: - resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} - engines: {node: '>= 14'} + /get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.3.4 - fs-extra: 11.2.0 - transitivePeerDependencies: - - supports-color + resolve-pkg-maps: 1.0.0 + dev: true + + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} dev: true /glob-parent@5.1.2: @@ -3251,16 +2583,6 @@ packages: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: @@ -3291,70 +2613,6 @@ packages: function-bind: 1.1.2 dev: true - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - - /http-assert@1.5.0: - resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} - engines: {node: '>= 0.8'} - dependencies: - deep-equal: 1.0.1 - http-errors: 1.8.1 - dev: true - - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: true - - /http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 1.5.0 - toidentifier: 1.0.1 - dev: true - - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: true - - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -3371,52 +2629,15 @@ packages: hasBin: true dev: true - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} dev: true - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - - /inflation@2.1.0: - resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} - engines: {node: '>= 0.8.0'} - dev: true - - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true - /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - dev: true - - /ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} - dev: true - /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} @@ -3432,24 +2653,11 @@ packages: binary-extensions: 2.3.0 dev: true - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.2 - dev: true - /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -3492,15 +2700,16 @@ packages: is-extglob: 2.1.1 dev: true - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -3525,37 +2734,10 @@ packages: is-docker: 2.2.1 dev: true - /isbinaryfile@5.0.2: - resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} - engines: {node: '>= 18.0.0'} - dev: true - /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: true - - /istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: true - /jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} @@ -3574,10 +2756,6 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true - /jsdoc-type-pratt-parser@4.1.0: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} @@ -3587,289 +2765,532 @@ packages: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + dev: true + + /lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /lint-staged@15.2.9: + resolution: {integrity: sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==} + engines: {node: '>=18.12.0'} + hasBin: true dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 + chalk: 5.3.0 + commander: 12.1.0 + debug: 4.3.6 + execa: 8.0.1 + lilconfig: 3.1.2 + listr2: 8.2.4 + micromatch: 4.0.7 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /listr2@8.2.4: + resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} + engines: {node: '>=18.0.0'} + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + dev: true + + /lit-element@4.1.1: + resolution: {integrity: sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit/reactive-element': 2.0.4 + lit-html: 3.2.1 + dev: true + + /lit-html@3.2.1: + resolution: {integrity: sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: true + + /lit@3.2.1: + resolution: {integrity: sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==} + dependencies: + '@lit/reactive-element': 2.0.4 + lit-element: 4.1.1 + lit-html: 3.2.1 + dev: true + + /load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + + /lodash.iteratee@4.7.0: + resolution: {integrity: sha512-yv3cSQZmfpbIKo4Yo45B1taEvxjNvcpF1CEOc0Y6dEyvhPIfEJE3twDwPgWTPQubcSgXyBwBKG6wpQvWMDOf6Q==} + dev: true + + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + + /log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + dev: true + + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: true + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + dev: true + + /magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true + + /map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} dev: true - /keygrip@1.1.0: - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} - engines: {node: '>= 0.6'} - dependencies: - tsscmp: 1.0.6 + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} dev: true - /koa-compose@4.1.0: - resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 dev: true - /koa-convert@2.0.0: - resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} - engines: {node: '>= 10'} + /mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} dependencies: - co: 4.6.0 - koa-compose: 4.1.0 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color dev: true - /koa-etag@4.0.0: - resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} + /mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} dependencies: - etag: 1.8.1 + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.1.0 dev: true - /koa-send@5.0.1: - resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} - engines: {node: '>= 8'} + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} dependencies: - debug: 4.3.4 - http-errors: 1.8.1 - resolve-path: 1.4.0 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: - supports-color dev: true - /koa-static@5.0.0: - resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} - engines: {node: '>= 7.6.0'} + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} dependencies: - debug: 3.2.7 - koa-send: 5.0.1 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color dev: true - /koa@2.15.3: - resolution: {integrity: sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==} - engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} dependencies: - accepts: 1.3.8 - cache-content-type: 1.0.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookies: 0.9.1 - debug: 4.3.4 - delegates: 1.0.0 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - fresh: 0.5.2 - http-assert: 1.5.0 - http-errors: 1.8.1 - is-generator-function: 1.0.10 - koa-compose: 4.1.0 - koa-convert: 2.0.0 - on-finished: 2.4.1 - only: 0.0.2 - parseurl: 1.3.3 - statuses: 1.5.0 - type-is: 1.6.18 - vary: 1.1.2 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.3 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color dev: true - /lighthouse-logger@1.4.2: - resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} dependencies: - debug: 2.6.9 - marky: 1.2.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color dev: true - /lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} - engines: {node: '>=14'} + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color dev: true - /lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 dev: true - /lint-staged@15.2.9: - resolution: {integrity: sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==} - engines: {node: '>=18.12.0'} - hasBin: true + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} dependencies: - chalk: 5.3.0 - commander: 12.1.0 - debug: 4.3.6 - execa: 8.0.1 - lilconfig: 3.1.2 - listr2: 8.2.4 - micromatch: 4.0.7 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.5.0 - transitivePeerDependencies: - - supports-color + '@types/mdast': 4.0.4 dev: true - /listr2@8.2.4: - resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} - engines: {node: '>=18.0.0'} + /mdast-util-toc@7.1.0: + resolution: {integrity: sha512-2TVKotOQzqdY7THOdn2gGzS9d1Sdd66bvxUyw3aNpWfcPXCLYSJCCgfPy30sEtuzkDraJgqF35dzgmz6xlvH/w==} dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.0 + '@types/mdast': 4.0.4 + '@types/ungap__structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.0 + github-slugger: 2.0.0 + mdast-util-to-string: 4.0.0 + unist-util-is: 6.0.0 + unist-util-visit: 5.0.0 dev: true - /lit-element@4.0.5: - resolution: {integrity: sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q==} + /memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} dependencies: - '@lit-labs/ssr-dom-shim': 1.2.0 - '@lit/reactive-element': 2.0.4 - lit-html: 3.1.3 + map-or-similar: 1.5.0 + dev: true + + /meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true - /lit-html@3.1.3: - resolution: {integrity: sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==} + /micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} dependencies: - '@types/trusted-types': 2.0.7 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true - /lit@3.1.3: - resolution: {integrity: sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==} + /micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} dependencies: - '@lit/reactive-element': 2.0.4 - lit-element: 4.0.5 - lit-html: 3.1.3 + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true - /load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /lodash.assignwith@4.2.0: - resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} + /micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + /micromark-extension-gfm-table@2.1.0: + resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + dependencies: + micromark-util-types: 2.0.0 dev: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.0 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} dependencies: - ansi-escapes: 7.0.0 - cli-cursor: 5.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} dependencies: - js-tokens: 4.0.0 + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} dependencies: - get-func-name: 2.0.2 + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 dev: true - /loupe@3.1.2: - resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + /micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} dependencies: - yallist: 4.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + dependencies: + micromark-util-symbol: 2.0.0 dev: true - /lru-cache@8.0.5: - resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} - engines: {node: '>=16.14'} + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /magic-string@0.30.12: - resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + micromark-util-symbol: 2.0.0 dev: true - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} dependencies: - semver: 7.6.2 + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 dev: true - /map-or-similar@1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: true + + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} dev: true - /marky@1.2.5: - resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + dependencies: + micromark-util-symbol: 2.0.0 dev: true - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 dev: true - /memoizerific@1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} dependencies: - map-or-similar: 1.5.0 + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + /micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: true + + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: true + + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.6 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color dev: true /micromatch@4.0.5: @@ -3888,18 +3309,6 @@ packages: picomatch: 2.3.1 dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true - /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -3915,11 +3324,6 @@ packages: engines: {node: '>=18'} dev: true - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true - /minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -3927,40 +3331,19 @@ packages: brace-expansion: 2.0.1 dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - /minipass@7.1.1: resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} engines: {node: '>=16 || 14 >=14.17'} 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 - dependencies: - minimist: 1.2.8 - dev: true - - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true - - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true - /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -3969,24 +3352,14 @@ packages: thenify-all: 1.6.0 dev: true - /nanocolors@0.2.13: - resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} - dev: true - /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true - - /netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} dev: true /normalize-path@3.0.0: @@ -4013,23 +3386,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true - - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -4051,10 +3407,6 @@ packages: mimic-function: 5.0.1 dev: true - /only@0.0.2: - resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} - dev: true - /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -4064,44 +3416,6 @@ packages: is-wsl: 2.2.0 dev: true - /pac-proxy-agent@7.0.1: - resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} - engines: {node: '>= 14'} - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.1 - debug: 4.3.4 - get-uri: 6.0.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.3 - transitivePeerDependencies: - - supports-color - dev: true - - /pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - dev: true - - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true - - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4112,10 +3426,6 @@ packages: engines: {node: '>=12'} dev: true - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - /path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -4129,19 +3439,6 @@ packages: engines: {node: '>=8'} dev: true - /pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - dev: true - - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true - - /picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - dev: true - /picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} dev: true @@ -4162,22 +3459,6 @@ packages: engines: {node: '>= 6'} dev: true - /playwright-core@1.44.0: - resolution: {integrity: sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==} - engines: {node: '>=16'} - hasBin: true - dev: true - - /playwright@1.44.0: - resolution: {integrity: sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==} - engines: {node: '>=16'} - hasBin: true - dependencies: - playwright-core: 1.44.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /polished@4.3.1: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} @@ -4185,17 +3466,6 @@ packages: '@babel/runtime': 7.26.0 dev: true - /portfinder@1.0.32: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} - dependencies: - async: 2.6.4 - debug: 3.2.7 - mkdirp: 0.5.6 - transitivePeerDependencies: - - supports-color - dev: true - /possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -4217,8 +3487,8 @@ packages: yaml: 2.4.2 dev: true - /postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + /postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -4232,25 +3502,11 @@ packages: hasBin: true dev: true - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: true - /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: true - /proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} dependencies: @@ -4259,88 +3515,15 @@ packages: signal-exit: 3.0.7 dev: true - /proxy-agent@6.4.0: - resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 - lru-cache: 7.18.3 - pac-proxy-agent: 7.0.1 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.3 - transitivePeerDependencies: - - supports-color - dev: true - - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true - /puppeteer-core@22.8.2: - resolution: {integrity: sha512-Gg9jUdJeF+UDbYPhwD602ky1LeS+AXDksl6sludrti1b7Sv/U4ZGY1LFyejarkIBCSHiPWL9SngXKCNcdZWBgQ==} - engines: {node: '>=18'} - dependencies: - '@puppeteer/browsers': 2.2.3 - chromium-bidi: 0.5.19(devtools-protocol@0.0.1273771) - debug: 4.3.4 - devtools-protocol: 0.0.1273771 - ws: 8.17.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.6 - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - dev: true - - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: true - - /react-confetti@6.1.0(react@18.3.1): - resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} - engines: {node: '>=10.18'} - peerDependencies: - react: ^16.3.0 || ^17.0.1 || ^18.0.0 - dependencies: - react: 18.3.1 - tween-functions: 1.2.0 - dev: true - + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + /react-dom@18.3.1(react@18.3.1): resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -4351,10 +3534,6 @@ packages: scheduler: 0.23.2 dev: true - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: true - /react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -4377,54 +3556,92 @@ packages: esprima: 4.0.1 source-map: 0.6.1 tiny-invariant: 1.3.3 - tslib: 2.6.2 + tslib: 2.8.1 dev: true - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /remark-behead@3.1.0: + resolution: {integrity: sha512-rKns7st91lgppaD5YaH58O4ECFVXTVnkyYQBuCw4ISRE2TFK/iVySMaKbvV2pVbUVIjAaDciugrTI/tyuPOlWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 + unist-util-find: 1.0.4 + unist-util-find-all-after: 4.0.1 + unist-util-find-all-before: 4.0.1 + unist-util-find-all-between: 2.1.0 + unist-util-visit: 4.1.2 dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + /remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color dev: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + /remark-github@12.0.0: + resolution: {integrity: sha512-ByefQKFN184LeiGRCabfl7zUJsdlMYWEhiLX1gpmQ11yFg6xSuOTW7LVCv0oc1x+YvUMJW23NU36sJX2RWGgvg==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-find-and-replace: 3.0.1 + mdast-util-to-string: 4.0.0 + to-vfile: 8.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 dev: true - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color dev: true - /resolve-path@1.4.0: - resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} - engines: {node: '>= 0.8'} + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} dependencies: - http-errors: 1.6.3 - path-is-absolute: 1.0.1 + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 dev: true - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + /remark-toc@9.0.0: + resolution: {integrity: sha512-KJ9txbo33GjDAV1baHFze7ij4G8c7SGYoY8Kzsm2gzFpbhL/bSoVpMMzGa3vrNDSWASNd/3ppAqL7cP2zD6JIA==} dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + '@types/mdast': 4.0.4 + mdast-util-toc: 7.1.0 dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + /remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true /restore-cursor@5.1.0: @@ -4475,31 +3692,31 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.24.3: - resolution: {integrity: sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==} + /rollup@4.27.2: + resolution: {integrity: sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.24.3 - '@rollup/rollup-android-arm64': 4.24.3 - '@rollup/rollup-darwin-arm64': 4.24.3 - '@rollup/rollup-darwin-x64': 4.24.3 - '@rollup/rollup-freebsd-arm64': 4.24.3 - '@rollup/rollup-freebsd-x64': 4.24.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.3 - '@rollup/rollup-linux-arm-musleabihf': 4.24.3 - '@rollup/rollup-linux-arm64-gnu': 4.24.3 - '@rollup/rollup-linux-arm64-musl': 4.24.3 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.3 - '@rollup/rollup-linux-riscv64-gnu': 4.24.3 - '@rollup/rollup-linux-s390x-gnu': 4.24.3 - '@rollup/rollup-linux-x64-gnu': 4.24.3 - '@rollup/rollup-linux-x64-musl': 4.24.3 - '@rollup/rollup-win32-arm64-msvc': 4.24.3 - '@rollup/rollup-win32-ia32-msvc': 4.24.3 - '@rollup/rollup-win32-x64-msvc': 4.24.3 + '@rollup/rollup-android-arm-eabi': 4.27.2 + '@rollup/rollup-android-arm64': 4.27.2 + '@rollup/rollup-darwin-arm64': 4.27.2 + '@rollup/rollup-darwin-x64': 4.27.2 + '@rollup/rollup-freebsd-arm64': 4.27.2 + '@rollup/rollup-freebsd-x64': 4.27.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.27.2 + '@rollup/rollup-linux-arm-musleabihf': 4.27.2 + '@rollup/rollup-linux-arm64-gnu': 4.27.2 + '@rollup/rollup-linux-arm64-musl': 4.27.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.27.2 + '@rollup/rollup-linux-riscv64-gnu': 4.27.2 + '@rollup/rollup-linux-s390x-gnu': 4.27.2 + '@rollup/rollup-linux-x64-gnu': 4.27.2 + '@rollup/rollup-linux-x64-musl': 4.27.2 + '@rollup/rollup-win32-arm64-msvc': 4.27.2 + '@rollup/rollup-win32-ia32-msvc': 4.27.2 + '@rollup/rollup-win32-x64-msvc': 4.27.2 fsevents: 2.3.3 dev: true @@ -4509,30 +3726,20 @@ packages: queue-microtask: 1.2.3 dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - /scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: loose-envify: 1.4.0 dev: true - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: true - /semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true dev: true @@ -4549,14 +3756,6 @@ packages: has-property-descriptors: 1.0.2 dev: true - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true - /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4569,16 +3768,6 @@ packages: engines: {node: '>=8'} dev: true - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - dev: true - /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -4593,15 +3782,6 @@ packages: engines: {node: '>=8'} dev: true - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4618,30 +3798,6 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true - - /socks-proxy-agent@8.0.3: - resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.4 - socks: 2.8.3 - transitivePeerDependencies: - - supports-color - dev: true - - /socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - dev: true - /source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -4653,11 +3809,6 @@ packages: requiresBuild: true dev: true - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true - /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -4665,22 +3816,8 @@ packages: whatwg-url: 7.1.0 dev: true - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true - - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true - - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true - - /storybook@8.4.1(prettier@3.3.3): - resolution: {integrity: sha512-0tfFIFghjho9FtnFoiJMoxhcs2iIdvEF81GTSVnTsDVJrYA84nB+FxN3UY1fT0BcQ8BFlbf+OhSjZL7ufqqWKA==} + /storybook@8.4.4(prettier@3.3.3): + resolution: {integrity: sha512-xBOq3q/MuUUg3zM0imMMaK5ziKq3TO388jsnaiemJ4Uf0ZGwcHjM8HDBCDt0s5/CfsOQ49zo1ouZ3aNlu0qsUg==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -4688,7 +3825,7 @@ packages: prettier: optional: true dependencies: - '@storybook/core': 8.4.1(prettier@3.3.3) + '@storybook/core': 8.4.4(prettier@3.3.3) prettier: 3.3.3 transitivePeerDependencies: - bufferutil @@ -4696,20 +3833,6 @@ packages: - utf-8-validate dev: true - /stream-read-all@3.0.1: - resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} - engines: {node: '>=10'} - dev: true - - /streamx@2.16.1: - resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==} - dependencies: - fast-fifo: 1.3.2 - queue-tick: 1.0.1 - optionalDependencies: - bare-events: 2.2.2 - dev: true - /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4766,13 +3889,6 @@ packages: engines: {node: '>=12'} dev: true - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - dependencies: - min-indent: 1.0.1 - dev: true - /sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -4787,57 +3903,6 @@ packages: ts-interface-checker: 0.1.13 dev: true - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /table-layout@3.0.2: - resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} - engines: {node: '>=12.17'} - hasBin: true - dependencies: - '@75lb/deep-merge': 1.1.1 - array-back: 6.2.2 - command-line-args: 5.2.1 - command-line-usage: 7.0.1 - stream-read-all: 3.0.1 - typical: 7.1.1 - wordwrapjs: 5.1.0 - dev: true - - /tar-fs@3.0.5: - resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} - dependencies: - pump: 3.0.0 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 2.3.0 - bare-path: 2.1.2 - dev: true - - /tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - dependencies: - b4a: 1.6.6 - fast-fifo: 1.3.2 - streamx: 2.16.1 - dev: true - /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -4851,24 +3916,10 @@ packages: any-promise: 1.3.0 dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - /tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} dev: true - /tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} - engines: {node: '>=14.0.0'} - dev: true - - /tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} - dev: true - /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4876,9 +3927,10 @@ packages: is-number: 7.0.0 dev: true - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} + /to-vfile@8.0.0: + resolution: {integrity: sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==} + dependencies: + vfile: 6.0.3 dev: true /tr46@1.0.1: @@ -4887,18 +3939,15 @@ packages: punycode: 2.3.1 dev: true - /tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} - dependencies: - punycode: 2.3.1 - dev: true - /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + dev: true + /ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -4908,17 +3957,8 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-simple-type@2.0.0-next.0: - resolution: {integrity: sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg==} - dev: true - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true - - /tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} + /tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} dev: true /tsup@8.0.2(typescript@5.6.3): @@ -4960,13 +4000,15 @@ packages: - ts-node dev: true - /tween-functions@1.2.0: - resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} - dev: true - - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + /tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 dev: true /type-fest@2.19.0: @@ -4974,20 +4016,6 @@ packages: engines: {node: '>=12.20'} dev: true - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: true - - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -5005,47 +4033,135 @@ packages: engines: {node: '>=8'} dev: true - /typical@7.1.1: - resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} - engines: {node: '>=12.17'} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} dev: true - /unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + /unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} dependencies: - buffer: 5.7.1 - through: 2.3.8 + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 dev: true - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + /unist-util-find-all-after@4.0.1: + resolution: {integrity: sha512-AO8++e6HJfwNoTrqkV7xSeW65e6uSsLRQST/9LWi8FmFSz1gS7TBd+DkL/CYiElsSZIQgT4J5U54v5/kJX5Nqg==} + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + dev: true + + /unist-util-find-all-before@4.0.1: + resolution: {integrity: sha512-xg4UHtZ6VbcjQbfDtmLZch6kQYQFF3nfaW05Ie3+t2UectzeqSx/iqLmh/wWogwU+YDWnD40PjZKK7ORmCma+g==} + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + dev: true + + /unist-util-find-all-between@2.1.0: + resolution: {integrity: sha512-OCCUtDD8UHKeODw3TPXyFDxPCbpgBzbGTTaDpR68nvxkwiVcawBqMVrokfBMvUi7ij2F5q7S4s4Jq5dvkcBt+w==} + engines: {node: '>=10'} + dependencies: + unist-util-find: 1.0.4 + unist-util-is: 4.1.0 + dev: true + + /unist-util-find@1.0.4: + resolution: {integrity: sha512-T5vI7IkhroDj7KxAIy057VbIeGnCXfso4d4GoUsjbAmDLQUkzAeszlBtzx1+KHgdsYYBygaqUBvrbYCfePedZw==} + dependencies: + lodash.iteratee: 4.7.0 + unist-util-visit: 2.0.3 + dev: true + + /unist-util-is@4.1.0: + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + dev: true + + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.11 + dev: true + + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + 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@3.1.1: + resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 4.1.0 + dev: true + + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + 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@2.0.3: + resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 4.1.0 + unist-util-visit-parents: 3.1.1 dev: true - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 dev: true - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + /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 - /unplugin@1.15.0: - resolution: {integrity: sha512-jTPIs63W+DUEDW207ztbaoO7cQ4p5aVaB823LSlxpsFEU3Mykwxf3ZGC/wzxFJeZlASZYgVrWeo7LgOrqJZ8RA==} + /unplugin@1.16.0: + resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} engines: {node: '>=14.0.0'} - peerDependencies: - webpack-sources: ^3 - peerDependenciesMeta: - webpack-sources: - optional: true dependencies: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 dev: true - /urlpattern-polyfill@10.0.0: - resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + /update-browserslist-db@1.1.1(browserslist@4.24.0): + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.1 dev: true /util@0.12.5: @@ -5063,22 +4179,22 @@ packages: hasBin: true dev: true - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 dev: true - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + /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@5.4.10(@types/node@22.4.1): - resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} + /vite@5.4.11(@types/node@22.4.1): + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -5110,43 +4226,20 @@ packages: dependencies: '@types/node': 22.4.1 esbuild: 0.21.5 - postcss: 8.4.47 - rollup: 4.24.3 + postcss: 8.4.49 + rollup: 4.27.2 optionalDependencies: fsevents: 2.3.3 dev: true - /web-component-analyzer@2.0.0: - resolution: {integrity: sha512-UEvwfpD+XQw99sLKiH5B1T4QwpwNyWJxp59cnlRwFfhUW6JsQpw5jMeMwi7580sNou8YL3kYoS7BWLm+yJ/jVQ==} - hasBin: true - dependencies: - fast-glob: 3.3.2 - ts-simple-type: 2.0.0-next.0 - typescript: 5.2.2 - yargs: 17.7.2 - dev: true - /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - dev: true - /webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} dev: true - /whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} - engines: {node: '>=12'} - dependencies: - tr46: 3.0.0 - webidl-conversions: 7.0.0 - dev: true - /whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: @@ -5186,20 +4279,6 @@ packages: proper-lockfile: 4.1.2 dev: true - /wordwrapjs@5.1.0: - resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} - engines: {node: '>=12.17'} - dev: true - - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5227,25 +4306,8 @@ packages: strip-ansi: 7.1.0 dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + /ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5257,15 +4319,6 @@ packages: optional: true dev: true - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - /yaml@2.4.2: resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} engines: {node: '>= 14'} @@ -5278,36 +4331,6 @@ packages: hasBin: true dev: true - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true - - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.1.2 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: true - - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - dev: true - - /ylru@1.4.0: - resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} - engines: {node: '>= 4.0.0'} - dev: true - - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: true diff --git a/scripts/docs.ts b/scripts/docs.ts new file mode 100644 index 0000000..916b917 --- /dev/null +++ b/scripts/docs.ts @@ -0,0 +1,171 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import fs from "node:fs"; +import { fromMarkdown } from "mdast-util-from-markdown"; +import prettier from "prettier"; +import { remark } from "remark"; +import remarkBehead from "remark-behead"; +import remarkGfm from "remark-gfm"; +import remarkGithub from "remark-github"; +import remarkToc from "remark-toc"; +import type { Node } from "unist"; +import { + h1, + h2, + inlineCode, + table, + tableCell, + tableRow, + text, +} from "./lib/builder"; + +import type { ClassMethod } from "custom-elements-manifest"; +import type { + CustomElementDeclaration, + Declaration, + Package, +} from "custom-elements-manifest/schema"; +import type { Root } from "mdast"; +import * as CELLS from "./lib/cells"; + +const START = ""; +const END = ""; + +const manifest = JSON.parse( + fs.readFileSync("custom-elements.json", "utf-8"), +) as Package; + +function isCustomElementDeclaration( + declaration?: Declaration, +): declaration is CustomElementDeclaration { + return (declaration as CustomElementDeclaration)?.customElement === true; +} + +function makeTable(title, cells: CELLS.CELL[], rows: T[]): Node[] { + return [ + h2(text(title)), + table( + tableRow(...cells.map((header) => tableCell(text(header.heading)))), + ...rows.map((row) => tableRow(...cells.map((cell) => cell.get(row)))), + ), + ]; +} + +const customElements = manifest.modules + .flatMap((module) => module.declarations) + .filter(isCustomElementDeclaration) + .sort((a, b) => a.tagName?.localeCompare(b.tagName ?? "") ?? 0); + +const nodes: Node[] = []; + +for (const element of customElements) { + nodes.push(h1(inlineCode(`<${element.tagName}/>`))); + + nodes.push(fromMarkdown(element.description ?? "")); + nodes.push( + ...makeTable( + "Attributes", + [CELLS.NAME, CELLS.TYPE, CELLS.DESCRIPTION], + element.attributes ?? [], + ), + ); + const events = (element.events ?? []).filter((e) => e.description); + if (events.length > 0) { + nodes.push( + ...makeTable( + "Events", + [CELLS.NAME, CELLS.TYPE, CELLS.DESCRIPTION], + events, + ), + ); + } + const slots = (element.slots ?? []).filter((s) => s.description); + + if (slots.length > 0) { + nodes.push( + ...makeTable("Slots", [CELLS.SLOT_NAME, CELLS.DESCRIPTION], slots), + ); + } + const publicMembers = + element.members?.filter((member) => member.privacy === "public") ?? []; + + const methods: ClassMethod[] = + publicMembers.filter( + (member): member is ClassMethod => member.kind === "method", + ) ?? []; + + const properties: ClassMethod[] = + publicMembers.filter( + (member): member is ClassMethod => member.kind === "field", + ) ?? []; + + if (properties.length > 0) { + nodes.push( + ...makeTable( + "Properties", + [CELLS.NAME, CELLS.TYPE, CELLS.DESCRIPTION], + properties, + ), + ); + } + + if (methods.length > 0) { + nodes.push( + ...makeTable( + "Methods", + [CELLS.NAME, CELLS.DESCRIPTION, CELLS.RETURN], + methods, + ), + ); + } +} +const processor = remark().use(remarkGfm); + +const docs = processor.stringify( + (await processor.use(remarkBehead, { minDepth: 3 }).run({ + type: "root", + children: nodes, + } as Root)) as Root, +); + +const readme = fs.readFileSync("README.md", "utf-8"); +const startIdx = readme.indexOf(START) + START.length; +const endIdx = readme.indexOf(END); + +let ast = remark() + .use(remarkGfm) + .parse( + `${readme.substring(0, startIdx)}\n${docs}\n${readme.substring(endIdx)}`, + ); + +ast = (await remark() + .use(remarkToc, { heading: "Index", tight: true, maxDepth: 3 }) + .use(remarkGithub, { + repository: "googleworkspace/drive-picker-element", + }) + .run(ast)) as Root; + +const markdown = remark() + .use(remarkGfm) + .stringify(ast as Root); + +fs.writeFileSync( + "README.md", + await prettier.format(markdown, { + parser: "markdown", + }), +); diff --git a/scripts/lib/builder.ts b/scripts/lib/builder.ts new file mode 100644 index 0000000..44efabe --- /dev/null +++ b/scripts/lib/builder.ts @@ -0,0 +1,82 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { + Heading, + Html, + InlineCode, + Paragraph, + PhrasingContent, + Text, +} from "mdast"; +import type { Table, TableCell, TableRow } from "mdast"; + +export const inlineCode = (value: string): InlineCode => ({ + type: "inlineCode", + value, +}); + +export const text = (value: string): Text => ({ + type: "text", + value, +}); + +export const table = (...children: TableRow[]): Table => ({ + type: "table", + children, +}); + +export const tableRow = (...children: TableCell[]): TableRow => ({ + type: "tableRow", + children, +}); + +export const tableCell = (...children: PhrasingContent[]): TableCell => ({ + type: "tableCell", + children, +}); + +export const paragraph = (...children: PhrasingContent[]): Paragraph => ({ + type: "paragraph", + children, +}); + +const heading = ( + depth: 1 | 2 | 3 | 4 | 5 | 6, + ...children: PhrasingContent[] +): Heading => ({ + type: "heading", + depth, + children, +}); + +export const h1 = (...children: PhrasingContent[]): Heading => + heading(1, ...children); +export const h2 = (...children: PhrasingContent[]): Heading => + heading(2, ...children); +export const h3 = (...children: PhrasingContent[]): Heading => + heading(3, ...children); +export const h4 = (...children: PhrasingContent[]): Heading => + heading(4, ...children); +export const h5 = (...children: PhrasingContent[]): Heading => + heading(5, ...children); +export const h6 = (...children: PhrasingContent[]): Heading => + heading(6, ...children); + +export const html = (value: string): Html => ({ + type: "html", + value, +}); diff --git a/scripts/lib/cells.ts b/scripts/lib/cells.ts new file mode 100644 index 0000000..ebf73c3 --- /dev/null +++ b/scripts/lib/cells.ts @@ -0,0 +1,79 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { + Attribute, + ClassField, + ClassMember, + ClassMethod, +} from "custom-elements-manifest/schema"; +import type { TableCell } from "mdast"; +import { fromMarkdown } from "mdast-util-from-markdown"; +import { inlineCode, tableCell, text } from "./builder"; + +export type CELL = { + heading: string; + get: (x: T) => TableCell; +}; + +const formatParam = (param: { name?: string; type?: { text: string } }) => + `${param?.name}${param?.type?.text ? `: ${param.type.text}` : ""}`; + +export const DEFAULT: CELL = { + heading: "Default", + get: (x) => tableCell(inlineCode(x.default ?? "")), +}; +export const NAME: CELL = { + heading: "Name", + get: (x) => tableCell(inlineCode(x.name)), +}; +export const SLOT_NAME: CELL = { + ...NAME, + get: (x) => tableCell(x.name ? inlineCode(x.name) : text("default")), +}; + +export const ATTR_FIELD: CELL = { + heading: "Field", + get: (x) => tableCell(text(x.fieldName ?? "")), +}; +export const INHERITANCE: CELL = { + heading: "Inherited From", + get: (x) => tableCell(text(x.inheritedFrom?.name ?? "")), +}; + +export const RETURN: CELL = { + heading: "Return", + get: (x) => tableCell(inlineCode(x.return?.type?.text ?? "")), +}; +export const TYPE: CELL = { + heading: "Type", + get: (x) => tableCell(inlineCode(x.type?.text ?? "")), +}; + +export const DESCRIPTION: CELL = { + heading: "Description", + get: (x) => { + const description = x.description ?? ""; + const root = fromMarkdown(description); + const node = root.children[0]; + + if (node?.type === "paragraph") { + return tableCell(...node.children); + } + + return tableCell(text(description)); + }, +}; diff --git a/src/drive-picker/drive-picker-docs-view-element.ts b/src/drive-picker/drive-picker-docs-view-element.ts index 34a8088..2683074 100644 --- a/src/drive-picker/drive-picker-docs-view-element.ts +++ b/src/drive-picker/drive-picker-docs-view-element.ts @@ -13,82 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { setBoolAttrWithDefault } from "../utils"; -import { LitElement } from "lit"; -import { customElement, property } from "lit/decorators.js"; - -export type ViewId = keyof typeof google.picker.ViewId; -type DocsViewMode = keyof typeof google.picker.DocsViewMode; - -export interface DrivePickerDocsViewElementProps { - /** - * Indicates whether to enable drives in the view. - */ - enableDrives?: boolean; - - /** - * Indicates whether to include folders in the view. - */ - includeFolders?: boolean; - - /** - * The MIME types to filter the view by. - * - * @see https://developers.google.com/drive/api/v3/mime-types - */ - mimeTypes?: string; - - /** - * The mode of the view. This should be one of the values of the `google.picker.DocsViewMode` enum. - * - * @see https://developers.google.com/drive/picker/reference#docs-view-mode - */ - mode?: DocsViewMode; - - /** - * Indicates whether to show only files owned by the user in the view. - */ - ownedByMe?: boolean; - - /** - * The ID of the parent folder to restrict the view to. - */ - parent?: string; - - /** - * The query string to filter the view by. - * - * @see https://developers.google.com/drive/api/v3/search-files - */ - query?: string; - - /** - * Indicates whether selecting folders is enabled in the view. - */ - selectFolderEnabled?: boolean; - - /** - * Indicates whether to show only starred files in the view. - */ - starred?: boolean; - - /** - * The ID of the view. This should be one of the values of the - * `google.picker.ViewId` enum. - * - * Note: The default value is `DOCS` which corresponds to the - * `google.picker.ViewId.DOCS` enum value in the Google Drive Picker API and - * corresponsds to all Google Drive document types. - * - * @see https://developers.google.com/drive/picker/reference#view-id - */ - viewId?: ViewId; -} +type ViewId = keyof typeof google.picker.ViewId; /** - * The `drive-picker-docs-view` element is used to define a view for the Google Drive Picker. + * The `drive-picker-docs-view` element is used to define a [`google.picker.DocsView`](https://developers.google.com/drive/picker/reference/picker.docsview). * * @element drive-picker-docs-view + * @attr {"default"|"true"|"false"} enable-drives - Whether to allow the user to select files from shared drives. + * @attr {"default"|"true"|"false"} include-folders - Whether to include folders in the view. + * @attr {string} mime-types - A comma-separated list of MIME types to filter the view. + * @attr {string} mode - The mode of the view. + * @attr {"default"|"true"|"false"} owned-by-me - Whether to show files owned by the user. + * @attr {string} parent - The ID of the folder to view. + * @attr {string} query - The query string to filter the view. + * @attr {"default"|"true"|"false"} select-folder-enabled - Whether to allow the user to select folders. + * @attr {"default"|"true"|"false"} starred - Whether to show starred files. + * @attr {string} view-id - The `keyof typeof google.picker.ViewId`. For example, `"DOCS"`, which is equivalent to `google.picker.ViewId.DOCS`. * * @example * @@ -96,98 +38,70 @@ export interface DrivePickerDocsViewElementProps { * * ``` * - * @see https://developers.google.com/drive/picker/reference#docs-view + * @see https://developers.google.com/drive/picker/reference/picker.docsview * */ -@customElement("drive-picker-docs-view") -export class DrivePickerDocsViewElement - extends LitElement - implements DrivePickerDocsViewElementProps -{ - @property({ type: String }) - label?: string; - - @property({ type: String, attribute: "view-id" }) - viewId: ViewId = "DOCS"; - - @property({ type: String, attribute: "mime-types" }) - mimeTypes?: string; - - @property({ type: String }) - query?: string; - - @property({ type: Boolean, attribute: "enable-drives" }) - enableDrives?: boolean; - - @property({ type: Boolean, attribute: "include-folders" }) - includeFolders?: boolean; - - @property({ type: Boolean, attribute: "select-folder-enabled" }) - selectFolderEnabled?: boolean; - - @property({ type: String }) - mode: DocsViewMode = "GRID"; - - @property({ type: Boolean, attribute: "owned-by-me" }) - ownedByMe?: boolean; - - @property({ type: String }) - parent?: string; - - @property({ type: Boolean }) - starred?: boolean; +export class DrivePickerDocsViewElement extends HTMLElement { + static get observedAttributes() { + return [ + "enable-drives", + "include-folders", + "mime-types", + "mode", + "owned-by-me", + "parent", + "query", + "select-folder-enabled", + "starred", + "view-id", + ]; + } /** - * Gets the Google Drive Picker view based on the current property values. + * Gets the Google Drive Picker view based on the current attribute values. * @returns {google.picker.DocsView} The Google Drive picker view. */ public get view(): google.picker.DocsView { - const view = new google.picker.DocsView( - this.viewId && google.picker.ViewId[this.viewId], + const view = new window.google.picker.DocsView(this.viewId); + + setBoolAttrWithDefault("enable-drives", this, view.setEnableDrives, view); + setBoolAttrWithDefault( + "include-folders", + this, + view.setIncludeFolders, + view, ); + setBoolAttrWithDefault("owned-by-me", this, view.setOwnedByMe, view); + setBoolAttrWithDefault( + "select-folder-enabled", + this, + view.setSelectFolderEnabled, + view, + ); + setBoolAttrWithDefault("starred", this, view.setStarred, view); - if (this.enableDrives !== undefined) { - view.setEnableDrives(this.enableDrives); - } - - if (this.includeFolders !== undefined) { - view.setIncludeFolders(this.includeFolders); - } - - if (this.mimeTypes) { - view.setMimeTypes(this.mimeTypes); - } - - if (this.mode) { - view.setMode(google.picker.DocsViewMode[this.mode]); - } - - if (this.ownedByMe !== undefined) { - view.setOwnedByMe(this.ownedByMe); - } - - if (this.parent) { - view.setParent(this.parent); - } + const mimetypes = this.getAttribute("mime-types"); + if (mimetypes !== null) view.setMimeTypes(mimetypes); - if (this.query) { - view.setQuery(this.query); - } + const mode = this.getAttribute("mode"); + if (mode) + view.setMode( + google.picker.DocsViewMode[ + mode as keyof typeof google.picker.DocsViewMode + ], + ); - if (this.selectFolderEnabled !== undefined) { - view.setSelectFolderEnabled(this.selectFolderEnabled); - } + const parent = this.getAttribute("parent"); + if (parent !== null) view.setParent(parent); - if (this.starred !== undefined) { - view.setStarred(this.starred); - } + const query = this.getAttribute("query"); + if (query !== null) view.setQuery(query); return view; } -} -declare global { - interface HTMLElementTagNameMap { - "drive-picker-docs-view": DrivePickerDocsViewElement; + private get viewId(): google.picker.ViewId | undefined { + const viewId = this.getAttribute("view-id"); + return viewId ? window.google.picker.ViewId[viewId as ViewId] : undefined; } } diff --git a/src/drive-picker/drive-picker-element.ts b/src/drive-picker/drive-picker-element.ts index e467ead..1b8c206 100644 --- a/src/drive-picker/drive-picker-element.ts +++ b/src/drive-picker/drive-picker-element.ts @@ -1,6 +1,3 @@ -import { LitElement, html } from "lit"; -import { customElement, property, state } from "lit/decorators.js"; -import { loadApi, retrieveAccessToken } from "../utils"; /** * Copyright 2024 Google LLC * @@ -17,184 +14,224 @@ import { loadApi, retrieveAccessToken } from "../utils"; * limitations under the License. */ -export type View = google.picker.DocsView; +import { + getBoolAttr, + getNumberAttribute, + loadApi, + retrieveAccessToken, + setBoolAttrWithDefault, +} from "../utils"; -export interface PickerViewElement extends HTMLElement { +type View = google.picker.DocsView; + +interface DrivePickerDocsViewElement extends HTMLElement { view: google.picker.DocsView; } -export interface DrivePickerElementProps { - // Required properties - appId: string; - clientId: string; - // Optional properties - developerKey?: string; - hideTitleBar?: boolean; - locale?: string; - maxItems?: number; - multiselect?: boolean; - oauthToken?: string; - origin?: string; - relayUrl?: string; - scope?: string; - title?: string; - visible?: boolean; -} +type DrivePickerEventDetail = google.picker.ResponseObject & { + picker: google.picker.Picker; +}; -export interface DrivePickerElementEventListeners { - addEventListener( - type: "cancel" | "picked", - listener: (ev: CustomEvent) => void, - options?: boolean | AddEventListenerOptions, - ): void; - removeEventListener( - type: "cancel" | "picked", - listener: (ev: CustomEvent) => void, - options?: boolean | EventListenerOptions, - ): void; +declare global { + interface GlobalEventHandlersEventMap { + "picker:authenticated": CustomEvent; + "picker:canceled": CustomEvent; + "picker:picked": CustomEvent; + "picker:loaded": CustomEvent; + } } /** - * The `drive-picker` web component provides a convenient way to integrate the Google Picker API into your web applications. The Google Picker API is a JavaScript API that allows users to select or upload Google Drive files. This component acts as a "File Open" dialog for accessing and interacting with files stored on Google Drive. - * - * Features: - * - Provides a similar look-and-feel to the Google Drive UI. - * - Offers several views showing previews and thumbnail images of Drive files. - * - Displays as an inline, modal window, ensuring users never leave the main application. - * - * Note: The Google Picker API does not support file organization, moving, or copying. For these operations, you should use either the Google Drive API or the Drive UI. + * The `drive-picker` web component provides a convenient way to declaratively + * build + * [`google.picker.Picker`](https://developers.google.com/drive/picker/reference/picker) + * by using the component attributes and + * [`google.picker.PickerBuilder`](https://developers.google.com/drive/picker/reference/picker.pickerbuilder) + * and load OAuth tokens. * * @element drive-picker * - * @fires {CustomEvent} cancel - Triggered when the user cancels the picker dialog. - * @fires {CustomEvent} picked - Triggered when the user picks one or more items. + * @fires picker:authenticated - Triggered when the user authenticates with the + * provided OAuth client ID and scope. + * @fires picker:canceled - Triggered when the user cancels the picker dialog. + * @fires picker:picked - Triggered when the user picks one or more items. + * @fires picker:loaded - Triggered when the picker is loaded. * - * @slot - The View elements to display in the picker. Each View element should implement a property `view` of type `google.picker.View`. + * @slot - The default slot contains View elements to display in the picker. + * Each View element should implement a property `view` of type + * `google.picker.View`. + * @attr {string} app-id - The Google Drive app ID. + * @attr {string} client-id - The OAuth 2.0 client ID. + * @attr {string} developer-key - The API key for accessing Google Picker API. + * @attr {"default"|"true"|"false"} hide-title-bar - Hides the title bar of the + * picker if set to true. + * @attr {string} locale - The locale to use for the picker. + * @attr {number} max-items - The maximum number of items that can be selected. + * @attr {boolean} mine-only - If set to true, only shows files owned by the + * user. + * @attr {boolean} multiselect - Enables multiple file selection if set to true. + * @attr {boolean} nav-hidden - Hides the navigation pane if set to true. + * @attr {string} oauth-token - The OAuth 2.0 token for authentication. + * @attr {string} origin - The origin parameter for the picker. + * @attr {string} relay-url - The relay URL for the picker. + * @attr {string} scope - The OAuth 2.0 scope for the picker. + * @attr {string} title - The title of the picker. * * @example * - * ```html - * - * - * - * ``` + *```html + * + * + * + *``` * */ -@customElement("drive-picker") -export class DrivePickerElement - extends LitElement - implements DrivePickerElementProps, DrivePickerElementEventListeners -{ - protected picker: google.picker.Picker | undefined; - protected observer: MutationObserver | undefined; - - @state() - private _oauthToken: string | undefined; - - /** - * The Google Drive app ID. - */ - @property({ type: String, attribute: "app-id" }) - appId!: string; - - /** - * The Google API client ID. - */ - @property({ type: String, attribute: "client-id" }) - clientId!: string; - - /** - * The Google API developer key. - */ - @property({ type: String }) - developerKey?: string; +export class DrivePickerElement extends HTMLElement { + static get observedAttributes() { + return [ + "app-id", + "client-id", + "developer-key", + "hide-title-bar", + "locale", + "max-items", + "mine-only", + "multiselect", + "nav-hidden", + "oauth-token", + "origin", + "relay-url", + "scope", + "title", + ]; + } + private picker: google.picker.Picker | undefined; + private observer: MutationObserver | undefined; + private google: typeof google | undefined; + private loading: Promise | undefined; /** - * The height of the picker dialog. + * The visibility of the picker. */ - @property({ type: Number }) - height?: number; + public get visible(): boolean { + return Boolean(this.picker?.isVisible()); + } /** - * Whether to hide the title bar of the picker dialog. + * Controls the visibility of the picker after the picker dialog has been + * closed. If any of the attributes change, the picker will be rebuilt and + * the visibility will be reset. */ - @property({ type: Boolean, attribute: "hide-title-bar" }) - hideTitleBar?: boolean; + set visible(value: boolean) { + this.picker?.setVisible(value); + } - /** - * The locale of the picker dialog. - */ - @property({ type: String }) - locale?: string; + attributeChangedCallback() { + this.build(); + return; + } - /** - * The maximum number of items that the user can select. - */ - @property({ type: Number, attribute: "max-items" }) - maxItems?: number; + private async build() { + this.picker?.dispose(); - /** - * Whether the user can select multiple items. - */ - @property({ type: Boolean }) - multiselect?: boolean; + // this await is necessary as an attribute may have changed + // prior to the API initialy being loaded + await this.loading; - /** - * The OAuth token to authenticate the user. - */ - @property({ type: String, attribute: "oauth-token" }) - oauthToken?: string; + if (!this.google) return; - /** - * The origin of the picker dialog. - */ - @property({ type: String }) - origin?: string; + let builder = new this.google.picker.PickerBuilder().setCallback( + (data: google.picker.ResponseObject) => { + this.callbackToDispatchEvent(data); + }, + ); + + const appId = this.getAttribute("app-id"); + if (appId !== null) builder = builder.setAppId(appId); + + const developerKey = this.getAttribute("developer-key"); + if (developerKey !== null) builder = builder.setDeveloperKey(developerKey); + + const locale = this.getAttribute("locale"); + if (locale !== null) + builder = builder.setLocale(locale as google.picker.Locales); + + const maxItems = getNumberAttribute(this, "max-items"); + if (maxItems !== null) builder = builder.setMaxItems(maxItems); + + const origin = this.getAttribute("origin"); + if (origin !== null) builder = builder.setOrigin(origin); + + const relayUrl = this.getAttribute("relay-url"); + if (relayUrl !== null) builder = builder.setRelayUrl(relayUrl); + + const title = this.getAttribute("title"); + if (title !== null) builder = builder.setTitle(title); + + setBoolAttrWithDefault( + "hide-title-bar", + this, + builder.hideTitleBar, + builder, + ); + + // OAuth token is required either as an attribute or from the OAuth flow using the client ID and scope + const oauthToken = + this.getAttribute("oauth-token") ?? + (await retrieveAccessToken( + // biome-ignore lint/style/noNonNullAssertion: just let the error bubble up when null + this.getAttribute("client-id")!, + this.getAttribute("scope") ?? + "https://www.googleapis.com/auth/drive.file", + ).then((token) => { + this.dispatchEvent( + new CustomEvent("picker:authenticated", { detail: token }), + ); + return token; + })); + + // biome-ignore lint/style/noNonNullAssertion: + builder = builder.setOAuthToken(oauthToken!); + + if (getBoolAttr(this, "multiselect")) { + builder = builder.enableFeature( + this.google.picker.Feature.MULTISELECT_ENABLED, + ); + } - /** - * The relay URL to use for cross-origin communication. - */ - @property({ type: String, attribute: "relay-url" }) - relayUrl?: string; + if (getBoolAttr(this, "mine-only")) { + builder = builder.enableFeature(this.google.picker.Feature.MINE_ONLY); + } - /** - * The scope of the OAuth token. - */ - @property({ type: String }) - scope = "https://www.googleapis.com/auth/drive.file"; + if (getBoolAttr(this, "nav-hidden")) { + builder = builder.enableFeature(this.google.picker.Feature.NAV_HIDDEN); + } - /** - * The title of the picker dialog. - */ - @property({ type: String }) - title = ""; + for (const view of this.views) { + builder = builder.addView(view); + } - /** - * Whether the picker dialog is visible. - */ - @property({ type: Boolean, reflect: true }) - visible = true; + this.picker = builder.build(); - /** - * The width of the picker dialog. - */ - @property({ type: Number }) - width?: number; + this.picker.setVisible(true); + } /** * The `google.Picker.View` objects to display in the picker as defined by the slot elements. */ - protected get views(): (View | google.picker.ViewId)[] { + private get views(): (View | google.picker.ViewId)[] { const views = nestedViews(this); return views.length ? views : ["all" as google.picker.ViewId]; } - override async connectedCallback(): Promise { - super.connectedCallback(); - await loadApi(); + async connectedCallback(): Promise { + this.loading = loadApi().then((google) => { + this.google = google; + this.build(); + }); // Watch for changes in the picker element slot and their attributes this.observer = new MutationObserver((mutations) => { @@ -205,7 +242,7 @@ export class DrivePickerElement ); if (filteredMutations.length) { - this.requestUpdate(); + this.build(); } }); @@ -216,84 +253,38 @@ export class DrivePickerElement }); } - protected override update(changedProperties: Map) { - // dispose the picker if any property other than visible is changed - if (!(changedProperties.size === 1 && changedProperties.has("visible"))) { - this.picker?.dispose(); - this.picker = undefined; - } - - if (changedProperties.has("oauthToken")) { - this._oauthToken = this.oauthToken; - } - - if ( - (this.visible && changedProperties.has("clientId")) || - changedProperties.has("scope") || - !this._oauthToken - ) { - retrieveAccessToken(this.clientId, this.scope).then((oauthToken) => { - this._oauthToken = oauthToken; - this.requestUpdate(); - }); - } - super.update(changedProperties); - } - - protected override render() { - if (!this.picker) { - this.build(); - } - - this.picker?.setVisible(this.visible); - - return html``; - } - - private build() { - if (!this._oauthToken) { - return; - } - - let builder = new google.picker.PickerBuilder() - .setOAuthToken(this._oauthToken) - .setCallback((data: google.picker.ResponseObject) => { - this.callbackToDispatchEvent(data); - }); - - for (const view of this.views) { - builder = builder.addView(view); + private callbackToDispatchEvent(data: google.picker.ResponseObject) { + let eventType: keyof GlobalEventHandlersEventMap; + + switch (data.action) { + case google.picker.Action.CANCEL: + eventType = "picker:canceled"; + break; + case google.picker.Action.PICKED: + eventType = "picker:picked"; + break; + case google.picker.Action.LOADED: + eventType = "picker:loaded"; + break; + default: + console.warn(`Unknown action: ${data.action}`); + return; } - builder = setBuilderProperties(builder, this); - - this.picker = builder.build(); - } - - private callbackToDispatchEvent(data: google.picker.ResponseObject) { - this.visible = Boolean(this.picker?.isVisible()); - this.dispatch(data.action, data); + this.dispatchEvent( + new CustomEvent(eventType, { + detail: { ...data, picker: this.picker }, + }), + ); } - override disconnectedCallback(): void { + disconnectedCallback(): void { this.picker?.dispose(); - super.disconnectedCallback(); - } - - private dispatch( - type: google.picker.Action, - detail: google.picker.ResponseObject, - ) { - this.dispatchEvent(new CustomEvent(type, { detail })); - } - - protected override createRenderRoot(): HTMLElement | DocumentFragment { - return this; } } -function isView(obj: HTMLElement): obj is PickerViewElement { - return "view" in obj && obj.view instanceof google.picker.View; +function isView(obj: HTMLElement): obj is DrivePickerDocsViewElement { + return "view" in obj && obj.view instanceof window.google.picker.View; } function filterElementsToViewOrViewGroup( @@ -309,33 +300,3 @@ function nestedViews(target: HTMLElement, selector = "*"): Array { Array.from(target.querySelectorAll(selector)), ); } - -function setBuilderProperties( - _builder: google.picker.PickerBuilder, - { appId, developerKey, relayUrl, title }: DrivePickerElementProps, -) { - let builder = _builder; - if (appId) { - builder = builder.setAppId(appId); - } - - if (developerKey) { - builder = builder.setDeveloperKey(developerKey); - } - - if (relayUrl) { - builder = builder.setRelayUrl(relayUrl); - } - - if (title) { - builder = builder.setTitle(title); - } - - return builder; -} - -declare global { - interface HTMLElementTagNameMap { - "drive-picker": DrivePickerElement; - } -} diff --git a/src/drive-picker/drive-picker.stories.ts b/src/drive-picker/drive-picker.stories.ts deleted file mode 100644 index 9042683..0000000 --- a/src/drive-picker/drive-picker.stories.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { action } from "@storybook/addon-actions"; -import { withActions } from "@storybook/addon-actions/decorator"; -import type { Meta, StoryObj } from "@storybook/web-components"; -import { type TemplateResult, html } from "lit"; -import type { DrivePickerElementProps } from "."; -import "./drive-picker-element"; -import { ifDefined } from "lit/directives/if-defined.js"; - -const drivePickerTemplate = ( - { appId, clientId, oauthToken, visible }: DrivePickerElementProps, - slot?: TemplateResult, -) => - html`${slot}`; - -const meta: Meta = { - title: "Drive Picker", - tags: ["autodocs"], - decorators: [withActions], - parameters: { - actions: { handles: ["picked", "cancel"] }, - }, - render: (props: DrivePickerElementProps) => drivePickerTemplate(props), - argTypes: { - appId: { control: "text" }, - clientId: { control: "text" }, - oauthToken: { control: "text" }, - visible: { control: "boolean" }, - }, - args: { - visible: true, - }, -}; - -export default meta; -type Story = StoryObj; - -export const Primary: Story = { - args: { - visible: true, - clientId: - "675807958095-nsptdcn5qdb6pl44cge1c6ghact9t5q0.apps.googleusercontent.com", - developerKey: "AIzaSyAdqZwr-cdocUdGbt9l0zc5s58jnrGseOY", - appId: "675807958095", - }, -}; - -export const DocsView: Story = { - args: { - visible: true, - clientId: - "675807958095-nsptdcn5qdb6pl44cge1c6ghact9t5q0.apps.googleusercontent.com", - developerKey: "AIzaSyAdqZwr-cdocUdGbt9l0zc5s58jnrGseOY", - appId: "675807958095", - }, - render: (props: DrivePickerElementProps) => - drivePickerTemplate( - props, - html``, - ), -}; diff --git a/src/drive-picker/index.ts b/src/drive-picker/index.ts index 5fe0a22..60fe20a 100644 --- a/src/drive-picker/index.ts +++ b/src/drive-picker/index.ts @@ -14,12 +14,6 @@ * limitations under the License. */ -export { - DrivePickerElement, - type DrivePickerElementProps, -} from "./drive-picker-element"; +export { DrivePickerElement } from "./drive-picker-element"; -export { - DrivePickerDocsViewElement, - type DrivePickerDocsViewElementProps, -} from "./drive-picker-docs-view-element"; +export { DrivePickerDocsViewElement } from "./drive-picker-docs-view-element"; diff --git a/src/index.ts b/src/index.ts index 01e0bb1..bc4ad1d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,4 +14,18 @@ * limitations under the License. */ -export * from "./drive-picker"; +import { DrivePickerDocsViewElement, DrivePickerElement } from "./drive-picker"; + +customElements.define("drive-picker", DrivePickerElement); +customElements.define("drive-picker-docs-view", DrivePickerDocsViewElement); + +declare global { + interface HTMLElementTagNameMap { + "drive-picker": DrivePickerElement; + } + interface HTMLElementTagNameMap { + "drive-picker-docs-view": DrivePickerDocsViewElement; + } +} + +export type { DrivePickerElement, DrivePickerDocsViewElement }; diff --git a/src/stories/drive-picker-docs-view.stories.ts b/src/stories/drive-picker-docs-view.stories.ts new file mode 100644 index 0000000..0b2cb00 --- /dev/null +++ b/src/stories/drive-picker-docs-view.stories.ts @@ -0,0 +1,77 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { Meta, StoryObj } from "@storybook/web-components"; +import type { LazyPreviewElement } from "./utils/lazy-preview-element"; +import { elementArgTypes, getElementEvents } from "./utils/manifest-helpers"; + +import { setAttributes } from "./utils/attribute-helpers"; +import { APP_ID, CLIENT_ID, META_PARAMETERS } from "./utils/common"; + +import "./utils/lazy-preview-element"; +import ".."; + +const argTypes = elementArgTypes["drive-picker-docs-view"]; + +const elementEventNames = getElementEvents("drive-picker").map( + (event) => event.name, +); + +const meta: Meta = { + component: "drive-picker", + argTypes, + args: {}, + parameters: META_PARAMETERS, + tags: ["autodocs"], +}; + +export default meta; + +const render = ({ ...args }) => { + const drivePicker = document.createElement("drive-picker"); + drivePicker.setAttribute("app-id", APP_ID); + drivePicker.setAttribute("client-id", CLIENT_ID); + + const drivePickerDocsView = document.createElement("drive-picker-docs-view"); + setAttributes(drivePickerDocsView, args); + drivePicker.appendChild(drivePickerDocsView); + + for (const eventName of elementEventNames) { + drivePicker.addEventListener(eventName, (e) => { + console.log(e); + }); + } + + const lazyPreviewElement = document.createElement( + "lazy-preview", + ) as LazyPreviewElement; + + lazyPreviewElement.element = drivePicker; + + // Use a template to show the drive-picker element only when the user clicks the preview button + const template = document.createElement("template"); + template.innerHTML = drivePicker.outerHTML; + lazyPreviewElement.appendChild(template); + + return lazyPreviewElement; +}; + +type Story = StoryObj; + +export const Default: Story = { + render, + args: {}, +}; diff --git a/src/stories/drive-picker.stories.ts b/src/stories/drive-picker.stories.ts new file mode 100644 index 0000000..2f1ee16 --- /dev/null +++ b/src/stories/drive-picker.stories.ts @@ -0,0 +1,85 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { Meta, StoryObj } from "@storybook/web-components"; +import type { LazyPreviewElement } from "./utils/lazy-preview-element"; +import { elementArgTypes, getElementEvents } from "./utils/manifest-helpers"; + +import { setAttributes } from "./utils/attribute-helpers"; +import { APP_ID, CLIENT_ID, META_PARAMETERS } from "./utils/common"; + +import "./utils/lazy-preview-element"; +import ".."; + +const argTypes = elementArgTypes["drive-picker"]; + +const elementEventNames = getElementEvents("drive-picker").map( + (event) => event.name, +); + +const meta: Meta = { + component: "drive-picker", + argTypes, + args: { + "app-id": APP_ID, + "client-id": CLIENT_ID, + }, + parameters: META_PARAMETERS, + tags: ["autodocs"], +}; + +export default meta; + +const render = ({ ...args }) => { + const drivePicker = document.createElement("drive-picker"); + + setAttributes(drivePicker, args); + + for (const eventName of elementEventNames) { + drivePicker.addEventListener(eventName, (e) => { + console.log(e); + }); + } + + const lazyPreviewElement = document.createElement( + "lazy-preview", + ) as LazyPreviewElement; + + lazyPreviewElement.element = drivePicker; + + // Use a template to show the drive-picker element only when the user clicks the preview button + const template = document.createElement("template"); + template.innerHTML = drivePicker.outerHTML; + lazyPreviewElement.appendChild(template); + + return lazyPreviewElement; +}; + +type Story = StoryObj; + +export const Default: Story = { + render, + args: {}, +}; + +export const ExplicitScope: Story = { + name: "With explicit scope", + render, + args: { + scope: + "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/drive.file", + }, +}; diff --git a/src/stories/utils/attribute-helpers.ts b/src/stories/utils/attribute-helpers.ts new file mode 100644 index 0000000..eac5cb0 --- /dev/null +++ b/src/stories/utils/attribute-helpers.ts @@ -0,0 +1,33 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const setAttributes = ( + element: HTMLElement, + attributes: { [key: string]: string | boolean | number }, +) => { + for (const [key, value] of Object.entries(attributes)) { + if (key.startsWith("on")) { + continue; + } + if (value !== undefined) { + if (typeof value === "boolean") { + if (value) element.setAttribute(key, ""); + } else if (typeof value === "string") { + element.setAttribute(key, value.toString()); + } + } + } +}; diff --git a/src/stories/utils/common.ts b/src/stories/utils/common.ts new file mode 100644 index 0000000..914de58 --- /dev/null +++ b/src/stories/utils/common.ts @@ -0,0 +1,42 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const META_PARAMETERS = { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + docs: { + canvas: { + withToolbar: false, + sourceState: "shown", + }, + source: { + format: "html", + language: "html", + dark: true, + // extract the template part of the source code + transform: (src: string) => + (src.match(/