diff --git a/.eslintrc.cjs b/.eslintrc.cjs
deleted file mode 100644
index d6c9537..0000000
--- a/.eslintrc.cjs
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = {
- root: true,
- env: { browser: true, es2020: true },
- extends: [
- 'eslint:recommended',
- 'plugin:@typescript-eslint/recommended',
- 'plugin:react-hooks/recommended',
- ],
- ignorePatterns: ['dist', '.eslintrc.cjs'],
- parser: '@typescript-eslint/parser',
- plugins: ['react-refresh'],
- rules: {
- 'react-refresh/only-export-components': [
- 'warn',
- { allowConstantExport: true },
- ],
- },
-}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index 663f144..0000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,68 +0,0 @@
-name: Release with Changelog, Build Docs, Deploy to Github Pages, Publish to NPM
-# concat workflows because it is not easy to run trigger multiple. https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow
-permissions:
- contents: write
-on:
- push:
- tags:
- - "v*"
-
-jobs:
- build:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout Repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: "20.x"
- registry-url: "https://registry.npmjs.org"
-
- - name: Install
- run: npm install
-
- - name: Release with Changelog
- run: npx changelogithub # or changelogithub@0.12 if ensure the stable result
- continue-on-error: true # failed when only tag pushed
- env:
- GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
-
- - name: Build Demo
- run: npm run build:web
- - name: Build Docs
- run: npm run docs:build
-
- - name: Extra Files
- run: |
- # Switch to the generated directory
- cd docs/.vitepress/dist
-
- # cp demo to here
- cp -r ../../../dist v1-demo-windowed
-
- # Set custom domain for GitHub Pages
- echo "he-tree-react.phphe.com" > CNAME
-
- # Required to bypass Jekyll on GitHub Pages
- echo "" > .nojekyll
-
- - name: Deploy
- uses: JamesIves/github-pages-deploy-action@v4
- with:
- single-commit: true
- branch: gh-pages
- clean: true
- folder: docs/.vitepress/dist
- - name: Remove Dist
- run: rm -rf dist
- - name: Build Library
- run: npm run build
- - run: rm -rf node_modules && npm ci
- - run: npm publish
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 535dd9f..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,27 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-
-# test
-/coverage
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index b490f51..337f71c 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2017 phphe
+Copyright (c) 2020 Xinxin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 607c08e..9c00088 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,2 @@
-
-
-# he-tree-react    
-
-React draggable sortable tree component. [Document](https://he-tree-react.phphe.com), [demo](https://he-tree-react.phphe.com/v1/examples).
-
-React 可拖拽树组件. [文档](https://he-tree-react.phphe.com/zh), [演示](https://he-tree-react.phphe.com/zh/v1/examples).
-
-## Features
-
-- Drag with a customizable placeholder.
-- The height of the node is not fixed.
-- Based on HTML Drag and Drop API.
-- Both flat data and tree-shaped data supported.
-- Drag from external.
-- Open or expand. Open node when drag onto it.
-- Checked, semi-checked.
-- Big data, virtual list.
-- Examples for update data.
-- rtl, display from right to left.
-
-## Changelog
-
-https://github.com/phphe/he-tree-react/releases
+# he-tree-react
+A draggable sortable nested react tree component.
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index 5921e8c..0000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.vitepress/dist
-.vitepress/cache
\ No newline at end of file
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
deleted file mode 100644
index 1300c27..0000000
--- a/docs/.vitepress/config.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import { defineConfig } from "vitepress";
-import { version } from "../../package.json";
-
-const GTAG_ID = "G-GVYKBNTKPG";
-const vVersion = `v${version}`;
-
-// https://vitepress.dev/reference/site-config
-export default defineConfig({
- title: "He Tree React",
- description: "A VitePress Site",
- cleanUrls: true,
- themeConfig: {
- search: {
- provider: "local",
- },
- // https://vitepress.dev/reference/default-theme-config
- // nav: [
- // { text: "Home", link: "/" },
- // { text: "Guide", link: "/v1/guide" },
- // { text: "API", link: "/v1/api" },
- // ],
-
- // sidebar: [
- // {
- // text: "Examples",
- // items: [
- // { text: "Markdown Examples", link: "/markdown-examples" },
- // { text: "Runtime API Examples", link: "/api-examples" },
- // ],
- // },
- // ],
-
- socialLinks: [
- { icon: "github", link: "https://github.com/phphe/he-tree-react" },
- ],
- },
- markdown: {
- // lineNumbers: true,
- },
- locales: {
- root: {
- label: "English",
- lang: "en",
- themeConfig: {
- nav: [
- { text: "Home", link: "/" },
- { text: "Guide", link: "/v1/guide" },
- { text: "Examples", link: "/v1/examples" },
- { text: "API", link: "/v1/api" },
- {
- text: vVersion,
- items: [
- {
- text: "Changelog",
- link: "https://github.com/phphe/he-tree-react/releases",
- },
- ],
- },
- ],
- },
- },
- zh: {
- label: "中文",
- lang: "zh",
- themeConfig: {
- nav: [
- { text: "首页", link: "/zh/" },
- { text: "使用", link: "/zh/v1/guide" },
- { text: "例子", link: "/zh/v1/examples" },
- { text: "API", link: "/zh/v1/api" },
- {
- text: vVersion,
- items: [
- {
- text: "更新日志",
- link: "https://github.com/phphe/he-tree-react/releases",
- },
- ],
- },
- ],
- },
- },
- },
- head: [
- [
- "script",
- {
- async: "",
- src: `https://www.googletagmanager.com/gtag/js?id=${GTAG_ID}`,
- },
- ],
- [
- "script",
- {},
- `window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
- gtag('config', '${GTAG_ID}');`,
- ],
- ],
- sitemap: {
- hostname: "https://he-tree-react.phphe.com",
- },
- lastUpdated: true,
-});
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
deleted file mode 100644
index 1c7bb0e..0000000
--- a/docs/.vitepress/theme/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-// https://vitepress.dev/guide/custom-theme
-import { h } from "vue";
-import type { Theme } from "vitepress";
-import DefaultTheme from "vitepress/theme";
-import "./style.css";
-import DemoIframe from "../../components/DemoIframe.vue";
-
-export default {
- extends: DefaultTheme,
- Layout: () => {
- return h(DefaultTheme.Layout, null, {
- // https://vitepress.dev/guide/extending-default-theme#layout-slots
- });
- },
- enhanceApp({ app, router, siteData }) {
- // ...
- app.component("DemoIframe", DemoIframe);
- },
-} satisfies Theme;
diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css
deleted file mode 100644
index d63aee8..0000000
--- a/docs/.vitepress/theme/style.css
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * Customize default theme styling by overriding CSS variables:
- * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
- */
-
-/**
- * Colors
- *
- * Each colors have exact same color scale system with 3 levels of solid
- * colors with different brightness, and 1 soft color.
- *
- * - `XXX-1`: The most solid color used mainly for colored text. It must
- * satisfy the contrast ratio against when used on top of `XXX-soft`.
- *
- * - `XXX-2`: The color used mainly for hover state of the button.
- *
- * - `XXX-3`: The color for solid background, such as bg color of the button.
- * It must satisfy the contrast ratio with pure white (#ffffff) text on
- * top of it.
- *
- * - `XXX-soft`: The color used for subtle background such as custom container
- * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
- * on top of it.
- *
- * The soft color must be semi transparent alpha channel. This is crucial
- * because it allows adding multiple "soft" colors on top of each other
- * to create a accent, such as when having inline code block inside
- * custom containers.
- *
- * - `default`: The color used purely for subtle indication without any
- * special meanings attched to it such as bg color for menu hover state.
- *
- * - `brand`: Used for primary brand colors, such as link text, button with
- * brand theme, etc.
- *
- * - `tip`: Used to indicate useful information. The default theme uses the
- * brand color for this by default.
- *
- * - `warning`: Used to indicate warning to the users. Used in custom
- * container, badges, etc.
- *
- * - `danger`: Used to show error, or dangerous message to the users. Used
- * in custom container, badges, etc.
- * -------------------------------------------------------------------------- */
-
- :root {
- --vp-c-default-1: var(--vp-c-gray-1);
- --vp-c-default-2: var(--vp-c-gray-2);
- --vp-c-default-3: var(--vp-c-gray-3);
- --vp-c-default-soft: var(--vp-c-gray-soft);
-
- --vp-c-brand-1: var(--vp-c-indigo-1);
- --vp-c-brand-2: var(--vp-c-indigo-2);
- --vp-c-brand-3: var(--vp-c-indigo-3);
- --vp-c-brand-soft: var(--vp-c-indigo-soft);
-
- --vp-c-tip-1: var(--vp-c-brand-1);
- --vp-c-tip-2: var(--vp-c-brand-2);
- --vp-c-tip-3: var(--vp-c-brand-3);
- --vp-c-tip-soft: var(--vp-c-brand-soft);
-
- --vp-c-warning-1: var(--vp-c-yellow-1);
- --vp-c-warning-2: var(--vp-c-yellow-2);
- --vp-c-warning-3: var(--vp-c-yellow-3);
- --vp-c-warning-soft: var(--vp-c-yellow-soft);
-
- --vp-c-danger-1: var(--vp-c-red-1);
- --vp-c-danger-2: var(--vp-c-red-2);
- --vp-c-danger-3: var(--vp-c-red-3);
- --vp-c-danger-soft: var(--vp-c-red-soft);
-}
-
-/**
- * Component: Button
- * -------------------------------------------------------------------------- */
-
-:root {
- --vp-button-brand-border: transparent;
- --vp-button-brand-text: var(--vp-c-white);
- --vp-button-brand-bg: var(--vp-c-brand-3);
- --vp-button-brand-hover-border: transparent;
- --vp-button-brand-hover-text: var(--vp-c-white);
- --vp-button-brand-hover-bg: var(--vp-c-brand-2);
- --vp-button-brand-active-border: transparent;
- --vp-button-brand-active-text: var(--vp-c-white);
- --vp-button-brand-active-bg: var(--vp-c-brand-1);
-}
-
-/**
- * Component: Home
- * -------------------------------------------------------------------------- */
-
-:root {
- --vp-home-hero-name-color: transparent;
- --vp-home-hero-name-background: -webkit-linear-gradient(
- 120deg,
- #bd34fe 30%,
- #41d1ff
- );
-
- --vp-home-hero-image-background-image: linear-gradient(
- -45deg,
- #bd34fe 50%,
- #47caff 50%
- );
- --vp-home-hero-image-filter: blur(44px);
-}
-
-@media (min-width: 640px) {
- :root {
- --vp-home-hero-image-filter: blur(56px);
- }
-}
-
-@media (min-width: 960px) {
- :root {
- --vp-home-hero-image-filter: blur(68px);
- }
-}
-
-/**
- * Component: Custom Block
- * -------------------------------------------------------------------------- */
-
-:root {
- --vp-custom-block-tip-border: transparent;
- --vp-custom-block-tip-text: var(--vp-c-text-1);
- --vp-custom-block-tip-bg: var(--vp-c-brand-soft);
- --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
-}
-
-/**
- * Component: Algolia
- * -------------------------------------------------------------------------- */
-
-.DocSearch {
- --docsearch-primary-color: var(--vp-c-brand-1) !important;
-}
-
diff --git a/docs/components/DemoIframe.vue b/docs/components/DemoIframe.vue
deleted file mode 100644
index 1a56856..0000000
--- a/docs/components/DemoIframe.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
- {{ lang === 'zh' ? '请看效果' : 'Preview' }}
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index 6e196da..0000000
--- a/docs/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-# https://vitepress.dev/reference/default-theme-home-page
-layout: home
-
-hero:
- name: "He Tree React"
- # text: ""
- tagline: React draggable sortable tree component
- actions:
- - theme: brand
- text: Get started
- link: ./v1/guide
- - theme: alt
- text: Online Examples
- link: ./v1/examples
-
-features:
- - title: Draggable
- details: When drag, show a placeholder to help user.
- - title: High-performance
- details: Supports virtual list to handle large data calmly.
- - title: Easy to customize
- details: Simple structure, few built-in style, so the style and UI can be easily customized.
----
-
-## Features
-
-- Drag with a customizable placeholder.
-- The height of the node is not fixed.
-- Based on HTML Drag and Drop API.
-- Both flat data and tree-shaped data supported.
-- Drag from external.
-- Open or expand. Open node when drag onto it.
-- Checked, semi-checked.
-- Big data, virtual list.
-- Examples for update data.
-- rtl, display from right to left.
diff --git a/docs/v1/api.md b/docs/v1/api.md
deleted file mode 100644
index f5609ce..0000000
--- a/docs/v1/api.md
+++ /dev/null
@@ -1,341 +0,0 @@
-# API
-
-## Exported
-
-The exported variables, methods, and Typescript types.
-
-- [`useHeTree`](#usehetree): Main React hook. This library does not export components, you need to use the [`renderTree`](#rendertree) render tree returned by this function.
-- [`walkTreeData`](#walktreedata), [`walkTreeDataGenerator`](#walktreedatagenerator), [`findTreeData`](#findtreedata), [`filterTreeData`](#filtertreedata), [`openParentsInTreeData`](#openparentsintreedata), [`updateCheckedInTreeData`](#updatecheckedintreedata): Methods for processing and traversing tree data.
-- [`sortFlatData`](#sortflatdata), [`walkFlatData`](#walkflatdata), [`walkFlatDataGenerator`](#walkflatdatagenerator), [`convertIndexToTreeIndexInFlatData`](#convertindextotreeindexinflatdata), [`addToFlatData`](#addtoflatdata), [`removeByIdInFlatData`](#removebyidinflatdata), [`openParentsInFlatData`](#openparentsinflatdata), [`updateCheckedInFlatData`](#updatecheckedinflatdata): Methods for processing and traversing flat data.
-- [`walkParentsGenerator`](#walkparentsgenerator): To iterate over another special kind of data. This data is like `HTMLElement`, which contains a key pointing to the parent node like `parentElement`.
-- `defaultProps`: The default value of `useHeTree` options.
-
-Typescript types:
-
-- `Id`: node id, parent id. Type: `string | number`.
-- [`Stat`](#stat): Node information.
-- `HeTreeProps`: Options for `useHeTree`.
-
-## useHeTree
-
-```ts
-import { useHeTree } from "he-tree-react";
-const {/* return */} = useHeTree({/* options */}) // prettier-ignore
-```
-
-The main function of this library. React hook. The arguments are as follows:
-
-- options: Options, type is object. The following are some properties in options:
-
- | Name | Type | Default | Description |
- | ---------------------------------------------- | ----------------------- | ----------- | :------------------------------------------------------------------------------------------------------------------- |
- | data | Array | | Data. Check [Data Types](guide#data-types). |
- | dataType | 'flat', 'tree' | 'flat' | Data Types |
- | idKey | string | 'id' | key of id 名. |
- | parentIdKey | string | 'parent_id' | key of the parent id. For flat data only. |
- | childrenKey | string | 'children' | key of children nodes. For tree data only. |
- | indent | number | 20 | Node indentation, unit is px. |
- | dragOpen | boolean | false | Whether to enable the function "Open node when dragging over node". |
- | dragOpenDelay | number | 600 | The waiting time to open the node when dragging over the node. The unit is milliseconds. |
- | onDragOpen | `function(stat): void` | | The callback of "Open node when dragging over node". |
- | direction | 'lrt', 'rtl' | 'ltr' | Display direction, ltr is displayed from left to right, rtl is the opposite. |
- | rootId | string, null | null | The parent id of a node that has not parent in flat data. |
- | virtual | boolean | false | Whether to enable virtualization. Used to improve performance when there is a lot of data. |
- | keepPlaceholder | boolean | false | Whether to retain placeholder when dragging out of the tree. It is recommended to enable this only on one tree page. |
- | openIds | Array | | All open nodes' id. |
- | checkedIds | Array | | All checked nodes' id. |
- | isFunctionReactive | boolean | false | Whether to listen for change of the callback functions. [Reference](guide#isfunctionreactive) |
-
- The remaining callback functions in options:
- | Name | Type | Description |
- | ------------------------- | ------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------|
- | renderNode | `(stat)=> ReactNode` | Node render. |
- | renderNodeBox | `({stat, attrs, isPlaceholder})=> ReactNode` | nodeBox's render. [Reference](guide#node_structure_style). |
- | onChange | `(newData)=>void`|Callback on data change|
- | canDrag | `(stat)=>boolean, null, undefined, void` | Whether a node draggable. Returning `null, undefined, void` means inheriting the parent node. |
- | canDrop | `(stat, index)=>boolean, null, undefined, void` | Whether a node droppable. Returning `null, undefined, void` means inheriting the parent node. The parameter `index` may be empty. If it is not empty, it indicates the position. |
- | customDragImage | `(event, stat)=> void` | Called `event.dataTransfer.setDragImage` to custom drag image. [Reference](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage). |
- |onDragStart | `(event, stat)=> void` ||
- |onExternalDragOver |`(event)=>boolean`|Called when drag from external. Must return a Boolean value to indicate whether to handle this drag.|
- |onDragOver | `(event, stat, isExternal)=> void` |`isExternal` indicates whether the drag is from outside.|
- |onDragEnd |`(event, stat, isOutside)=>void`|Called on dragend and this drag is started in this tree. `stat` is the stat of the dragged node. `isOutside` indicates whether it ended outside the tree.|
- |onExternalDrop |`(event, parentStat, index)=>void`|Called when the external drag ends on this tree. parentStat is the stat of the target parent node, and when it is empty, it represents the root of the tree. Index is the target position, the index of the node among siblings.|
-
-### Return of `useHeTree`
-
-The return of `useHeTree` is an object, including some states and methods. **Note**, this object will change every time. Do not rely on this object, but you can rely on the properties of this object. The properties are as follows:
-| Name | Type | Description |
-| ------------------------- | ------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------|
-|renderTree |`(options?: { className?: string, style?: React.CSSProperties, listClassName?: string, listInnerClassName?: string }): ReactNode`|Tree render. Options can be passed in `className` and `style` to control the style of the root element. `listClassName` is for virtual list root element, `listInnerClassName` is for virtual list inner element.|
-|getStat |`(idOrNodeOrStat)=>stat`|Get stat by id, or node data, or stat object.|
-|allIds |Array|The ids of all nodes.|
-|rootIds |Array|The ids of all root nodes|
-|rootNodes |Array|All root nodes. In tree data, it is same with `options.data`.|
-|rootStats |Array|All root nodes' stat.|
-|placeholder |`{parentStat, index, level}`| Drag placeholder info. Null if it does not exist.|
-|draggingStat |`stat`|When a drag is initiated from this tree, the stat of the dragged node. Null if it does not exist.|
-|dragOverStat |`stat`|Dragging over node's stat. May be null.|
-|visibleIds |Array|All visible nodes' id.|
-|attrsList |Array|All visible nodes' attrs.|
-|virtualListRef |`ref`| `ref` of virtual list component, Check [virtual list](https://github.com/phphe/react-base-virtual-list).|
-|scrollToNode |`(idOrNodeOrStat)=>boolean`|Scroll to node. The argument can be id, node or stat. If node not found or invisible, it return `false`. [Example](examples#scroll_to_node2)|
-
-## walkTreeDataGenerator
-
-The method of traversing tree data through `for of`. Executing `skipChildren()` in the loop will skip all child nodes of the node, and executing `exitWalk` will end the traversal.
-
-```ts
-for (const [
- node,
- { parent, parents, siblings, index, skipChildren, exitWalk },
-] of walkTreeDataGenerator(data, "children")) {
- // ...
-}
-```
-
-## walkTreeData
-
-The method to traverse tree data through the callback method. Executing `skipChildren()` in the callback method will skip all child nodes of the node, and executing `exitWalk` will end the traversal.
-
-```ts
-walkTreeDataGenerator(
- data,
- (node, { parent, parents, siblings, index, skipChildren, exitWalk }) => {
- // ...
- },
- "children"
-);
-```
-
-## findTreeData
-
-Like `Array.prototype.find`. Returns the first node found. Executing `skipChildren()` in the callback method will skip all child nodes of the node, and executing `exitWalk` will end the traversal.
-
-```ts
-let foundNode = findTreeData(
- data,
- (node, { parent, parents, siblings, index, skipChildren, exitWalk }) => {
- // return node.id === 1;
- },
- "children"
-);
-```
-
-## filterTreeData
-
-Like `Array.prototype.filter`. Returns all nodes found. Executing `skipChildren()` in the callback method will skip all child nodes of the node, and executing `exitWalk` will end the traversal.
-
-```ts
-let nodes = filterTreeData(
- data,
- (node, { parent, parents, siblings, index, skipChildren, exitWalk }) => {
- // return node.id > 1;
- },
- "children"
-);
-```
-
-## openParentsInTreeData
-
-Open all parent nodes of a single or multiple nodes to make the node visible. [Reference](guide#node_open).
-
-```
-(
- treeData,
- openIds: Id[],
- idOrIds: Id | Id[],
- options?: {idKey: string, childrenKey: string}
-): newOpenIds
-```
-
-## updateCheckedInTreeData
-
-Update the `checked` status of a single node or multiple nodes. This will update both their children and parents. [Reference](guide#node_checked).
-
-```
-(
- treeData,
- checkedIds: Id[],
- idOrIds: Id | Id[],
- checked: boolean,
- options?: {idKey: string, childrenKey: string}
-): [newCheckedIds, newSemiCheckedIds]
-```
-
-## sortFlatData
-
-Sort the flat data according to the order of the nodes in the tree. Return the new sorted array. Your data should use it to ensure order after initialized.
-
-```
-(
- flatData,
- options?: {idKey: string, parentIdKey: string}
-): sortedData
-```
-
-## walkFlatDataGenerator
-
-The method of traversing flat data through `for of`. Executing `skipChildren()` in the loop will skip all the child nodes of the node, and executing `exitWalk` will end the traversal. Make sure the order of your data is correct before using it.
-
-Compared to walkTreeDataGenerator, it lacks `siblings`, but has `treeIndex, id, pid`. treeIndex is the index of the node in the tree.
-
-```ts
-for (const [
- node,
- { parent, parents, index, treeIndex, id, pid, skipChildren, exitWalk },
-] of walkFlatDataGenerator(flatData, {
- idKey: "id",
- parentIdKey: "parent_id",
-})) {
- // ...
-}
-```
-
-## walkFlatData
-
-The method of traversing flat data through the callback method. Executing `skipChildren()` in the callback method will skip all child nodes of the node, and executing `exitWalk` will end the traversal. Before using, make sure that the order of your data is correct.
-
-```ts
-walkFlatData(
- flatData,
- (
- node,
- { parent, parents, index, treeIndex, id, pid, skipChildren, exitWalk }
- ) => {
- // ...
- },
- {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-);
-```
-
-## openParentsInFlatData
-
-Open all parent nodes of a single or multiple nodes to make the node visible. Make sure your data is in the correct order before using it. [Reference](guide#node_open).
-
-```
-(
- flatData,
- openIds: Id[],
- idOrIds: Id | Id[],
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-): newOpenIds
-```
-
-## updateCheckedInFlatData
-
-Update the `checked` status of a single node or multiple nodes. This will update both their children and parents. Make sure your data is in the correct order before using it. [Reference](guide#node_checked).
-
-```
-(
- flatData,
- checkedIds: Id[],
- idOrIds: Id | Id[],
- checked: boolean,
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-): [newCheckedIds, newSemiCheckedIds]
-```
-
-## convertIndexToTreeIndexInFlatData
-
-Calculate the index of a node in the tree through its parent node id and its index in the sibling nodes.
-
-```
-(
- flatData,
- parentId: Id | null,
- indexInSiblings: Id | null,
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-): treeIndex
-```
-
-## addToFlatData
-
-Add a node to the flat data. It will change the original data array. Therefore, it is recommended to pass in a copy of the original data, or use it together with `useImmer`. [Reference](guide#update_flat_data_with_inner_methods2)
-
-```
-(
- flatData,
- newNode,
- index: Id | null,
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-):void
-```
-
-## removeByIdInFlatData
-
-Remove node by id from the flat data. It will change the original data array. Therefore, it is recommended to pass in a copy of the original data, or use it together with `useImmer`. [Reference](guide#update_flat_data_with_inner_methods2)
-
-```
-(
- flatData,
- removeId: Id | null,
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-): removedData
-```
-
-## walkParentsGenerator
-
-A method to iterate over another special kind of data. This data is like `HTMLElement`, which contains keys pointing to the parent node like `parentElement`.
-
-```
-(
- node,
- parentKeyOrGetter: string | ((node) => parent | undefined),
- options?: {
- withSelf: boolean;
- }
-): Generator
-```
-
-`parentKeyOrGetter` can be a string or a method that returns the parent. `options.withSelf` indicates whether to include the node self. Returns [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator). Here is an example of traversing HTMLElement:
-
-```ts
-let el = document.querySelector("div");
-for (const parent of walkParentsGenerator(el, "parentElement", {
- withSelf: true,
-})) {
- // ...
-}
-```
-
-## Stat
-
-`stat` contains information related to the node. Read-only. The properties are as follows:
-
-| Name | Type | Description |
-| ------------ | ------------ | :------------------------------------ |
-| \_isStat | boolean | Indicates whether it is a stat object |
-| node | object | node data |
-| id | Id | id |
-| pid | Id, null | parent id |
-| parent | object, null | parent data |
-| parentStat | stat, null | parent stat |
-| childIds | Id[] | |
-| children | object[] | |
-| childStats | stat[] | stats of children |
-| siblingIds | Id[] | |
-| siblings | object[] | sibling nodes |
-| siblingStats | stat[] | stats of siblings |
-| index | number | node's index in siblings |
-| level | number | node's depth in tree. Start from 1 |
-| open | boolean | |
-| checked | boolean | |
-| draggable | boolean | |
diff --git a/docs/v1/examples.md b/docs/v1/examples.md
deleted file mode 100644
index 66995d6..0000000
--- a/docs/v1/examples.md
+++ /dev/null
@@ -1,106 +0,0 @@
-# Examples
-
-## Custom Style
-
-
-**Source**
-
-<<< @/../src/pages/custom_style.tsx
-
-## Flat Data
-
-
-**Source**
-
-<<< @/../src/pages/base_flat_data.tsx
-
-## Tree-shaped Data
-
-
-**Source**
-
-<<< @/../src/pages/base_tree_data.tsx
-
-## Trigger Element
-
-
-**Source**
-
-<<< @/../src/pages/custom_drag_trigger_flat_data.tsx{14}
-
-## Placeholder
-
-
-**Source**
-
-<<< @/../src/pages/customize_placeholder_and_node_box.tsx{13-19,23-39}
-
-## Open
-
-
-**Source**
-
-<<< @/../src/pages/open_ids.tsx{1,9-16,22-24,29-32}
-
-## Checked
-
-
-**Source**
-
-<<< @/../src/pages/checked_ids.tsx{1,9-15,21-23,28-29}
-
-## Draggable & Droppable
-
-
-**Source**
-
-<<< @/../src/pages/draggable_droppable.tsx{16-18}
-
-## Open when drag onto
-
-
-**Source**
-
-<<< @/../src/pages/dragopen.tsx
-
-## Update Flat Data
-
-
-**Source**
-
-<<< @/../src/pages/update_data.tsx{3,12-22,33-34}
-
-## Update Flat Data with immer
-
-
-**Source**
-
-<<< @/../src/pages/update_flat_data_with_immer.tsx{3,7,12,13-31,42-44}
-
-## Update Tree Data with immer
-
-
-**Source**
-
-<<< @/../src/pages/update_tree_data_with_immer.tsx{1,4,10-30,41-43}
-
-## Drag from External
-
-
-**Source**
-
-<<< @/../src/pages/external_drag.tsx{16-22,25}
-
-## Big Data
-
-
-**Source**
-
-<<< @/../src/pages/virtual_list.tsx{23,30}
-
-## Scroll to Node
-
-
-**Source**
-
-<<< @/../src/pages/scroll_to_node.tsx{17,30}
diff --git a/docs/v1/guide.md b/docs/v1/guide.md
deleted file mode 100644
index 6502149..0000000
--- a/docs/v1/guide.md
+++ /dev/null
@@ -1,267 +0,0 @@
-# Guide
-
-## Installation
-
-::: code-group
-
-```sh [npm]
-npm install he-tree-react
-```
-
-```sh [pnpm]
-pnpm add he-tree-react
-```
-
-```sh [yarn]
-yarn add he-tree-react
-```
-
-:::
-
-## Data Types
-
-This library supports two types of data structures:
-
-- Flat data, which is a one-dimensional array. Similar to data stored in a database. Each item requires an id, a parent id, `null` means there is no parent. The order of flat data must be the same as the tree, you can use the [`sortFlatData`](./api#sortflatdata) method to sort the data when initializing the data.
- ```js
- [
- { id: 1, pid: null },
- { id: 2, pid: 1 },
- { id: 3, pid: 2 },
- ];
- ```
-- Tree data. Each node contain child nodes in an array. If id is not specified, this library will use the node's index in the tree as the id. When using tree data, you need to set `dataType: 'tree'`.
- ```js
- [
- {
- id: 1,
- children: [
- {
- id: 2,
- children: [{ id: 3 }],
- },
- ],
- },
- ];
- ```
-
-The `id, pid, children` in the data are not fixed. In the options, use `idKey, parentIdKey, childrenKey` to indicate the corresponding key names in your data.
-
-## No Components
-
-This library does not export components, but exports a hook `useHeTree`. Use the returned `renderTree` to render the tree. The advantage of this is that in addition to `renderTree`, `useHeTree` will also return some internal states and methods, which can be easily obtained.
-
-```js
-import { useHeTree } from "he-tree-react";
-
-export default function App() {
- const { renderTree } = useHeTree({...})
- return
- {renderTree()}
-
-}
-```
-
-## Options
-
-`useHeTree` is the primary function used, its first parameter is an options object. The required options are `data`, and at least one of `renderNode, renderNodeBox` must be present. Other important options include:
-
-- `dataType`, indicating data type. Available values:
- - `flat`, default. Flat data.
- - `tree`, tree-shaped data.
-- `idKey, parentIdKey`, the default values are `id` and `parent_id`. Needed when using flat data. Although there are default values, it is better to explicitly state them.
-- `childrenKey`, the default is `children`. Needed when using tree-shaped data. Although there are default values, it is better to explicitly state them.
-- `onChange`, a function called when data changes, the parameter is new data. If your tree will not change then this is not required.
-- `isFunctionReactive`, boolean. Default `false`. `useHeTree` options include many callback functions, such as `onChange, canDrop`. `isFunctionReactive` can be used to control whether to listen for changes to these callback functions. If your callback functions and `data` change synchronously, you do not need to enable this. Otherwise, you need to enable this and use React's `useCallback` or `useMemo` to cache all your callback functions to avoid performance issues.
-
-[See the `useHeTree` API documentation for more information](api#usehetree).
-
-## Tips
-
-- `stat`, information related to a single node. Most of the parameters in callback functions have `stat`. [Refer to `Stat` API](api#stat).
-- `node`, the data of the node. You can get node data through `stat.node`.
-- `getStat`, through this function you can get `stat`, the only parameter can be `id, node, stat`. This function is in the return object of `useHeTree`: `const {getStat} = useHeTree({...})`.
-- The code examples below have preview. These examples can be directly copied for use. Pay attention to the the highlighted lines in code.
-- The code examples below use the `tsx` format, if you need the `js` format, you can use any ts js online converter.
-
-## Use Flat Data
-
-<<< @/../src/pages/base_flat_data.tsx
-
-
-## Use Tree-shaped Data
-
-<<< @/../src/pages/base_tree_data.tsx
-
-
-## Custom Drag Trigger Element
-
-You can add the `draggable` attribute to any child element of the node.
-
-<<< @/../src/pages/custom_drag_trigger_flat_data.tsx{14}
-
-
-## HTML and Style of Node
-
-Node HTML:
-
-```html
-
-```
-
-There are two `div` above. Use the `renderNode` option to control the rendering of the inner div. For example: `renderNode: ({node}) => {node.name}
`.
-
-The outer div is called `nodeBox`, don't modify its `padding-left, padding-right`. Use the [`indent`](api#indent) option to control the indentation of the node. If you want to control the rendering of `nodeBox` or the drag placeholder, you can use the `renderNodeBox` option, which will override `renderNode`. The standard `renderNodeBox` is as follows:
-
-```tsx{4-7,9}
-renderNodeBox: ({ stat, attrs, isPlaceholder }) => (
-
- {isPlaceholder ? (
-
- ) : (
-
{/* node area */}
- )}
-
-);
-```
-
-Lines 4 to 7 are drag-and-drop placeholder. Line 9 is node.
-
-## Custom Drag Placeholder and Node Box
-
-<<< @/../src/pages/customize_placeholder_and_node_box.tsx{13-19,23-39}
-
-
-## Open & Close
-
-- Use the `openIds` option to indicate the open nodes.
-- The `open` status of the node can be obtained through `stat.open`.
-- The `allIds` returned by `useHeTree` contains the ids of all nodes.
-- This library exports methods that can expand all parents of one or multiple nodes. For flat data: [`openParentsInFlatData`](api#openparentsinflatdata). For tree data: [`openParentsInTreeData`](api#openparentsintreedata).
-
-<<< @/../src/pages/open_ids.tsx{1,9-16,22-24,29-32}
-
-
-## Checked
-
-- Use the option `checkedIds` to indicate the checked nodes.
-- The `checked` status of this node can be obtained through `stat.checked`.
-- This library exports methods that can get `checkedIds` for one or more nodes after the `checked` status changes. Flat data: [`updateCheckedInFlatData`](api#updatecheckedinflatdata). Tree data: [`updateCheckedInTreeData](api#updatecheckedintreedata).
- - The update of this method to the node's `checked` is cascading. If you don't want to cascade updates, replace it with your own logic.
- - This method returns an array of length 2. The first item is all checked ids, and the second item is all semi-checked ids. If you don't need semi-checked, ignore the second item.
- - Semi-checked, that is, there are child nodes that are checked or semi-checked, and there are child nodes that are not checked.
-
-<<< @/../src/pages/checked_ids.tsx{1,9-15,21-23,28-29}
-
-
-## draggable & droppable
-
-Use the following options to control:
-
-- [`canDrag`](api#candrag), whether the node can be dragged.
-- [`canDrop`](api#candrop), whether the node can be dropped.
-- [`canDropToRoot`](api#candroptoroot), whether the tree root can be dropped.
-
-<<< @/../src/pages/draggable_droppable.tsx{16-18}
-
-
-- The root node cannot be dropped.
-- `Technology` and its sub-nodes can be dragged. `Science` and its sub-nodes cannot be dragged.
-- `Science` and its sub-nodes can be dropped. `Technology` and its sub-nodes cannot be dropped.
-
-## Open when dragging over
-
-Use the following options to control:
-
-- [`dragOpen`](api#dragopen), whether to enable, default `false`.
-- [`dragOpenDelay`](api#dragopen), delay, default `600` milliseconds.
-- [`onDragOpen`](api#ondragopen), the function called when the node is opened.
-
-<<< @/../src/pages/dragopen.tsx
-
-
-## Update Data
-
-Due to the immutable nature of React, it is difficult to update flat data and tree data. For flat data, this library provides two methods to add nodes or delete nodes. If you want to perform more complex operations, or update tree data, it is recommended that you use [`immer`](https://github.com/mweststrate/immer).
-
-::: code-group
-
-```sh [npm]
-npm install immer use-immer
-```
-
-```sh [pnpm]
-pnpm add immer use-immer
-```
-
-```sh [yarn]
-yarn add immer use-immer
-```
-
-:::
-
-## Update Flat Data
-
-[`addToFlatData`](api#addtoflatdata). [`removeByIdInFlatData`](api#removebyidinflatdata).
-These 2 methods will modify original data, so pass copy to it, or use `immer`.
-
-<<< @/../src/pages/update_data.tsx{3,12-22,33-34}
-
-
-## Update Flat Data with immer
-
-Note, here we use `useImmer` instead of React's `useState`.
-
-<<< @/../src/pages/update_flat_data_with_immer.tsx{3,7,12,13-31,42-44}
-
-
-## Update Tree Data with immer
-
-Note, here we use `useImmer` instead of React's `useState`. `findTreeData` is like `Array.prototype.find`.
-
-<<< @/../src/pages/update_tree_data_with_immer.tsx{1,4,10-30,41-43}
-
-
-## Drag from External
-
-Related options:
-
-- [`onExternalDragOver`](api#onexternaldragover): Indicate whether to handle external drag.
-- [`onExternalDrop`](api#onexternaldrop): Callback when drop from external.
-
-<<< @/../src/pages/external_drag.tsx{16-22,25}
-
-
-## Big Data
-
-Use option [`virtual`](api#virtual) to enable virtual list. Remember to set height for tree.
-
-<<< @/../src/pages/virtual_list.tsx{23,30}
-
-
-## Touch & Mobile Device
-
-It is based on HTML5 Drag and Drop API. So it works in any device that supports Drag and Drop API. For others, you can try Drag and Drop API polyfill.
-
-::: tip Notice
-In mobile, user need touch and hold to trigger drag.
-:::
-
-## Others
-
-- Option [`direction`](api#direction): from right to left.
-- Option [`customDragImage`](api#customdragimage): custom drag image.
-- Option [`rootId`](api#rootid): the parent id of root nodes in flat data.
-- Option [`keepPlaceholder`](api#keepplaceholder): whether to retain the drag placeholder node when dragging outside the tree. Default is `false`.
-- Function [`scrollToNode`](api#scrolltonode): Scroll to a node.
diff --git a/docs/zh/index.md b/docs/zh/index.md
deleted file mode 100644
index 3567ed8..0000000
--- a/docs/zh/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-# https://vitepress.dev/reference/default-theme-home-page
-layout: home
-
-hero:
- name: "He Tree React"
- # text: ""
- tagline: React 可拖拽树组件
- actions:
- - theme: brand
- text: 开始使用
- link: ./v1/guide
- - theme: alt
- text: 演示
- link: ./v1/examples
-
-features:
- - title: 可拖拽
- details: 拖拽时显示占位框辅助用户选择位置.
- - title: 高性能
- details: 支持虚拟列表, 从容处理大量数据.
- - title: 易定制
- details: 结构简单, 很少内置样式, 可以容易的修改样式和UI.
----
-
-## 功能
-
-- 拖拽时显示一个占位元素指示位置.
-- 节点高度不固定.
-- 基于 HTML Drag and Drop API.
-- 同时支持扁平数据和树形数据.
-- 支持外部拖拽.
-- 展开与折叠, 拖拽到节点上时展开它.
-- 勾选, 半选.
-- 大数据, 虚拟列表.
-- 更新数据的多个示例.
-- rtl, 从右往左显示.
diff --git a/docs/zh/v1/api.md b/docs/zh/v1/api.md
deleted file mode 100644
index e8d07f6..0000000
--- a/docs/zh/v1/api.md
+++ /dev/null
@@ -1,341 +0,0 @@
-# API
-
-## 导出
-
-此库导出的变量, 方法, Typescript 类型.
-
-- [`useHeTree`](#usehetree): 主要的 React hook. 本库没有导出组件, 你需要使用此函数返回的[`renderTree`](#rendertree)渲染树.
-- [`walkTreeData`](#walktreedata), [`walkTreeDataGenerator`](#walktreedatagenerator), [`findTreeData`](#findtreedata), [`filterTreeData`](#filtertreedata), [`openParentsInTreeData`](#openparentsintreedata), [`updateCheckedInTreeData`](#updatecheckedintreedata): 用来处理和遍历树形数据的方法.
-- [`sortFlatData`](#sortflatdata), [`walkFlatData`](#walkflatdata), [`walkFlatDataGenerator`](#walkflatdatagenerator), [`convertIndexToTreeIndexInFlatData`](#convertindextotreeindexinflatdata), [`addToFlatData`](#addtoflatdata), [`removeByIdInFlatData`](#removebyidinflatdata), [`openParentsInFlatData`](#openparentsinflatdata), [`updateCheckedInFlatData`](#updatecheckedinflatdata): 用来处理和遍历扁平数据的方法.
-- [`walkParentsGenerator`](#walkparentsgenerator): 遍历另一种特殊数据的方法. 这种数据类似`HTMLElement`, 其中包含类似于`parentElement`的指向父节点的键.
-- `defaultProps`: `useHeTree`的选项的默认值.
-
-以下为 Typescript 的类型:
-
-- `Id`: 节点 id, 父级 id. 类型: `string | number`.
-- [`Stat`](#stat): 节点的相关信息.
-- `HeTreeProps`: `useHeTree`的选项.
-
-## useHeTree
-
-```ts
-import { useHeTree } from "he-tree-react";
-const {/* return */} = useHeTree({/* options */}) // prettier-ignore
-```
-
-本库的主要功能. React hook. 参数如下:
-
-- options: 选项, 类型是对象. 以下是 options 中的部分属性:
-
- | 名称 | 类型 | 默认值 | 描述 |
- | ---------------------------------------------- | ----------------------- | ----------- | :-------------------------------------------------------------------- |
- | data | Array | | 数据. 参考[数据类型](guide#数据类型). |
- | dataType | 'flat', 'tree' | 'flat' | 数据类型 |
- | idKey | string | 'id' | 你的数据中 id 的键名. |
- | parentIdKey | string | 'parent_id' | 你的数据中父级 id 的键名. 仅用于扁平数据. |
- | childrenKey | string | 'children' | 你的数据中子级的键名. 仅用于树形数据. |
- | indent | number | 20 | 节点缩进, 单位是 px. |
- | dragOpen | boolean | false | 是否启用功能"拖拽到节点上时打开节点". |
- | dragOpenDelay | number | 600 | 拖拽到节点上时打开节点的等待时间. 单位是毫秒. |
- | onDragOpen | `function(stat): void` | | 拖拽到节点上时打开节点的回调. |
- | direction | 'lrt', 'rtl' | 'ltr' | 显示方向, ltr 是从左往右显示, rtl 与之相反. |
- | rootId | string, null | null | 使用扁平数据时, 没有父级的节点的父级 id. |
- | virtual | boolean | false | 是否启用虚拟化. 当数据非常多时用来提高性能. |
- | keepPlaceholder | boolean | false | 当拖拽离开树的范围, 是否要保留占位元素. 建议只在一个树的页面开启此项. |
- | openIds | Array | | 所有打开节点的 id. |
- | checkedIds | Array | | 所有勾选的节点的 id. |
- | isFunctionReactive | boolean | false | 是否监听回调函数的改变. [参考](guide#isfunctionreactive) |
-
- 以下是 options 中的剩余回调方法:
- | 名称 | 类型 | 描述 |
- | ------------------------- | ------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------|
- | renderNode | `(stat)=> ReactNode` | 节点的渲染函数. |
- | renderNodeBox | `({stat, attrs, isPlaceholder})=> ReactNode` | nodeBox 的渲染函数. [参考](guide#node_structure_style). |
- | onChange | `(newData)=>void`|数据发生改变时调用.|
- | canDrag | `(stat)=>boolean, null, undefined, void` | 节点是否可拖拽. 返回`null, undefined, void`表示继承父节点. |
- | canDrop | `(stat, index)=>boolean, null, undefined, void` | 节点是否可放入. 返回`null, undefined, void`表示继承父节点. 参数`index`可能为空, 不为空时表示将要放入节点的子级的位置. |
- | customDragImage | `(event, stat)=> void` | 调用`event.dataTransfer.setDragImage`自定义 drag image. [参考](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage). |
- |onDragStart | `(event, stat)=> void` |当拖拽开始时|
- |onExternalDragOver |`(event)=>boolean`|当拖拽来自外部时调用. 你必选返回布尔值表示是否处理此拖拽.|
- |onDragOver | `(event, stat, isExternal)=> void` |当拖拽到树上方时, `isExternal`表示此次拖拽是否来自外部.|
- |onDragEnd |`(event, stat, isOutside)=>void`|当此树发起的拖拽结束时调用. stat 是此次拖拽的节点的 stat.isOutside 表示是否在树外部结束.|
- |onExternalDrop |`(event, parentStat, index)=>void`|当外部拖拽在此树结束时调用. parentStat 是目标父节点的 stat, 为空时代表树的根级. index 是目标位置, 即节点在兄弟节点中的索引.|
-
-### `useHeTree`的返回
-
-`useHeTree`的返回是对象, 包含了一些 states 和方法. **注意**, 这个对象每次更新都会改变, 不要依赖这个对象, 可以依赖这个对象的属性. 属性如下:
-| 名称 | 类型 | 描述 |
-| ------------------------- | ------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------|
-|renderTree |`(options?: { className?: string, style?: React.CSSProperties }): ReactNode`|渲染树. 参数可以传入`className`和`style`控制根元素的样式.|
-|getStat |`(idOrNodeOrStat)=>stat`|根据 id, 节点数据或 stat, 获得对应的 stat.|
-|allIds |数组|所有节点的 id.|
-|rootIds |数组|树根级的所有节点的 id.|
-|rootNodes |数组|树根级的所有节点的数据. 如果是树形数据, 它就是选项中的`data`.|
-|rootStats |数组|树根级的所有节点的 stat.|
-|placeholder |`{parentStat, index, level}`| 拖拽时占位节点的信息. 占位节点不存在时为空.|
-|draggingStat |`stat`|由此树发起拖拽时, 被拖拽的节点的 stat. 不存在时为空.|
-|dragOverStat |`stat`|拖拽到其上面的节点. 可能为空.|
-|visibleIds |数组|显示的所有节点的 id.|
-|attrsList |数组|显示的所有节点的 attrs.|
-|virtualListRef |`ref`|虚拟列表组件的 ref, 参考[虚拟列表](https://github.com/phphe/react-base-virtual-list).|
-|scrollToNode |`(idOrNodeOrStat)=>boolean`|滚动到节点. 参数可以是 id, 节点数据或 stat. 如果节点未找到或未显示, 返回`false`. [例子](examples#scroll_to_node2)|
-
-## walkTreeDataGenerator
-
-通过`for of`遍历树形数据的方法. 循环中执行`skipChildren()`将跳过该节点的所有子节点, 执行`exitWalk`将结束遍历.
-
-```ts
-for (const [
- node,
- { parent, parents, siblings, index, skipChildren, exitWalk },
-] of walkTreeDataGenerator(data, "children")) {
- // ...
-}
-```
-
-## walkTreeData
-
-通过回调方法遍历树形数据的方法. 回调方法中执行`skipChildren()`将跳过该节点的所有子节点, 执行`exitWalk`将结束遍历.
-
-```ts
-walkTreeDataGenerator(
- data,
- (node, { parent, parents, siblings, index, skipChildren, exitWalk }) => {
- // ...
- },
- "children"
-);
-```
-
-## findTreeData
-
-类似 `Array.prototype.find`. 返回找到的第一个节点. 回调方法中执行`skipChildren()`将跳过该节点的所有子节点, 执行`exitWalk`将结束遍历.
-
-```ts
-let foundNode = findTreeData(
- data,
- (node, { parent, parents, siblings, index, skipChildren, exitWalk }) => {
- // return node.id === 1;
- },
- "children"
-);
-```
-
-## filterTreeData
-
-类似 `Array.prototype.filter`. 返回找到的所有节点. 回调方法中执行`skipChildren()`将跳过该节点的所有子节点, 执行`exitWalk`将结束遍历.
-
-```ts
-let nodes = filterTreeData(
- data,
- (node, { parent, parents, siblings, index, skipChildren, exitWalk }) => {
- // return node.id > 1;
- },
- "children"
-);
-```
-
-## openParentsInTreeData
-
-打开单个或多个节点的所有父节点, 这样才能确保该节点可见. [参考](guide#node_open).
-
-```
-(
- treeData,
- openIds: Id[],
- idOrIds: Id | Id[],
- options?: {idKey: string, childrenKey: string}
-): newOpenIds
-```
-
-## updateCheckedInTreeData
-
-更新单个节点或多个节点的`checked`状态. 这将同时更新它们的子节点和父节点. [参考](guide#node_checked).
-
-```
-(
- treeData,
- checkedIds: Id[],
- idOrIds: Id | Id[],
- checked: boolean,
- options?: {idKey: string, childrenKey: string}
-): [newCheckedIds, newSemiCheckedIds]
-```
-
-## sortFlatData
-
-把扁平数据按照节点在树里的顺序排序. 返回排序后的新数组. 你的数据在初始化时应该使用它以保证顺序.
-
-```
-(
- flatData,
- options?: {idKey: string, parentIdKey: string}
-): sortedData
-```
-
-## walkFlatDataGenerator
-
-通过`for of`遍历扁平数据的方法. 循环中执行`skipChildren()`将跳过该节点的所有子节点, 执行`exitWalk`将结束遍历. 使用前需确保你的数据的顺序是正确的.
-
-相比于`walkTreeDataGenerator`, 少了`siblings`, 多了 `treeIndex, id, pid`. `treeIndex`是节点在整个树中的索引.
-
-```ts
-for (const [
- node,
- { parent, parents, index, treeIndex, id, pid, skipChildren, exitWalk },
-] of walkFlatDataGenerator(flatData, {
- idKey: "id",
- parentIdKey: "parent_id",
-})) {
- // ...
-}
-```
-
-## walkFlatData
-
-通过回调方法遍历扁平数据的方法. 回调方法中执行`skipChildren()`将跳过该节点的所有子节点, 执行`exitWalk`将结束遍历. 使用前需确保你的数据的顺序是正确的.
-
-```ts
-walkFlatData(
- flatData,
- (
- node,
- { parent, parents, index, treeIndex, id, pid, skipChildren, exitWalk }
- ) => {
- // ...
- },
- {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-);
-```
-
-## openParentsInFlatData
-
-打开单个或多个节点的所有父节点, 这样才能确保该节点可见. 用前需确保你的数据的顺序是正确的. [参考](guide#node_open).
-
-```
-(
- flatData,
- openIds: Id[],
- idOrIds: Id | Id[],
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-): newOpenIds
-```
-
-## updateCheckedInFlatData
-
-更新单个节点或多个节点的`checked`状态. 这将同时更新它们的子节点和父节点. 用前需确保你的数据的顺序是正确的. [参考](guide#node_checked).
-
-```
-(
- flatData,
- checkedIds: Id[],
- idOrIds: Id | Id[],
- checked: boolean,
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-): [newCheckedIds, newSemiCheckedIds]
-```
-
-## convertIndexToTreeIndexInFlatData
-
-通过某节点的父节点 id 和它在兄弟节点中的索引, 计算出它在整棵树中的索引.
-
-```
-(
- flatData,
- parentId: Id | null,
- indexInSiblings: Id | null,
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-): treeIndex
-```
-
-## addToFlatData
-
-向扁平数据添加一个节点. 它会改变原数据数组. 所以推荐传入原始数据的拷贝, 或者与`useImmer`一起使用. [参考](guide#update_flat_data_with_inner_methods2)
-
-```
-(
- flatData,
- newNode,
- index: Id | null,
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-):void
-```
-
-## removeByIdInFlatData
-
-从扁平数据删除一个节点. 返回被删除的数据. 它会改变原数据数组. 所以推荐传入原始数据的拷贝, 或者与`useImmer`一起使用. [参考](guide#update_flat_data_with_inner_methods2)
-
-```
-(
- flatData,
- removeId: Id | null,
- options?: {
- idKey: "id",
- parentIdKey: "parent_id",
- }
-): removedData
-```
-
-## walkParentsGenerator
-
-遍历另一种特殊数据的方法. 这种数据类似`HTMLElement`, 其中包含类似于`parentElement`的指向父节点的键.
-
-```
-(
- node,
- parentKeyOrGetter: string | ((node) => parent | undefined),
- options?: {
- withSelf: boolean;
- }
-): Generator
-```
-
-`parentKeyOrGetter`可以是字符串或者返回父级的方法. `options.withSelf`表示是否包括传入的节点. 返回 [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator). 下面是遍历 HTMLElement 的例子:
-
-```ts
-let el = document.querySelector("div");
-for (const parent of walkParentsGenerator(el, "parentElement", {
- withSelf: true,
-})) {
- // ...
-}
-```
-
-## Stat
-
-`stat`包括和节点有关的信息. 只读. 属性如下:
-
-| 名称 | 类型 | 描述 |
-| ------------ | ------------ | :-------------------------- |
-| \_isStat | boolean | 表明是否是 stat 对象 |
-| node | object | 节点的数据 |
-| id | Id | id |
-| pid | Id, null | 节点的父级 id |
-| parent | object, null | 父节点的数据 |
-| parentStat | stat, null | 父节点的 stat |
-| childIds | Id[] | 子节点的 id 数组 |
-| children | object[] | 子节点数组 |
-| childStats | stat[] | 子节点的 stat 数组 |
-| siblingIds | Id[] | 兄弟节点的 id 数组 |
-| siblings | object[] | 兄弟节点数组 |
-| siblingStats | stat[] | 兄弟节点的 stat 数组 |
-| index | number | 节点在兄弟节点中的索引 |
-| level | number | 节点在树中的深度. 从 1 开始 |
-| open | boolean | 是否展开 |
-| checked | boolean | 是否勾选 |
-| draggable | boolean | 是否可拖动 |
diff --git a/docs/zh/v1/examples.md b/docs/zh/v1/examples.md
deleted file mode 100644
index e1ed0d9..0000000
--- a/docs/zh/v1/examples.md
+++ /dev/null
@@ -1,106 +0,0 @@
-# 示例
-
-## 自定义样式
-
-
-**源代码**
-
-<<< @/../src/pages/custom_style.tsx
-
-## 扁平数据
-
-
-**源代码**
-
-<<< @/../src/pages/base_flat_data.tsx
-
-## 树形数据
-
-
-**源代码**
-
-<<< @/../src/pages/base_tree_data.tsx
-
-## 触发元素
-
-
-**源代码**
-
-<<< @/../src/pages/custom_drag_trigger_flat_data.tsx{14}
-
-## 占位元素
-
-
-**源代码**
-
-<<< @/../src/pages/customize_placeholder_and_node_box.tsx{13-19,23-39}
-
-## 展开
-
-
-**源代码**
-
-<<< @/../src/pages/open_ids.tsx{1,9-16,22-24,29-32}
-
-## 勾选
-
-
-**源代码**
-
-<<< @/../src/pages/checked_ids.tsx{1,9-15,21-23,28-29}
-
-## 拖拽控制
-
-
-**源代码**
-
-<<< @/../src/pages/draggable_droppable.tsx{16-18}
-
-## 拖拽时打开
-
-
-**源代码**
-
-<<< @/../src/pages/dragopen.tsx
-
-## 更新扁平数据
-
-
-**源代码**
-
-<<< @/../src/pages/update_data.tsx{3,12-22,33-34}
-
-## 更新扁平数据使用 immer
-
-
-**源代码**
-
-<<< @/../src/pages/update_flat_data_with_immer.tsx{3,7,12,13-31,42-44}
-
-## 更新树形数据使用 immer
-
-
-**源代码**
-
-<<< @/../src/pages/update_tree_data_with_immer.tsx{1,4,10-30,41-43}
-
-## 外部拖拽交互
-
-
-**源代码**
-
-<<< @/../src/pages/external_drag.tsx{16-22,25}
-
-## 大数据, 虚拟列表
-
-
-**源代码**
-
-<<< @/../src/pages/virtual_list.tsx{23,30}
-
-## 滚动到节点
-
-
-**源代码**
-
-<<< @/../src/pages/scroll_to_node.tsx{17,30}
diff --git a/docs/zh/v1/guide.md b/docs/zh/v1/guide.md
deleted file mode 100644
index 98e9f3f..0000000
--- a/docs/zh/v1/guide.md
+++ /dev/null
@@ -1,269 +0,0 @@
-# 使用指南
-
-## 安装
-
-::: code-group
-
-```sh [npm]
-npm install he-tree-react
-```
-
-```sh [pnpm]
-pnpm add he-tree-react
-```
-
-```sh [yarn]
-yarn add he-tree-react
-```
-
-:::
-
-## 数据类型
-
-此库支持两种结构的数据:
-
-- 扁平数据, 即一个一维数组. 类似与存储在数据库中的数据. 每项需要`id`, 父级 id, `null`代表没有父级. 扁平数据的顺序必须跟树一样, 你可以在初始化数据时使用[`sortFlatData`](./api#sortflatdata)方法给数据排序.
- ```js
- [
- { id: 1, pid: null },
- { id: 2, pid: 1 },
- { id: 3, pid: 2 },
- ];
- ```
-- 树形数据. 使用`children`数组包含子节点. 如果未指定`id`, 此库将使用节点在树中的索引作为`id`. 使用树形数据时需设置`dataType: 'tree'`.
-
-```js
-[
- {
- id: 1,
- children: [
- {
- id: 2,
- children: [{ id: 3 }],
- },
- ],
- },
-];
-```
-
-数据中的`id, pid, children`不是固定的. 在设置中, 使用`idKey, parentIdKey, childrenKey`表明你的数据中的对应键名.
-
-## 没有组件
-
-此库没有导出组件,而是导出一个 hook `useHeTree`. 使用它返回的`renderTree`渲染树. 这样做的好处是除了`renderTree`,
-`useHeTree`还会返回一些内部状态和方法, 可以轻松的被获取.
-
-```js
-import { useHeTree } from "he-tree-react";
-
-export default function App() {
- const { renderTree } = useHeTree({...})
- return
- {renderTree()}
-
-}
-```
-
-## 选项
-
-`useHeTree`是主要使用的函数, 它的第一个参数是选项对象. 必须的选项有`data`, 必须两者中有一个的是`renderNode, renderNodeBox`. 其他重要选项是:
-
-- `dataType`, 表明数据类型. 可用值:
- - `flat`, 默认. 扁平数据.
- - `tree`, 树形数据.
-- `idKey, parentIdKey`, 默认值是`id`和`parent_id`. 使用扁平数据时需要. 虽然有默认值, 但还是建议写明更好.
-- `childrenKey`, 默认是`children`. 使用树形数据时需要. 虽然有默认值, 但还是建议写明更好.
-- `onChange`, 数据改变时调用的函数, 参数是新数据. 如果你的树不会改变则不需要.
-- `isFunctionReactive`, 布尔. 默认`false`. `useHeTree`选项中包含许多回调函数, 如`onChange, canDrop`. `isFunctionReactive`可用来控制是否监听这些回调函数的改变. 如果你的回调函数和`data`是同步改变的, 则不用启用此项. 否则你需要启用此项, 并且用 React 的`useCallback`或`useMemo`缓存你的所有回调函数以避免性能问题.
-
-[查看`useHeTree`的 API 文档以了解更多](api#usehetree).
-
-## 提示
-
-- `stat`, 单个节点的相关信息. 大部分回调函数的参数里有`stat`. [参考`Stat` API](api#stat).
-- `node`, 节点的数据. 通过`stat.node`可以获取节点数据.
-- `getStat`, 通过此函数可以获取`stat`, 唯一参数可以是`id, node, stat`. 此函数在`useHeTree`的返回对象中: `const {getStat} = useHeTree({...})`.
-- 下面的代码例子附带有运行效果. 这些例子可以直接复制使用. 注意其中的高亮行的代码.
-- 下面的代码例子使用`tsx`格式, 如果你需要`js`格式, 可以使用任意 ts js 在线转换器.
-
-## 基础使用-扁平数据
-
-<<< @/../src/pages/base_flat_data.tsx
-
-
-## 基础使用-树形数据
-
-<<< @/../src/pages/base_tree_data.tsx
-
-
-## 自定义拖拽触发元素
-
-给节点任意子元素添加`draggable`属性即可.
-
-<<< @/../src/pages/custom_drag_trigger_flat_data.tsx{14}
-
-
-## 节点 HTML 结构和样式
-
-节点 HTML 如下:
-
-```html
-
-```
-
-上面有两个 div. 使用`renderNode`选项控制内层 div 的渲染. 如: `renderNode: ({node}) => {node.name}
`.
-
-外层节点被称为`nodeBox`, 不要修改它的`padding-left, padding-right`. 使用选项[`indent`](api#indent)控制节点的缩进. 如果你想控制`nodeBox`或拖拽占位节点的渲染, 可以使用`renderNodeBox`选项, 这将覆盖`renderNode`. 标准的`renderNodeBox`如下:
-
-```tsx{4-7,9}
-renderNodeBox: ({ stat, attrs, isPlaceholder }) => (
-
- {isPlaceholder ? (
-
- ) : (
-
{/* node area */}
- )}
-
-);
-```
-
-第 4 到第 7 行是拖拽占位节点. 第 9 行是节点元素.
-
-## 自定义拖拽占位节点和 node box
-
-<<< @/../src/pages/customize_placeholder_and_node_box.tsx{13-19,23-39}
-
-
-## 节点的展开与折叠
-
-- 使用选项`openIds`表明展开的节点.
-- 可通过`stat.open`获取该节点的`open`状态.
-- `useHeTree`返回的`allIds`包含所有节点的 id.
-- 此库导出了方法可以展开单个或多个节点的所有父级. 扁平数据: [`openParentsInFlatData`](api#openparentsinflatdata). 树形数据: [`openParentsInTreeData`](api#openparentsintreedata).
-
-<<< @/../src/pages/open_ids.tsx{1,9-16,22-24,29-32}
-
-此例子顶部 4 个按钮分别是: 展开全部, 折叠全部, 展开'Python'节点的所有父节点, 仅展开'Python'节点的所有父节点.
-
-## 节点的勾选
-
-- 使用选项`checkedIds`表明勾选的节点.
-- 可通过`stat.checked`获取该节点的`checked`状态.
-- 此库导出了方法可以获取单个或多个节点`checked`变动后的`checkedIds`. 扁平数据: [`updateCheckedInFlatData`](api#updatecheckedinflatdata). 树形数据: [`updateCheckedInTreeData](api#updatecheckedintreedata).
- - 此方法对节点的`checked`的更新是级联的. 如果你不想级联更新, 使用你自己的逻辑替代.
- - 此方法返回一个长度 2 的数组. 第一项是所有勾选的 id, 第二项是所有半选的 id. 如果不需要半选, 忽略第二项.
- - 半选, 即同时有子节点被勾选或半选, 也有子节点未被勾选.
-
-<<< @/../src/pages/checked_ids.tsx{1,9-15,21-23,28-29}
-
-
-## 控制是否可拖拽, 可放入
-
-使用以下选项控制:
-
-- [`canDrag`](api#candrag), 节点是否可拖拽.
-- [`canDrop`](api#candrop), 节点是否可放入.
-- [`canDropToRoot`](api#candroptoroot), 树根是否可放入.
-
-<<< @/../src/pages/draggable_droppable.tsx{16-18}
-
-
-- 根节点不可放入.
-- `Technology`及子节点可以拖拽. `Science`及子节点不可以拖拽.
-- `Science`及子节点可以放入. `Technology`及子节点不可以放入.
-
-## 拖拽到节点上时打开节点
-
-使用以下选项控制:
-
-- [`dragOpen`](api#dragopen), 是否启用, 默认`false`.
-- [`dragOpenDelay`](api#dragopen), 延时, 默认 `600` 毫秒.
-- [`onDragOpen`](api#ondragopen), 打开节点时调用的函数.
-
-<<< @/../src/pages/dragopen.tsx
-
-
-## 更新数据
-
-由于 React 的不可变特性, 扁平数据和树形数据更新都很困难. 针对扁平数据, 此库提供了两个方法, 用以增加节点或删除节点. 如果你要进行更复杂的操作, 或者更新树形数据, 推荐你使用[`immer`](https://github.com/mweststrate/immer).
-::: code-group
-
-```sh [npm]
-npm install immer use-immer
-```
-
-```sh [pnpm]
-pnpm add immer use-immer
-```
-
-```sh [yarn]
-yarn add immer use-immer
-```
-
-:::
-
-## 使用内置方法更新扁平数据
-
-[`addToFlatData`](api#addtoflatdata): 增加节点. [`removeByIdInFlatData`](api#removebyidinflatdata): 删除节点.
-这两个方法都会改变原数据, 所以把原数据的复制传给它, 或者与`immer`一起使用.
-
-<<< @/../src/pages/update_data.tsx{3,12-22,33-34}
-
-
-## 使用 immer 更新扁平数据
-
-注意, 这里使用了`useImmer`替代 React 的`useState`.
-
-<<< @/../src/pages/update_flat_data_with_immer.tsx{3,7,12,13-31,42-44}
-
-
-## 使用 immer 更新树形数据
-
-注意, 这里使用了`useImmer`替代 React 的`useState`. `findTreeData`方法类似数组的`find`方法.
-
-<<< @/../src/pages/update_tree_data_with_immer.tsx{1,4,10-30,41-43}
-
-
-## 从外部发起的拖拽
-
-相关选项:
-
-- [`onExternalDragOver`](api#onexternaldragover): 表明是否处理外部拖拽.
-- [`onExternalDrop`](api#onexternaldrop): 当外部拖拽放入树中时调用的回调函数.
-
-<<< @/../src/pages/external_drag.tsx{16-22,25}
-
-
-## 超大数据
-
-使用选项[`virtual`](api#virtual)启用虚拟列表功能. 记得给树设置可见区域高度.
-
-<<< @/../src/pages/virtual_list.tsx{23,30}
-
-
-## 触摸 & 移动设备
-
-此库基于 HTML5 Drag and Drop API, 所以在支持 Drag and Drop API 的移动设备上能工作. 如果不支持, 可以尝试添加兼容 Drag and Drop API 的库.
-
-::: tip 注意
-触摸时, 用户需要触摸并等一会儿才能触发拖拽。
-:::
-
-## 其他
-
-- 选项 [`direction`](api#direction): 从右往左显示.
-- 选项 [`customDragImage`](api#customdragimage): 自定义 drag image.
-- 选项 [`rootId`](api#rootid): 使用扁平数据时, 顶级节点的父 id.
-- 选项 [`keepPlaceholder`](api#keepplaceholder): 拖拽到树外时, 是否要保留拖拽占位节点. 默认`false`.
-- 辅助方法 [`scrollToNode`](api#scrolltonode): 滚动到指定节点.
diff --git a/index.html b/index.html
deleted file mode 100644
index f9c38c7..0000000
--- a/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
- he-tree-react
-
-
-
-
-
-
diff --git a/lib/HeTree.tsx b/lib/HeTree.tsx
deleted file mode 100644
index 9567d89..0000000
--- a/lib/HeTree.tsx
+++ /dev/null
@@ -1,1201 +0,0 @@
-import React, { useMemo, useState, useRef, ReactNode, useLayoutEffect } from "react";
-import * as hp from "helper-js";
-import { VirtualList, VirtualListHandle } from "react-base-virtual-list";
-
-// types ==================================
-export type Id = string | number
-export interface Stat {
- id: Id,
- pid: Id | null,
- childIds: Id[],
- siblingIds: Id[],
- index: number,
- level: number,
- node: T,
- parent: T | null,
- parentStat: Stat | null,
- children: T[],
- childStats: Stat[],
- siblings: T[],
- siblingStats: Stat[],
- _isStat?: boolean,
- open: boolean,
- checked: boolean,
- draggable: boolean,
-}
-
-export type NodeAttrs = { 'data-key': string, 'data-level': string, 'data-node-box': boolean, 'data-drag-placeholder'?: boolean, 'data-dragging'?: boolean } & React.HTMLProps
-
-// single instance ==================================
-const dragOverInfo = {
- id: null as any,
- x: 0,
- y: 0,
- time: 0,
-}
-
-// react hooks ==================================
-export const defaultProps = {
- /**
- *
- */
- idKey: 'id',
- parentIdKey: 'parent_id',
- childrenKey: 'children',
- indent: 20,
- dragOpen: false,
- dragOpenDelay: 600,
- placeholderId: '__DRAG_PLACEHOLDER__',
- dataType: 'flat' as 'tree' | 'flat',
- direction: 'ltr' as 'ltr' | 'rtl',
- rootId: null as Id | null,
- virtual: false,
-}
-
-export interface HeTreeProps> extends Partial {
- data: T[],
- isFunctionReactive?: boolean,
- keepPlaceholder?: boolean,
- renderNode?: (stat: Stat) => ReactNode,
- renderNodeBox?: (info: { stat: Stat, attrs: NodeAttrs, isPlaceholder: boolean }) => ReactNode,
- canDrag?: (stat: Stat) => boolean | null | undefined | void,
- canDrop?: (stat: Stat, index?: number) => boolean | null | undefined | void,
- canDropToRoot?: (index?: number) => boolean,
- customDragImage?: (e: React.DragEvent, stat: Stat) => void,
- onDragStart?: (e: React.DragEvent, stat: Stat) => void,
- onDragOver?: (e: React.DragEvent, stat: Stat, isExternal: boolean) => void,
- onExternalDragOver?: (e: React.DragEvent) => boolean,
- onExternalDrop?: (e: React.DragEvent, parentStat: Stat | null, index: number) => void,
- onDragEnd?: (e: React.DragEvent, stat: Stat, isOutside: boolean) => void | boolean,
- onChange: (data: T[]) => void,
- onDragOpen?: (stat: Stat) => void,
- openIds?: Id[],
- checkedIds?: Id[],
-}
-
-export function useHeTree>(
- props0: HeTreeProps
-) {
- const props = { ...defaultProps, ...props0 }
- const { idKey: ID, parentIdKey: PID, childrenKey: CHILDREN, placeholderId, isFunctionReactive, } = props
- const flatOpt = { idKey: ID, parentIdKey: PID } // shared options for flat data
- if (!props.renderNode && !props.renderNodeBox) {
- throw new Error("Either renderNodeBox or renderNode is required.");
- }
- const rtl = props.direction === 'rtl'
- const openIdsStr = useMemo(() => props.openIds ? [...props.openIds].sort().toString() : undefined, [props.openIds])
- const openIdSet = useMemo(() => new Set(props.openIds), [openIdsStr])
- const checkedIdsStr = useMemo(() => props.checkedIds ? [...props.checkedIds].sort().toString() : '', [props.checkedIds])
- const checkedIdSet = useMemo(() => new Set(props.checkedIds), [checkedIdsStr])
- // mainCache ==================================
- const mainCache = useMemo(
- () => {
- const stats: Record> = {} // You can't get ordered values from an object. Because Chrome doesn't support it. https://segmentfault.com/a/1190000018306931
- const nodes: Record = {}
- const rootIds: Id[] = []
- const rootNodes: T[] = []
- const rootStats: Stat[] = []
- const allIds: Id[] = []
- //
- function* simpleWalk() {
- if (props.dataType === 'flat') {
- for (const node of props.data) {
- yield [node]
- }
- } else {
- for (const t of walkTreeDataGenerator(props.data, CHILDREN)) {
- yield t
- }
- }
- }
- let count = 0
- for (const [node, info] of simpleWalk()) {
- const id: Id = node[ID] ?? count
- allIds.push(id)
- let pid = node[PID] as Id
- if (props.dataType === 'tree') {
- pid = info.parent?.[ID] ?? null
- }
- let parent = nodes[pid] || null
- const parentStat = stats[pid] || null;
- const childIds: Id[] = []
- const children: T[] = []
- const childStats: Stat[] = []
- let siblingIds: Id[], siblings: T[], siblingStats: Stat[];
- if (!parentStat) {
- siblingIds = rootIds
- siblings = rootNodes
- siblingStats = rootStats
- } else {
- siblingIds = parentStat.childIds
- siblings = parentStat.children
- siblingStats = parentStat.childStats
- }
- const index = siblingIds.length
- const level = parentStat?.level + 1 || 1
- const stat = {
- _isStat: true,
- id,
- pid,
- childIds,
- siblingIds,
- node,
- parent,
- parentStat,
- children,
- childStats,
- siblings,
- siblingStats,
- index,
- level,
- open: props.openIds ? openIdSet.has(id) : true,
- checked: checkedIdSet.has(id),
- draggable: false,
- }
- stats[id] = stat
- nodes[id] = node
- siblingIds.push(id)
- siblings.push(node)
- siblingStats.push(stat)
- count++
- }
-
- // after stats ready
- for (const [stat] of walkTreeDataGenerator(rootStats, 'childStats')) {
- // draggable
- let draggable = props.canDrag?.(stat) ?? null
- if (draggable === null) {
- draggable = stat.parentStat ? stat.parentStat.draggable : true
- }
- stat.draggable = draggable
- }
- const getStat = (idOrNodeOrStat: T | Stat | Id) => {
- let id: Id
- if (typeof idOrNodeOrStat === 'object') {
- // @ts-ignore
- id = idOrNodeOrStat._isStat ? idOrNodeOrStat.id : idOrNodeOrStat[ID]
- } else {
- id = idOrNodeOrStat
- }
- return stats[id]
- }
- return {
- // root
- rootIds, rootNodes, rootStats,
- //
- allIds,
- // methods
- getStat,
- }
- }, [props.data, props.dataType, ID, PID, openIdSet, checkedIdSet,
- isFunctionReactive && props.canDrag,
- ]
- );
- const { rootIds, rootStats, getStat, } = mainCache;
- // about drag ==================================
- const indent = props.indent!
- const [draggingStat, setDraggingStat] = useState>();
- const [dragOverStat, setDragOverStat] = useState>();
- const virtualListRef = useRef(null);
- const rootRef = useRef(null)
- const [placeholder, setPlaceholder] = useState<{ parentStat: Stat | null, level: number, index: number } | null>();
- const isExternal = !draggingStat
- const cacheForVisible = useMemo(
- () => {
- const visibleIds: Id[] = []
- const attrsList: NodeAttrs[] = [];
- for (const [stat, { skipChildren }] of walkTreeDataGenerator(rootStats, 'childStats')) {
- const attrs = createAttrs(stat)
- if (stat === draggingStat) {
- // hide dragged node but don't remove it. Because dragend event won't be triggered if without it.
- Object.assign(attrs.style!, {
- position: 'fixed',
- top: 0,
- left: 0,
- pointerEvents: 'none',
- zIndex: '-999999999',
- visibility: 'hidden',
- })
- attrs['data-dragging'] = true
- }
- attrsList.push(attrs)
- visibleIds.push(stat.id)
- if (!stat.open || stat === draggingStat) {
- skipChildren()
- }
- }
- if (placeholder) {
- const toIndexInVisible = (parentStat: Stat | null, index: number) => {
- let find = (parentStat?.childStats || rootStats)[index];
- let finalIndex
- if (find) {
- finalIndex = visibleIds.indexOf(find.id)
- } else {
- const getNext = (stat: Stat) => stat.siblingStats[stat.siblingStats.indexOf(stat) + 1];
- let next
- if (parentStat) {
- for (const stat of walkParentsGenerator(parentStat, 'parentStat', { withSelf: true })) {
- next = getNext(stat);
- if (next) {
- break;
- }
- }
- }
- if (next) {
- finalIndex = visibleIds.indexOf(next.id)
- } else {
- finalIndex = visibleIds.length
- }
- }
- return finalIndex
- }
- // get placeholder's index in visibleIds
- const indexInVisible = toIndexInVisible(placeholder.parentStat, placeholder.index)
- //
- visibleIds.splice(indexInVisible, 0, placeholderId)
- // @ts-ignore
- const placeholderAttrs = createAttrs({
- id: placeholderId,
- level: placeholder.level,
- }, true)
- placeholderAttrs['data-drag-placeholder'] = true
- attrsList.splice(indexInVisible, 0, placeholderAttrs)
- }
- function createAttrs(stat: Stat, isPlaceholder = false): typeof attrsList[0] {
- return {
- key: stat.id,
- draggable: stat.draggable,
- style: { [`padding${!rtl ? 'Left' : 'Right'}`]: (stat.level - 1) * indent + 'px' },
- 'data-key': stat.id + '',
- 'data-level': stat.level + '',
- 'data-node-box': true,
- onDragStart(e) {
- if (isPlaceholder) {
- e.preventDefault() // prevent drag
- return
- }
- let trigger: Element
- const nodeBox = hp.findParent(e.target as HTMLElement, (el) => {
- if (!trigger && el.hasAttribute('draggable')) {
- trigger = el
- }
- return el.hasAttribute('data-node-box')
- }, { withSelf: true })
- let hasChildTrigger = nodeBox.querySelector(`[draggable]`)
- if (hasChildTrigger && trigger! === nodeBox) {
- // has child trigger but triggered by node box
- e.preventDefault() // prevent drag
- return
- }
- //
- e.dataTransfer!.setData("text/plain", "he-tree he-tree-react"); // set data to work in Chrome Android
- e.dataTransfer!.dropEffect = 'move'
- if (props.customDragImage) {
- props.customDragImage(e, stat)
- } else {
- // setDragImage
- const node = nodeBox.children[0] as HTMLElement
- e.dataTransfer.setDragImage(node, !rtl ? 0 : node.offsetWidth, 0);
- }
- setTimeout(() => {
- setDraggingStat(stat)
- setPlaceholder({
- ...placeholder!,
- parentStat: stat.parentStat,
- level: stat.level,
- index: (stat.parentStat?.childIds || rootIds).indexOf(stat.id),
- })
- }, 0)
- props.onDragStart?.(e, stat)
- },
- onDragLeave(e) {
- // dragLeave behavior is not expected. https://stackoverflow.com/questions/7110353/html5-dragleave-fired-when-hovering-a-child-element
- },
- }
- }
- const onDragOverRoot: React.DragEventHandler = (e) => {
- if (isExternal && !props.onExternalDragOver?.(e)) {
- return
- }
- const el = getClosestEl()
- if (el) {
- // @ts-ignore
- const stat = getStat(el.getAttribute('data-key'))
- const isPlaceholder = !!el.getAttribute('data-drag-placeholder')
- if (shouldDragOpen(stat, isPlaceholder)) {
- props.onDragOpen!(stat)
- }
- let t = findClosestAndNext(stat, isPlaceholder)
- const { closest, next } = t
- let { atTop } = t
- const rootEl = rootRef.current!
- // @ts-ignore
- const nodeBox = el
- // node start position
- const getPlaceholderLevel = () => {
- let rect = nodeBox.getBoundingClientRect()
- let pl
- if (!rtl) {
- // ltr
- pl = Math.ceil((e.clientX - rect.x) / indent)
- } else {
- pl = Math.ceil((rect.right - e.clientX) / indent)
- }
- return hp.between(pl, 0, (closest?.level || 0) + 1)
- }
- let placeholderLevel = getPlaceholderLevel() // use this number to detect placeholder position. >= 0: prepend. < 0: after.}
- if (!atTop && !isPlaceholder && closest.id === rootIds[0]) {
- // check if at top
- const topNodeElement = rootEl.querySelector(`[data-key="${closest.id}"]`)
- if (topNodeElement) {
- const rect = topNodeElement.getBoundingClientRect()
- atTop = rect.y + rect.height / 2 > e.clientY
- }
- }
- if (atTop) {
- placeholderLevel = 0
- }
- //
- let newPlaceholder: typeof placeholder
- if (atTop) {
- if (getDroppable(null, 0)) {
- newPlaceholder = {
- ...placeholder!,
- parentStat: null,
- level: 1,
- index: 0,
- }
- }
- } else {
- const parentMinLevel = next ? next.level - 1 : 0
- // find all droppable positions
- const availablePositionsLeft: { parentStat: Stat, index: number }[] = [];
- const availablePositionsRight: typeof availablePositionsLeft = [];
- let cur = closest
- const curLevel = () => cur ? cur.level : 0
- while (curLevel() >= parentMinLevel) {
- const index = getTargetIndex(cur, next)
- if (getDroppable(cur, index)) {
- (placeholderLevel > curLevel() ? availablePositionsLeft : availablePositionsRight).unshift({
- parentStat: cur,
- index,
- })
- }
- if (!cur) {
- break
- }
- cur = cur.parentStat!
- }
- let placeholderPosition = hp.arrayLast(availablePositionsLeft)
- if (!placeholderPosition) {
- placeholderPosition = hp.arrayFirst(availablePositionsRight)
- }
- if (placeholderPosition) {
- newPlaceholder = {
- ...placeholder!,
- parentStat: placeholderPosition.parentStat,
- level: (placeholderPosition.parentStat?.level ?? 0) + 1,
- index: placeholderPosition.index,
- }
- } else {
- //
- }
- }
- setPlaceholder(newPlaceholder)
- if (newPlaceholder) {
- e.preventDefault(); // call mean droppable
- }
- setDragOverStat(isPlaceholder ? undefined : stat)
- props.onDragOver?.(e, stat, isExternal)
- } else {
- if (getDroppable(null, 0)) {
- setPlaceholder({
- ...placeholder!,
- parentStat: null,
- level: 1,
- index: 0,
- })
- e.preventDefault(); // droppable
- }
- }
-
- function getClosestEl() {
- const rootEl = rootRef.current as HTMLElement
- const nodeEls = rootEl.querySelectorAll(`[data-node-box]:not([data-dragging])`);
- const t = hp.binarySearch(
- // @ts-ignore
- nodeEls,
- (nodeEl: HTMLElement) =>
- nodeEl.getBoundingClientRect().top -
- e.clientY,
- { returnNearestIfNoHit: true }
- )!;
- let index: number | undefined
- if (t.hit) {
- } else {
- if (t.greater) {
- index = t.index - 1;
- if (index < 0) {
- index = 0
- }
- } else {
- }
- }
- if (index == null) {
- index = t.index
- }
- return nodeEls[index]
- }
- function shouldDragOpen(stat: any, isPlaceholder: boolean) {
- if (!props.dragOpen) {
- return false
- }
- if (isPlaceholder) {
- return false
- }
- if (stat.open) {
- return false
- }
-
- const refresh = () => Object.assign(dragOverInfo, { id: stat.id, x: e.clientX, y: e.clientY, time: Date.now() })
- if (dragOverInfo.id !== stat.id) {
- refresh()
- return false
- }
- if (calculateDistance(e.clientX, e.clientY, dragOverInfo.x, dragOverInfo.y) > 10) {
- refresh()
- return false
- }
- const now = Date.now()
- if (now - dragOverInfo.time >= props.dragOpenDelay!) {
- return true
- }
- }
- }
- const onDropToRoot: React.DragEventHandler = (e) => {
- if (isExternal && !props.onExternalDragOver?.(e)) {
- return
- }
- if (placeholder) {
- e.preventDefault();
- if (isExternal) {
- const { index: targetIndexInSiblings } = placeholder
- props.onExternalDrop?.(e, placeholder.parentStat, targetIndexInSiblings)
- reset()
- }
- }
- }
- function onDragEndOnRoot(e: React.DragEvent) {
- // draggingStat may not be null. This condition is tell typescript that.
- if (!draggingStat) {
- return
- }
- // listen dragend. dragend only trigger in dragstart node
- let isOutside = !placeholder // placeholder may be removed if dragleave the tree
- if (!isOutside) {
- // get isOutside by coordinates
- const rootEl = rootRef.current as HTMLElement
- let rect = rootEl.getBoundingClientRect()
- isOutside = !(e.clientX >= rect.left && e.clientX <= rect.right && e.clientY >= rect.top && e.clientY <= rect.bottom)
- }
- const customized = props.onDragEnd?.(e, draggingStat!, isOutside) === false
- if (!customized && placeholder) {
- let targetIndexInSiblings = placeholder.index
- if (placeholder.parentStat === draggingStat.parentStat && draggingStat.index < targetIndexInSiblings) {
- targetIndexInSiblings--
- }
- const newData = [...props.data];
- if (props.dataType === 'flat') {
- const targetParentId = placeholder.parentStat?.id ?? props.rootId
- const removed = removeByIdInFlatData(newData, draggingStat.id, flatOpt)
- const newNode = { ...draggingStat.node, [PID]: targetParentId }
- removed[0] = newNode
- const targetTreeIndex = convertIndexToTreeIndexInFlatData(newData, targetParentId, targetIndexInSiblings, flatOpt)
- newData.splice(targetTreeIndex, 0, ...removed)
- } else {
- // treeData
- // copy data
- const newNodeCache = new Map()
- const copyNode = (stat: Stat | null) => {
- if (!stat) {
- return newData
- }
- const siblings = copyNode(stat.parentStat)
- let children = [...stat.children];
- const newNode = newNodeCache.get(stat.node) || { ...stat.node, [CHILDREN]: children }
- newNodeCache.set(stat.node, newNode)
- children = newNode[CHILDREN];
- siblings[stat.index] = newNode;
- return children
- }
- const newSiblingsOfDragged = copyNode(draggingStat.parentStat)
- const newSiblingsOfTarget = placeholder.parentStat === draggingStat.parentStat ? newSiblingsOfDragged : copyNode(placeholder.parentStat)
- // remove
- newSiblingsOfDragged.splice(draggingStat.index, 1)
- // add
- newSiblingsOfTarget.splice(targetIndexInSiblings, 0, draggingStat.node)
- }
- props.onChange!(newData)
- }
- reset()
- }
- function reset() {
- setDragOverStat(undefined);
- setDraggingStat(undefined);
- setPlaceholder(undefined);
- }
- function getDroppable(stat: Stat | null, index?: number): boolean {
- if (!stat) {
- return props.canDropToRoot?.(index) ?? true
- }
- if (!stat.open) {
- return false
- }
- let droppable = props.canDrop?.(stat, index)
- if (droppable == undefined) {
- droppable = getDroppable(stat.parentStat)
- }
- return droppable
- }
- /**
- * find closest and next node stat
- */
- function findClosestAndNext(stat: Stat, isPlaceholder: boolean) {
- let closest = stat
- let index = visibleIds.indexOf(!isPlaceholder ? stat.id : props.placeholderId) // index of closest node
- let atTop = false
- const isPlaceholderOrDraggedNode = (id: Id) => id === placeholderId || getStat(id) === draggingStat
- const find = (startIndex: number, step: number) => {
- let i = startIndex, cur
- do {
- i += step
- cur = visibleIds[i]
- } while (cur && isPlaceholderOrDraggedNode(cur));
- return { id: cur, i }
- }
- const findAndAssign = (startIndex: number, dir: number) => {
- const t = find(startIndex, dir)
- closest = getStat(t.id)
- index = t.i
- }
- const NEXT = 1, PREV = -1
- if (isPlaceholder) {
- findAndAssign(index, PREV)
- if (!closest) {
- atTop = true
- findAndAssign(-1, NEXT)
- }
- }
- // next
- const next = getStat(find(index, NEXT).id)
- return { closest, atTop, next }
- }
- /**
- * calculate placeholder target index in target parent's children
- */
- function getTargetIndex(targetParentStat: Stat | null, next: Stat | undefined) {
- const siblingStats = targetParentStat ? targetParentStat.childStats : rootStats
- let index = siblingStats.length
- if (next && next.siblingStats === siblingStats) {
- index = siblingStats.indexOf(next)
- }
- return index
- }
- function scrollToNode(idOrNodeOrStat: Id | T | Stat, block: 'start' | 'end' | 'center' | 'nearest' = 'start') {
- const stat = getStat(idOrNodeOrStat)
- if (!stat) {
- return false
- }
- let index = visibleIds.indexOf(stat.id)
- if (index === -1) {
- return false
- }
- if (virtualListRef.current) {
- virtualListRef.current.scrollToIndex(index, block)
- return true
- } else {
- return false
- }
- }
- return { visibleIds, attrsList, onDragOverRoot, onDropToRoot, onDragEndOnRoot, scrollToNode }
- }, [mainCache, indent, draggingStat,
- // watch placeholder position
- placeholder?.parentStat, placeholder?.index,
- // watch props
- indent, placeholderId, rtl, props.rootId,
- // watch func
- ...([props.canDrop, props.canDropToRoot, props.customDragImage, props.onDragStart, props.onDragOver, props.onExternalDragOver, props.onExternalDrop, props.onDragEnd, props.onChange, props.onDragOpen].map(func => isFunctionReactive && func)),
- ])
- // listen dragover on window
- const t2 = useMemo(() => {
- return {
- getEl: () => window,
- onDragOverWindow: (e: DragEvent) => {
- if (!isInTree()) {
- setDragOverStat(undefined)
- if (!props.keepPlaceholder) {
- setPlaceholder(undefined)
- }
- }
- function isInTree() {
- let inTree = false
- let el = e.target as HTMLElement
- if (el) {
- for (const parent of walkParentsGenerator(el, 'parentElement', { withSelf: true })) {
- if (parent === rootRef.current) {
- inTree = true
- break
- }
- }
- }
- return inTree
- }
- },
- }
- }, [props.keepPlaceholder])
- useAddEventListener(t2.getEl, 'dragover', t2.onDragOverWindow)
- //
- const { visibleIds, attrsList, onDragOverRoot, onDropToRoot, onDragEndOnRoot, scrollToNode } = cacheForVisible
- const persistentIndices = useMemo(() => draggingStat ? [visibleIds.indexOf(draggingStat.id)] : [], [draggingStat, visibleIds]);
- // render
- const renderTree = (options?: { className?: string, style?: React.CSSProperties, listClassName?: string, listInnerClassName?: string }): ReactNode => {
- let renderNodeBox = props.renderNodeBox!
- if (!renderNodeBox) {
- const placeholder =
- renderNodeBox = ({ stat, attrs, isPlaceholder }) =>
- {isPlaceholder ? placeholder : props.renderNode!(stat)}
-
- }
- return (
-
- ref={virtualListRef} className={options?.listClassName || ''} innerClassName={options?.listInnerClassName || ''} items={visibleIds} virtual={props.virtual} persistentIndices={persistentIndices} style={{ height: '100%' }}
- renderItem={(id, index) => renderNodeBox({
- stat: getStat(id)!, attrs: attrsList[index], isPlaceholder: id === placeholderId
- })}
- />
-
- )
- }
-
- return {
- ...mainCache,
- //
- visibleIds, attrsList,
- // ref
- virtualListRef,
- // drag states
- draggingStat, dragOverStat, placeholder,
- // render
- renderTree, renderHeTree: renderTree,
- // methods
- scrollToNode,
- }
-}
-// react components ==================================
-// no components
-// utils methods ==================================
-// tree data utils methods =============
-export type WalkTreeDataYield = [T, {
- parent: T | null, parents: T[], siblings: T[], index: number, skipChildren: VoidFunction, exitWalk: VoidFunction
-}]
-
-/**
- * example: walkTreeData(treeData, 'children', (node, info)=> {})
- */
-export function walkTreeData>(
- treeData: T[],
- handler: (...args: WalkTreeDataYield) => void,
- childrenKey = 'children',
-) {
- for (const t of walkTreeDataGenerator(treeData, childrenKey)) {
- handler(...t)
- }
-}
-
-/**
- * example: for (const [node, info] of walkTreeDataGenerator(treeData, 'children')) {...}
- */
-export function* walkTreeDataGenerator>(
- treeData: T[],
- childrenKey = 'children',
-): Generator> {
- let _skipChildren = false
- let _exit = false
- const skipChildren = () => { _skipChildren = true }
- const exitWalk = () => { _exit = true }
- yield* walk(treeData, null, [])
- // @ts-ignore
- function* walk(arr: T[], parent: T | null, parents: T[]) {
- let index = 0
- for (const node of arr) {
- const siblings = arr
- yield [node, { parent, parents, siblings, index, skipChildren, exitWalk }]
- if (_exit) {
- return
- }
- index++
- if (_skipChildren) {
- _skipChildren = false
- } else {
- // @ts-ignore
- const children: T[] = node[childrenKey]
- if (children) {
- yield* walk(children, node, [...parents, node])
- if (_exit) {
- return
- }
- }
- }
- }
- }
-}
-export function findTreeData>(
- treeData: T[],
- handler: (...args: WalkTreeDataYield) => void | boolean | any,
- childrenKey = 'children',
-) {
- for (const t of walkTreeDataGenerator(treeData, childrenKey)) {
- if (handler(...t)) {
- return t[0]
- }
- }
-}
-export function filterTreeData>(
- treeData: T[],
- handler: (...args: WalkTreeDataYield) => void | boolean | any,
- childrenKey = 'children',
-) {
- const r: T[] = [];
- for (const t of walkTreeDataGenerator(treeData, childrenKey)) {
- if (handler(...t)) {
- r.push(t[0])
- }
- }
- return r
-}
-// specail utils methods =============
-export function* walkParentsGenerator(
- node: T,
- parentKeyOrGetter: string | ((node: T) => T | void | undefined | null),
- options = { withSelf: false }
-) {
- let cur = node
- while (cur) {
- if (cur !== node || options.withSelf) {
- yield cur
- }
- // @ts-ignore
- cur = typeof parentKeyOrGetter === 'function' ? parentKeyOrGetter(cur) : cur[parentKeyOrGetter];
- }
-}
-// flat data utils methods =============
-export function sortFlatData>(data: T[], options0?: Partial) {
- const options = { ...flatDataDefaultOptions, ...options0 }
- const { idKey: ID, parentIdKey: PID } = options
- const childrenById = new Map()
- childrenById.set(null, [])
- const rootNodes = childrenById.get(null)!
- for (const v of data) {
- const id = v[ID]
- childrenById.set(id, [])
- }
- for (const v of data) {
- const pid = v[PID]
- const siblings = childrenById.get(pid) || rootNodes
- siblings.push(v)
- }
- function* walkArr(arr: T[]): Generator {
- for (const node of arr) {
- yield node
- const id = node[ID]
- yield* walkArr(childrenById.get(id)!)
- }
- }
- return [...walkArr(rootNodes)]
-}
-
-const flatDataDefaultOptions = {
- idKey: 'id',
- parentIdKey: 'parent_id',
-}
-export type WalkFlatDataYield = [T, {
- parent: T | null, parents: T[], index: number, treeIndex: number, id: Id, pid: Id | null, skipChildren: VoidFunction, exitWalk: VoidFunction
-}]
-export function* walkFlatDataGenerator>(flatData: T[], options0?: Partial): Generator> {
- const options = { ...flatDataDefaultOptions, ...options0 }
- const { idKey: ID, parentIdKey: PID } = options
- let _skipChildren = false
- let _exit = false
- const skipChildren = () => { _skipChildren = true }
- const exitWalk = () => { _exit = true }
- const nodes: Record = {}
- const stats: Record[1]> = {}
- const childIdsById: Record = {}
- const rootIds: Id[] = [];
- let skipIds: Set | undefined
- let treeIndex = 0
- for (const node of flatData) {
- const id: Id = node[ID];
- const pid: Id = node[PID] ?? null;
- nodes[id] = node;
- const parent = nodes[pid] || null;
- childIdsById[id] = [];
- const siblingIds = parent ? childIdsById[pid] : rootIds;
- const index = siblingIds.length
- siblingIds.push(id);
- const stat = {
- parent,
- parents: parent ? [...stats[pid]!.parents, parent] : [],
- index,
- id,
- pid,
- treeIndex,
- skipChildren,
- exitWalk,
- }
- stats[id] = stat
- let skipped = false
- if (_skipChildren && skipIds) {
- if (skipIds.has(pid)) {
- skipIds.add(id)
- skipped = true
- } else {
- _skipChildren = false
- skipIds = undefined
- }
- }
- if (!skipped) {
- yield [node, stat]
- if (_exit) {
- break
- }
- if (_skipChildren) {
- skipIds = new Set([id])
- }
- }
- treeIndex++
- }
-}
-
-export function walkFlatData>(
- flatData: T[],
- handler: (...args: WalkFlatDataYield) => void,
- options?: Partial
-) {
- for (const t of walkFlatDataGenerator(flatData, options)) {
- handler(...t)
- }
-}
-
-/**
- * Convert index in sibling to tree index which in flat data.
- * @param flatData
- * @param parentId null means root
- * @param indexInSiblings null means append to the end of siblings
- * @param options0
- * @returns tree index
- */
-export function convertIndexToTreeIndexInFlatData>(
- flatData: T[],
- parentId: Id | null,
- indexInSiblings: Id | null,
- options0?: Partial) {
- const options = { ...flatDataDefaultOptions, ...options0 }
- const { idKey: ID, parentIdKey: PID } = options
- let parentFound = false
- let resultIndex = -1
- for (const [node, { treeIndex, skipChildren, index: curNodeIndexInSiblings }] of walkFlatDataGenerator(flatData, options)) {
- if (parentId != null && !parentFound) {
- if (node[ID] === parentId) {
- parentFound = true
- }
- } else {
- if (parentId == null || node[PID] === parentId) {
- // is sibling
- if (indexInSiblings != null && indexInSiblings === curNodeIndexInSiblings) {
- resultIndex = treeIndex
- break
- } else {
- skipChildren()
- }
- } else {
- resultIndex = treeIndex
- break
- }
- }
- }
- if (resultIndex === -1) {
- resultIndex = flatData.length
- }
- return resultIndex
-}
-export function addToFlatData>(
- flatData: T[],
- newNode: T,
- indexInSiblings: Id | null,
- options0?: Partial
-) {
- const options = { ...flatDataDefaultOptions, ...options0 }
- const { idKey: ID, parentIdKey: PID } = options
- const pid: Id | null = newNode[PID] ?? null;
- const targetIndex = convertIndexToTreeIndexInFlatData(flatData, pid, indexInSiblings, options)
- flatData.splice(targetIndex, 0, newNode)
-}
-export function removeByIdInFlatData>(
- flatData: T[],
- removeId: Id | null,
- options0?: Partial
-) {
- if (removeId == null) {
- return flatData.splice(0, flatData.length)
- }
- const options = { ...flatDataDefaultOptions, ...options0 }
- const { idKey: ID, parentIdKey: PID } = options
- let startIndex = -1
- let endIndex = -1
- for (const [node, { treeIndex, skipChildren, }] of walkFlatDataGenerator(flatData, options)) {
- if (startIndex === -1) {
- if (node[ID] === removeId) {
- startIndex = treeIndex
- skipChildren()
- }
- } else {
- endIndex = treeIndex
- break
- }
- }
- if (endIndex === -1) {
- endIndex = flatData.length
- }
- if (startIndex === -1) {
- // not found
- return []
- }
- return flatData.splice(startIndex, endIndex - startIndex)
-}
-
-// 'open' utils methods =============
-export function openParentsInFlatData>(
- flatData: T[],
- openIds: Id[],
- idOrIds: Id | Id[],
- options0?: Partial
-) {
- const options = { ...flatDataDefaultOptions, ...options0 }
- const { idKey: ID, parentIdKey: PID } = options
- const openIdSet = new Set(openIds)
- const idsToOpen = Array.isArray(idOrIds) ? idOrIds : [idOrIds];
- const idsToOpenSet = new Set(idsToOpen)
- if (idsToOpenSet.size > 0) {
- for (const [node, { parents }] of walkFlatDataGenerator(flatData, options)) {
- const id = node[ID];
- if (idsToOpenSet.has(id)) {
- for (const parent of parents) {
- openIdSet.add(parent[ID])
- }
- idsToOpenSet.delete(id)
- if (idsToOpenSet.size === 0) {
- break
- }
- }
- }
- }
- return Array.from(openIdSet).sort()
-}
-const treeDataDefaultOptions = {
- idKey: 'id',
- childrenKey: 'children',
-}
-export function openParentsInTreeData>(
- treeData: T[],
- openIds: Id[],
- idOrIds: Id | Id[],
- options0?: Partial
-) {
- const options = { ...treeDataDefaultOptions, ...options0 }
- const { idKey: ID, childrenKey: CHILDREN } = options
- const openIdSet = new Set(openIds)
- const idsToOpen = Array.isArray(idOrIds) ? idOrIds : [idOrIds];
- const idsToOpenSet = new Set(idsToOpen)
- if (idsToOpenSet.size > 0) {
- for (const [node, { parents }] of walkTreeDataGenerator(treeData, options.childrenKey)) {
- const id = node[ID];
- if (idsToOpenSet.has(id)) {
- for (const parent of parents) {
- openIdSet.add(parent[ID])
- }
- idsToOpenSet.delete(id)
- if (idsToOpenSet.size === 0) {
- break
- }
- }
- }
- }
- return Array.from(openIdSet).sort()
-}
-// 'checked' utils methods =============
-export function updateCheckedInFlatData>(
- flatData: T[],
- checkedIds: Id[],
- idOrIds: Id | Id[],
- checked: boolean,
- options?: Partial
-) {
- const checkedIdSet = new Set(checkedIds)
- const idsToUpdate = Array.isArray(idOrIds) ? idOrIds : [idOrIds];
- const all = new Map()
- const changedPids = new Set(idsToUpdate)
- const pidById: Record = {}
- const childIdsById = new Map()
- const rootIds: Id[] = [];
- childIdsById.set(null, rootIds)
- for (const [node, { parents, id, pid }] of walkFlatDataGenerator(flatData, options)) {
- pidById[id] = pid
- childIdsById.get(pid)!.push(id)
- childIdsById.set(id, [])
- all.set(id, checkedIdSet.has(id))
- if (changedPids.has(id) || (pid && changedPids.has(pid))) {
- // update self and children
- all.set(id, checked)
- changedPids.add(id)
- }
- }
- // check from root to each nodes
- const walk = (id: Id) => {
- const childIds = childIdsById.get(id)
- if (!childIds || childIds.length === 0) {
- return all.get(id)
- }
- let hasTrue = false
- let hasFalse = false
- let hasNull = false
- for (const childId of childIds) {
- // must loop all, must call walk on every child
- let t = walk(childId)
- if (t === false) {
- hasFalse = true
- } else if (t === null) {
- hasNull = true
- } else {
- hasTrue = true
- }
- }
- let checked: boolean | null
- if (hasNull) {
- checked = null
- } else if (hasFalse && hasTrue) {
- checked = null
- } else if (hasFalse) {
- checked = false
- } else {
- checked = true
- }
- all.set(id, checked)
- return checked
- }
-
- for (const id of rootIds) {
- walk(id)
- }
- const newCheckedIds: Id[] = [];
- const semiCheckedIds: Id[] = [];
- all.forEach((v, k) => {
- if (v === true) {
- newCheckedIds.push(k)
- } else if (v === null) {
- semiCheckedIds.push(k)
- }
- })
- return [newCheckedIds.sort(), semiCheckedIds.sort()]
-}
-export function updateCheckedInTreeData>(
- treeData: T[],
- checkedIds: Id[],
- idOrIds: Id | Id[],
- checked: boolean,
- options0?: Partial
-) {
- const options = { ...treeDataDefaultOptions, ...options0 }
- const { idKey: ID, childrenKey: CHILDREN } = options
- const checkedIdSet = new Set(checkedIds)
- const idsToUpdate = Array.isArray(idOrIds) ? idOrIds : [idOrIds];
- const all = new Map()
- const changedPids = new Set(idsToUpdate)
- const pidById: Record = {}
- const childIdsById = new Map()
- childIdsById.set(null, [])
- for (const [node, { parents, parent }] of walkTreeDataGenerator(treeData, CHILDREN)) {
- const id = node[ID];
- const pid = parent?.[ID] ?? null
- pidById[id] = pid
- childIdsById.get(pid)!.push(id)
- childIdsById.set(id, [])
- all.set(id, checkedIdSet.has(id))
- if (changedPids.has(id) || (pid && changedPids.has(pid))) {
- // update self and children
- all.set(id, checked)
- changedPids.add(id)
- }
- }
- // check from root to each nodes
- const walk = (id: Id) => {
- const childIds = childIdsById.get(id)
- if (!childIds || childIds.length === 0) {
- return all.get(id)
- }
- let hasTrue = false
- let hasFalse = false
- let hasNull = false
- for (const childId of childIds) {
- // must loop all, must call walk on every child
- let t = walk(childId)
- if (t === false) {
- hasFalse = true
- } else if (t === null) {
- hasNull = true
- } else {
- hasTrue = true
- }
- }
- let checked: boolean | null
- if (hasNull) {
- checked = null
- } else if (hasFalse && hasTrue) {
- checked = null
- } else if (hasFalse) {
- checked = false
- } else {
- checked = true
- }
- all.set(id, checked)
- return checked
- }
- for (const node of treeData) {
- walk(node[ID])
- }
- const newCheckedIds: Id[] = [];
- const semiCheckedIds: Id[] = [];
- all.forEach((v, k) => {
- if (v === true) {
- newCheckedIds.push(k)
- } else if (v === null) {
- semiCheckedIds.push(k)
- }
- })
- return [newCheckedIds.sort(), semiCheckedIds.sort()]
-}
-// private methods
-function calculateDistance(x1: number, y1: number, x2: number, y2: number) {
- return Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2));
-}
-function useAddEventListener(targetGetter: () => HTMLElement | Document | Window, listenerName: string, listener: Function) {
- useLayoutEffect(() => {
- const target = targetGetter();
- // @ts-ignore
- target?.addEventListener(listenerName, listener);
- return () => {
- // @ts-ignore
- target?.removeEventListener(listenerName, listener);
- }
- }, [targetGetter, listenerName, listener])
-}
\ No newline at end of file
diff --git a/lib/index.ts b/lib/index.ts
deleted file mode 100644
index cc79445..0000000
--- a/lib/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./HeTree.tsx";
diff --git a/package.json b/package.json
index 48af580..fa7f0ea 100644
--- a/package.json
+++ b/package.json
@@ -1,88 +1,48 @@
{
"name": "he-tree-react",
- "version": "1.2.0",
- "license": "MIT",
- "author": "phphe (https://github.com/phphe)",
- "description": "React draggable sortable tree component.",
- "keywords": [
- "draggable tree",
- "sortable tree",
- "React component"
- ],
- "repository": "https://github.com/phphe/he-tree-react.git",
- "type": "module",
- "main": "./dist/index.cjs",
- "module": "./dist/index.js",
- "types": "./dist/index.d.ts",
- "exports": {
- ".": {
- "require": "./dist/index.cjs",
- "import": "./dist/index.js",
- "types": "./dist/index.d.ts"
- }
- },
- "jsdelivr": "dist/index.iife.js",
- "unpkg": "dist/index.iife.js",
+ "version": "0.0.1-beta",
+ "description": "A draggable sortable nested react tree component.",
+ "main": "dist/he-tree-react.cjs.js",
+ "module": "dist/he-tree-react.esm.js",
"files": [
"dist"
],
+ "unpkg": "dist/he-tree-react.js",
+ "author": "phphe (https://github.com/phphe)",
+ "homepage": "https://he-tree-react.phphe.com",
+ "bugs": {
+ "url": "https://github.com/phphe/he-tree-react/issues"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/phphe/he-tree-react.git"
+ },
"scripts": {
- "dev": "vite",
- "build": "vite build --config vite.build.js && vite build --config vite.build.js -- --iife && rm -rf dist/src",
- "build:web": "tsc && vite build",
- "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
- "preview": "vite preview",
- "coverage": "vitest run --coverage",
- "test": "vitest",
- "test:ui": "vitest --ui",
- "docs:dev": "vitepress dev docs",
- "docs:build": "vitepress build docs",
- "docs:preview": "vitepress preview docs"
+ "dev": "vue-cli-service serve",
+ "build:web": "vue-cli-service build",
+ "test:unit": "vue-cli-service test:unit",
+ "build": "node scripts/build.js",
+ "build:pro": "node scripts/build-pro.js"
},
"dependencies": {
- "helper-js": "^3.1.5",
- "react-base-virtual-list": "^1.1.0"
- },
- "peerDependencies": {
- "react": "^18",
- "react-dom": "^18"
+ "@babel/runtime": "^7.7.7",
+ "draggable-helper": "^4.0.0",
+ "helper-js": "^1.4.26",
+ "vue-functions": "^2.0.1",
+ "vue-runtime-helpers": "^1.1.2"
},
"devDependencies": {
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "@types/react": "^18.2.43",
- "@types/react-dom": "^18.2.17",
- "@types/react-test-renderer": "^18.0.7",
- "@typescript-eslint/eslint-plugin": "^6.14.0",
- "@typescript-eslint/parser": "^6.14.0",
- "@unocss/reset": "^0.58.4",
- "@vitejs/plugin-react": "^4.2.1",
- "@vitest/coverage-v8": "^1.3.1",
- "@vitest/ui": "^1.3.1",
- "eslint": "^8.55.0",
- "eslint-plugin-react-hooks": "^4.6.0",
- "eslint-plugin-react-refresh": "^0.4.5",
- "immer": "^10.0.3",
- "jsdom": "^24.0.0",
- "react-router-dom": "^6.22.2",
- "react-test-renderer": "^18.2.0",
- "typedoc": "^0.25.9",
- "typedoc-plugin-inline-sources": "^1.0.2",
- "typescript": "^5.2.2",
- "unocss": "^0.58.4",
- "use-immer": "^0.9.0",
- "vite": "^5.0.8",
- "vite-plugin-dts": "^3.7.2",
- "vitepress": "1.0.0-rc.44",
- "vitest": "^1.3.1",
- "vue": "^3.4.21"
+ "@vue/cli-plugin-babel": "^4.1.0",
+ "@vue/cli-service": "^4.1.0",
+ "bili": "^4.8.1",
+ "minimist": "^1.2.0",
+ "pug": "^2.0.4",
+ "pug-plain-loader": "^1.0.0",
+ "rollup-plugin-vue": "5.1.1",
+ "sass": "^1.23.7",
+ "sass-loader": "^8.0.0",
+ "vue": "^2.6.10",
+ "vue-template-compiler": "^2.6.10"
},
- "pnpm": {
- "peerDependencyRules": {
- "ignoreMissing": [
- "@algolia/client-search",
- "search-insights"
- ]
- }
- }
-}
\ No newline at end of file
+ "license": "MIT"
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
deleted file mode 100644
index 5edb54b..0000000
--- a/pnpm-lock.yaml
+++ /dev/null
@@ -1,5480 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-importers:
-
- .:
- dependencies:
- helper-js:
- specifier: ^3.1.5
- version: 3.1.6
- react-base-virtual-list:
- specifier: ^1.1.0
- version: 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- devDependencies:
- '@types/react':
- specifier: ^18.2.43
- version: 18.3.23
- '@types/react-dom':
- specifier: ^18.2.17
- version: 18.3.7(@types/react@18.3.23)
- '@types/react-test-renderer':
- specifier: ^18.0.7
- version: 18.3.1
- '@typescript-eslint/eslint-plugin':
- specifier: ^6.14.0
- version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)
- '@typescript-eslint/parser':
- specifier: ^6.14.0
- version: 6.21.0(eslint@8.57.1)(typescript@5.8.3)
- '@unocss/reset':
- specifier: ^0.58.4
- version: 0.58.9
- '@vitejs/plugin-react':
- specifier: ^4.2.1
- version: 4.5.2(vite@5.4.19)
- '@vitest/coverage-v8':
- specifier: ^1.3.1
- version: 1.6.1(vitest@1.6.1)
- '@vitest/ui':
- specifier: ^1.3.1
- version: 1.6.1(vitest@1.6.1)
- eslint:
- specifier: ^8.55.0
- version: 8.57.1
- eslint-plugin-react-hooks:
- specifier: ^4.6.0
- version: 4.6.2(eslint@8.57.1)
- eslint-plugin-react-refresh:
- specifier: ^0.4.5
- version: 0.4.20(eslint@8.57.1)
- immer:
- specifier: ^10.0.3
- version: 10.1.1
- jsdom:
- specifier: ^24.0.0
- version: 24.1.3
- react:
- specifier: ^18.2.0
- version: 18.3.1
- react-dom:
- specifier: ^18.2.0
- version: 18.3.1(react@18.3.1)
- react-router-dom:
- specifier: ^6.22.2
- version: 6.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react-test-renderer:
- specifier: ^18.2.0
- version: 18.3.1(react@18.3.1)
- typedoc:
- specifier: ^0.25.9
- version: 0.25.13(typescript@5.8.3)
- typedoc-plugin-inline-sources:
- specifier: ^1.0.2
- version: 1.3.0(typedoc@0.25.13(typescript@5.8.3))
- typescript:
- specifier: ^5.2.2
- version: 5.8.3
- unocss:
- specifier: ^0.58.4
- version: 0.58.9(postcss@8.5.4)(rollup@4.42.0)(vite@5.4.19)
- use-immer:
- specifier: ^0.9.0
- version: 0.9.0(immer@10.1.1)(react@18.3.1)
- vite:
- specifier: ^5.0.8
- version: 5.4.19
- vite-plugin-dts:
- specifier: ^3.7.2
- version: 3.9.1(rollup@4.42.0)(typescript@5.8.3)(vite@5.4.19)
- vitepress:
- specifier: 1.0.0-rc.44
- version: 1.0.0-rc.44(@algolia/client-search@5.27.0)(@types/react@18.3.23)(postcss@8.5.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)
- vitest:
- specifier: ^1.3.1
- version: 1.6.1(@vitest/ui@1.6.1)(jsdom@24.1.3)
- vue:
- specifier: ^3.4.21
- version: 3.5.16(typescript@5.8.3)
-
-packages:
-
- '@algolia/autocomplete-core@1.17.9':
- resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==}
-
- '@algolia/autocomplete-plugin-algolia-insights@1.17.9':
- resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==}
- peerDependencies:
- search-insights: '>= 1 < 3'
-
- '@algolia/autocomplete-preset-algolia@1.17.9':
- resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
-
- '@algolia/autocomplete-shared@1.17.9':
- resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
-
- '@algolia/client-abtesting@5.27.0':
- resolution: {integrity: sha512-SITU5umoknxETtw67TxJu9njyMkWiH8pM+Bvw4dzfuIrIAT6Y1rmwV4y0A0didWoT+6xVuammIykbtBMolBcmg==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-analytics@5.27.0':
- resolution: {integrity: sha512-go1b9qIZK5vYEQ7jD2bsfhhhVsoh9cFxQ5xF8TzTsg2WOCZR3O92oXCkq15SOK0ngJfqDU6a/k0oZ4KuEnih1Q==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-common@5.27.0':
- resolution: {integrity: sha512-tnFOzdNuMzsz93kOClj3fKfuYoF3oYaEB5bggULSj075GJ7HUNedBEm7a6ScrjtnOaOtipbnT7veUpHA4o4wEQ==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-insights@5.27.0':
- resolution: {integrity: sha512-y1qgw39qZijjQBXrqZTiwK1cWgWGRiLpJNWBv9w36nVMKfl9kInrfsYmdBAfmlhVgF/+Woe0y1jQ7pa4HyShAw==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-personalization@5.27.0':
- resolution: {integrity: sha512-XluG9qPZKEbiLoIfXTKbABsWDNOMPx0t6T2ImJTTeuX+U/zBdmfcqqgcgkqXp+vbXof/XX/4of9Eqo1JaqEmKw==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-query-suggestions@5.27.0':
- resolution: {integrity: sha512-V8/To+SsAl2sdw2AAjeLJuCW1L+xpz+LAGerJK7HKqHzE5yQhWmIWZTzqYQcojkii4iBMYn0y3+uReWqT8XVSQ==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-search@5.27.0':
- resolution: {integrity: sha512-EJJ7WmvmUXZdchueKFCK8UZFyLqy4Hz64snNp0cTc7c0MKaSeDGYEDxVsIJKp15r7ORaoGxSyS4y6BGZMXYuCg==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/ingestion@1.27.0':
- resolution: {integrity: sha512-xNCyWeqpmEo4EdmpG57Fs1fJIQcPwt5NnJ6MBdXnUdMVXF4f5PHgza+HQWQQcYpCsune96jfmR0v7us6gRIlCw==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/monitoring@1.27.0':
- resolution: {integrity: sha512-P0NDiEFyt9UYQLBI0IQocIT7xHpjMpoFN3UDeerbztlkH9HdqT0GGh1SHYmNWpbMWIGWhSJTtz6kSIWvFu4+pw==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/recommend@5.27.0':
- resolution: {integrity: sha512-cqfTMF1d1cc7hg0vITNAFxJZas7MJ4Obc36WwkKpY23NOtGb+4tH9X7UKlQa2PmTgbXIANoJ/DAQTeiVlD2I4Q==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/requester-browser-xhr@5.27.0':
- resolution: {integrity: sha512-ErenYTcXl16wYXtf0pxLl9KLVxIztuehqXHfW9nNsD8mz9OX42HbXuPzT7y6JcPiWJpc/UU/LY5wBTB65vsEUg==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/requester-fetch@5.27.0':
- resolution: {integrity: sha512-CNOvmXsVi+IvT7z1d+6X7FveVkgEQwTNgipjQCHTIbF9KSMfZR7tUsJC+NpELrm10ALdOMauah84ybs9rw1cKQ==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/requester-node-http@5.27.0':
- resolution: {integrity: sha512-Nx9EdLYZDsaYFTthqmc0XcVvsx6jqeEX8fNiYOB5i2HboQwl8pJPj1jFhGqoGd0KG7KFR+sdPO5/e0EDDAru2Q==}
- engines: {node: '>= 14.0.0'}
-
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
-
- '@antfu/install-pkg@1.1.0':
- resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
-
- '@antfu/utils@0.7.10':
- resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
-
- '@antfu/utils@8.1.1':
- resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
-
- '@asamuzakjp/css-color@3.2.0':
- resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
-
- '@babel/code-frame@7.27.1':
- resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/compat-data@7.27.5':
- resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.27.4':
- resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.27.5':
- resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-annotate-as-pure@7.27.3':
- resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-compilation-targets@7.27.2':
- resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-create-class-features-plugin@7.27.1':
- resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-member-expression-to-functions@7.27.1':
- resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.27.1':
- resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-transforms@7.27.3':
- resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-optimise-call-expression@7.27.1':
- resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-plugin-utils@7.27.1':
- resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-replace-supers@7.27.1':
- resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
- resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-string-parser@7.27.1':
- resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-option@7.27.1':
- resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helpers@7.27.6':
- resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==}
- engines: {node: '>=6.9.0'}
-
- '@babel/parser@7.27.5':
- resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- '@babel/plugin-syntax-jsx@7.27.1':
- resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-typescript@7.27.1':
- resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-commonjs@7.27.1':
- resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-react-jsx-self@7.27.1':
- resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-react-jsx-source@7.27.1':
- resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-typescript@7.27.1':
- resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/preset-typescript@7.27.1':
- resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/runtime@7.27.6':
- resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
- engines: {node: '>=6.9.0'}
-
- '@babel/template@7.27.2':
- resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/traverse@7.27.4':
- resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.27.6':
- resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
- engines: {node: '>=6.9.0'}
-
- '@bcoe/v8-coverage@0.2.3':
- resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
-
- '@csstools/color-helpers@5.0.2':
- resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==}
- engines: {node: '>=18'}
-
- '@csstools/css-calc@2.1.4':
- resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
-
- '@csstools/css-color-parser@3.0.10':
- resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
-
- '@csstools/css-parser-algorithms@3.0.5':
- resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-tokenizer': ^3.0.4
-
- '@csstools/css-tokenizer@3.0.4':
- resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
- engines: {node: '>=18'}
-
- '@docsearch/css@3.9.0':
- resolution: {integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==}
-
- '@docsearch/js@3.9.0':
- resolution: {integrity: sha512-4bKHcye6EkLgRE8ze0vcdshmEqxeiJM77M0JXjef7lrYZfSlMunrDOCqyLjiZyo1+c0BhUqA2QpFartIjuHIjw==}
-
- '@docsearch/react@3.9.0':
- resolution: {integrity: sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==}
- peerDependencies:
- '@types/react': '>= 16.8.0 < 20.0.0'
- react: '>= 16.8.0 < 20.0.0'
- react-dom: '>= 16.8.0 < 20.0.0'
- search-insights: '>= 1 < 3'
- peerDependenciesMeta:
- '@types/react':
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
- search-insights:
- optional: true
-
- '@esbuild/aix-ppc64@0.21.5':
- resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.21.5':
- resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.21.5':
- resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.21.5':
- resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.21.5':
- resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.21.5':
- resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.21.5':
- resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.21.5':
- resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.21.5':
- resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.21.5':
- resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.21.5':
- resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.21.5':
- resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.21.5':
- resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.21.5':
- resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.21.5':
- resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.21.5':
- resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.21.5':
- resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-x64@0.21.5':
- resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-x64@0.21.5':
- resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/sunos-x64@0.21.5':
- resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.21.5':
- resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.21.5':
- resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.21.5':
- resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
-
- '@eslint-community/eslint-utils@4.7.0':
- resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
- '@eslint-community/regexpp@4.12.1':
- resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
- '@eslint/eslintrc@2.1.4':
- resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- '@eslint/js@8.57.1':
- resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- '@humanwhocodes/config-array@0.13.0':
- resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
- engines: {node: '>=10.10.0'}
- deprecated: Use @eslint/config-array instead
-
- '@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
-
- '@humanwhocodes/object-schema@2.0.3':
- resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
- deprecated: Use @eslint/object-schema instead
-
- '@iconify/types@2.0.0':
- resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
-
- '@iconify/utils@2.3.0':
- resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
-
- '@istanbuljs/schema@0.1.3':
- resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
- engines: {node: '>=8'}
-
- '@jest/schemas@29.6.3':
- resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- '@jridgewell/gen-mapping@0.3.8':
- resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/set-array@1.2.1':
- resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/sourcemap-codec@1.5.0':
- resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
-
- '@jridgewell/trace-mapping@0.3.25':
- resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
-
- '@microsoft/api-extractor-model@7.28.13':
- resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==}
-
- '@microsoft/api-extractor@7.43.0':
- resolution: {integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==}
- hasBin: true
-
- '@microsoft/tsdoc-config@0.16.2':
- resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
-
- '@microsoft/tsdoc@0.14.2':
- resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
-
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
-
- '@polka/url@1.0.0-next.29':
- resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
-
- '@remix-run/router@1.23.0':
- resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
- engines: {node: '>=14.0.0'}
-
- '@rolldown/pluginutils@1.0.0-beta.11':
- resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==}
-
- '@rollup/pluginutils@5.1.4':
- resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/rollup-android-arm-eabi@4.42.0':
- resolution: {integrity: sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.42.0':
- resolution: {integrity: sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-darwin-arm64@4.42.0':
- resolution: {integrity: sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.42.0':
- resolution: {integrity: sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==}
- cpu: [x64]
- os: [darwin]
-
- '@rollup/rollup-freebsd-arm64@4.42.0':
- resolution: {integrity: sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==}
- cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.42.0':
- resolution: {integrity: sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==}
- cpu: [x64]
- os: [freebsd]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.42.0':
- resolution: {integrity: sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm-musleabihf@4.42.0':
- resolution: {integrity: sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-gnu@4.42.0':
- resolution: {integrity: sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-musl@4.42.0':
- resolution: {integrity: sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-loongarch64-gnu@4.42.0':
- resolution: {integrity: sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==}
- cpu: [loong64]
- os: [linux]
-
- '@rollup/rollup-linux-powerpc64le-gnu@4.42.0':
- resolution: {integrity: sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==}
- cpu: [ppc64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-gnu@4.42.0':
- resolution: {integrity: sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-musl@4.42.0':
- resolution: {integrity: sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-s390x-gnu@4.42.0':
- resolution: {integrity: sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==}
- cpu: [s390x]
- os: [linux]
-
- '@rollup/rollup-linux-x64-gnu@4.42.0':
- resolution: {integrity: sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-linux-x64-musl@4.42.0':
- resolution: {integrity: sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-win32-arm64-msvc@4.42.0':
- resolution: {integrity: sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==}
- cpu: [arm64]
- os: [win32]
-
- '@rollup/rollup-win32-ia32-msvc@4.42.0':
- resolution: {integrity: sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-msvc@4.42.0':
- resolution: {integrity: sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==}
- cpu: [x64]
- os: [win32]
-
- '@rushstack/node-core-library@4.0.2':
- resolution: {integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==}
- peerDependencies:
- '@types/node': '*'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@rushstack/rig-package@0.5.2':
- resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==}
-
- '@rushstack/terminal@0.10.0':
- resolution: {integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==}
- peerDependencies:
- '@types/node': '*'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@rushstack/ts-command-line@4.19.1':
- resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==}
-
- '@shikijs/core@1.29.2':
- resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==}
-
- '@shikijs/engine-javascript@1.29.2':
- resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==}
-
- '@shikijs/engine-oniguruma@1.29.2':
- resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==}
-
- '@shikijs/langs@1.29.2':
- resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==}
-
- '@shikijs/themes@1.29.2':
- resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==}
-
- '@shikijs/transformers@1.29.2':
- resolution: {integrity: sha512-NHQuA+gM7zGuxGWP9/Ub4vpbwrYCrho9nQCLcCPfOe3Yc7LOYwmSuhElI688oiqIXk9dlZwDiyAG9vPBTuPJMA==}
-
- '@shikijs/types@1.29.2':
- resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==}
-
- '@shikijs/vscode-textmate@10.0.2':
- resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
-
- '@sinclair/typebox@0.27.8':
- resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
-
- '@types/argparse@1.0.38':
- resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
-
- '@types/babel__core@7.20.5':
- resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
-
- '@types/babel__generator@7.27.0':
- resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
-
- '@types/babel__template@7.4.4':
- resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
-
- '@types/babel__traverse@7.20.7':
- resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
-
- '@types/estree@1.0.7':
- resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
-
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
- '@types/hast@3.0.4':
- resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
-
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
- '@types/linkify-it@3.0.5':
- resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==}
-
- '@types/markdown-it@13.0.9':
- resolution: {integrity: sha512-1XPwR0+MgXLWfTn9gCsZ55AHOKW1WN+P9vr0PaQh5aerR9LLQXUbjfEAFhjmEmyoYFWAyuN2Mqkn40MZ4ukjBw==}
-
- '@types/mdast@4.0.4':
- resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
-
- '@types/mdurl@1.0.5':
- resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==}
-
- '@types/prop-types@15.7.15':
- resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
-
- '@types/react-dom@18.3.7':
- resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
- peerDependencies:
- '@types/react': ^18.0.0
-
- '@types/react-test-renderer@18.3.1':
- resolution: {integrity: sha512-vAhnk0tG2eGa37lkU9+s5SoroCsRI08xnsWFiAXOuPH2jqzMbcXvKExXViPi1P5fIklDeCvXqyrdmipFaSkZrA==}
-
- '@types/react@18.3.23':
- resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==}
-
- '@types/semver@7.7.0':
- resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==}
-
- '@types/unist@3.0.3':
- resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
-
- '@types/web-bluetooth@0.0.20':
- resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
-
- '@typescript-eslint/eslint-plugin@6.21.0':
- resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
- engines: {node: ^16.0.0 || >=18.0.0}
- peerDependencies:
- '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/parser@6.21.0':
- resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
- engines: {node: ^16.0.0 || >=18.0.0}
- peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/scope-manager@6.21.0':
- resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
- engines: {node: ^16.0.0 || >=18.0.0}
-
- '@typescript-eslint/type-utils@6.21.0':
- resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
- engines: {node: ^16.0.0 || >=18.0.0}
- peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/types@6.21.0':
- resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
- engines: {node: ^16.0.0 || >=18.0.0}
-
- '@typescript-eslint/typescript-estree@6.21.0':
- resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
- engines: {node: ^16.0.0 || >=18.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/utils@6.21.0':
- resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
- engines: {node: ^16.0.0 || >=18.0.0}
- peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
-
- '@typescript-eslint/visitor-keys@6.21.0':
- resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
- engines: {node: ^16.0.0 || >=18.0.0}
-
- '@ungap/structured-clone@1.3.0':
- resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
-
- '@unocss/astro@0.58.9':
- resolution: {integrity: sha512-VWfHNC0EfawFxLfb3uI+QcMGBN+ju+BYtutzeZTjilLKj31X2UpqIh8fepixL6ljgZzB3fweqg2xtUMC0gMnoQ==}
- peerDependencies:
- vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
- peerDependenciesMeta:
- vite:
- optional: true
-
- '@unocss/cli@0.58.9':
- resolution: {integrity: sha512-q7qlwX3V6UaqljWUQ5gMj36yTA9eLuuRywahdQWt1ioy4aPF/MEEfnMBZf/ntrqf5tIT5TO8fE11nvCco2Q/sA==}
- engines: {node: '>=14'}
- hasBin: true
-
- '@unocss/config@0.58.9':
- resolution: {integrity: sha512-90wRXIyGNI8UenWxvHUcH4l4rgq813MsTzYWsf6ZKyLLvkFjV2b2EfGXI27GPvZ7fVE1OAqx+wJNTw8CyQxwag==}
- engines: {node: '>=14'}
-
- '@unocss/core@0.58.9':
- resolution: {integrity: sha512-wYpPIPPsOIbIoMIDuH8ihehJk5pAZmyFKXIYO/Kro98GEOFhz6lJoLsy6/PZuitlgp2/TSlubUuWGjHWvp5osw==}
-
- '@unocss/extractor-arbitrary-variants@0.58.9':
- resolution: {integrity: sha512-M/BvPdbEEMdhcFQh/z2Bf9gylO1Ky/ZnpIvKWS1YJPLt4KA7UWXSUf+ZNTFxX+X58Is5qAb5hNh/XBQmL3gbXg==}
-
- '@unocss/inspector@0.58.9':
- resolution: {integrity: sha512-uRzqkCNeBmEvFePXcfIFcQPMlCXd9/bLwa5OkBthiOILwQdH1uRIW3GWAa2SWspu+kZLP0Ly3SjZ9Wqi+5ZtTw==}
-
- '@unocss/postcss@0.58.9':
- resolution: {integrity: sha512-PnKmH6Qhimw35yO6u6yx9SHaX2NmvbRNPDvMDHA/1xr3M8L0o8U88tgKbWfm65NEGF3R1zJ9A8rjtZn/LPkgPA==}
- engines: {node: '>=14'}
- peerDependencies:
- postcss: ^8.4.21
-
- '@unocss/preset-attributify@0.58.9':
- resolution: {integrity: sha512-ucP+kXRFcwmBmHohUVv31bE/SejMAMo7Hjb0QcKVLyHlzRWUJsfNR+jTAIGIUSYxN7Q8MeigYsongGo3nIeJnQ==}
-
- '@unocss/preset-icons@0.58.9':
- resolution: {integrity: sha512-9dS48+yAunsbS0ylOW2Wisozwpn3nGY1CqTiidkUnrMnrZK3al579A7srUX9NyPWWDjprO7eU/JkWbdDQSmFFA==}
-
- '@unocss/preset-mini@0.58.9':
- resolution: {integrity: sha512-m4aDGYtueP8QGsU3FsyML63T/w5Mtr4htme2jXy6m50+tzC1PPHaIBstMTMQfLc6h8UOregPJyGHB5iYQZGEvQ==}
-
- '@unocss/preset-tagify@0.58.9':
- resolution: {integrity: sha512-obh75XrRmxYwrQMflzvhQUMeHwd/R9bEDhTWUW9aBTolBy4eNypmQwOhHCKh5Xi4Dg6o0xj6GWC/jcCj1SPLog==}
-
- '@unocss/preset-typography@0.58.9':
- resolution: {integrity: sha512-hrsaqKlcZni3Vh4fwXC+lP9e92FQYbqtmlZw2jpxlVwwH5aLzwk4d4MiFQGyhCfzuSDYm0Zd52putFVV02J7bA==}
-
- '@unocss/preset-uno@0.58.9':
- resolution: {integrity: sha512-Fze+X2Z/EegCkRdDRgwwvFBmXBenNR1AG8KxAyz8iPeWbhOBaRra2sn2ScryrfH6SbJHpw26ZyJXycAdS0Fq3A==}
-
- '@unocss/preset-web-fonts@0.58.9':
- resolution: {integrity: sha512-XtiO+Z+RYnNYomNkS2XxaQiY++CrQZKOfNGw5htgIrb32QtYVQSkyYQ3jDw7JmMiCWlZ4E72cV/zUb++WrZLxg==}
-
- '@unocss/preset-wind@0.58.9':
- resolution: {integrity: sha512-7l+7Vx5UoN80BmJKiqDXaJJ6EUqrnUQYv8NxCThFi5lYuHzxsYWZPLU3k3XlWRUQt8XL+6rYx7mMBmD7EUSHyw==}
-
- '@unocss/reset@0.58.9':
- resolution: {integrity: sha512-nA2pg3tnwlquq+FDOHyKwZvs20A6iBsKPU7Yjb48JrNnzoaXqE+O9oN6782IG2yKVW4AcnsAnAnM4cxXhGzy1w==}
-
- '@unocss/rule-utils@0.58.9':
- resolution: {integrity: sha512-45bDa+elmlFLthhJmKr2ltKMAB0yoXnDMQ6Zp5j3OiRB7dDMBkwYRPvHLvIe+34Ey7tDt/kvvDPtWMpPl2quUQ==}
- engines: {node: '>=14'}
-
- '@unocss/scope@0.58.9':
- resolution: {integrity: sha512-BIwcpx0R3bE0rYa9JVDJTk0GX32EBvnbvufBpNkWfC5tb7g+B7nMkVq9ichanksYCCxrIQQo0mrIz5PNzu9sGA==}
-
- '@unocss/transformer-attributify-jsx-babel@0.58.9':
- resolution: {integrity: sha512-UGaQoGZg+3QrsPtnGHPECmsGn4EQb2KSdZ4eGEn2YssjKv+CcQhzRvpEUgnuF/F+jGPkCkS/G/YEQBHRWBY54Q==}
-
- '@unocss/transformer-attributify-jsx@0.58.9':
- resolution: {integrity: sha512-jpL3PRwf8t43v1agUdQn2EHGgfdWfvzsMxFtoybO88xzOikzAJaaouteNtojc/fQat2T9iBduDxVj5egdKmhdQ==}
-
- '@unocss/transformer-compile-class@0.58.9':
- resolution: {integrity: sha512-l2VpCqelJ6Tgc1kfSODxBtg7fCGPVRr2EUzTg1LrGYKa2McbKuc/wV/2DWKHGxL6+voWi7a2C9XflqGDXXutuQ==}
-
- '@unocss/transformer-directives@0.58.9':
- resolution: {integrity: sha512-pLOUsdoY2ugVntJXg0xuGjO9XZ2xCiMxTPRtpZ4TsEzUtdEzMswR06Y8VWvNciTB/Zqxcz9ta8rD0DKePOfSuw==}
-
- '@unocss/transformer-variant-group@0.58.9':
- resolution: {integrity: sha512-3A6voHSnFcyw6xpcZT6oxE+KN4SHRnG4z862tdtWvRGcN+jGyNr20ylEZtnbk4xj0VNMeGHHQRZ0WLvmrAwvOQ==}
-
- '@unocss/vite@0.58.9':
- resolution: {integrity: sha512-mmppBuulAHCal+sC0Qz36Y99t0HicAmznpj70Kzwl7g/yvXwm58/DW2OnpCWw+uA8/JBft/+z3zE+XvrI+T1HA==}
- peerDependencies:
- vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
-
- '@vitejs/plugin-react@4.5.2':
- resolution: {integrity: sha512-QNVT3/Lxx99nMQWJWF7K4N6apUEuT0KlZA3mx/mVaoGj3smm/8rc8ezz15J1pcbcjDK0V15rpHetVfya08r76Q==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
-
- '@vitejs/plugin-vue@5.2.4':
- resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
- engines: {node: ^18.0.0 || >=20.0.0}
- peerDependencies:
- vite: ^5.0.0 || ^6.0.0
- vue: ^3.2.25
-
- '@vitest/coverage-v8@1.6.1':
- resolution: {integrity: sha512-6YeRZwuO4oTGKxD3bijok756oktHSIm3eczVVzNe3scqzuhLwltIF3S9ZL/vwOVIpURmU6SnZhziXXAfw8/Qlw==}
- peerDependencies:
- vitest: 1.6.1
-
- '@vitest/expect@1.6.1':
- resolution: {integrity: sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==}
-
- '@vitest/runner@1.6.1':
- resolution: {integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==}
-
- '@vitest/snapshot@1.6.1':
- resolution: {integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==}
-
- '@vitest/spy@1.6.1':
- resolution: {integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==}
-
- '@vitest/ui@1.6.1':
- resolution: {integrity: sha512-xa57bCPGuzEFqGjPs3vVLyqareG8DX0uMkr5U/v5vLv5/ZUrBrPL7gzxzTJedEyZxFMfsozwTIbbYfEQVo3kgg==}
- peerDependencies:
- vitest: 1.6.1
-
- '@vitest/utils@1.6.1':
- resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==}
-
- '@volar/language-core@1.11.1':
- resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
-
- '@volar/source-map@1.11.1':
- resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==}
-
- '@volar/typescript@1.11.1':
- resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==}
-
- '@vue/compiler-core@3.5.16':
- resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==}
-
- '@vue/compiler-dom@3.5.16':
- resolution: {integrity: sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==}
-
- '@vue/compiler-sfc@3.5.16':
- resolution: {integrity: sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==}
-
- '@vue/compiler-ssr@3.5.16':
- resolution: {integrity: sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==}
-
- '@vue/devtools-api@7.7.6':
- resolution: {integrity: sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==}
-
- '@vue/devtools-kit@7.7.6':
- resolution: {integrity: sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==}
-
- '@vue/devtools-shared@7.7.6':
- resolution: {integrity: sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==}
-
- '@vue/language-core@1.8.27':
- resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@vue/reactivity@3.5.16':
- resolution: {integrity: sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==}
-
- '@vue/runtime-core@3.5.16':
- resolution: {integrity: sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==}
-
- '@vue/runtime-dom@3.5.16':
- resolution: {integrity: sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==}
-
- '@vue/server-renderer@3.5.16':
- resolution: {integrity: sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==}
- peerDependencies:
- vue: 3.5.16
-
- '@vue/shared@3.5.16':
- resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==}
-
- '@vueuse/core@10.11.1':
- resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
-
- '@vueuse/integrations@10.11.1':
- resolution: {integrity: sha512-Y5hCGBguN+vuVYTZmdd/IMXLOdfS60zAmDmFYc4BKBcMUPZH1n4tdyDECCPjXm0bNT3ZRUy1xzTLGaUje8Xyaw==}
- peerDependencies:
- async-validator: ^4
- axios: ^1
- change-case: ^4
- drauu: ^0.3
- focus-trap: ^7
- fuse.js: ^6
- idb-keyval: ^6
- jwt-decode: ^3
- nprogress: ^0.2
- qrcode: ^1.5
- sortablejs: ^1
- universal-cookie: ^6
- peerDependenciesMeta:
- async-validator:
- optional: true
- axios:
- optional: true
- change-case:
- optional: true
- drauu:
- optional: true
- focus-trap:
- optional: true
- fuse.js:
- optional: true
- idb-keyval:
- optional: true
- jwt-decode:
- optional: true
- nprogress:
- optional: true
- qrcode:
- optional: true
- sortablejs:
- optional: true
- universal-cookie:
- optional: true
-
- '@vueuse/metadata@10.11.1':
- resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
-
- '@vueuse/shared@10.11.1':
- resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
-
- acorn-jsx@5.3.2:
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
- peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
- acorn-walk@8.3.4:
- resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
- engines: {node: '>=0.4.0'}
-
- acorn@8.15.0:
- resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
- agent-base@7.1.3:
- resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
- engines: {node: '>= 14'}
-
- ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
- algoliasearch@5.27.0:
- resolution: {integrity: sha512-2PvAgvxxJzA3+dB+ERfS2JPdvUsxNf89Cc2GF5iCcFupTULOwmbfinvqrC4Qj9nHJJDNf494NqEN/1f9177ZTQ==}
- engines: {node: '>= 14.0.0'}
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-sequence-parser@1.1.3:
- resolution: {integrity: sha512-+fksAx9eG3Ab6LDnLs3ZqZa8KVJ/jYnX+D4Qe1azX+LFGFAXqynCQLOdLpNYN/l9e7l6hMWwZbrnctqr6eSQSw==}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- ansi-styles@5.2.0:
- resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
- engines: {node: '>=10'}
-
- anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
-
- argparse@1.0.10:
- resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
-
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
- array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
-
- assertion-error@1.1.0:
- resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
-
- asynckit@0.4.0:
- resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
- engines: {node: '>=8'}
-
- birpc@2.3.0:
- resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==}
-
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
-
- browserslist@4.25.0:
- resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
-
- call-bind-apply-helpers@1.0.2:
- resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
- engines: {node: '>= 0.4'}
-
- callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
-
- caniuse-lite@1.0.30001721:
- resolution: {integrity: sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==}
-
- ccount@2.0.1:
- resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
-
- chai@4.5.0:
- resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
- engines: {node: '>=4'}
-
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
-
- character-entities-html4@2.1.0:
- resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
-
- character-entities-legacy@3.0.0:
- resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
-
- check-error@1.0.3:
- resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
-
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
-
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
- colorette@2.0.20:
- resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
- combined-stream@1.0.8:
- resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
- engines: {node: '>= 0.8'}
-
- comma-separated-tokens@2.0.3:
- resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
-
- commander@9.5.0:
- resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
- engines: {node: ^12.20.0 || >=14}
-
- computeds@0.0.1:
- resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
-
- concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
- confbox@0.2.2:
- resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
-
- consola@3.4.2:
- resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
- engines: {node: ^14.18.0 || >=16.10.0}
-
- convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
- copy-anything@3.0.5:
- resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
- engines: {node: '>=12.13'}
-
- cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
- engines: {node: '>= 8'}
-
- css-tree@2.3.1:
- resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
-
- cssstyle@4.4.0:
- resolution: {integrity: sha512-W0Y2HOXlPkb2yaKrCVRjinYKciu/qSLEmK0K9mcfDei3zwlnHFEHAs/Du3cIRwPqY+J4JsiBzUjoHyc8RsJ03A==}
- engines: {node: '>=18'}
-
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
- data-urls@5.0.0:
- resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
- engines: {node: '>=18'}
-
- de-indent@1.0.2:
- resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
-
- debug@4.4.1:
- resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- decimal.js@10.5.0:
- resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
-
- deep-eql@4.1.4:
- resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
- engines: {node: '>=6'}
-
- deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-
- defu@6.1.4:
- resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
-
- delayed-stream@1.0.0:
- resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
- engines: {node: '>=0.4.0'}
-
- dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
-
- destr@2.0.5:
- resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
-
- devlop@1.1.0:
- resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
-
- diff-sequences@29.6.3:
- resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
-
- doctrine@3.0.0:
- resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
- engines: {node: '>=6.0.0'}
-
- dunder-proto@1.0.1:
- resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
- engines: {node: '>= 0.4'}
-
- duplexer@0.1.2:
- resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-
- electron-to-chromium@1.5.166:
- resolution: {integrity: sha512-QPWqHL0BglzPYyJJ1zSSmwFFL6MFXhbACOCcsCdUMCkzPdS9/OIBVxg516X/Ado2qwAq8k0nJJ7phQPCqiaFAw==}
-
- emoji-regex-xs@1.0.0:
- resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
-
- entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
-
- entities@6.0.1:
- resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
- engines: {node: '>=0.12'}
-
- es-define-property@1.0.1:
- resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
- engines: {node: '>= 0.4'}
-
- es-errors@1.3.0:
- resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
- engines: {node: '>= 0.4'}
-
- es-object-atoms@1.1.1:
- resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
- engines: {node: '>= 0.4'}
-
- es-set-tostringtag@2.1.0:
- resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
- engines: {node: '>= 0.4'}
-
- esbuild@0.21.5:
- resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
- engines: {node: '>=12'}
- hasBin: true
-
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
-
- escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
-
- eslint-plugin-react-hooks@4.6.2:
- resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
- engines: {node: '>=10'}
- peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
-
- eslint-plugin-react-refresh@0.4.20:
- resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==}
- peerDependencies:
- eslint: '>=8.40'
-
- eslint-scope@7.2.2:
- resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- eslint-visitor-keys@3.4.3:
- resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- eslint@8.57.1:
- resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
- hasBin: true
-
- espree@9.6.1:
- resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- esquery@1.6.0:
- resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
- engines: {node: '>=0.10'}
-
- esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
-
- estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
-
- estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-
- estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
- esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
-
- execa@8.0.1:
- resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
- engines: {node: '>=16.17'}
-
- exsolve@1.0.5:
- resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==}
-
- fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
- fast-glob@3.3.3:
- resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
- engines: {node: '>=8.6.0'}
-
- fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
- fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-
- fastq@1.19.1:
- resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
-
- fflate@0.8.2:
- resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
-
- file-entry-cache@6.0.1:
- resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
- engines: {node: ^10.12.0 || >=12.0.0}
-
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
- find-up@5.0.0:
- resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
- engines: {node: '>=10'}
-
- flat-cache@3.2.0:
- resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
- engines: {node: ^10.12.0 || >=12.0.0}
-
- flatted@3.3.3:
- resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
-
- focus-trap@7.6.5:
- resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==}
-
- form-data@4.0.3:
- resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==}
- engines: {node: '>= 6'}
-
- fs-extra@7.0.1:
- resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
- engines: {node: '>=6 <7 || >=8'}
-
- fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
- gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
-
- get-func-name@2.0.2:
- resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
-
- get-intrinsic@1.3.0:
- resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
- engines: {node: '>= 0.4'}
-
- get-proto@1.0.1:
- resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
- engines: {node: '>= 0.4'}
-
- get-stream@8.0.1:
- resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
- engines: {node: '>=16'}
-
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
- glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
-
- glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- deprecated: Glob versions prior to v9 are no longer supported
-
- globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
-
- globals@13.24.0:
- resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
- engines: {node: '>=8'}
-
- globals@15.15.0:
- resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
- engines: {node: '>=18'}
-
- globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
-
- gopd@1.2.0:
- resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
- engines: {node: '>= 0.4'}
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- graphemer@1.4.0:
- resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
- gzip-size@6.0.0:
- resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
- engines: {node: '>=10'}
-
- has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
-
- has-symbols@1.1.0:
- resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
- engines: {node: '>= 0.4'}
-
- has-tostringtag@1.0.2:
- resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
- engines: {node: '>= 0.4'}
-
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
-
- hast-util-to-html@9.0.5:
- resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
-
- hast-util-whitespace@3.0.0:
- resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
-
- he@1.2.0:
- resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
- hasBin: true
-
- helper-js@3.1.6:
- resolution: {integrity: sha512-lhncHDAxS2PTA44aG1AofxT51v0IXEVOmaUCC6HwuGaGqE1yEkjhPH74Vb/Aw4xt8Kt5bMvStCr6FekANp+PGg==}
-
- hookable@5.5.3:
- resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
-
- html-encoding-sniffer@4.0.0:
- resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
- engines: {node: '>=18'}
-
- html-escaper@2.0.2:
- resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
-
- html-void-elements@3.0.0:
- resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
-
- http-proxy-agent@7.0.2:
- resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
- engines: {node: '>= 14'}
-
- https-proxy-agent@7.0.6:
- resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
- engines: {node: '>= 14'}
-
- human-signals@5.0.0:
- resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
- engines: {node: '>=16.17.0'}
-
- iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
-
- ignore@5.3.2:
- resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
- engines: {node: '>= 4'}
-
- immer@10.1.1:
- resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==}
-
- import-fresh@3.3.1:
- resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
- engines: {node: '>=6'}
-
- import-lazy@4.0.0:
- resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
- engines: {node: '>=8'}
-
- imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
-
- inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
-
- is-core-module@2.16.1:
- resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
- engines: {node: '>= 0.4'}
-
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
-
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
- is-path-inside@3.0.3:
- resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
- engines: {node: '>=8'}
-
- is-potential-custom-element-name@1.0.1:
- resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
-
- is-stream@3.0.0:
- resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- is-what@4.1.16:
- resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
- engines: {node: '>=12.13'}
-
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
- istanbul-lib-coverage@3.2.2:
- resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
- engines: {node: '>=8'}
-
- istanbul-lib-report@3.0.1:
- resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
- engines: {node: '>=10'}
-
- istanbul-lib-source-maps@5.0.6:
- resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
- engines: {node: '>=10'}
-
- istanbul-reports@3.1.7:
- resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
- engines: {node: '>=8'}
-
- jiti@1.21.7:
- resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
- hasBin: true
-
- jju@1.4.0:
- resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
-
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
- js-tokens@9.0.1:
- resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
-
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
-
- jsdom@24.1.3:
- resolution: {integrity: sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==}
- engines: {node: '>=18'}
- peerDependencies:
- canvas: ^2.11.2
- peerDependenciesMeta:
- canvas:
- optional: true
-
- jsesc@3.1.0:
- resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
- engines: {node: '>=6'}
- hasBin: true
-
- json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
- json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
- json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
-
- jsonc-parser@3.3.1:
- resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
-
- jsonfile@4.0.0:
- resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
-
- keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-
- kolorist@1.8.0:
- resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
- levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
-
- local-pkg@0.5.1:
- resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
- engines: {node: '>=14'}
-
- local-pkg@1.1.1:
- resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
- engines: {node: '>=14'}
-
- locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
-
- lodash.get@4.4.2:
- resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
- deprecated: This package is deprecated. Use the optional chaining (?.) operator instead.
-
- lodash.isequal@4.5.0:
- resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
- deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
-
- lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
- lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-
- loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: true
-
- loupe@2.3.7:
- resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
-
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
- lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
- lru-cache@6.0.0:
- resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
- engines: {node: '>=10'}
-
- lunr@2.3.9:
- resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
-
- magic-string@0.30.17:
- resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
-
- magicast@0.3.5:
- resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
-
- make-dir@4.0.0:
- resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
- engines: {node: '>=10'}
-
- mark.js@8.11.1:
- resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
-
- marked@4.3.0:
- resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==}
- engines: {node: '>= 12'}
- hasBin: true
-
- math-intrinsics@1.1.0:
- resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
- engines: {node: '>= 0.4'}
-
- mdast-util-to-hast@13.2.0:
- resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
-
- mdn-data@2.0.30:
- resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
-
- merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
-
- micromark-util-character@2.1.1:
- resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
-
- micromark-util-encode@2.0.1:
- resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
-
- micromark-util-sanitize-uri@2.0.1:
- resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
-
- micromark-util-symbol@2.0.1:
- resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
-
- micromark-util-types@2.0.2:
- resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
-
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
-
- mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
-
- mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
-
- mimic-fn@4.0.0:
- resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
- engines: {node: '>=12'}
-
- minimatch@3.0.8:
- resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==}
-
- minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
-
- minimatch@9.0.3:
- resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minisearch@6.3.0:
- resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==}
-
- mitt@3.0.1:
- resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
-
- mlly@1.7.4:
- resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
-
- mrmime@2.0.1:
- resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
- engines: {node: '>=10'}
-
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- muggle-string@0.3.1:
- resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
-
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-
- node-fetch-native@1.6.6:
- resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
-
- node-releases@2.0.19:
- resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- npm-run-path@5.3.0:
- resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- nwsapi@2.2.20:
- resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==}
-
- object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
-
- ofetch@1.4.1:
- resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==}
-
- once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
- onetime@6.0.0:
- resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
- engines: {node: '>=12'}
-
- oniguruma-to-es@2.3.0:
- resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==}
-
- optionator@0.9.4:
- resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
- engines: {node: '>= 0.8.0'}
-
- p-limit@3.1.0:
- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
- engines: {node: '>=10'}
-
- p-limit@5.0.0:
- resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
- engines: {node: '>=18'}
-
- p-locate@5.0.0:
- resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
- engines: {node: '>=10'}
-
- package-manager-detector@1.3.0:
- resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
-
- parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
-
- parse5@7.3.0:
- resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
-
- path-browserify@1.0.1:
- resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
-
- path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
-
- path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
-
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
- path-key@4.0.0:
- resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
- engines: {node: '>=12'}
-
- path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
- path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
-
- pathe@1.1.2:
- resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
-
- pathe@2.0.3:
- resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
-
- pathval@1.1.1:
- resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
-
- perfect-debounce@1.0.0:
- resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
-
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
-
- picomatch@4.0.2:
- resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
- engines: {node: '>=12'}
-
- pkg-types@1.3.1:
- resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
-
- pkg-types@2.1.0:
- resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
-
- postcss@8.5.4:
- resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==}
- engines: {node: ^10 || ^12 || >=14}
-
- preact@10.26.8:
- resolution: {integrity: sha512-1nMfdFjucm5hKvq0IClqZwK4FJkGXhRrQstOQ3P4vp8HxKrJEMFcY6RdBRVTdfQS/UlnX6gfbPuTvaqx/bDoeQ==}
-
- prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
-
- pretty-format@29.7.0:
- resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- property-information@7.1.0:
- resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
-
- psl@1.15.0:
- resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==}
-
- punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
-
- quansync@0.2.10:
- resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
-
- querystringify@2.2.0:
- resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
-
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
- react-base-virtual-list@1.1.0:
- resolution: {integrity: sha512-zPSHebgkQkVQrCTRAXoAohuQqisVAvBV1NPj2M5TVih/U1TofWPdu5Ue9roLSIGza4NG8G4Fb0ByVWRTeayByA==}
- peerDependencies:
- react: ^18
- react-dom: ^18
-
- react-dom@18.3.1:
- resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
- peerDependencies:
- react: ^18.3.1
-
- react-is@18.3.1:
- resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
-
- react-refresh@0.17.0:
- resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
- engines: {node: '>=0.10.0'}
-
- react-router-dom@6.30.1:
- resolution: {integrity: sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- react: '>=16.8'
- react-dom: '>=16.8'
-
- react-router@6.30.1:
- resolution: {integrity: sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- react: '>=16.8'
-
- react-shallow-renderer@16.15.0:
- resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==}
- peerDependencies:
- react: ^16.0.0 || ^17.0.0 || ^18.0.0
-
- react-test-renderer@18.3.1:
- resolution: {integrity: sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==}
- peerDependencies:
- react: ^18.3.1
-
- react@18.3.1:
- resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
- engines: {node: '>=0.10.0'}
-
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
-
- regex-recursion@5.1.1:
- resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==}
-
- regex-utilities@2.3.0:
- resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
-
- regex@5.1.1:
- resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==}
-
- requires-port@1.0.0:
- resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
-
- resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
-
- resolve@1.19.0:
- resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
-
- resolve@1.22.10:
- resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
- engines: {node: '>= 0.4'}
- hasBin: true
-
- reusify@1.1.0:
- resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
- rfdc@1.4.1:
- resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
-
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- deprecated: Rimraf versions prior to v4 are no longer supported
- hasBin: true
-
- rollup@4.42.0:
- resolution: {integrity: sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
- rrweb-cssom@0.7.1:
- resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
-
- rrweb-cssom@0.8.0:
- resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
-
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- saxes@6.0.0:
- resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
- engines: {node: '>=v12.22.7'}
-
- scheduler@0.23.2:
- resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
-
- search-insights@2.17.3:
- resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==}
-
- semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
- hasBin: true
-
- semver@7.5.4:
- resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
- engines: {node: '>=10'}
- hasBin: true
-
- semver@7.7.2:
- resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
- engines: {node: '>=10'}
- hasBin: true
-
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- shiki@0.14.7:
- resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==}
-
- shiki@1.29.2:
- resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==}
-
- siginfo@2.0.0:
- resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
-
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
- sirv@2.0.4:
- resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
- engines: {node: '>= 10'}
-
- slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
-
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
-
- source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
-
- space-separated-tokens@2.0.2:
- resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
-
- speakingurl@14.0.1:
- resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
- engines: {node: '>=0.10.0'}
-
- sprintf-js@1.0.3:
- resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
-
- stackback@0.0.2:
- resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
-
- std-env@3.9.0:
- resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
-
- string-argv@0.3.2:
- resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
- engines: {node: '>=0.6.19'}
-
- stringify-entities@4.0.4:
- resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
-
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-final-newline@3.0.0:
- resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
- engines: {node: '>=12'}
-
- strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
-
- strip-literal@2.1.1:
- resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==}
-
- superjson@2.2.2:
- resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
- engines: {node: '>=16'}
-
- supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
-
- supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
-
- supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
-
- symbol-tree@3.2.4:
- resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
-
- tabbable@6.2.0:
- resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
-
- test-exclude@6.0.0:
- resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
- engines: {node: '>=8'}
-
- text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
-
- tinybench@2.9.0:
- resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
-
- tinyexec@1.0.1:
- resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
-
- tinypool@0.8.4:
- resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==}
- engines: {node: '>=14.0.0'}
-
- tinyspy@2.2.1:
- resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==}
- engines: {node: '>=14.0.0'}
-
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
- totalist@3.0.1:
- resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
- engines: {node: '>=6'}
-
- tough-cookie@4.1.4:
- resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
- engines: {node: '>=6'}
-
- tr46@5.1.1:
- resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
- engines: {node: '>=18'}
-
- trim-lines@3.0.1:
- resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
-
- ts-api-utils@1.4.3:
- resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
- engines: {node: '>=16'}
- peerDependencies:
- typescript: '>=4.2.0'
-
- type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
-
- type-detect@4.1.0:
- resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
- engines: {node: '>=4'}
-
- type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
-
- typedoc-plugin-inline-sources@1.3.0:
- resolution: {integrity: sha512-WUv9+u6KzGNwfdxBo8ATgU5ZkbfreAoup+kmd8JMcDQtS0A8kDqosb+XGypFgiq/BcrnJJJS/oC/StDb4vx0IQ==}
- peerDependencies:
- typedoc: 0.28.x
-
- typedoc@0.25.13:
- resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==}
- engines: {node: '>= 16'}
- hasBin: true
- peerDependencies:
- typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x
-
- typescript@5.4.2:
- resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- typescript@5.8.3:
- resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- ufo@1.6.1:
- resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
-
- unconfig@0.3.13:
- resolution: {integrity: sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==}
-
- unist-util-is@6.0.0:
- resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
-
- unist-util-position@5.0.0:
- resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
-
- unist-util-stringify-position@4.0.0:
- resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
-
- unist-util-visit-parents@6.0.1:
- resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
-
- unist-util-visit@5.0.0:
- resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
-
- universalify@0.1.2:
- resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
- engines: {node: '>= 4.0.0'}
-
- universalify@0.2.0:
- resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
- engines: {node: '>= 4.0.0'}
-
- unocss@0.58.9:
- resolution: {integrity: sha512-aqANXXP0RrtN4kSaTLn/7I6wh8o45LUdVgPzGu7Fan2DfH2+wpIs6frlnlHlOymnb+52dp6kXluQinddaUKW1A==}
- engines: {node: '>=14'}
- peerDependencies:
- '@unocss/webpack': 0.58.9
- vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
- peerDependenciesMeta:
- '@unocss/webpack':
- optional: true
- vite:
- optional: true
-
- update-browserslist-db@1.1.3:
- resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
- uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
- url-parse@1.5.10:
- resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
-
- use-immer@0.9.0:
- resolution: {integrity: sha512-/L+enLi0nvuZ6j4WlyK0US9/ECUtV5v9RUbtxnn5+WbtaXYUaOBoKHDNL9I5AETdurQ4rIFIj/s+Z5X80ATyKw==}
- peerDependencies:
- immer: '>=2.0.0'
- react: ^16.8.0 || ^17.0.1 || ^18.0.0
-
- validator@13.15.15:
- resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==}
- engines: {node: '>= 0.10'}
-
- vfile-message@4.0.2:
- resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
-
- vfile@6.0.3:
- resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
-
- vite-node@1.6.1:
- resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
-
- vite-plugin-dts@3.9.1:
- resolution: {integrity: sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- typescript: '*'
- vite: '*'
- peerDependenciesMeta:
- vite:
- optional: true
-
- vite@5.4.19:
- resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^18.0.0 || >=20.0.0
- less: '*'
- lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.4.0
- peerDependenciesMeta:
- '@types/node':
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
-
- vitepress@1.0.0-rc.44:
- resolution: {integrity: sha512-tO5taxGI7fSpBK1D8zrZTyJJERlyU9nnt0jHSt3fywfq3VKn977Hg0wUuTkEmwXlFYwuW26+6+3xorf4nD3XvA==}
- hasBin: true
- peerDependencies:
- markdown-it-mathjax3: ^4.3.2
- postcss: ^8.4.35
- peerDependenciesMeta:
- markdown-it-mathjax3:
- optional: true
- postcss:
- optional: true
-
- vitest@1.6.1:
- resolution: {integrity: sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
- peerDependencies:
- '@edge-runtime/vm': '*'
- '@types/node': ^18.0.0 || >=20.0.0
- '@vitest/browser': 1.6.1
- '@vitest/ui': 1.6.1
- happy-dom: '*'
- jsdom: '*'
- peerDependenciesMeta:
- '@edge-runtime/vm':
- optional: true
- '@types/node':
- optional: true
- '@vitest/browser':
- optional: true
- '@vitest/ui':
- optional: true
- happy-dom:
- optional: true
- jsdom:
- optional: true
-
- vscode-oniguruma@1.7.0:
- resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
-
- vscode-textmate@8.0.0:
- resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==}
-
- vue-demi@0.14.10:
- resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
- engines: {node: '>=12'}
- hasBin: true
- peerDependencies:
- '@vue/composition-api': ^1.0.0-rc.1
- vue: ^3.0.0-0 || ^2.6.0
- peerDependenciesMeta:
- '@vue/composition-api':
- optional: true
-
- vue-template-compiler@2.7.16:
- resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
-
- vue-tsc@1.8.27:
- resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==}
- hasBin: true
- peerDependencies:
- typescript: '*'
-
- vue@3.5.16:
- resolution: {integrity: sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- w3c-xmlserializer@5.0.0:
- resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
- engines: {node: '>=18'}
-
- webidl-conversions@7.0.0:
- resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
- engines: {node: '>=12'}
-
- whatwg-encoding@3.1.1:
- resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
- engines: {node: '>=18'}
-
- whatwg-mimetype@4.0.0:
- resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
- engines: {node: '>=18'}
-
- whatwg-url@14.2.0:
- resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
- engines: {node: '>=18'}
-
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- why-is-node-running@2.3.0:
- resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
- engines: {node: '>=8'}
- hasBin: true
-
- word-wrap@1.2.5:
- resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
- engines: {node: '>=0.10.0'}
-
- wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
- ws@8.18.2:
- resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
- xml-name-validator@5.0.0:
- resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
- engines: {node: '>=18'}
-
- xmlchars@2.2.0:
- resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
-
- yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
- yallist@4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-
- yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
-
- yocto-queue@1.2.1:
- resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
- engines: {node: '>=12.20'}
-
- z-schema@5.0.5:
- resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==}
- engines: {node: '>=8.0.0'}
- hasBin: true
-
- zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
-
-snapshots:
-
- '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)(search-insights@2.17.3)':
- dependencies:
- '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)(search-insights@2.17.3)
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
- - search-insights
-
- '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)(search-insights@2.17.3)':
- dependencies:
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)
- search-insights: 2.17.3
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
-
- '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)':
- dependencies:
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)
- '@algolia/client-search': 5.27.0
- algoliasearch: 5.27.0
-
- '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)':
- dependencies:
- '@algolia/client-search': 5.27.0
- algoliasearch: 5.27.0
-
- '@algolia/client-abtesting@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/client-analytics@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/client-common@5.27.0': {}
-
- '@algolia/client-insights@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/client-personalization@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/client-query-suggestions@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/client-search@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/ingestion@1.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/monitoring@1.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/recommend@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- '@algolia/requester-browser-xhr@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
-
- '@algolia/requester-fetch@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
-
- '@algolia/requester-node-http@5.27.0':
- dependencies:
- '@algolia/client-common': 5.27.0
-
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.8
- '@jridgewell/trace-mapping': 0.3.25
-
- '@antfu/install-pkg@1.1.0':
- dependencies:
- package-manager-detector: 1.3.0
- tinyexec: 1.0.1
-
- '@antfu/utils@0.7.10': {}
-
- '@antfu/utils@8.1.1': {}
-
- '@asamuzakjp/css-color@3.2.0':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- lru-cache: 10.4.3
-
- '@babel/code-frame@7.27.1':
- dependencies:
- '@babel/helper-validator-identifier': 7.27.1
- js-tokens: 4.0.0
- picocolors: 1.1.1
-
- '@babel/compat-data@7.27.5': {}
-
- '@babel/core@7.27.4':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.27.5
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)
- '@babel/helpers': 7.27.6
- '@babel/parser': 7.27.5
- '@babel/template': 7.27.2
- '@babel/traverse': 7.27.4
- '@babel/types': 7.27.6
- convert-source-map: 2.0.0
- debug: 4.4.1
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/generator@7.27.5':
- dependencies:
- '@babel/parser': 7.27.5
- '@babel/types': 7.27.6
- '@jridgewell/gen-mapping': 0.3.8
- '@jridgewell/trace-mapping': 0.3.25
- jsesc: 3.1.0
-
- '@babel/helper-annotate-as-pure@7.27.3':
- dependencies:
- '@babel/types': 7.27.6
-
- '@babel/helper-compilation-targets@7.27.2':
- dependencies:
- '@babel/compat-data': 7.27.5
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.25.0
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-member-expression-to-functions': 7.27.1
- '@babel/helper-optimise-call-expression': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/traverse': 7.27.4
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-member-expression-to-functions@7.27.1':
- dependencies:
- '@babel/traverse': 7.27.4
- '@babel/types': 7.27.6
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-imports@7.27.1':
- dependencies:
- '@babel/traverse': 7.27.4
- '@babel/types': 7.27.6
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.27.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-optimise-call-expression@7.27.1':
- dependencies:
- '@babel/types': 7.27.6
-
- '@babel/helper-plugin-utils@7.27.1': {}
-
- '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-member-expression-to-functions': 7.27.1
- '@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.27.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
- dependencies:
- '@babel/traverse': 7.27.4
- '@babel/types': 7.27.6
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-string-parser@7.27.1': {}
-
- '@babel/helper-validator-identifier@7.27.1': {}
-
- '@babel/helper-validator-option@7.27.1': {}
-
- '@babel/helpers@7.27.6':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.27.6
-
- '@babel/parser@7.27.5':
- dependencies:
- '@babel/types': 7.27.6
-
- '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/preset-typescript@7.27.1(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-validator-option': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4)
- '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4)
- '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/runtime@7.27.6': {}
-
- '@babel/template@7.27.2':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.27.5
- '@babel/types': 7.27.6
-
- '@babel/traverse@7.27.4':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.27.5
- '@babel/parser': 7.27.5
- '@babel/template': 7.27.2
- '@babel/types': 7.27.6
- debug: 4.4.1
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/types@7.27.6':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
-
- '@bcoe/v8-coverage@0.2.3': {}
-
- '@csstools/color-helpers@5.0.2': {}
-
- '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/color-helpers': 5.0.2
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-tokenizer@3.0.4': {}
-
- '@docsearch/css@3.9.0': {}
-
- '@docsearch/js@3.9.0(@algolia/client-search@5.27.0)(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)':
- dependencies:
- '@docsearch/react': 3.9.0(@algolia/client-search@5.27.0)(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)
- preact: 10.26.8
- transitivePeerDependencies:
- - '@algolia/client-search'
- - '@types/react'
- - react
- - react-dom
- - search-insights
-
- '@docsearch/react@3.9.0(@algolia/client-search@5.27.0)(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)':
- dependencies:
- '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)(search-insights@2.17.3)
- '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.27.0)(algoliasearch@5.27.0)
- '@docsearch/css': 3.9.0
- algoliasearch: 5.27.0
- optionalDependencies:
- '@types/react': 18.3.23
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- search-insights: 2.17.3
- transitivePeerDependencies:
- - '@algolia/client-search'
-
- '@esbuild/aix-ppc64@0.21.5':
- optional: true
-
- '@esbuild/android-arm64@0.21.5':
- optional: true
-
- '@esbuild/android-arm@0.21.5':
- optional: true
-
- '@esbuild/android-x64@0.21.5':
- optional: true
-
- '@esbuild/darwin-arm64@0.21.5':
- optional: true
-
- '@esbuild/darwin-x64@0.21.5':
- optional: true
-
- '@esbuild/freebsd-arm64@0.21.5':
- optional: true
-
- '@esbuild/freebsd-x64@0.21.5':
- optional: true
-
- '@esbuild/linux-arm64@0.21.5':
- optional: true
-
- '@esbuild/linux-arm@0.21.5':
- optional: true
-
- '@esbuild/linux-ia32@0.21.5':
- optional: true
-
- '@esbuild/linux-loong64@0.21.5':
- optional: true
-
- '@esbuild/linux-mips64el@0.21.5':
- optional: true
-
- '@esbuild/linux-ppc64@0.21.5':
- optional: true
-
- '@esbuild/linux-riscv64@0.21.5':
- optional: true
-
- '@esbuild/linux-s390x@0.21.5':
- optional: true
-
- '@esbuild/linux-x64@0.21.5':
- optional: true
-
- '@esbuild/netbsd-x64@0.21.5':
- optional: true
-
- '@esbuild/openbsd-x64@0.21.5':
- optional: true
-
- '@esbuild/sunos-x64@0.21.5':
- optional: true
-
- '@esbuild/win32-arm64@0.21.5':
- optional: true
-
- '@esbuild/win32-ia32@0.21.5':
- optional: true
-
- '@esbuild/win32-x64@0.21.5':
- optional: true
-
- '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)':
- dependencies:
- eslint: 8.57.1
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/regexpp@4.12.1': {}
-
- '@eslint/eslintrc@2.1.4':
- dependencies:
- ajv: 6.12.6
- debug: 4.4.1
- espree: 9.6.1
- globals: 13.24.0
- ignore: 5.3.2
- import-fresh: 3.3.1
- js-yaml: 4.1.0
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
-
- '@eslint/js@8.57.1': {}
-
- '@humanwhocodes/config-array@0.13.0':
- dependencies:
- '@humanwhocodes/object-schema': 2.0.3
- debug: 4.4.1
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
-
- '@humanwhocodes/module-importer@1.0.1': {}
-
- '@humanwhocodes/object-schema@2.0.3': {}
-
- '@iconify/types@2.0.0': {}
-
- '@iconify/utils@2.3.0':
- dependencies:
- '@antfu/install-pkg': 1.1.0
- '@antfu/utils': 8.1.1
- '@iconify/types': 2.0.0
- debug: 4.4.1
- globals: 15.15.0
- kolorist: 1.8.0
- local-pkg: 1.1.1
- mlly: 1.7.4
- transitivePeerDependencies:
- - supports-color
-
- '@istanbuljs/schema@0.1.3': {}
-
- '@jest/schemas@29.6.3':
- dependencies:
- '@sinclair/typebox': 0.27.8
-
- '@jridgewell/gen-mapping@0.3.8':
- dependencies:
- '@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.5.0
- '@jridgewell/trace-mapping': 0.3.25
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/set-array@1.2.1': {}
-
- '@jridgewell/sourcemap-codec@1.5.0': {}
-
- '@jridgewell/trace-mapping@0.3.25':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.0
-
- '@microsoft/api-extractor-model@7.28.13':
- dependencies:
- '@microsoft/tsdoc': 0.14.2
- '@microsoft/tsdoc-config': 0.16.2
- '@rushstack/node-core-library': 4.0.2
- transitivePeerDependencies:
- - '@types/node'
-
- '@microsoft/api-extractor@7.43.0':
- dependencies:
- '@microsoft/api-extractor-model': 7.28.13
- '@microsoft/tsdoc': 0.14.2
- '@microsoft/tsdoc-config': 0.16.2
- '@rushstack/node-core-library': 4.0.2
- '@rushstack/rig-package': 0.5.2
- '@rushstack/terminal': 0.10.0
- '@rushstack/ts-command-line': 4.19.1
- lodash: 4.17.21
- minimatch: 3.0.8
- resolve: 1.22.10
- semver: 7.5.4
- source-map: 0.6.1
- typescript: 5.4.2
- transitivePeerDependencies:
- - '@types/node'
-
- '@microsoft/tsdoc-config@0.16.2':
- dependencies:
- '@microsoft/tsdoc': 0.14.2
- ajv: 6.12.6
- jju: 1.4.0
- resolve: 1.19.0
-
- '@microsoft/tsdoc@0.14.2': {}
-
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.1
-
- '@polka/url@1.0.0-next.29': {}
-
- '@remix-run/router@1.23.0': {}
-
- '@rolldown/pluginutils@1.0.0-beta.11': {}
-
- '@rollup/pluginutils@5.1.4(rollup@4.42.0)':
- dependencies:
- '@types/estree': 1.0.8
- estree-walker: 2.0.2
- picomatch: 4.0.2
- optionalDependencies:
- rollup: 4.42.0
-
- '@rollup/rollup-android-arm-eabi@4.42.0':
- optional: true
-
- '@rollup/rollup-android-arm64@4.42.0':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.42.0':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.42.0':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.42.0':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-loongarch64-gnu@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-powerpc64le-gnu@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-riscv64-musl@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.42.0':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.42.0':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.42.0':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.42.0':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.42.0':
- optional: true
-
- '@rushstack/node-core-library@4.0.2':
- dependencies:
- fs-extra: 7.0.1
- import-lazy: 4.0.0
- jju: 1.4.0
- resolve: 1.22.10
- semver: 7.5.4
- z-schema: 5.0.5
-
- '@rushstack/rig-package@0.5.2':
- dependencies:
- resolve: 1.22.10
- strip-json-comments: 3.1.1
-
- '@rushstack/terminal@0.10.0':
- dependencies:
- '@rushstack/node-core-library': 4.0.2
- supports-color: 8.1.1
-
- '@rushstack/ts-command-line@4.19.1':
- dependencies:
- '@rushstack/terminal': 0.10.0
- '@types/argparse': 1.0.38
- argparse: 1.0.10
- string-argv: 0.3.2
- transitivePeerDependencies:
- - '@types/node'
-
- '@shikijs/core@1.29.2':
- dependencies:
- '@shikijs/engine-javascript': 1.29.2
- '@shikijs/engine-oniguruma': 1.29.2
- '@shikijs/types': 1.29.2
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.4
- hast-util-to-html: 9.0.5
-
- '@shikijs/engine-javascript@1.29.2':
- dependencies:
- '@shikijs/types': 1.29.2
- '@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 2.3.0
-
- '@shikijs/engine-oniguruma@1.29.2':
- dependencies:
- '@shikijs/types': 1.29.2
- '@shikijs/vscode-textmate': 10.0.2
-
- '@shikijs/langs@1.29.2':
- dependencies:
- '@shikijs/types': 1.29.2
-
- '@shikijs/themes@1.29.2':
- dependencies:
- '@shikijs/types': 1.29.2
-
- '@shikijs/transformers@1.29.2':
- dependencies:
- '@shikijs/core': 1.29.2
- '@shikijs/types': 1.29.2
-
- '@shikijs/types@1.29.2':
- dependencies:
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.4
-
- '@shikijs/vscode-textmate@10.0.2': {}
-
- '@sinclair/typebox@0.27.8': {}
-
- '@types/argparse@1.0.38': {}
-
- '@types/babel__core@7.20.5':
- dependencies:
- '@babel/parser': 7.27.5
- '@babel/types': 7.27.6
- '@types/babel__generator': 7.27.0
- '@types/babel__template': 7.4.4
- '@types/babel__traverse': 7.20.7
-
- '@types/babel__generator@7.27.0':
- dependencies:
- '@babel/types': 7.27.6
-
- '@types/babel__template@7.4.4':
- dependencies:
- '@babel/parser': 7.27.5
- '@babel/types': 7.27.6
-
- '@types/babel__traverse@7.20.7':
- dependencies:
- '@babel/types': 7.27.6
-
- '@types/estree@1.0.7': {}
-
- '@types/estree@1.0.8': {}
-
- '@types/hast@3.0.4':
- dependencies:
- '@types/unist': 3.0.3
-
- '@types/json-schema@7.0.15': {}
-
- '@types/linkify-it@3.0.5': {}
-
- '@types/markdown-it@13.0.9':
- dependencies:
- '@types/linkify-it': 3.0.5
- '@types/mdurl': 1.0.5
-
- '@types/mdast@4.0.4':
- dependencies:
- '@types/unist': 3.0.3
-
- '@types/mdurl@1.0.5': {}
-
- '@types/prop-types@15.7.15': {}
-
- '@types/react-dom@18.3.7(@types/react@18.3.23)':
- dependencies:
- '@types/react': 18.3.23
-
- '@types/react-test-renderer@18.3.1':
- dependencies:
- '@types/react': 18.3.23
-
- '@types/react@18.3.23':
- dependencies:
- '@types/prop-types': 15.7.15
- csstype: 3.1.3
-
- '@types/semver@7.7.0': {}
-
- '@types/unist@3.0.3': {}
-
- '@types/web-bluetooth@0.0.20': {}
-
- '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)':
- dependencies:
- '@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.3)
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3)
- '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3)
- '@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.4.1
- eslint: 8.57.1
- graphemer: 1.4.0
- ignore: 5.3.2
- natural-compare: 1.4.0
- semver: 7.7.2
- ts-api-utils: 1.4.3(typescript@5.8.3)
- optionalDependencies:
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3)':
- dependencies:
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3)
- '@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.4.1
- eslint: 8.57.1
- optionalDependencies:
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/scope-manager@6.21.0':
- dependencies:
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/visitor-keys': 6.21.0
-
- '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.8.3)':
- dependencies:
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3)
- '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3)
- debug: 4.4.1
- eslint: 8.57.1
- ts-api-utils: 1.4.3(typescript@5.8.3)
- optionalDependencies:
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/types@6.21.0': {}
-
- '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)':
- dependencies:
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.4.1
- globby: 11.1.0
- is-glob: 4.0.3
- minimatch: 9.0.3
- semver: 7.7.2
- ts-api-utils: 1.4.3(typescript@5.8.3)
- optionalDependencies:
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.8.3)':
- dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
- '@types/json-schema': 7.0.15
- '@types/semver': 7.7.0
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3)
- eslint: 8.57.1
- semver: 7.7.2
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- '@typescript-eslint/visitor-keys@6.21.0':
- dependencies:
- '@typescript-eslint/types': 6.21.0
- eslint-visitor-keys: 3.4.3
-
- '@ungap/structured-clone@1.3.0': {}
-
- '@unocss/astro@0.58.9(rollup@4.42.0)(vite@5.4.19)':
- dependencies:
- '@unocss/core': 0.58.9
- '@unocss/reset': 0.58.9
- '@unocss/vite': 0.58.9(rollup@4.42.0)(vite@5.4.19)
- optionalDependencies:
- vite: 5.4.19
- transitivePeerDependencies:
- - rollup
-
- '@unocss/cli@0.58.9(rollup@4.42.0)':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@rollup/pluginutils': 5.1.4(rollup@4.42.0)
- '@unocss/config': 0.58.9
- '@unocss/core': 0.58.9
- '@unocss/preset-uno': 0.58.9
- cac: 6.7.14
- chokidar: 3.6.0
- colorette: 2.0.20
- consola: 3.4.2
- fast-glob: 3.3.3
- magic-string: 0.30.17
- pathe: 1.1.2
- perfect-debounce: 1.0.0
- transitivePeerDependencies:
- - rollup
-
- '@unocss/config@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- unconfig: 0.3.13
-
- '@unocss/core@0.58.9': {}
-
- '@unocss/extractor-arbitrary-variants@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
-
- '@unocss/inspector@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- '@unocss/rule-utils': 0.58.9
- gzip-size: 6.0.0
- sirv: 2.0.4
-
- '@unocss/postcss@0.58.9(postcss@8.5.4)':
- dependencies:
- '@unocss/config': 0.58.9
- '@unocss/core': 0.58.9
- '@unocss/rule-utils': 0.58.9
- css-tree: 2.3.1
- fast-glob: 3.3.3
- magic-string: 0.30.17
- postcss: 8.5.4
-
- '@unocss/preset-attributify@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
-
- '@unocss/preset-icons@0.58.9':
- dependencies:
- '@iconify/utils': 2.3.0
- '@unocss/core': 0.58.9
- ofetch: 1.4.1
- transitivePeerDependencies:
- - supports-color
-
- '@unocss/preset-mini@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- '@unocss/extractor-arbitrary-variants': 0.58.9
- '@unocss/rule-utils': 0.58.9
-
- '@unocss/preset-tagify@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
-
- '@unocss/preset-typography@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- '@unocss/preset-mini': 0.58.9
-
- '@unocss/preset-uno@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- '@unocss/preset-mini': 0.58.9
- '@unocss/preset-wind': 0.58.9
- '@unocss/rule-utils': 0.58.9
-
- '@unocss/preset-web-fonts@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- ofetch: 1.4.1
-
- '@unocss/preset-wind@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- '@unocss/preset-mini': 0.58.9
- '@unocss/rule-utils': 0.58.9
-
- '@unocss/reset@0.58.9': {}
-
- '@unocss/rule-utils@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- magic-string: 0.30.17
-
- '@unocss/scope@0.58.9': {}
-
- '@unocss/transformer-attributify-jsx-babel@0.58.9':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4)
- '@babel/preset-typescript': 7.27.1(@babel/core@7.27.4)
- '@unocss/core': 0.58.9
- transitivePeerDependencies:
- - supports-color
-
- '@unocss/transformer-attributify-jsx@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
-
- '@unocss/transformer-compile-class@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
-
- '@unocss/transformer-directives@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
- '@unocss/rule-utils': 0.58.9
- css-tree: 2.3.1
-
- '@unocss/transformer-variant-group@0.58.9':
- dependencies:
- '@unocss/core': 0.58.9
-
- '@unocss/vite@0.58.9(rollup@4.42.0)(vite@5.4.19)':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@rollup/pluginutils': 5.1.4(rollup@4.42.0)
- '@unocss/config': 0.58.9
- '@unocss/core': 0.58.9
- '@unocss/inspector': 0.58.9
- '@unocss/scope': 0.58.9
- '@unocss/transformer-directives': 0.58.9
- chokidar: 3.6.0
- fast-glob: 3.3.3
- magic-string: 0.30.17
- vite: 5.4.19
- transitivePeerDependencies:
- - rollup
-
- '@vitejs/plugin-react@4.5.2(vite@5.4.19)':
- dependencies:
- '@babel/core': 7.27.4
- '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.4)
- '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.4)
- '@rolldown/pluginutils': 1.0.0-beta.11
- '@types/babel__core': 7.20.5
- react-refresh: 0.17.0
- vite: 5.4.19
- transitivePeerDependencies:
- - supports-color
-
- '@vitejs/plugin-vue@5.2.4(vite@5.4.19)(vue@3.5.16(typescript@5.8.3))':
- dependencies:
- vite: 5.4.19
- vue: 3.5.16(typescript@5.8.3)
-
- '@vitest/coverage-v8@1.6.1(vitest@1.6.1)':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@bcoe/v8-coverage': 0.2.3
- debug: 4.4.1
- istanbul-lib-coverage: 3.2.2
- istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 5.0.6
- istanbul-reports: 3.1.7
- magic-string: 0.30.17
- magicast: 0.3.5
- picocolors: 1.1.1
- std-env: 3.9.0
- strip-literal: 2.1.1
- test-exclude: 6.0.0
- vitest: 1.6.1(@vitest/ui@1.6.1)(jsdom@24.1.3)
- transitivePeerDependencies:
- - supports-color
-
- '@vitest/expect@1.6.1':
- dependencies:
- '@vitest/spy': 1.6.1
- '@vitest/utils': 1.6.1
- chai: 4.5.0
-
- '@vitest/runner@1.6.1':
- dependencies:
- '@vitest/utils': 1.6.1
- p-limit: 5.0.0
- pathe: 1.1.2
-
- '@vitest/snapshot@1.6.1':
- dependencies:
- magic-string: 0.30.17
- pathe: 1.1.2
- pretty-format: 29.7.0
-
- '@vitest/spy@1.6.1':
- dependencies:
- tinyspy: 2.2.1
-
- '@vitest/ui@1.6.1(vitest@1.6.1)':
- dependencies:
- '@vitest/utils': 1.6.1
- fast-glob: 3.3.3
- fflate: 0.8.2
- flatted: 3.3.3
- pathe: 1.1.2
- picocolors: 1.1.1
- sirv: 2.0.4
- vitest: 1.6.1(@vitest/ui@1.6.1)(jsdom@24.1.3)
-
- '@vitest/utils@1.6.1':
- dependencies:
- diff-sequences: 29.6.3
- estree-walker: 3.0.3
- loupe: 2.3.7
- pretty-format: 29.7.0
-
- '@volar/language-core@1.11.1':
- dependencies:
- '@volar/source-map': 1.11.1
-
- '@volar/source-map@1.11.1':
- dependencies:
- muggle-string: 0.3.1
-
- '@volar/typescript@1.11.1':
- dependencies:
- '@volar/language-core': 1.11.1
- path-browserify: 1.0.1
-
- '@vue/compiler-core@3.5.16':
- dependencies:
- '@babel/parser': 7.27.5
- '@vue/shared': 3.5.16
- entities: 4.5.0
- estree-walker: 2.0.2
- source-map-js: 1.2.1
-
- '@vue/compiler-dom@3.5.16':
- dependencies:
- '@vue/compiler-core': 3.5.16
- '@vue/shared': 3.5.16
-
- '@vue/compiler-sfc@3.5.16':
- dependencies:
- '@babel/parser': 7.27.5
- '@vue/compiler-core': 3.5.16
- '@vue/compiler-dom': 3.5.16
- '@vue/compiler-ssr': 3.5.16
- '@vue/shared': 3.5.16
- estree-walker: 2.0.2
- magic-string: 0.30.17
- postcss: 8.5.4
- source-map-js: 1.2.1
-
- '@vue/compiler-ssr@3.5.16':
- dependencies:
- '@vue/compiler-dom': 3.5.16
- '@vue/shared': 3.5.16
-
- '@vue/devtools-api@7.7.6':
- dependencies:
- '@vue/devtools-kit': 7.7.6
-
- '@vue/devtools-kit@7.7.6':
- dependencies:
- '@vue/devtools-shared': 7.7.6
- birpc: 2.3.0
- hookable: 5.5.3
- mitt: 3.0.1
- perfect-debounce: 1.0.0
- speakingurl: 14.0.1
- superjson: 2.2.2
-
- '@vue/devtools-shared@7.7.6':
- dependencies:
- rfdc: 1.4.1
-
- '@vue/language-core@1.8.27(typescript@5.8.3)':
- dependencies:
- '@volar/language-core': 1.11.1
- '@volar/source-map': 1.11.1
- '@vue/compiler-dom': 3.5.16
- '@vue/shared': 3.5.16
- computeds: 0.0.1
- minimatch: 9.0.5
- muggle-string: 0.3.1
- path-browserify: 1.0.1
- vue-template-compiler: 2.7.16
- optionalDependencies:
- typescript: 5.8.3
-
- '@vue/reactivity@3.5.16':
- dependencies:
- '@vue/shared': 3.5.16
-
- '@vue/runtime-core@3.5.16':
- dependencies:
- '@vue/reactivity': 3.5.16
- '@vue/shared': 3.5.16
-
- '@vue/runtime-dom@3.5.16':
- dependencies:
- '@vue/reactivity': 3.5.16
- '@vue/runtime-core': 3.5.16
- '@vue/shared': 3.5.16
- csstype: 3.1.3
-
- '@vue/server-renderer@3.5.16(vue@3.5.16(typescript@5.8.3))':
- dependencies:
- '@vue/compiler-ssr': 3.5.16
- '@vue/shared': 3.5.16
- vue: 3.5.16(typescript@5.8.3)
-
- '@vue/shared@3.5.16': {}
-
- '@vueuse/core@10.11.1(vue@3.5.16(typescript@5.8.3))':
- dependencies:
- '@types/web-bluetooth': 0.0.20
- '@vueuse/metadata': 10.11.1
- '@vueuse/shared': 10.11.1(vue@3.5.16(typescript@5.8.3))
- vue-demi: 0.14.10(vue@3.5.16(typescript@5.8.3))
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
-
- '@vueuse/integrations@10.11.1(focus-trap@7.6.5)(vue@3.5.16(typescript@5.8.3))':
- dependencies:
- '@vueuse/core': 10.11.1(vue@3.5.16(typescript@5.8.3))
- '@vueuse/shared': 10.11.1(vue@3.5.16(typescript@5.8.3))
- vue-demi: 0.14.10(vue@3.5.16(typescript@5.8.3))
- optionalDependencies:
- focus-trap: 7.6.5
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
-
- '@vueuse/metadata@10.11.1': {}
-
- '@vueuse/shared@10.11.1(vue@3.5.16(typescript@5.8.3))':
- dependencies:
- vue-demi: 0.14.10(vue@3.5.16(typescript@5.8.3))
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
-
- acorn-jsx@5.3.2(acorn@8.15.0):
- dependencies:
- acorn: 8.15.0
-
- acorn-walk@8.3.4:
- dependencies:
- acorn: 8.15.0
-
- acorn@8.15.0: {}
-
- agent-base@7.1.3: {}
-
- ajv@6.12.6:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
-
- algoliasearch@5.27.0:
- dependencies:
- '@algolia/client-abtesting': 5.27.0
- '@algolia/client-analytics': 5.27.0
- '@algolia/client-common': 5.27.0
- '@algolia/client-insights': 5.27.0
- '@algolia/client-personalization': 5.27.0
- '@algolia/client-query-suggestions': 5.27.0
- '@algolia/client-search': 5.27.0
- '@algolia/ingestion': 1.27.0
- '@algolia/monitoring': 1.27.0
- '@algolia/recommend': 5.27.0
- '@algolia/requester-browser-xhr': 5.27.0
- '@algolia/requester-fetch': 5.27.0
- '@algolia/requester-node-http': 5.27.0
-
- ansi-regex@5.0.1: {}
-
- ansi-sequence-parser@1.1.3: {}
-
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
-
- ansi-styles@5.2.0: {}
-
- anymatch@3.1.3:
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
-
- argparse@1.0.10:
- dependencies:
- sprintf-js: 1.0.3
-
- argparse@2.0.1: {}
-
- array-union@2.1.0: {}
-
- assertion-error@1.1.0: {}
-
- asynckit@0.4.0: {}
-
- balanced-match@1.0.2: {}
-
- binary-extensions@2.3.0: {}
-
- birpc@2.3.0: {}
-
- brace-expansion@1.1.11:
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
-
- brace-expansion@2.0.1:
- dependencies:
- balanced-match: 1.0.2
-
- braces@3.0.3:
- dependencies:
- fill-range: 7.1.1
-
- browserslist@4.25.0:
- dependencies:
- caniuse-lite: 1.0.30001721
- electron-to-chromium: 1.5.166
- node-releases: 2.0.19
- update-browserslist-db: 1.1.3(browserslist@4.25.0)
-
- cac@6.7.14: {}
-
- call-bind-apply-helpers@1.0.2:
- dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
-
- callsites@3.1.0: {}
-
- caniuse-lite@1.0.30001721: {}
-
- ccount@2.0.1: {}
-
- chai@4.5.0:
- dependencies:
- assertion-error: 1.1.0
- check-error: 1.0.3
- deep-eql: 4.1.4
- get-func-name: 2.0.2
- loupe: 2.3.7
- pathval: 1.1.1
- type-detect: 4.1.0
-
- chalk@4.1.2:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
-
- character-entities-html4@2.1.0: {}
-
- character-entities-legacy@3.0.0: {}
-
- check-error@1.0.3:
- dependencies:
- get-func-name: 2.0.2
-
- chokidar@3.6.0:
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.3
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.3
-
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
-
- color-name@1.1.4: {}
-
- colorette@2.0.20: {}
-
- combined-stream@1.0.8:
- dependencies:
- delayed-stream: 1.0.0
-
- comma-separated-tokens@2.0.3: {}
-
- commander@9.5.0:
- optional: true
-
- computeds@0.0.1: {}
-
- concat-map@0.0.1: {}
-
- confbox@0.1.8: {}
-
- confbox@0.2.2: {}
-
- consola@3.4.2: {}
-
- convert-source-map@2.0.0: {}
-
- copy-anything@3.0.5:
- dependencies:
- is-what: 4.1.16
-
- cross-spawn@7.0.6:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
- css-tree@2.3.1:
- dependencies:
- mdn-data: 2.0.30
- source-map-js: 1.2.1
-
- cssstyle@4.4.0:
- dependencies:
- '@asamuzakjp/css-color': 3.2.0
- rrweb-cssom: 0.8.0
-
- csstype@3.1.3: {}
-
- data-urls@5.0.0:
- dependencies:
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
-
- de-indent@1.0.2: {}
-
- debug@4.4.1:
- dependencies:
- ms: 2.1.3
-
- decimal.js@10.5.0: {}
-
- deep-eql@4.1.4:
- dependencies:
- type-detect: 4.1.0
-
- deep-is@0.1.4: {}
-
- defu@6.1.4: {}
-
- delayed-stream@1.0.0: {}
-
- dequal@2.0.3: {}
-
- destr@2.0.5: {}
-
- devlop@1.1.0:
- dependencies:
- dequal: 2.0.3
-
- diff-sequences@29.6.3: {}
-
- dir-glob@3.0.1:
- dependencies:
- path-type: 4.0.0
-
- doctrine@3.0.0:
- dependencies:
- esutils: 2.0.3
-
- dunder-proto@1.0.1:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-errors: 1.3.0
- gopd: 1.2.0
-
- duplexer@0.1.2: {}
-
- electron-to-chromium@1.5.166: {}
-
- emoji-regex-xs@1.0.0: {}
-
- entities@4.5.0: {}
-
- entities@6.0.1: {}
-
- es-define-property@1.0.1: {}
-
- es-errors@1.3.0: {}
-
- es-object-atoms@1.1.1:
- dependencies:
- es-errors: 1.3.0
-
- es-set-tostringtag@2.1.0:
- dependencies:
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- has-tostringtag: 1.0.2
- hasown: 2.0.2
-
- esbuild@0.21.5:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.21.5
- '@esbuild/android-arm': 0.21.5
- '@esbuild/android-arm64': 0.21.5
- '@esbuild/android-x64': 0.21.5
- '@esbuild/darwin-arm64': 0.21.5
- '@esbuild/darwin-x64': 0.21.5
- '@esbuild/freebsd-arm64': 0.21.5
- '@esbuild/freebsd-x64': 0.21.5
- '@esbuild/linux-arm': 0.21.5
- '@esbuild/linux-arm64': 0.21.5
- '@esbuild/linux-ia32': 0.21.5
- '@esbuild/linux-loong64': 0.21.5
- '@esbuild/linux-mips64el': 0.21.5
- '@esbuild/linux-ppc64': 0.21.5
- '@esbuild/linux-riscv64': 0.21.5
- '@esbuild/linux-s390x': 0.21.5
- '@esbuild/linux-x64': 0.21.5
- '@esbuild/netbsd-x64': 0.21.5
- '@esbuild/openbsd-x64': 0.21.5
- '@esbuild/sunos-x64': 0.21.5
- '@esbuild/win32-arm64': 0.21.5
- '@esbuild/win32-ia32': 0.21.5
- '@esbuild/win32-x64': 0.21.5
-
- escalade@3.2.0: {}
-
- escape-string-regexp@4.0.0: {}
-
- eslint-plugin-react-hooks@4.6.2(eslint@8.57.1):
- dependencies:
- eslint: 8.57.1
-
- eslint-plugin-react-refresh@0.4.20(eslint@8.57.1):
- dependencies:
- eslint: 8.57.1
-
- eslint-scope@7.2.2:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 5.3.0
-
- eslint-visitor-keys@3.4.3: {}
-
- eslint@8.57.1:
- dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
- '@eslint-community/regexpp': 4.12.1
- '@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.1
- '@humanwhocodes/config-array': 0.13.0
- '@humanwhocodes/module-importer': 1.0.1
- '@nodelib/fs.walk': 1.2.8
- '@ungap/structured-clone': 1.3.0
- ajv: 6.12.6
- chalk: 4.1.2
- cross-spawn: 7.0.6
- debug: 4.4.1
- doctrine: 3.0.0
- escape-string-regexp: 4.0.0
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
- esquery: 1.6.0
- esutils: 2.0.3
- fast-deep-equal: 3.1.3
- file-entry-cache: 6.0.1
- find-up: 5.0.0
- glob-parent: 6.0.2
- globals: 13.24.0
- graphemer: 1.4.0
- ignore: 5.3.2
- imurmurhash: 0.1.4
- is-glob: 4.0.3
- is-path-inside: 3.0.3
- js-yaml: 4.1.0
- json-stable-stringify-without-jsonify: 1.0.1
- levn: 0.4.1
- lodash.merge: 4.6.2
- minimatch: 3.1.2
- natural-compare: 1.4.0
- optionator: 0.9.4
- strip-ansi: 6.0.1
- text-table: 0.2.0
- transitivePeerDependencies:
- - supports-color
-
- espree@9.6.1:
- dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
- eslint-visitor-keys: 3.4.3
-
- esquery@1.6.0:
- dependencies:
- estraverse: 5.3.0
-
- esrecurse@4.3.0:
- dependencies:
- estraverse: 5.3.0
-
- estraverse@5.3.0: {}
-
- estree-walker@2.0.2: {}
-
- estree-walker@3.0.3:
- dependencies:
- '@types/estree': 1.0.8
-
- esutils@2.0.3: {}
-
- execa@8.0.1:
- dependencies:
- cross-spawn: 7.0.6
- get-stream: 8.0.1
- human-signals: 5.0.0
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.3.0
- onetime: 6.0.0
- signal-exit: 4.1.0
- strip-final-newline: 3.0.0
-
- exsolve@1.0.5: {}
-
- fast-deep-equal@3.1.3: {}
-
- fast-glob@3.3.3:
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
-
- fast-json-stable-stringify@2.1.0: {}
-
- fast-levenshtein@2.0.6: {}
-
- fastq@1.19.1:
- dependencies:
- reusify: 1.1.0
-
- fflate@0.8.2: {}
-
- file-entry-cache@6.0.1:
- dependencies:
- flat-cache: 3.2.0
-
- fill-range@7.1.1:
- dependencies:
- to-regex-range: 5.0.1
-
- find-up@5.0.0:
- dependencies:
- locate-path: 6.0.0
- path-exists: 4.0.0
-
- flat-cache@3.2.0:
- dependencies:
- flatted: 3.3.3
- keyv: 4.5.4
- rimraf: 3.0.2
-
- flatted@3.3.3: {}
-
- focus-trap@7.6.5:
- dependencies:
- tabbable: 6.2.0
-
- form-data@4.0.3:
- dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- es-set-tostringtag: 2.1.0
- hasown: 2.0.2
- mime-types: 2.1.35
-
- fs-extra@7.0.1:
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 4.0.0
- universalify: 0.1.2
-
- fs.realpath@1.0.0: {}
-
- fsevents@2.3.3:
- optional: true
-
- function-bind@1.1.2: {}
-
- gensync@1.0.0-beta.2: {}
-
- get-func-name@2.0.2: {}
-
- get-intrinsic@1.3.0:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- function-bind: 1.1.2
- get-proto: 1.0.1
- gopd: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- math-intrinsics: 1.1.0
-
- get-proto@1.0.1:
- dependencies:
- dunder-proto: 1.0.1
- es-object-atoms: 1.1.1
-
- get-stream@8.0.1: {}
-
- glob-parent@5.1.2:
- dependencies:
- is-glob: 4.0.3
-
- glob-parent@6.0.2:
- dependencies:
- is-glob: 4.0.3
-
- glob@7.2.3:
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
-
- globals@11.12.0: {}
-
- globals@13.24.0:
- dependencies:
- type-fest: 0.20.2
-
- globals@15.15.0: {}
-
- globby@11.1.0:
- dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.3.3
- ignore: 5.3.2
- merge2: 1.4.1
- slash: 3.0.0
-
- gopd@1.2.0: {}
-
- graceful-fs@4.2.11: {}
-
- graphemer@1.4.0: {}
-
- gzip-size@6.0.0:
- dependencies:
- duplexer: 0.1.2
-
- has-flag@4.0.0: {}
-
- has-symbols@1.1.0: {}
-
- has-tostringtag@1.0.2:
- dependencies:
- has-symbols: 1.1.0
-
- hasown@2.0.2:
- dependencies:
- function-bind: 1.1.2
-
- hast-util-to-html@9.0.5:
- dependencies:
- '@types/hast': 3.0.4
- '@types/unist': 3.0.3
- ccount: 2.0.1
- comma-separated-tokens: 2.0.3
- hast-util-whitespace: 3.0.0
- html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
- property-information: 7.1.0
- space-separated-tokens: 2.0.2
- stringify-entities: 4.0.4
- zwitch: 2.0.4
-
- hast-util-whitespace@3.0.0:
- dependencies:
- '@types/hast': 3.0.4
-
- he@1.2.0: {}
-
- helper-js@3.1.6:
- dependencies:
- '@babel/runtime': 7.27.6
-
- hookable@5.5.3: {}
-
- html-encoding-sniffer@4.0.0:
- dependencies:
- whatwg-encoding: 3.1.1
-
- html-escaper@2.0.2: {}
-
- html-void-elements@3.0.0: {}
-
- http-proxy-agent@7.0.2:
- dependencies:
- agent-base: 7.1.3
- debug: 4.4.1
- transitivePeerDependencies:
- - supports-color
-
- https-proxy-agent@7.0.6:
- dependencies:
- agent-base: 7.1.3
- debug: 4.4.1
- transitivePeerDependencies:
- - supports-color
-
- human-signals@5.0.0: {}
-
- iconv-lite@0.6.3:
- dependencies:
- safer-buffer: 2.1.2
-
- ignore@5.3.2: {}
-
- immer@10.1.1: {}
-
- import-fresh@3.3.1:
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
-
- import-lazy@4.0.0: {}
-
- imurmurhash@0.1.4: {}
-
- inflight@1.0.6:
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
-
- inherits@2.0.4: {}
-
- is-binary-path@2.1.0:
- dependencies:
- binary-extensions: 2.3.0
-
- is-core-module@2.16.1:
- dependencies:
- hasown: 2.0.2
-
- is-extglob@2.1.1: {}
-
- is-glob@4.0.3:
- dependencies:
- is-extglob: 2.1.1
-
- is-number@7.0.0: {}
-
- is-path-inside@3.0.3: {}
-
- is-potential-custom-element-name@1.0.1: {}
-
- is-stream@3.0.0: {}
-
- is-what@4.1.16: {}
-
- isexe@2.0.0: {}
-
- istanbul-lib-coverage@3.2.2: {}
-
- istanbul-lib-report@3.0.1:
- dependencies:
- istanbul-lib-coverage: 3.2.2
- make-dir: 4.0.0
- supports-color: 7.2.0
-
- istanbul-lib-source-maps@5.0.6:
- dependencies:
- '@jridgewell/trace-mapping': 0.3.25
- debug: 4.4.1
- istanbul-lib-coverage: 3.2.2
- transitivePeerDependencies:
- - supports-color
-
- istanbul-reports@3.1.7:
- dependencies:
- html-escaper: 2.0.2
- istanbul-lib-report: 3.0.1
-
- jiti@1.21.7: {}
-
- jju@1.4.0: {}
-
- js-tokens@4.0.0: {}
-
- js-tokens@9.0.1: {}
-
- js-yaml@4.1.0:
- dependencies:
- argparse: 2.0.1
-
- jsdom@24.1.3:
- dependencies:
- cssstyle: 4.4.0
- data-urls: 5.0.0
- decimal.js: 10.5.0
- form-data: 4.0.3
- html-encoding-sniffer: 4.0.0
- http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.6
- is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.20
- parse5: 7.3.0
- rrweb-cssom: 0.7.1
- saxes: 6.0.0
- symbol-tree: 3.2.4
- tough-cookie: 4.1.4
- w3c-xmlserializer: 5.0.0
- webidl-conversions: 7.0.0
- whatwg-encoding: 3.1.1
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
- ws: 8.18.2
- xml-name-validator: 5.0.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
- jsesc@3.1.0: {}
-
- json-buffer@3.0.1: {}
-
- json-schema-traverse@0.4.1: {}
-
- json-stable-stringify-without-jsonify@1.0.1: {}
-
- json5@2.2.3: {}
-
- jsonc-parser@3.3.1: {}
-
- jsonfile@4.0.0:
- optionalDependencies:
- graceful-fs: 4.2.11
-
- keyv@4.5.4:
- dependencies:
- json-buffer: 3.0.1
-
- kolorist@1.8.0: {}
-
- levn@0.4.1:
- dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
-
- local-pkg@0.5.1:
- dependencies:
- mlly: 1.7.4
- pkg-types: 1.3.1
-
- local-pkg@1.1.1:
- dependencies:
- mlly: 1.7.4
- pkg-types: 2.1.0
- quansync: 0.2.10
-
- locate-path@6.0.0:
- dependencies:
- p-locate: 5.0.0
-
- lodash.get@4.4.2: {}
-
- lodash.isequal@4.5.0: {}
-
- lodash.merge@4.6.2: {}
-
- lodash@4.17.21: {}
-
- loose-envify@1.4.0:
- dependencies:
- js-tokens: 4.0.0
-
- loupe@2.3.7:
- dependencies:
- get-func-name: 2.0.2
-
- lru-cache@10.4.3: {}
-
- lru-cache@5.1.1:
- dependencies:
- yallist: 3.1.1
-
- lru-cache@6.0.0:
- dependencies:
- yallist: 4.0.0
-
- lunr@2.3.9: {}
-
- magic-string@0.30.17:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
-
- magicast@0.3.5:
- dependencies:
- '@babel/parser': 7.27.5
- '@babel/types': 7.27.6
- source-map-js: 1.2.1
-
- make-dir@4.0.0:
- dependencies:
- semver: 7.7.2
-
- mark.js@8.11.1: {}
-
- marked@4.3.0: {}
-
- math-intrinsics@1.1.0: {}
-
- mdast-util-to-hast@13.2.0:
- dependencies:
- '@types/hast': 3.0.4
- '@types/mdast': 4.0.4
- '@ungap/structured-clone': 1.3.0
- devlop: 1.1.0
- micromark-util-sanitize-uri: 2.0.1
- trim-lines: 3.0.1
- unist-util-position: 5.0.0
- unist-util-visit: 5.0.0
- vfile: 6.0.3
-
- mdn-data@2.0.30: {}
-
- merge-stream@2.0.0: {}
-
- merge2@1.4.1: {}
-
- micromark-util-character@2.1.1:
- dependencies:
- micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.2
-
- micromark-util-encode@2.0.1: {}
-
- micromark-util-sanitize-uri@2.0.1:
- dependencies:
- micromark-util-character: 2.1.1
- micromark-util-encode: 2.0.1
- micromark-util-symbol: 2.0.1
-
- micromark-util-symbol@2.0.1: {}
-
- micromark-util-types@2.0.2: {}
-
- micromatch@4.0.8:
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
-
- mime-db@1.52.0: {}
-
- mime-types@2.1.35:
- dependencies:
- mime-db: 1.52.0
-
- mimic-fn@4.0.0: {}
-
- minimatch@3.0.8:
- dependencies:
- brace-expansion: 1.1.11
-
- minimatch@3.1.2:
- dependencies:
- brace-expansion: 1.1.11
-
- minimatch@9.0.3:
- dependencies:
- brace-expansion: 2.0.1
-
- minimatch@9.0.5:
- dependencies:
- brace-expansion: 2.0.1
-
- minisearch@6.3.0: {}
-
- mitt@3.0.1: {}
-
- mlly@1.7.4:
- dependencies:
- acorn: 8.15.0
- pathe: 2.0.3
- pkg-types: 1.3.1
- ufo: 1.6.1
-
- mrmime@2.0.1: {}
-
- ms@2.1.3: {}
-
- muggle-string@0.3.1: {}
-
- nanoid@3.3.11: {}
-
- natural-compare@1.4.0: {}
-
- node-fetch-native@1.6.6: {}
-
- node-releases@2.0.19: {}
-
- normalize-path@3.0.0: {}
-
- npm-run-path@5.3.0:
- dependencies:
- path-key: 4.0.0
-
- nwsapi@2.2.20: {}
-
- object-assign@4.1.1: {}
-
- ofetch@1.4.1:
- dependencies:
- destr: 2.0.5
- node-fetch-native: 1.6.6
- ufo: 1.6.1
-
- once@1.4.0:
- dependencies:
- wrappy: 1.0.2
-
- onetime@6.0.0:
- dependencies:
- mimic-fn: 4.0.0
-
- oniguruma-to-es@2.3.0:
- dependencies:
- emoji-regex-xs: 1.0.0
- regex: 5.1.1
- regex-recursion: 5.1.1
-
- optionator@0.9.4:
- dependencies:
- deep-is: 0.1.4
- fast-levenshtein: 2.0.6
- levn: 0.4.1
- prelude-ls: 1.2.1
- type-check: 0.4.0
- word-wrap: 1.2.5
-
- p-limit@3.1.0:
- dependencies:
- yocto-queue: 0.1.0
-
- p-limit@5.0.0:
- dependencies:
- yocto-queue: 1.2.1
-
- p-locate@5.0.0:
- dependencies:
- p-limit: 3.1.0
-
- package-manager-detector@1.3.0: {}
-
- parent-module@1.0.1:
- dependencies:
- callsites: 3.1.0
-
- parse5@7.3.0:
- dependencies:
- entities: 6.0.1
-
- path-browserify@1.0.1: {}
-
- path-exists@4.0.0: {}
-
- path-is-absolute@1.0.1: {}
-
- path-key@3.1.1: {}
-
- path-key@4.0.0: {}
-
- path-parse@1.0.7: {}
-
- path-type@4.0.0: {}
-
- pathe@1.1.2: {}
-
- pathe@2.0.3: {}
-
- pathval@1.1.1: {}
-
- perfect-debounce@1.0.0: {}
-
- picocolors@1.1.1: {}
-
- picomatch@2.3.1: {}
-
- picomatch@4.0.2: {}
-
- pkg-types@1.3.1:
- dependencies:
- confbox: 0.1.8
- mlly: 1.7.4
- pathe: 2.0.3
-
- pkg-types@2.1.0:
- dependencies:
- confbox: 0.2.2
- exsolve: 1.0.5
- pathe: 2.0.3
-
- postcss@8.5.4:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- preact@10.26.8: {}
-
- prelude-ls@1.2.1: {}
-
- pretty-format@29.7.0:
- dependencies:
- '@jest/schemas': 29.6.3
- ansi-styles: 5.2.0
- react-is: 18.3.1
-
- property-information@7.1.0: {}
-
- psl@1.15.0:
- dependencies:
- punycode: 2.3.1
-
- punycode@2.3.1: {}
-
- quansync@0.2.10: {}
-
- querystringify@2.2.0: {}
-
- queue-microtask@1.2.3: {}
-
- react-base-virtual-list@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
- dependencies:
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- react-dom@18.3.1(react@18.3.1):
- dependencies:
- loose-envify: 1.4.0
- react: 18.3.1
- scheduler: 0.23.2
-
- react-is@18.3.1: {}
-
- react-refresh@0.17.0: {}
-
- react-router-dom@6.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
- dependencies:
- '@remix-run/router': 1.23.0
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- react-router: 6.30.1(react@18.3.1)
-
- react-router@6.30.1(react@18.3.1):
- dependencies:
- '@remix-run/router': 1.23.0
- react: 18.3.1
-
- react-shallow-renderer@16.15.0(react@18.3.1):
- dependencies:
- object-assign: 4.1.1
- react: 18.3.1
- react-is: 18.3.1
-
- react-test-renderer@18.3.1(react@18.3.1):
- dependencies:
- react: 18.3.1
- react-is: 18.3.1
- react-shallow-renderer: 16.15.0(react@18.3.1)
- scheduler: 0.23.2
-
- react@18.3.1:
- dependencies:
- loose-envify: 1.4.0
-
- readdirp@3.6.0:
- dependencies:
- picomatch: 2.3.1
-
- regex-recursion@5.1.1:
- dependencies:
- regex: 5.1.1
- regex-utilities: 2.3.0
-
- regex-utilities@2.3.0: {}
-
- regex@5.1.1:
- dependencies:
- regex-utilities: 2.3.0
-
- requires-port@1.0.0: {}
-
- resolve-from@4.0.0: {}
-
- resolve@1.19.0:
- dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
-
- resolve@1.22.10:
- dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
-
- reusify@1.1.0: {}
-
- rfdc@1.4.1: {}
-
- rimraf@3.0.2:
- dependencies:
- glob: 7.2.3
-
- rollup@4.42.0:
- dependencies:
- '@types/estree': 1.0.7
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.42.0
- '@rollup/rollup-android-arm64': 4.42.0
- '@rollup/rollup-darwin-arm64': 4.42.0
- '@rollup/rollup-darwin-x64': 4.42.0
- '@rollup/rollup-freebsd-arm64': 4.42.0
- '@rollup/rollup-freebsd-x64': 4.42.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.42.0
- '@rollup/rollup-linux-arm-musleabihf': 4.42.0
- '@rollup/rollup-linux-arm64-gnu': 4.42.0
- '@rollup/rollup-linux-arm64-musl': 4.42.0
- '@rollup/rollup-linux-loongarch64-gnu': 4.42.0
- '@rollup/rollup-linux-powerpc64le-gnu': 4.42.0
- '@rollup/rollup-linux-riscv64-gnu': 4.42.0
- '@rollup/rollup-linux-riscv64-musl': 4.42.0
- '@rollup/rollup-linux-s390x-gnu': 4.42.0
- '@rollup/rollup-linux-x64-gnu': 4.42.0
- '@rollup/rollup-linux-x64-musl': 4.42.0
- '@rollup/rollup-win32-arm64-msvc': 4.42.0
- '@rollup/rollup-win32-ia32-msvc': 4.42.0
- '@rollup/rollup-win32-x64-msvc': 4.42.0
- fsevents: 2.3.3
-
- rrweb-cssom@0.7.1: {}
-
- rrweb-cssom@0.8.0: {}
-
- run-parallel@1.2.0:
- dependencies:
- queue-microtask: 1.2.3
-
- safer-buffer@2.1.2: {}
-
- saxes@6.0.0:
- dependencies:
- xmlchars: 2.2.0
-
- scheduler@0.23.2:
- dependencies:
- loose-envify: 1.4.0
-
- search-insights@2.17.3: {}
-
- semver@6.3.1: {}
-
- semver@7.5.4:
- dependencies:
- lru-cache: 6.0.0
-
- semver@7.7.2: {}
-
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
- shiki@0.14.7:
- dependencies:
- ansi-sequence-parser: 1.1.3
- jsonc-parser: 3.3.1
- vscode-oniguruma: 1.7.0
- vscode-textmate: 8.0.0
-
- shiki@1.29.2:
- dependencies:
- '@shikijs/core': 1.29.2
- '@shikijs/engine-javascript': 1.29.2
- '@shikijs/engine-oniguruma': 1.29.2
- '@shikijs/langs': 1.29.2
- '@shikijs/themes': 1.29.2
- '@shikijs/types': 1.29.2
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.4
-
- siginfo@2.0.0: {}
-
- signal-exit@4.1.0: {}
-
- sirv@2.0.4:
- dependencies:
- '@polka/url': 1.0.0-next.29
- mrmime: 2.0.1
- totalist: 3.0.1
-
- slash@3.0.0: {}
-
- source-map-js@1.2.1: {}
-
- source-map@0.6.1: {}
-
- space-separated-tokens@2.0.2: {}
-
- speakingurl@14.0.1: {}
-
- sprintf-js@1.0.3: {}
-
- stackback@0.0.2: {}
-
- std-env@3.9.0: {}
-
- string-argv@0.3.2: {}
-
- stringify-entities@4.0.4:
- dependencies:
- character-entities-html4: 2.1.0
- character-entities-legacy: 3.0.0
-
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-final-newline@3.0.0: {}
-
- strip-json-comments@3.1.1: {}
-
- strip-literal@2.1.1:
- dependencies:
- js-tokens: 9.0.1
-
- superjson@2.2.2:
- dependencies:
- copy-anything: 3.0.5
-
- supports-color@7.2.0:
- dependencies:
- has-flag: 4.0.0
-
- supports-color@8.1.1:
- dependencies:
- has-flag: 4.0.0
-
- supports-preserve-symlinks-flag@1.0.0: {}
-
- symbol-tree@3.2.4: {}
-
- tabbable@6.2.0: {}
-
- test-exclude@6.0.0:
- dependencies:
- '@istanbuljs/schema': 0.1.3
- glob: 7.2.3
- minimatch: 3.1.2
-
- text-table@0.2.0: {}
-
- tinybench@2.9.0: {}
-
- tinyexec@1.0.1: {}
-
- tinypool@0.8.4: {}
-
- tinyspy@2.2.1: {}
-
- to-regex-range@5.0.1:
- dependencies:
- is-number: 7.0.0
-
- totalist@3.0.1: {}
-
- tough-cookie@4.1.4:
- dependencies:
- psl: 1.15.0
- punycode: 2.3.1
- universalify: 0.2.0
- url-parse: 1.5.10
-
- tr46@5.1.1:
- dependencies:
- punycode: 2.3.1
-
- trim-lines@3.0.1: {}
-
- ts-api-utils@1.4.3(typescript@5.8.3):
- dependencies:
- typescript: 5.8.3
-
- type-check@0.4.0:
- dependencies:
- prelude-ls: 1.2.1
-
- type-detect@4.1.0: {}
-
- type-fest@0.20.2: {}
-
- typedoc-plugin-inline-sources@1.3.0(typedoc@0.25.13(typescript@5.8.3)):
- dependencies:
- typedoc: 0.25.13(typescript@5.8.3)
-
- typedoc@0.25.13(typescript@5.8.3):
- dependencies:
- lunr: 2.3.9
- marked: 4.3.0
- minimatch: 9.0.5
- shiki: 0.14.7
- typescript: 5.8.3
-
- typescript@5.4.2: {}
-
- typescript@5.8.3: {}
-
- ufo@1.6.1: {}
-
- unconfig@0.3.13:
- dependencies:
- '@antfu/utils': 0.7.10
- defu: 6.1.4
- jiti: 1.21.7
-
- unist-util-is@6.0.0:
- dependencies:
- '@types/unist': 3.0.3
-
- unist-util-position@5.0.0:
- dependencies:
- '@types/unist': 3.0.3
-
- unist-util-stringify-position@4.0.0:
- dependencies:
- '@types/unist': 3.0.3
-
- unist-util-visit-parents@6.0.1:
- dependencies:
- '@types/unist': 3.0.3
- unist-util-is: 6.0.0
-
- unist-util-visit@5.0.0:
- dependencies:
- '@types/unist': 3.0.3
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
-
- universalify@0.1.2: {}
-
- universalify@0.2.0: {}
-
- unocss@0.58.9(postcss@8.5.4)(rollup@4.42.0)(vite@5.4.19):
- dependencies:
- '@unocss/astro': 0.58.9(rollup@4.42.0)(vite@5.4.19)
- '@unocss/cli': 0.58.9(rollup@4.42.0)
- '@unocss/core': 0.58.9
- '@unocss/extractor-arbitrary-variants': 0.58.9
- '@unocss/postcss': 0.58.9(postcss@8.5.4)
- '@unocss/preset-attributify': 0.58.9
- '@unocss/preset-icons': 0.58.9
- '@unocss/preset-mini': 0.58.9
- '@unocss/preset-tagify': 0.58.9
- '@unocss/preset-typography': 0.58.9
- '@unocss/preset-uno': 0.58.9
- '@unocss/preset-web-fonts': 0.58.9
- '@unocss/preset-wind': 0.58.9
- '@unocss/reset': 0.58.9
- '@unocss/transformer-attributify-jsx': 0.58.9
- '@unocss/transformer-attributify-jsx-babel': 0.58.9
- '@unocss/transformer-compile-class': 0.58.9
- '@unocss/transformer-directives': 0.58.9
- '@unocss/transformer-variant-group': 0.58.9
- '@unocss/vite': 0.58.9(rollup@4.42.0)(vite@5.4.19)
- optionalDependencies:
- vite: 5.4.19
- transitivePeerDependencies:
- - postcss
- - rollup
- - supports-color
-
- update-browserslist-db@1.1.3(browserslist@4.25.0):
- dependencies:
- browserslist: 4.25.0
- escalade: 3.2.0
- picocolors: 1.1.1
-
- uri-js@4.4.1:
- dependencies:
- punycode: 2.3.1
-
- url-parse@1.5.10:
- dependencies:
- querystringify: 2.2.0
- requires-port: 1.0.0
-
- use-immer@0.9.0(immer@10.1.1)(react@18.3.1):
- dependencies:
- immer: 10.1.1
- react: 18.3.1
-
- validator@13.15.15: {}
-
- vfile-message@4.0.2:
- dependencies:
- '@types/unist': 3.0.3
- unist-util-stringify-position: 4.0.0
-
- vfile@6.0.3:
- dependencies:
- '@types/unist': 3.0.3
- vfile-message: 4.0.2
-
- vite-node@1.6.1:
- dependencies:
- cac: 6.7.14
- debug: 4.4.1
- pathe: 1.1.2
- picocolors: 1.1.1
- vite: 5.4.19
- transitivePeerDependencies:
- - '@types/node'
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
-
- vite-plugin-dts@3.9.1(rollup@4.42.0)(typescript@5.8.3)(vite@5.4.19):
- dependencies:
- '@microsoft/api-extractor': 7.43.0
- '@rollup/pluginutils': 5.1.4(rollup@4.42.0)
- '@vue/language-core': 1.8.27(typescript@5.8.3)
- debug: 4.4.1
- kolorist: 1.8.0
- magic-string: 0.30.17
- typescript: 5.8.3
- vue-tsc: 1.8.27(typescript@5.8.3)
- optionalDependencies:
- vite: 5.4.19
- transitivePeerDependencies:
- - '@types/node'
- - rollup
- - supports-color
-
- vite@5.4.19:
- dependencies:
- esbuild: 0.21.5
- postcss: 8.5.4
- rollup: 4.42.0
- optionalDependencies:
- fsevents: 2.3.3
-
- vitepress@1.0.0-rc.44(@algolia/client-search@5.27.0)(@types/react@18.3.23)(postcss@8.5.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3):
- dependencies:
- '@docsearch/css': 3.9.0
- '@docsearch/js': 3.9.0(@algolia/client-search@5.27.0)(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)
- '@shikijs/core': 1.29.2
- '@shikijs/transformers': 1.29.2
- '@types/markdown-it': 13.0.9
- '@vitejs/plugin-vue': 5.2.4(vite@5.4.19)(vue@3.5.16(typescript@5.8.3))
- '@vue/devtools-api': 7.7.6
- '@vueuse/core': 10.11.1(vue@3.5.16(typescript@5.8.3))
- '@vueuse/integrations': 10.11.1(focus-trap@7.6.5)(vue@3.5.16(typescript@5.8.3))
- focus-trap: 7.6.5
- mark.js: 8.11.1
- minisearch: 6.3.0
- shiki: 1.29.2
- vite: 5.4.19
- vue: 3.5.16(typescript@5.8.3)
- optionalDependencies:
- postcss: 8.5.4
- transitivePeerDependencies:
- - '@algolia/client-search'
- - '@types/node'
- - '@types/react'
- - '@vue/composition-api'
- - async-validator
- - axios
- - change-case
- - drauu
- - fuse.js
- - idb-keyval
- - jwt-decode
- - less
- - lightningcss
- - nprogress
- - qrcode
- - react
- - react-dom
- - sass
- - sass-embedded
- - search-insights
- - sortablejs
- - stylus
- - sugarss
- - terser
- - typescript
- - universal-cookie
-
- vitest@1.6.1(@vitest/ui@1.6.1)(jsdom@24.1.3):
- dependencies:
- '@vitest/expect': 1.6.1
- '@vitest/runner': 1.6.1
- '@vitest/snapshot': 1.6.1
- '@vitest/spy': 1.6.1
- '@vitest/utils': 1.6.1
- acorn-walk: 8.3.4
- chai: 4.5.0
- debug: 4.4.1
- execa: 8.0.1
- local-pkg: 0.5.1
- magic-string: 0.30.17
- pathe: 1.1.2
- picocolors: 1.1.1
- std-env: 3.9.0
- strip-literal: 2.1.1
- tinybench: 2.9.0
- tinypool: 0.8.4
- vite: 5.4.19
- vite-node: 1.6.1
- why-is-node-running: 2.3.0
- optionalDependencies:
- '@vitest/ui': 1.6.1(vitest@1.6.1)
- jsdom: 24.1.3
- transitivePeerDependencies:
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
-
- vscode-oniguruma@1.7.0: {}
-
- vscode-textmate@8.0.0: {}
-
- vue-demi@0.14.10(vue@3.5.16(typescript@5.8.3)):
- dependencies:
- vue: 3.5.16(typescript@5.8.3)
-
- vue-template-compiler@2.7.16:
- dependencies:
- de-indent: 1.0.2
- he: 1.2.0
-
- vue-tsc@1.8.27(typescript@5.8.3):
- dependencies:
- '@volar/typescript': 1.11.1
- '@vue/language-core': 1.8.27(typescript@5.8.3)
- semver: 7.7.2
- typescript: 5.8.3
-
- vue@3.5.16(typescript@5.8.3):
- dependencies:
- '@vue/compiler-dom': 3.5.16
- '@vue/compiler-sfc': 3.5.16
- '@vue/runtime-dom': 3.5.16
- '@vue/server-renderer': 3.5.16(vue@3.5.16(typescript@5.8.3))
- '@vue/shared': 3.5.16
- optionalDependencies:
- typescript: 5.8.3
-
- w3c-xmlserializer@5.0.0:
- dependencies:
- xml-name-validator: 5.0.0
-
- webidl-conversions@7.0.0: {}
-
- whatwg-encoding@3.1.1:
- dependencies:
- iconv-lite: 0.6.3
-
- whatwg-mimetype@4.0.0: {}
-
- whatwg-url@14.2.0:
- dependencies:
- tr46: 5.1.1
- webidl-conversions: 7.0.0
-
- which@2.0.2:
- dependencies:
- isexe: 2.0.0
-
- why-is-node-running@2.3.0:
- dependencies:
- siginfo: 2.0.0
- stackback: 0.0.2
-
- word-wrap@1.2.5: {}
-
- wrappy@1.0.2: {}
-
- ws@8.18.2: {}
-
- xml-name-validator@5.0.0: {}
-
- xmlchars@2.2.0: {}
-
- yallist@3.1.1: {}
-
- yallist@4.0.0: {}
-
- yocto-queue@0.1.0: {}
-
- yocto-queue@1.2.1: {}
-
- z-schema@5.0.5:
- dependencies:
- lodash.get: 4.4.2
- lodash.isequal: 4.5.0
- validator: 13.15.15
- optionalDependencies:
- commander: 9.5.0
-
- zwitch@2.0.4: {}
diff --git a/src/App.tsx b/src/App.tsx
deleted file mode 100644
index 32a2e23..0000000
--- a/src/App.tsx
+++ /dev/null
@@ -1 +0,0 @@
-// this file is not used
\ No newline at end of file
diff --git a/src/PageLayout.tsx b/src/PageLayout.tsx
deleted file mode 100644
index f75e5a0..0000000
--- a/src/PageLayout.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
-import { Link, NavLink, Outlet, useSearchParams } from "react-router-dom";
-export default function PageLayout(props: {}) {
- const [searchParams, setSearchParams] = useSearchParams();
- // bg & color
- const prevBgColor = useRef();
- const bgColor = useMemo(() => [
- searchParams.get('bg') || prevBgColor.current?.[0] || '#fff9e6',
- searchParams.get('color') || prevBgColor.current?.[1] || '#000'
- ], [searchParams]);
- prevBgColor.current = bgColor;
- // iframe id
- const [iframeId, setiframeId] = useState(searchParams.get('iframe_id')!);
-
- const [menu, setmenu] = useState(() => [
- {
- title: 'Base - Flat Data',
- path: '/base_flat_data',
- },
- {
- title: 'Base - Tree Data',
- path: '/base_tree_data',
- },
- {
- title: 'Custom Drag Trigger',
- path: '/custom_drag_trigger_flat_data',
- },
- {
- title: 'Open',
- path: '/open_ids',
- },
- {
- title: 'Checked',
- path: '/checked_ids',
- },
- {
- title: 'Update Data',
- path: '/update_data',
- },
- {
- title: 'Update Flat Data With Immer',
- path: '/update_flat_data_with_immer',
- },
- {
- title: 'Update Tree Data With Immer',
- path: '/update_tree_data_with_immer',
- },
- {
- title: 'Customize Placeholder and Node Box',
- path: '/customize_placeholder_and_node_box',
- },
- {
- title: 'Draggable & Droppable',
- path: '/draggable_droppable'
- },
- {
- title: 'Open Node when Drag over',
- path: '/dragopen'
- },
- {
- title: 'Drag and Drop to External',
- path: '/external_drag'
- },
- {
- title: 'Big Data with Virtual List',
- path: '/virtual_list'
- },
- {
- title: 'Scroll to Node',
- path: '/scroll_to_node',
- },
- {
- title: 'Custom Style',
- path: '/custom_style',
- },
- {
- title: 'Home',
- path: '/',
- },
- ]);
-
- useLayoutEffect(() => {
- const { ResizeObserver } = window
- const observer = ResizeObserver && new ResizeObserver(() => {
- window.parent.postMessage({ type: 'iframeHeight', height: document.body.offsetHeight, id: iframeId }, '*')
- })
- // observer is undefined in test environment
- observer?.observe(document.body)
- return () => {
- observer?.disconnect()
- }
- }, [])
-
- return
-
-
-
Menu
- {menu.map((item, index) =>
- {item.title}
-
- )}
-
-
-
-}
\ No newline at end of file
diff --git a/src/main.tsx b/src/main.tsx
deleted file mode 100644
index ba005d8..0000000
--- a/src/main.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-// don't use reset css
-// import '@unocss/reset/tailwind.css'
-// import '@unocss/reset/tailwind-compat.css'
-import 'virtual:uno.css'
-import React, { lazy, Suspense } from 'react';
-import ReactDOM from 'react-dom/client'
-import { createHashRouter, RouterProvider } from "react-router-dom";
-import PageLayout from './PageLayout.tsx';
-
-// router
-const Pages = {
- home: lazy(() => import("./pages/index.tsx")),
- base_tree_data: lazy(() => import("./pages/base_tree_data.tsx")),
- base_flat_data: lazy(() => import("./pages/base_flat_data.tsx")),
- custom_drag_trigger_flat_data: lazy(() => import("./pages/custom_drag_trigger_flat_data.tsx")),
- open_ids: lazy(() => import("./pages/open_ids.tsx")),
- checked_ids: lazy(() => import("./pages/checked_ids.tsx")),
- update_data: lazy(() => import("./pages/update_data.tsx")),
- update_flat_data_with_immer: lazy(() => import("./pages/update_flat_data_with_immer.tsx")),
- update_tree_data_with_immer: lazy(() => import("./pages/update_tree_data_with_immer.tsx")),
- customize_placeholder_and_node_box: lazy(() => import("./pages/customize_placeholder_and_node_box.tsx")),
- draggable_droppable: lazy(() => import("./pages/draggable_droppable.tsx")),
- dragopen: lazy(() => import("./pages/dragopen.tsx")),
- external_drag: lazy(() => import("./pages/external_drag.tsx")),
- virtual_list: lazy(() => import("./pages/virtual_list.tsx")),
- scroll_to_node: lazy(() => import("./pages/scroll_to_node.tsx")),
- custom_style: lazy(() => import("./pages/custom_style.tsx")),
-}
-const router = createHashRouter([
- {
- path: "/",
- element: ,
- children: [
- {
- path: "/",
- element:
- },
- {
- path: "/base_tree_data",
- element: ,
- },
- {
- path: "/base_flat_data",
- element: ,
- },
- {
- path: "/custom_drag_trigger_flat_data",
- element: ,
- },
- {
- path: "/open_ids",
- element: ,
- },
- {
- path: "/checked_ids",
- element: ,
- },
- {
- path: "/update_data",
- element: ,
- },
- {
- path: "/update_flat_data_with_immer",
- element: ,
- },
- {
- path: "/update_tree_data_with_immer",
- element: ,
- },
- {
- path: "/customize_placeholder_and_node_box",
- element: ,
- },
- {
- path: "/draggable_droppable",
- element: ,
- },
- {
- path: "/dragopen",
- element: ,
- },
- {
- path: "/external_drag",
- element: ,
- },
- {
- path: "/virtual_list",
- element: ,
- },
- {
- path: '/scroll_to_node',
- element:
- },
- {
- path: '/custom_style',
- element:
- }
- ]
- },
-]);
-
-ReactDOM.createRoot(document.getElementById('root')!).render(
-
- {/* */}
- loading}>
-
-
- ,
-)
diff --git a/src/pages/_data.ts b/src/pages/_data.ts
deleted file mode 100644
index 60076fc..0000000
--- a/src/pages/_data.ts
+++ /dev/null
@@ -1,129 +0,0 @@
-export function createFlatData() {
- // size 9
- /* structure
- 1
- 2
- 5
- 10
- 4
- 8
- 3
- 7
- 6
- */
- return [
- {
- id: 1,
- parent_id: null,
- name: "Root Category",
- },
- {
- id: 2,
- parent_id: 1,
- name: "Technology",
- },
- {
- id: 5,
- parent_id: 2,
- name: "Hardware",
- },
- {
- id: 10,
- parent_id: 5,
- name: "Computer Components",
- },
- {
- id: 4,
- parent_id: 2,
- name: "Programming",
- },
- {
- id: 8,
- parent_id: 4,
- name: "Python",
- },
- {
- id: 3,
- parent_id: 1,
- name: "Science",
- },
- {
- id: 7,
- parent_id: 3,
- name: "Biology",
- },
- {
- id: 6,
- parent_id: 3,
- name: "Physics",
- },
- ];
-}
-
-export function createTreeData() {
- // same to flatData.test
- // size 9
- /* structure
- 1
- 2
- 5
- 10
- 4
- 8
- 3
- 7
- 6
- */
- return [
- {
- id: 1,
- name: "Root Category",
- children: [
- {
- id: 2,
- name: "Technology",
- children: [
- {
- id: 5,
- name: "Hardware",
- children: [
- {
- id: 10,
- name: "Computer Components",
- children: [],
- },
- ],
- },
- {
- id: 4,
- name: "Programming",
- children: [
- {
- id: 8,
- name: "Python",
- children: [],
- },
- ],
- },
- ],
- },
- {
- id: 3,
- name: "Science",
- children: [
- {
- id: 7,
- name: "Biology",
- children: [],
- },
- {
- id: 6,
- name: "Physics",
- children: [],
- },
- ],
- },
- ],
- },
- ];
-}
diff --git a/src/pages/base_flat_data.tsx b/src/pages/base_flat_data.tsx
deleted file mode 100644
index 2547376..0000000
--- a/src/pages/base_flat_data.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { useHeTree, sortFlatData } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- const [data, setdata] = useState(() => sortFlatData([
- {
- id: 1,
- parent_id: null,
- name: "Root Category",
- },
- {
- id: 2,
- parent_id: 1,
- name: "Technology",
- },
- {
- id: 5,
- parent_id: 2,
- name: "Hardware",
- },
- {
- id: 10,
- parent_id: 5,
- name: "Computer Components",
- },
- {
- id: 4,
- parent_id: 2,
- name: "Programming",
- },
- {
- id: 8,
- parent_id: 4,
- name: "Python",
- },
- {
- id: 3,
- parent_id: 1,
- name: "Science",
- },
- {
- id: 7,
- parent_id: 3,
- name: "Biology",
- },
- {
- id: 6,
- parent_id: 3,
- name: "Physics",
- },
- ], keys));
- const { renderTree } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNode: ({ id, node, open, checked }) =>
- {node.name}
-
,
- })
- return
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/base_tree_data.tsx b/src/pages/base_tree_data.tsx
deleted file mode 100644
index 3235437..0000000
--- a/src/pages/base_tree_data.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import { useHeTree } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const [data, setdata] = useState(() => [
- {
- id: 1,
- name: "Root Category",
- children: [
- {
- id: 2,
- name: "Technology",
- children: [
- {
- id: 5,
- name: "Hardware",
- children: [
- {
- id: 10,
- name: "Computer Components",
- children: [],
- },
- ],
- },
- {
- id: 4,
- name: "Programming",
- children: [
- {
- id: 8,
- name: "Python",
- children: [],
- },
- ],
- },
- ],
- },
- {
- id: 3,
- name: "Science",
- children: [
- {
- id: 7,
- name: "Biology",
- children: [],
- },
- {
- id: 6,
- name: "Physics",
- children: [],
- },
- ],
- },
- ],
- },
- ]);
- const { renderTree } = useHeTree({
- data,
- dataType: 'tree',
- childrenKey: 'children',
- onChange: setdata,
- renderNode: ({ id, node, open, checked }) =>
- {node.name}
-
,
- })
- return
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/checked_ids.tsx b/src/pages/checked_ids.tsx
deleted file mode 100644
index a9c0586..0000000
--- a/src/pages/checked_ids.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { useHeTree, sortFlatData, updateCheckedInFlatData } from "he-tree-react";
-import type { Id } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData([{ id: 1, parent_id: null, name: "Root Category", }, { id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const [checkedIds, setcheckedIds] = useState([]);
- const [semiCheckedIds, setsemiCheckedIds] = useState([]);
- const handleChecked = (id: Id, checked: boolean) => {
- const r = updateCheckedInFlatData(data, checkedIds, id, checked, keys);
- setcheckedIds(r[0]);
- setsemiCheckedIds(r[1]);
- }
- const { renderTree } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- checkedIds,
- renderNode: ({ id, node, open, checked, draggable }) =>
- handleChecked(id, !checked)} />
- {node.name} - {id}
-
,
- })
- return
- Checked: {JSON.stringify(checkedIds)}
- Semi-Checked: {JSON.stringify(semiCheckedIds)}
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/custom_drag_trigger_flat_data.tsx b/src/pages/custom_drag_trigger_flat_data.tsx
deleted file mode 100644
index a969788..0000000
--- a/src/pages/custom_drag_trigger_flat_data.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { useHeTree, sortFlatData } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData([{ id: 1, parent_id: null, name: "Root Category", }, { id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const { renderTree } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNode: ({ id, node, open, checked, draggable }) =>
- Drag
- {node.name}
-
,
- })
- return
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/custom_style.tsx b/src/pages/custom_style.tsx
deleted file mode 100644
index 44cd4be..0000000
--- a/src/pages/custom_style.tsx
+++ /dev/null
@@ -1,135 +0,0 @@
-import { useHeTree, sortFlatData } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- const [data, setdata] = useState(() => sortFlatData([
- {
- id: 1,
- parent_id: null,
- name: "Root Category",
- },
- {
- id: 2,
- parent_id: 1,
- name: "Technology",
- },
- {
- id: 5,
- parent_id: 2,
- name: "Hardware",
- },
- {
- id: 10,
- parent_id: 5,
- name: "Computer Components",
- },
- {
- id: 4,
- parent_id: 2,
- name: "Programming",
- },
- {
- id: 8,
- parent_id: 4,
- name: "Python",
- },
- {
- id: 3,
- parent_id: 1,
- name: "Science",
- },
- {
- id: 7,
- parent_id: 3,
- name: "Biology",
- },
- {
- id: 6,
- parent_id: 3,
- name: "Physics",
- },
- ], keys));
- const { renderTree, placeholder } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNodeBox: ({ stat, attrs, isPlaceholder }) => (
-
- {isPlaceholder ?
DROP HERE
- :
- {dragIcon()}
- {stat.node.name}
-
- }
-
- ),
- })
- return <>
- Draggable Tree
-
- {renderTree({ className: `my-tree ${placeholder ? 'dragging' : 'no-dragging'}` })}
-
-
- >
-}
-
-function dragIcon() {
- return drag-horizontal-variant
-}
\ No newline at end of file
diff --git a/src/pages/customize_placeholder_and_node_box.tsx b/src/pages/customize_placeholder_and_node_box.tsx
deleted file mode 100644
index d907fae..0000000
--- a/src/pages/customize_placeholder_and_node_box.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { useHeTree, sortFlatData } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData([{ id: 1, parent_id: null, name: "Root Category", }, { id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const { renderTree } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNodeBox: ({ stat, attrs, isPlaceholder }) => (
-
- {isPlaceholder ?
drop here
- :
{stat.node.name}
- }
-
- ),
- })
- return
- {renderTree({ className: 'mytree', style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-
-}
\ No newline at end of file
diff --git a/src/pages/draggable_droppable.tsx b/src/pages/draggable_droppable.tsx
deleted file mode 100644
index 69a76f8..0000000
--- a/src/pages/draggable_droppable.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useHeTree, sortFlatData } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData([{ id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const { renderTree } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNode: ({ id, node, open, checked, draggable }) =>
- {node.name} - {id}
-
,
- canDrag: ({ id }) => id === 2 ? true : (id === 3 ? false : undefined),
- canDrop: ({ id }) => id === 3 ? true : (id === 2 ? false : undefined),
- canDropToRoot: (index) => false,
- })
- return
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/dragopen.tsx b/src/pages/dragopen.tsx
deleted file mode 100644
index 1e2fb49..0000000
--- a/src/pages/dragopen.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useHeTree, sortFlatData } from "he-tree-react";
-import type { Id } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData([{ id: 1, parent_id: null, name: "Root Category", }, { id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const [openIds, setopenIds] = useState([1, 3]);
- const handleOpen = (id: Id, open: boolean) => {
- if (open) {
- setopenIds([...(openIds || allIds), id]);
- } else {
- setopenIds((openIds || allIds).filter((i) => i !== id));
- }
- }
- const { renderTree, allIds } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- openIds,
- renderNode: ({ id, node, open, checked, draggable }) =>
- handleOpen(id, !open)}>{open ? '-' : '+'}
- {node.name} - {id}
-
,
- dragOpen: true,
- onDragOpen(stat) {
- handleOpen(stat.id, true)
- },
- })
- return
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/external_drag.tsx b/src/pages/external_drag.tsx
deleted file mode 100644
index dcfc4b3..0000000
--- a/src/pages/external_drag.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useHeTree, sortFlatData, addToFlatData } from "he-tree-react";
-import { useImmer } from "use-immer";
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useImmer(() => sortFlatData([{ id: 1, parent_id: null, name: "Root Category", }, { id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const { renderTree, allIds } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNode: ({ id, node, open, checked, draggable }) =>
- {node.name} - {id}
-
,
- onExternalDragOver: (e) => true,
- onExternalDrop: (e, parentStat, index) => {
- setdata(draft => {
- const newNode = { id: 100 + data.length, parent_id: parentStat?.id ?? null, name: "New Node" }
- addToFlatData(draft, newNode, index, keys)
- })
- },
- })
- return
- Drag me in to the tree
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
deleted file mode 100644
index 5339a7d..0000000
--- a/src/pages/index.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-
-import { createHashRouter, RouterProvider, Link } from "react-router-dom";
-export default function Home() {
- return <>
-
-
-
he-tree-react Demo
-
Github
-
-
- >
-}
\ No newline at end of file
diff --git a/src/pages/open_ids.tsx b/src/pages/open_ids.tsx
deleted file mode 100644
index f9a2bdc..0000000
--- a/src/pages/open_ids.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useHeTree, sortFlatData, openParentsInFlatData } from "he-tree-react";
-import type { Id } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData([{ id: 1, parent_id: null, name: "Root Category", }, { id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const [openIds, setopenIds] = useState([]);
- const handleOpen = (id: Id, open: boolean) => {
- if (open) {
- setopenIds([...(openIds || allIds), id]);
- } else {
- setopenIds((openIds || allIds).filter((i) => i !== id));
- }
- }
- const { renderTree, allIds } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- openIds,
- renderNode: ({ id, node, open, checked, draggable }) =>
- handleOpen(id, !open)}>{open ? '-' : '+'}
- {node.name} - {id}
-
,
- })
- return
- setopenIds(allIds)}>Open All
- setopenIds([])}>Close All
- setopenIds(openParentsInFlatData(data, openIds || allIds, 8, keys))}>Open 'Python'
- setopenIds(openParentsInFlatData(data, [], 8, keys))}>Only Open 'Python'
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/scroll_to_node.tsx b/src/pages/scroll_to_node.tsx
deleted file mode 100644
index cf5f3fe..0000000
--- a/src/pages/scroll_to_node.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { useHeTree, sortFlatData } from "he-tree-react";
-import type { Id } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'pid' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData(createData(), keys));
- const [openIds, setopenIds] = useState([]);
- const handleOpen = (id: Id, open: boolean) => {
- if (open) {
- setopenIds([...(openIds || allIds), id]);
- } else {
- setopenIds((openIds || allIds).filter((i) => i !== id));
- }
- }
- const { renderTree, allIds, scrollToNode } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- openIds,
- virtual: true,
- renderNode: ({ id, node, open, checked, draggable }) =>
- handleOpen(id, !open)}>{open ? '-' : '+'}
- {id}
-
,
- })
- return
- scrollToNode(910)}>Scroll to 910
- {renderTree({ style: { width: '300px', height: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
-
-// generate 10000 nodes
-function createData() {
- const genId = () => result.length
- const result: { id: number, pid: number | null }[] = [];
- for (let i = 0; i < 1000; i++) {
- let id1 = genId()
- result.push({ id: id1, pid: null })
- for (let j = 0; j < 4; j++) {
- result.push({ id: genId(), pid: id1 })
- }
- let id2 = genId()
- result.push({ id: id2, pid: null })
- for (let j = 0; j < 4; j++) {
- result.push({ id: genId(), pid: id2 })
- }
- }
- return result;
-}
\ No newline at end of file
diff --git a/src/pages/update_data.tsx b/src/pages/update_data.tsx
deleted file mode 100644
index 54aad92..0000000
--- a/src/pages/update_data.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import {
- useHeTree, sortFlatData,
- addToFlatData, removeByIdInFlatData
-} from "he-tree-react";
-import type { Id } from "he-tree-react";
-import { useRef, useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData([{ id: 1, parent_id: null, name: "Root Category", }, { id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const add = (pid: Id) => {
- let id = parseInt(Math.random().toString().substring(2, 5));
- let newData = [...data];
- addToFlatData(newData, { id, parent_id: pid as number, name: "New" }, 0, keys)
- setdata(newData);
- }
- const remove = (id: Id) => {
- let newData = [...data];
- removeByIdInFlatData(newData, id as number, keys)
- setdata(newData);
- }
- const initialData = useRef();
- initialData.current = initialData.current || data;
- const { renderTree } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNode: ({ id, node, draggable }) =>
- 👉
- {node.name} - {id} -
- add(id)}>+
- remove(id)}>-
-
,
- })
- return
- setdata(initialData.current!)}>Restore
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/update_flat_data_with_immer.tsx b/src/pages/update_flat_data_with_immer.tsx
deleted file mode 100644
index f18e943..0000000
--- a/src/pages/update_flat_data_with_immer.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import {
- useHeTree, sortFlatData,
- addToFlatData, removeByIdInFlatData
-} from "he-tree-react";
-import type { Id } from "he-tree-react";
-import { useRef } from 'react';
-import { useImmer } from "use-immer";
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'parent_id' };
- // prettier-ignore
- const [data, setdata] = useImmer(() => sortFlatData([{ id: 1, parent_id: null, name: "Root Category", }, { id: 2, parent_id: 1, name: "Technology", }, { id: 5, parent_id: 2, name: "Hardware", }, { id: 10, parent_id: 5, name: "Computer Components", }, { id: 4, parent_id: 2, name: "Programming", }, { id: 8, parent_id: 4, name: "Python", }, { id: 3, parent_id: 1, name: "Science", }, { id: 7, parent_id: 3, name: "Biology", }, { id: 6, parent_id: 3, name: "Physics", },], keys));
- const add = (pid: Id) => {
- let id = parseInt(Math.random().toString().substring(2, 5));
- setdata(draft => {
- addToFlatData(draft, { id, parent_id: pid as number, name: "New" }, 0, keys)
- });
- }
- const remove = (id: Id) => {
- setdata(draft => {
- removeByIdInFlatData(draft, id as number, keys)
- })
- }
- const edit = (id: Id) => {
- let newName = prompt("Enter new name")
- setdata(draft => {
- if (newName) {
- draft.find(node => node.id === id)!.name = newName
- }
- })
- }
- const initialData = useRef();
- initialData.current = initialData.current || data;
- const { renderTree } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNode: ({ id, node, draggable }) =>
- 👉
- {node.name} - {id} -
- add(id)}>+
- remove(id)}>-
- edit(id)}>Edit
-
,
- })
- return
- setdata(initialData.current!)}>Restore
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/update_tree_data_with_immer.tsx b/src/pages/update_tree_data_with_immer.tsx
deleted file mode 100644
index 33d9fce..0000000
--- a/src/pages/update_tree_data_with_immer.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { useHeTree, findTreeData } from "he-tree-react";
-import type { Id } from "he-tree-react";
-import { useRef } from 'react';
-import { useImmer } from "use-immer";
-
-export default function BasePage() {
- const CHILDREN = 'children'
- const keys = { idKey: 'id', childrenKey: CHILDREN };
- // prettier-ignore
- const [data, setdata] = useImmer(() => [{ id: 1, name: "Root Category", children: [{ id: 2, name: "Technology", children: [{ id: 5, name: "Hardware", children: [{ id: 10, name: "Computer Components", children: [], },], }, { id: 4, name: "Programming", children: [{ id: 8, name: "Python", children: [], },], },], }, { id: 3, name: "Science", children: [{ id: 7, name: "Biology", children: [], }, { id: 6, name: "Physics", children: [], },], },], },]);
- const add = (pid: Id) => {
- let id = parseInt(Math.random().toString().substring(2, 5));
- setdata(draft => {
- findTreeData(draft, (node) => node.id === pid, CHILDREN)![CHILDREN].unshift({ id, name: "New", [CHILDREN]: [], })
- })
- }
- const remove = (id: Id, pid: Id | null) => {
- setdata(draft => {
- const children = findTreeData(draft, (node,) => node.id === pid, CHILDREN)![CHILDREN]
- children.splice(children.findIndex(t => t.id === id), 1)
- })
- }
- const edit = (id: Id) => {
- let newName = prompt("Enter new name")
- setdata(draft => {
- if (newName) {
- findTreeData(draft, (node) => node.id === id, CHILDREN)!.name = newName
- }
- })
- }
- const initialData = useRef();
- initialData.current = initialData.current || data;
- const { renderTree } = useHeTree({
- ...keys,
- data,
- dataType: 'tree',
- onChange: setdata,
- renderNode: ({ id, pid, node, draggable }) =>
- 👉
- {node.name} - {id} -
- add(id)}>+
- remove(id, pid)}>-
- edit(id)}>Edit
-
,
- })
- return
- setdata(initialData.current!)}>Restore
- {renderTree({ style: { width: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
\ No newline at end of file
diff --git a/src/pages/virtual_list.tsx b/src/pages/virtual_list.tsx
deleted file mode 100644
index a0015b0..0000000
--- a/src/pages/virtual_list.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import { useHeTree, sortFlatData } from "he-tree-react";
-import type { Id } from "he-tree-react";
-import { useState } from 'react';
-
-export default function BasePage() {
- const keys = { idKey: 'id', parentIdKey: 'pid' };
- // prettier-ignore
- const [data, setdata] = useState(() => sortFlatData(createData(), keys));
- const [openIds, setopenIds] = useState([]);
- const handleOpen = (id: Id, open: boolean) => {
- if (open) {
- setopenIds([...(openIds || allIds), id]);
- } else {
- setopenIds((openIds || allIds).filter((i) => i !== id));
- }
- }
- const { renderTree, allIds } = useHeTree({
- ...keys,
- data,
- dataType: 'flat',
- onChange: setdata,
- openIds,
- virtual: true,
- renderNode: ({ id, node, open, checked, draggable }) =>
- handleOpen(id, !open)}>{open ? '-' : '+'}
- {id}
-
,
- })
- return
- {renderTree({ style: { width: '300px', height: '300px', border: '1px solid #555', padding: '20px' } })}
-
-}
-
-// generate 10000 nodes
-function createData() {
- const genId = () => result.length
- const result: { id: number, pid: number | null }[] = [];
- for (let i = 0; i < 1000; i++) {
- let id1 = genId()
- result.push({ id: id1, pid: null })
- for (let j = 0; j < 4; j++) {
- result.push({ id: genId(), pid: id1 })
- }
- let id2 = genId()
- result.push({ id: id2, pid: null })
- for (let j = 0; j < 4; j++) {
- result.push({ id: genId(), pid: id2 })
- }
- }
- return result;
-}
\ No newline at end of file
diff --git a/src/test/__snapshots__/useHeTree_flatData.test.tsx.snap b/src/test/__snapshots__/useHeTree_flatData.test.tsx.snap
deleted file mode 100644
index 995a7d5..0000000
--- a/src/test/__snapshots__/useHeTree_flatData.test.tsx.snap
+++ /dev/null
@@ -1,183 +0,0 @@
-// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-
-exports[`render tree 1`] = `
-
-
-
-
-
-
-
-
- Computer Components
-
-
-
-
-
-
-
-
-
-
-`;
diff --git a/src/test/__snapshots__/useHeTree_treeData.test.tsx.snap b/src/test/__snapshots__/useHeTree_treeData.test.tsx.snap
deleted file mode 100644
index 995a7d5..0000000
--- a/src/test/__snapshots__/useHeTree_treeData.test.tsx.snap
+++ /dev/null
@@ -1,183 +0,0 @@
-// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-
-exports[`render tree 1`] = `
-
-
-
-
-
-
-
-
- Computer Components
-
-
-
-
-
-
-
-
-
-
-`;
diff --git a/src/test/flatData.test.ts b/src/test/flatData.test.ts
deleted file mode 100644
index 7b2814d..0000000
--- a/src/test/flatData.test.ts
+++ /dev/null
@@ -1,366 +0,0 @@
-import { loadConfigFromFile } from "vite";
-import {
- sortFlatData,
- walkFlatDataGenerator,
- walkFlatData,
- convertIndexToTreeIndexInFlatData,
- addToFlatData,
- removeByIdInFlatData,
- openParentsInFlatData,
- updateCheckedInFlatData,
-} from "../../lib/HeTree";
-
-test("sortFlatData", () => {
- let data = createData();
- data.unshift({ id: 12, parent_id: 11, name: "12" });
- data.unshift({ id: 11, parent_id: 1, name: "11" });
- data = sortFlatData(data);
- expect(data[1].id).toBe(11);
- expect(data[2].id).toBe(12);
-});
-test("walkFlatDataGenerator: node, treeIndex", () => {
- let data = createData();
- for (const [
- node,
- { treeIndex, parent, index, parents },
- ] of walkFlatDataGenerator(data)) {
- if (treeIndex === 3) {
- expect(node.id).toBe(10);
- }
- }
-});
-test("walkFlatDataGenerator: parent", () => {
- let data = createData();
- for (const [
- node,
- { treeIndex, parent, index, parents },
- ] of walkFlatDataGenerator(data)) {
- if (treeIndex === 3) {
- expect(parent!.id).toBe(5);
- }
- }
-});
-test("walkFlatDataGenerator: index", () => {
- let data = createData();
- for (const [
- node,
- { treeIndex, parent, index, parents },
- ] of walkFlatDataGenerator(data)) {
- if (treeIndex === 4) {
- expect(index).toBe(1);
- }
- }
-});
-test("walkFlatDataGenerator: parents", () => {
- let data = createData();
- for (const [
- node,
- { treeIndex, parent, index, parents },
- ] of walkFlatDataGenerator(data)) {
- if (treeIndex === 4) {
- expect(parents[0].id).toBe(1);
- expect(parents[1].id).toBe(2);
- }
- }
-});
-test("walkFlatDataGenerator: options", () => {
- let data = createData("key", "pid");
- for (const [
- node,
- { treeIndex, parent, index, parents },
- ] of walkFlatDataGenerator(data, { idKey: "key", parentIdKey: "pid" })) {
- if (treeIndex === 4) {
- // @ts-ignore
- expect(parents[0].key).toBe(1);
- // @ts-ignore
- expect(parents[1].key).toBe(2);
- }
- }
-});
-test("walkFlatDataGenerator: pid undefined", () => {
- let data = createData();
- // @ts-ignore
- data[0].parent_id = undefined;
- for (const [
- node,
- { treeIndex, parent, index, parents },
- ] of walkFlatDataGenerator(data)) {
- if (treeIndex === 0) {
- expect(parent).toBe(null);
- expect(JSON.stringify(parents)).toBe("[]");
- }
- }
-});
-test("walkFlatDataGenerator: pid not found", () => {
- let data = createData();
- // @ts-ignore
- data[0].parent_id = 99999999;
- for (const [
- node,
- { treeIndex, parent, index, parents },
- ] of walkFlatDataGenerator(data)) {
- if (treeIndex === 0) {
- expect(parent).toBe(null);
- expect(JSON.stringify(parents)).toBe("[]");
- }
- }
-});
-test("walkFlatDataGenerator: skipChildren", () => {
- let data = createData();
- let t = "";
- for (const [
- node,
- { treeIndex, parent, index, parents, skipChildren },
- ] of walkFlatDataGenerator(data)) {
- t += node.id + "";
- if (node.id === 2) {
- skipChildren();
- }
- }
- expect(t).toBe("12376");
-});
-test("walkFlatDataGenerator: exitWalk", () => {
- let data = createData();
- let t = "";
- for (const [
- node,
- { treeIndex, parent, index, parents, exitWalk },
- ] of walkFlatDataGenerator(data)) {
- t += node.id + "";
- if (node.id === 5) {
- exitWalk();
- }
- }
- expect(t).toBe("125");
-});
-test("walkFlatData", () => {
- let data = createData();
- walkFlatData(
- data,
- (node, { treeIndex, parent, index, parents, exitWalk }) => {
- if (treeIndex === 0) {
- expect(parent).toBe(null);
- expect(JSON.stringify(parents)).toBe("[]");
- expect(node.id).toBe(1);
- exitWalk();
- }
- }
- );
-});
-test("walkFlatData: id, pid", () => {
- let data = createData();
- walkFlatData(
- data,
- (node, { treeIndex, parent, index, parents, exitWalk, id, pid }) => {
- if (treeIndex === 2) {
- expect(id).toBe(5);
- expect(pid).toBe(2);
- exitWalk();
- }
- }
- );
-});
-test("walkFlatData: options", () => {
- let data = createData("key", "pid");
- walkFlatData(
- data,
- (node, { treeIndex, parent, index, parents }) => {
- if (treeIndex === 0) {
- expect(parent).toBe(null);
- expect(JSON.stringify(parents)).toBe("[]");
- expect(node.key).toBe(1);
- }
- },
- { idKey: "key", parentIdKey: "pid" }
- );
-});
-test("walkFlatData: skipChildren", () => {
- let data = createData();
- let t = "";
- walkFlatData(data, (node, { skipChildren }) => {
- t += node.id + "";
- if (node.id === 2) {
- skipChildren();
- }
- });
- expect(t).toBe("12376");
-});
-test("walkFlatData: exitWalk", () => {
- let data = createData();
- let t = "";
- walkFlatData(data, (node, { exitWalk }) => {
- t += node.id + "";
- if (node.id === 5) {
- exitWalk();
- }
- });
- expect(t).toBe("125");
-});
-test("convertIndexToTreeIndexInFlatData", () => {
- let data = createData();
- expect(convertIndexToTreeIndexInFlatData(data, null, 0)).toBe(0);
- expect(convertIndexToTreeIndexInFlatData(data, null, 1)).toBe(9);
- expect(convertIndexToTreeIndexInFlatData(data, null, null)).toBe(9);
- expect(convertIndexToTreeIndexInFlatData(data, 1, 0)).toBe(1);
- expect(convertIndexToTreeIndexInFlatData(data, 1, 1)).toBe(6);
- expect(convertIndexToTreeIndexInFlatData(data, 1, null)).toBe(9);
- expect(convertIndexToTreeIndexInFlatData(data, 2, null)).toBe(6);
- expect(convertIndexToTreeIndexInFlatData(data, 3, 0)).toBe(7);
- expect(convertIndexToTreeIndexInFlatData(data, 3, 1)).toBe(8);
- expect(convertIndexToTreeIndexInFlatData(data, 3, 2)).toBe(9);
- expect(convertIndexToTreeIndexInFlatData(data, 3, 3)).toBe(9);
- expect(convertIndexToTreeIndexInFlatData(data, 3, 3000)).toBe(9);
- expect(convertIndexToTreeIndexInFlatData(data, 3, null)).toBe(9);
- expect(convertIndexToTreeIndexInFlatData(data, 10, null)).toBe(4);
-});
-test("addToFlatData", () => {
- let data = createData();
- let cur = [...data];
- addToFlatData(cur, { id: "new", parent_id: 1, name: "new" }, 0);
- expect(cur[1].id).toBe("new");
- cur = [...data];
- addToFlatData(cur, { id: "new", parent_id: null, name: "new" }, 1);
- expect(cur[9].id).toBe("new");
- cur = [...data];
- addToFlatData(cur, { id: "new", parent_id: 2, name: "new" }, null);
- expect(cur[6].id).toBe("new");
-});
-test("removeByIdInFlatData", () => {
- let data = createData();
- let cur = [...data];
- removeByIdInFlatData(cur, 1);
- expect(cur.length).toBe(0);
- //
- cur = [...data];
- removeByIdInFlatData(cur, 2);
- expect(cur.length).toBe(4);
- //
- cur = [...data];
- removeByIdInFlatData(cur, 5);
- expect(cur.length).toBe(7);
- //
- cur = createData("key");
- let removed = removeByIdInFlatData(cur, 10, { idKey: "key" });
- expect(removed.length).toBe(1);
- expect(removed[0].key).toBe(10);
- expect(cur.length).toBe(data.length - 1);
-});
-test("openParentsInFlatData", () => {
- let data = createData();
- let cur = [...data];
- let openIds = [3];
- let newOpenids = openParentsInFlatData(cur, openIds, 10);
- expect(newOpenids.toString()).toBe("1,2,3,5");
- newOpenids = openParentsInFlatData(cur, [], 10);
- expect(newOpenids.toString()).toBe("1,2,5");
- newOpenids = openParentsInFlatData(cur, [], 11);
- expect(newOpenids.toString()).toBe("");
-});
-test("updateCheckedInFlatData", () => {
- let data = createData();
- let cur = [...data];
- let ids = [7];
- let [newIds, semi] = updateCheckedInFlatData(cur, ids, [], true);
- expect(newIds.toString()).toBe("7");
- // invalid 3 will be removed
- [newIds, semi] = updateCheckedInFlatData(cur, [3], [], true);
- expect(newIds.toString()).toBe("");
- //
- [newIds, semi] = updateCheckedInFlatData(cur, ids, [3], true);
- expect(newIds.toString()).toBe("3,6,7");
- expect(semi.toString()).toBe("1");
- //
- [newIds, semi] = updateCheckedInFlatData(cur, [], [8, 10], true);
- expect(newIds.toString()).toBe("10,2,4,5,8");
- expect(semi.toString()).toBe("1");
- // uncheck
- [newIds, semi] = updateCheckedInFlatData(cur, [10, 2, 4, 8, 5], [8], false);
- expect(newIds.toString()).toBe("10,5");
- expect(semi.toString()).toBe("1,2");
- //
- [newIds, semi] = updateCheckedInFlatData(
- cur,
- [1, 2, 5, 10, 4, 8, 3, 7, 6],
- [6, 7],
- !false
- );
- expect(newIds.length).toBe(9);
- expect(semi.length).toBe(0);
- //
- [newIds, semi] = updateCheckedInFlatData(
- cur,
- [1, 2, 5, 10, 4, 8, 3, 7, 6],
- [6, 7],
- false
- );
- expect(semi.toString()).toBe("1");
- //
- [newIds, semi] = updateCheckedInFlatData(cur, [2], [5], true);
- expect(newIds.toString()).toBe("10,5");
- //
- [newIds, semi] = updateCheckedInFlatData(cur, [2, 5, 10, 4, 8], 4, false);
- expect(newIds.toString()).toBe("10,5");
- expect(semi.toString()).toBe("1,2");
-});
-
-export function createData(id = "id", parent_id = "parent_id") {
- // size 9
- /* structure
- 1
- 2
- 5
- 10
- 4
- 8
- 3
- 7
- 6
- */
- return [
- {
- [id]: 1,
- [parent_id]: null,
- name: "Root Category",
- },
- {
- [id]: 2,
- [parent_id]: 1,
- name: "Technology",
- },
- {
- [id]: 5,
- [parent_id]: 2,
- name: "Hardware",
- },
- {
- [id]: 10,
- [parent_id]: 5,
- name: "Computer Components",
- },
- {
- [id]: 4,
- [parent_id]: 2,
- name: "Programming",
- },
- {
- [id]: 8,
- [parent_id]: 4,
- name: "Python",
- },
- {
- [id]: 3,
- [parent_id]: 1,
- name: "Science",
- },
- {
- [id]: 7,
- [parent_id]: 3,
- name: "Biology",
- },
- {
- [id]: 6,
- [parent_id]: 3,
- name: "Physics",
- },
- ];
-}
diff --git a/src/test/otherFunctions.test.ts b/src/test/otherFunctions.test.ts
deleted file mode 100644
index c1ce9f2..0000000
--- a/src/test/otherFunctions.test.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { walkParentsGenerator } from "../../lib/HeTree";
-
-test("walkParentsGenerator", () => {
- const PARENT = "parent_node";
- let root = {};
- let child1 = { [PARENT]: root };
- let child2 = { [PARENT]: root };
- let child11 = { [PARENT]: child1 };
- let child21 = { [PARENT]: child2 };
- let child22 = { [PARENT]: child2 };
-
- let i = 0;
- for (const node of walkParentsGenerator(child22, PARENT)) {
- if (i === 0) {
- expect(node).toBe(child2);
- } else if (i === 1) {
- expect(node).toBe(root);
- }
- i++;
- }
-});
diff --git a/src/test/treeData.test.ts b/src/test/treeData.test.ts
deleted file mode 100644
index 72889b3..0000000
--- a/src/test/treeData.test.ts
+++ /dev/null
@@ -1,404 +0,0 @@
-import {
- walkTreeDataGenerator,
- walkTreeData,
- findTreeData,
- filterTreeData,
- openParentsInTreeData,
- updateCheckedInTreeData,
- useHeTree,
-} from "../../lib/HeTree";
-
-test("walkTreeDataGenerator", () => {
- let data = createDataLong();
- for (const [
- node,
- { parent, index, parents, skipChildren, exitWalk },
- ] of walkTreeDataGenerator(data)) {
- if (node.text === "Nuxt") {
- expect(parent!.text).toBe("Vue");
- expect(parents[2]!.text).toBe("Vue");
- expect(parents[0]!.text).toBe("Projects");
- break;
- }
- }
-});
-test("walkTreeDataGenerator: exitWalk", () => {
- let data = createDataLong();
- let i = 0;
- for (const [
- node,
- { parent, index, parents, skipChildren, exitWalk },
- ] of walkTreeDataGenerator(data)) {
- if (i === 3) {
- exitWalk();
- }
- i++;
- }
- expect(i).toBe(4);
-});
-test("walkTreeDataGenerator: skipChildren", () => {
- let data = createDataLong();
- let i = 0;
- for (const [
- node,
- { parent, index, parents, skipChildren, exitWalk },
- ] of walkTreeDataGenerator(data)) {
- i++;
- skipChildren();
- }
- expect(i).toBe(data.length);
-});
-test("walkTreeDataGenerator: siblings, index", () => {
- let data = createDataLong();
- for (const [
- node,
- { parent, parents, skipChildren, exitWalk, siblings, index },
- ] of walkTreeDataGenerator(data)) {
- if (node.text === "Vue") {
- expect(siblings).toBe(parent?.children);
- }
- if (node.text === "React") {
- expect(index).toBe(1);
- break;
- }
- }
-});
-test("walkTreeData", () => {
- let data = createDataLong();
- walkTreeData(
- data,
- (node, { parent, parents, skipChildren, exitWalk, siblings, index }) => {
- if (node.text === "Vue") {
- expect(siblings).toBe(parent?.children);
- }
- if (node.text === "React") {
- expect(index).toBe(1);
- exitWalk();
- }
- }
- );
-});
-test("walkTreeData: skipChildren", () => {
- let data = createDataLong();
- let i = 0;
- walkTreeData(
- data,
- (node, { parent, parents, skipChildren, exitWalk, siblings, index }) => {
- i++;
- skipChildren();
- }
- );
- expect(i).toBe(data.length);
-});
-test("walkTreeData: exitWalk", () => {
- let data = createDataLong();
- let i = 0;
- walkTreeData(
- data,
- (node, { parent, parents, skipChildren, exitWalk, siblings, index }) => {
- i++;
- if (i === 3) {
- exitWalk();
- }
- }
- );
- expect(i).toBe(3);
-});
-test("walkTreeData: options", () => {
- let data = [
- {
- sub: [
- { text: "Vue", id: 1 },
- { text: "React", id: 2 },
- { text: "Nuxt", id: 3 },
- ],
- },
- ];
- let i = 0;
- walkTreeData(
- data,
- (
- node: any,
- { parent, parents, skipChildren, exitWalk, siblings, index }
- ) => {
- if (i === 3) {
- expect(node.text).toBe("Nuxt");
- exitWalk();
- }
- i++;
- },
- "sub"
- );
-});
-test("findTreeData", () => {
- let data = createDataLong();
- let r = findTreeData(data, (node) => node.text === "Next");
- expect(r?.text).toBe("Next");
- r = findTreeData(data, (node) => node.text === "Next============");
- expect(r).toBe(undefined);
-});
-test("filterTreeData", () => {
- let data = createDataLong();
- let r = filterTreeData(data, (node) => node.text.startsWith("A"));
- expect(r.length).toBe(4);
- r = filterTreeData(data, (node) => node.text === "===========");
- expect(r.length).toBe(0);
-});
-test("openParentsInTreeData", () => {
- let data = createDataLong();
- let cur = [...data];
- let openIds = ["Frontend"];
- let newOpenids = openParentsInTreeData(cur, openIds, "The Godfather", {
- idKey: "text",
- });
- expect(newOpenids.toString()).toBe("Frontend,Movie,Videos");
- newOpenids = openParentsInTreeData(cur, [], "Next", { idKey: "text" });
- expect(newOpenids.toString()).toBe("Frontend,Projects,React");
- newOpenids = openParentsInTreeData(cur, [], "===================");
- expect(newOpenids.toString()).toBe("");
-});
-test("updateCheckedInTreeData", () => {
- let data = createData();
- let cur = [...data];
- let ids = [7];
- let [newIds, semi] = updateCheckedInTreeData(cur, ids, [], true);
- expect(newIds.toString()).toBe("7");
- // invalid 3 will be removed
- [newIds, semi] = updateCheckedInTreeData(cur, [3], [], true);
- expect(newIds.toString()).toBe("");
- //
- [newIds, semi] = updateCheckedInTreeData(cur, ids, [3], true);
- expect(newIds.toString()).toBe("3,6,7");
- expect(semi.toString()).toBe("1");
- //
- [newIds, semi] = updateCheckedInTreeData(cur, [], [8, 10], true);
- expect(newIds.toString()).toBe("10,2,4,5,8");
- expect(semi.toString()).toBe("1");
- // uncheck
- [newIds, semi] = updateCheckedInTreeData(cur, [10, 2, 4, 8, 5], [8], false);
- expect(newIds.toString()).toBe("10,5");
- expect(semi.toString()).toBe("1,2");
- //
- [newIds, semi] = updateCheckedInTreeData(
- cur,
- [1, 2, 5, 10, 4, 8, 3, 7, 6],
- [6, 7],
- !false
- );
- expect(newIds.length).toBe(9);
- expect(semi.length).toBe(0);
- //
- [newIds, semi] = updateCheckedInTreeData(
- cur,
- [1, 2, 5, 10, 4, 8, 3, 7, 6],
- [6, 7],
- false
- );
- expect(semi.toString()).toBe("1");
- //
- [newIds, semi] = updateCheckedInTreeData(cur, [2], [5], true);
- expect(newIds.toString()).toBe("10,5");
- //
- [newIds, semi] = updateCheckedInTreeData(cur, [2, 5, 10, 4, 8], 4, false);
- expect(newIds.toString()).toBe("10,5");
- expect(semi.toString()).toBe("1,2");
-});
-
-test("useHeTree", () => {});
-
-function createDataLong() {
- // return example tree data
- return [
- {
- text: "Projects",
- children: [
- {
- text: "Frontend",
- children: [
- {
- text: "Vue",
- children: [
- {
- text: "Nuxt",
- },
- ],
- },
- {
- text: "React",
- children: [
- {
- text: "Next",
- },
- ],
- },
- {
- text: "Angular",
- },
- ],
- },
- {
- text: "Backend",
- },
- ],
- },
- {
- text: "Videos",
- children: [
- {
- text: "Movie",
- children: [
- {
- text: "The Godfather",
- },
- {
- text: "La Dolce Vita",
- },
- {
- text: "In the Mood for Love",
- },
- ],
- },
- {
- text: "AD",
- },
- {
- text: "Shorts",
- },
- ],
- },
- {
- text: "Photos",
- children: [
- {
- text: "Animals",
- },
- {
- text: "Buildings",
- },
- {
- text: "Sky",
- },
- {
- text: "Sea",
- },
- ],
- },
- {
- text: "Music",
- children: [
- {
- text: "My Happy Melodies.",
- },
- {
- text: "Hello Summer.",
- },
- {
- text: "An Overture To Happiness.",
- },
- {
- text: "Sunny Days.",
- },
- {
- text: "Every One Need Adventure.",
- },
- {
- text: "Happy, Chill Radio.",
- },
- {
- text: "I Found My Way.",
- },
- {
- text: "Early, Early Morning.",
- },
- ],
- },
- {
- text: "Games",
- children: [
- {
- text: "swimming",
- },
- {
- text: "cycling",
- },
- {
- text: "tennis",
- },
- {
- text: "boxing",
- },
- ],
- },
- {
- text: "Download",
- },
- ];
-}
-
-export function createData() {
- // same to flatData.test
- // size 9
- /* structure
- 1
- 2
- 5
- 10
- 4
- 8
- 3
- 7
- 6
- */
- return [
- {
- id: 1,
- name: "Root Category",
- children: [
- {
- id: 2,
- name: "Technology",
- children: [
- {
- id: 5,
- name: "Hardware",
- children: [
- {
- id: 10,
- name: "Computer Components",
- children: [],
- },
- ],
- },
- {
- id: 4,
- name: "Programming",
- children: [
- {
- id: 8,
- name: "Python",
- children: [],
- },
- ],
- },
- ],
- },
- {
- id: 3,
- name: "Science",
- children: [
- {
- id: 7,
- name: "Biology",
- children: [],
- },
- {
- id: 6,
- name: "Physics",
- children: [],
- },
- ],
- },
- ],
- },
- ];
-}
diff --git a/src/test/useHeTree_flatData.test.tsx b/src/test/useHeTree_flatData.test.tsx
deleted file mode 100644
index 1848814..0000000
--- a/src/test/useHeTree_flatData.test.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-
-import {
- useHeTree,
-} from "../../lib/HeTree";
-import renderer from "react-test-renderer";
-import { useState } from 'react';
-import { createData } from "./flatData.test";
-
-
-test('render tree', () => {
- const Test = () => {
- const [data, setdata] = useState(createData);
- const { renderTree } = useHeTree({
- data,
- dataType: 'flat',
- onChange: setdata,
- renderNode: ({ id, node, open, checked }) =>
- {node.name}
-
,
- })
- return renderTree()
- }
- const component = renderer.create(
- ,
- )
- let cptJson = toJson(component)
- expect(cptJson).toMatchSnapshot()
-})
-
-export function toJson(component: renderer.ReactTestRenderer) {
- const result = component.toJSON()
- expect(result).toBeDefined()
- expect(result).not.toBeInstanceOf(Array)
- return result as renderer.ReactTestRendererJSON
-}
\ No newline at end of file
diff --git a/src/test/useHeTree_treeData.test.tsx b/src/test/useHeTree_treeData.test.tsx
deleted file mode 100644
index c0bbea7..0000000
--- a/src/test/useHeTree_treeData.test.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-
-import {
- useHeTree,
-} from "../../lib/HeTree";
-import renderer from "react-test-renderer";
-import { useState } from 'react';
-import { createData } from "./treeData.test";
-
-
-test('render tree', () => {
- const Test = () => {
- const [data, setdata] = useState(createData);
- const { renderTree } = useHeTree({
- data,
- dataType: 'tree',
- onChange: setdata,
- renderNode: ({ id, node, open, checked }) =>
- {node.name}
-
,
- })
- return renderTree()
- }
- const component = renderer.create(
- ,
- )
- let cptJson = toJson(component)
- expect(cptJson).toMatchSnapshot()
-})
-
-export function toJson(component: renderer.ReactTestRenderer) {
- const result = component.toJSON()
- expect(result).toBeDefined()
- expect(result).not.toBeInstanceOf(Array)
- return result as renderer.ReactTestRendererJSON
-}
\ No newline at end of file
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
deleted file mode 100644
index 11f02fe..0000000
--- a/src/vite-env.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/tea.yaml b/tea.yaml
deleted file mode 100644
index b4a646f..0000000
--- a/tea.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-# https://tea.xyz/what-is-this-file
----
-version: 1.0.0
-codeOwners:
- - '0x8bc8e039d54CdD22af1c8123D01246A044B7EE42'
-quorum: 1
diff --git a/tsconfig.json b/tsconfig.json
deleted file mode 100644
index a8fbd1f..0000000
--- a/tsconfig.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2020",
- "useDefineForClassFields": true,
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
- "module": "ESNext",
- "skipLibCheck": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "resolveJsonModule": true,
- "isolatedModules": true,
- "noEmit": true,
- "jsx": "react-jsx",
-
- /* Linting */
- "strict": true,
- // "noUnusedLocals": true,
- // "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true,
- // vitest
- "types": ["vitest/globals"],
- // alias
- "paths": {
- "he-tree-react": ["./lib/index.ts"]
- },
- },
- "include": ["src","lib"],
- "references": [{ "path": "./tsconfig.node.json" }]
-}
diff --git a/tsconfig.node.json b/tsconfig.node.json
deleted file mode 100644
index a645f8f..0000000
--- a/tsconfig.node.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "compilerOptions": {
- "composite": true,
- "skipLibCheck": true,
- "module": "ESNext",
- "moduleResolution": "bundler",
- "allowSyntheticDefaultImports": true,
- },
- "include": ["vite.config.ts"]
-}
diff --git a/uno.config.ts b/uno.config.ts
deleted file mode 100644
index 0b83915..0000000
--- a/uno.config.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defineConfig } from "unocss";
-import { presetWind } from "unocss";
-
-export default defineConfig({
- presets: [presetWind()],
- rules: [
- [/^top-([\.\d]+)$/, ([_, num]) => ({ top: `${num}px` })],
- [/^right-([\.\d]+)$/, ([_, num]) => ({ right: `${num}px` })],
- [/^bottom-([\.\d]+)$/, ([_, num]) => ({ bottom: `${num}px` })],
- [/^left-([\.\d]+)$/, ([_, num]) => ({ left: `${num}px` })],
- ],
-});
diff --git a/vite.build.ts b/vite.build.ts
deleted file mode 100644
index 50a3a14..0000000
--- a/vite.build.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { resolve } from "path";
-import { defineConfig, LibraryFormats } from "vite";
-import react from "@vitejs/plugin-react";
-import dts from "vite-plugin-dts";
-export const pkg = require("./package.json");
-
-// ============================ config area ============================
-const entry = resolve("lib/index.ts");
-export const name = "HeTreeReact"; // for umd, iife
-export const banner = `
-/*!
- * ${pkg.name}
- * Author: ${pkg.author}
- * Released under the ${pkg.license} License.
- */`.trim();
-/**
- * globals are externals for iife format
- */
-export const globals = {
- react: "React",
- "react-dom": "ReactDOM",
- "react/jsx-runtime": "jsxRuntime", // Just a typescript definition library. This line is to remove build warning.
-};
-// ============================ config area end
-
-// https://vitejs.dev/config/
-export const isIIFE = detectIIFE();
-export const formats: LibraryFormats[] = !isIIFE ? ["es", "cjs"] : ["iife"];
-export default defineConfig({
- plugins: [
- react(),
- !isIIFE &&
- dts({
- insertTypesEntry: true, // Generate entry of types. Entry path is 'types' in package.json
- }),
- ],
- build: {
- sourcemap: isIIFE,
- emptyOutDir: !isIIFE,
- lib: {
- entry,
- name,
- fileName: "index",
- formats,
- },
- rollupOptions: {
- external: externalFunction,
- output: {
- banner,
- exports: "auto",
- globals,
- },
- },
- },
-});
-
-export const esmExternals = [
- ...Object.keys(pkg["dependencies"] || {}),
- ...Object.keys(pkg["peerDependencies"] || {}),
-];
-export const iifeExternals = [
- ...Object.keys(globals),
- ...Object.keys(pkg["peerDependencies"] || {}),
-];
-
-export function externalFunction(id) {
- id = id.replace(/\\/g, "/");
- const externals = isIIFE ? iifeExternals : esmExternals;
- for (const name of externals) {
- if (id.startsWith(name)) {
- return true;
- }
- }
- return false;
-}
-
-function detectIIFE() {
- let index = process.argv.indexOf("--");
- if (index > -1 && process.argv.indexOf("--iife", index + 1) > -1) {
- return true;
- }
- return false;
-}
diff --git a/vite.config.ts b/vite.config.ts
deleted file mode 100644
index b6f6a6f..0000000
--- a/vite.config.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-///
-
-import { defineConfig } from "vite";
-import UnoCSS from "unocss/vite";
-import react from "@vitejs/plugin-react";
-// @ts-ignore
-import path from "path";
-
-// https://vitejs.dev/config/
-export default defineConfig({
- plugins: [UnoCSS(), react()],
- base: "/v1-demo-windowed",
- server: {
- port: 3000,
- },
- resolve: {
- alias: {
- "he-tree-react": path.resolve("./lib/index.ts"),
- },
- },
- test: {
- globals: true,
- environment: "jsdom",
- coverage: {
- provider: "v8",
- enabled: true,
- },
- },
-});