diff --git a/.changeset/brave-keys-yawn.md b/.changeset/brave-keys-yawn.md deleted file mode 100644 index f70d0b61..00000000 --- a/.changeset/brave-keys-yawn.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@neodrag/vanilla': patch -'@neodrag/svelte': patch -'@neodrag/react': patch -'@neodrag/solid': patch -'@neodrag/core': patch -'@neodrag/vue': patch ---- - -Nothing diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index e2a89996..00000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "mode": "pre", - "tag": "next", - "initialVersions": { - "docs": "0.0.2", - "@neodrag/core": "2.0.0", - "@neodrag/react": "2.0.0", - "demo": "0.0.2", - "@neodrag/solid": "2.0.0", - "@neodrag/svelte": "2.0.0", - "@neodrag/vanilla": "2.0.0", - "@neodrag/vue": "2.0.0" - }, - "changesets": [ - "brave-keys-yawn" - ] -} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f1d9a691..0acb27d3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,33 +3,56 @@ on: push: branches: - main + - '2.0' env: CI: true PNPM_CACHE_FOLDER: .pnpm-store + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} jobs: version: + # TODO: Change this later if repo changes + if: github.repository == 'PuruVJ/neodrag' timeout-minutes: 15 runs-on: ubuntu-latest steps: - - name: checkout code repository - uses: actions/checkout@v2 + - name: Checkout Repo + uses: actions/checkout@v3 with: + # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits fetch-depth: 0 - - name: setup node.js - uses: actions/setup-node@v2 + - name: Setup Node.js + uses: actions/setup-node@v3 with: - node-version: 16 - - name: install pnpm - run: npm i pnpm@latest -g - - name: Setup npmrc - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc - - name: setup pnpm config - run: pnpm config set store-dir $PNPM_CACHE_FOLDER - - name: install dependencies - run: pnpm install --no-frozen-lockfile + node-version: 16.x + + - uses: pnpm/action-setup@v2 + name: Install pnpm + id: pnpm-install + with: + version: 7 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + - name: Build all packages run: pnpm -r compile - - name: create and publish versions + + - name: Create Release Pull Request or Publish to npm uses: changesets/action@v1 with: version: pnpm ci:version @@ -38,3 +61,4 @@ jobs: publish: pnpm ci:release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index 3a773879..2c27709a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules/ dist/ .DS_Store -.env \ No newline at end of file +.env +.pnpm-store/ diff --git a/README.md b/README.md index 0301534a..b67d7b22 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,26 @@ -# neodrag - -[![All Contributors](https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square)](#contributors-) - +

+ +

-Lightweight multi-framework libraries for draggability on the web. +

+Neodrag +

+ +

+One draggable to rule em all +

+ +

Multi-framework libraries for dragging. Choose your framework, the dragging API behavior will stay the same 🔥

+ +

+ + + + + +

+ +

Getting Started

This is a monorepo containing the following packages: @@ -48,4 +65,4 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! diff --git a/config/index.d.ts b/config/index.d.ts new file mode 100644 index 00000000..9e2bba08 --- /dev/null +++ b/config/index.d.ts @@ -0,0 +1,7 @@ +export const coreConfig: ({ + dtsBanner, +}: + | { + dtsBanner?: string; + } + | undefined) => ReturnType; diff --git a/config/index.js b/config/index.js new file mode 100644 index 00000000..fd58ddf0 --- /dev/null +++ b/config/index.js @@ -0,0 +1,28 @@ +import { defineConfig } from 'ttsup'; + +/** + * + * @param {Object} param0 + * @param {string} param0.dtsBanner + * @returns + */ +export const coreConfig = ({ dtsBanner } = { dtsBanner: '' }) => + defineConfig([ + { + entry: ['./src/index.ts'], + format: 'esm', + external: ['vue', 'react', 'solid-js', 'svelte'], + dts: { resolve: true, banner: dtsBanner }, + clean: true, + treeshake: 'smallest', + }, + { + entry: ['./src/index.ts'], + minify: 'terser', + external: ['vue', 'react', 'solid-js', 'svelte'], + format: 'esm', + clean: true, + outDir: 'dist/min', + treeshake: 'smallest', + }, + ]); diff --git a/config/package.json b/config/package.json new file mode 100644 index 00000000..6173545e --- /dev/null +++ b/config/package.json @@ -0,0 +1,12 @@ +{ + "name": "@neodrag/tsup-config", + "version": "1.0.0", + "main": "index.js", + "type": "module", + "exports": { + ".": { + "import": "./index.js", + "types": "./index.d.ts" + } + } +} diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 100644 index 00000000..7138e3f1 --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1,50 @@ +# docs + +## 0.0.3 + +### Patch Changes + +- Updated dependencies [[`bd831dcc`](https://github.com/PuruVJ/neodrag/commit/bd831dcc101d967b78505acd064cdfcde03b62ff), [`3c10f6ae`](https://github.com/PuruVJ/neodrag/commit/3c10f6ae377c3e9fc9fea963ea99204a4649806c), [`9e5c4647`](https://github.com/PuruVJ/neodrag/commit/9e5c46477c7781bc75a57944983434a0c8ceff77), [`da98e910`](https://github.com/PuruVJ/neodrag/commit/da98e910469d63e53e2462e74196bad3b90ea053), [`a1572bce`](https://github.com/PuruVJ/neodrag/commit/a1572bce5186051a5114dd580017a49fc2b3c7fc), [`8dd0d88f`](https://github.com/PuruVJ/neodrag/commit/8dd0d88ff0458c0bd6d20e3649371fdf732c9ebb)]: + - @neodrag/svelte@2.0.0 + +## 0.0.3-next.5 + +### Patch Changes + +- Updated dependencies [[`a1572bc`](https://github.com/PuruVJ/neodrag/commit/a1572bce5186051a5114dd580017a49fc2b3c7fc)]: + - @neodrag/svelte@2.0.0-next.6 + +## 0.0.3-next.4 + +### Patch Changes + +- Updated dependencies [[`9e5c464`](https://github.com/PuruVJ/neodrag/commit/9e5c46477c7781bc75a57944983434a0c8ceff77)]: + - @neodrag/svelte@2.0.0-next.5 + +## 0.0.3-next.3 + +### Patch Changes + +- Updated dependencies []: + - @neodrag/svelte@2.0.0-next.4 + +## 0.0.3-next.2 + +### Patch Changes + +- Updated dependencies [[`0f513db2`](https://github.com/PuruVJ/neodrag/commit/0f513db2c0a88ed03f0472311a03b6ae0e4f9483), [`8dd0d88f`](https://github.com/PuruVJ/neodrag/commit/8dd0d88ff0458c0bd6d20e3649371fdf732c9ebb)]: + - @neodrag/svelte@2.0.0-next.3 + +## 0.0.3-next.1 + +### Patch Changes + +- Updated dependencies [[`820307b`](https://github.com/PuruVJ/neodrag/commit/820307b9e2ed5884b2c4d167ba2f7ae2bad14f87)]: + - @neodrag/svelte@2.0.0-next.2 + +## 0.0.3-next.0 + +### Patch Changes + +- Updated dependencies [[`8d04e73`](https://github.com/PuruVJ/neodrag/commit/8d04e7327c81ad345610bdc87bcf0f8b6a40fa9e)]: + - @neodrag/svelte@2.0.0-next.1 diff --git a/docs/package.json b/docs/package.json index 41542fed..e3ce1533 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,7 +1,7 @@ { "name": "docs", "type": "module", - "version": "0.0.2", + "version": "0.0.3", "private": true, "scripts": { "dev": "astro dev", @@ -20,7 +20,7 @@ "slugify": "^1.6.5", "svelte-body": "^1.3.6", "svelte-copy": "^1.3.0", - "svelte-inview": "^3.0.1", + "svelte-inview": "^3.0.2", "svelte-local-storage-store": "^0.3.2", "throttle-debounce": "^5.0.0" }, @@ -29,29 +29,29 @@ "@astrojs/prefetch": "^0.1.1", "@astrojs/sitemap": "^1.0.0", "@astrojs/svelte": "^1.0.2", - "@iconify/json": "^2.1.159", + "@iconify/json": "^2.2.3", "@types/throttle-debounce": "^5.0.0", - "astro": "^1.8.0", - "astro-compress": "^1.1.24", - "astro-critters": "^1.1.24", + "astro": "^1.9.1", + "astro-compress": "^1.1.25", + "astro-critters": "^1.1.25", "astrojs-service-worker": "^0.0.8", "autoprefixer": "^10.4.13", "hast-util-to-string": "^2.0.0", - "hastscript": "^7.1.0", - "postcss": "^8.4.19", - "postcss-jit-props": "^1.0.8", - "prettier": "^2.8.1", - "prettier-plugin-astro": "^0.7.0", + "hastscript": "^7.2.0", + "postcss": "^8.4.21", + "postcss-jit-props": "^1.0.9", + "prettier": "^2.8.2", + "prettier-plugin-astro": "^0.7.2", "rehype-autolink-headings": "^6.1.1", "remark-custom-container": "^1.2.0", - "rollup": "^3.9.0", + "rollup": "^3.9.1", "sass": "^1.57.1", "svelte": "^3.55.0", "svelte-fast-dimension": "^0.0.3", "svelte-sequential-preprocessor": "^0.0.7", "typescript": "^4.9.4", "unplugin-auto-import": "^0.12.0", - "unplugin-icons": "^0.14.14", - "vite": "^4.0.3" + "unplugin-icons": "^0.15.1", + "vite": "^4.0.4" } } diff --git a/docs/src/components/PawCursor.svelte b/docs/src/components/PawCursor.svelte index 06122c5d..b66755d4 100644 --- a/docs/src/components/PawCursor.svelte +++ b/docs/src/components/PawCursor.svelte @@ -4,8 +4,10 @@ import PawIcon from '~icons/mdi/paw'; import { mounted } from '$stores/mounted.store'; + import type { Theme } from '$stores/user-preferences.store'; let showCustomCursor = false; + let cursorColor: Theme | undefined = 'dark'; let coordsCursor: { x: number; @@ -45,7 +47,7 @@ childList: true, subtree: true, attributes: true, - attributeFilter: ['data-paw-cursor'], + attributeFilter: ['data-paw-cursor', 'data-paw-color'], }); return result; @@ -69,6 +71,11 @@ () => { if (el.dataset.pawCursor === 'true') { showCustomCursor = true; + + if (el.dataset.pawColor) { + cursorColor = el.dataset.pawColor as Theme; + } + initialCursor = getComputedStyle(el).cursor; el.style.cursor = 'none'; } else { @@ -83,6 +90,8 @@ () => { showCustomCursor = false; initialCursor && (el.style.cursor = initialCursor); + + cursorColor = undefined; }, { passive: true } ); @@ -97,6 +106,7 @@ style:top="{coordsCursor?.y ?? 0}px" style:left="{coordsCursor?.x ?? 0}px" style:--opacity={showCustomCursor && coordsCursor ? 1 : 0} + style:--color="var(--app-color-{cursorColor ?? 'dark'})" style:display={$mounted ? 'block' : 'none'} > @@ -104,6 +114,8 @@ diff --git a/docs/src/components/examples/KitchenSinkDemo.svelte b/docs/src/components/examples/KitchenSinkDemo.svelte index cfd6be59..999f3e6c 100644 --- a/docs/src/components/examples/KitchenSinkDemo.svelte +++ b/docs/src/components/examples/KitchenSinkDemo.svelte @@ -69,15 +69,15 @@ DragOptions, 'onDrag' | 'onDragStart' | 'onDragEnd' > = { - onDrag: ({ node }) => { + onDrag: ({ rootNode }) => { isBackdropVisible = true; - node.style.zIndex = '20'; + rootNode.style.zIndex = '20'; }, - onDragEnd: ({ node }) => { + onDragEnd: ({ rootNode }) => { isBackdropVisible = false; setTimeout(() => { - updateZIndex(node); + updateZIndex(rootNode); }, 200); }, }; @@ -180,8 +180,8 @@ data-paw-cursor="true" use:draggable={{ ...dragHandlers, - onDrag: ({ offsetX, offsetY, domRect, node }) => { - dragHandlers.onDrag?.({ offsetX, offsetY, domRect, node }); + onDrag: ({ offsetX, offsetY, rootNode, currentNode }) => { + dragHandlers.onDrag?.({ offsetX, offsetY, rootNode, currentNode }); trackMyPosition = { x: offsetX, y: offsetY }; }, }} @@ -191,11 +191,13 @@
- + I can only be dragged by the handle 👆
@@ -221,12 +223,7 @@ > I can be dragged anywhere - @@ -255,16 +252,16 @@ style:z-index={zIndices[10]} use:draggable={{ bounds: 'parent', - onDrag: ({ node }) => { + onDrag: ({ rootNode }) => { highlightParent = true; - node.style.zIndex = '20'; + rootNode.style.zIndex = '20'; }, - onDragEnd: ({ node }) => { + onDragEnd: ({ rootNode }) => { highlightParent = false; setTimeout(() => { - updateZIndex(node); + updateZIndex(rootNode); }, 200); }, }} @@ -278,15 +275,15 @@ style:z-index={zIndices[11]} use:draggable={{ bounds: 'body', - onDrag: ({ node }) => { + onDrag: ({ rootNode }) => { hightlightBody = true; - node.style.zIndex = '20'; + rootNode.style.zIndex = '20'; }, - onDragEnd: ({ node }) => { + onDragEnd: ({ rootNode }) => { hightlightBody = false; setTimeout(() => { - updateZIndex(node); + updateZIndex(rootNode); }, 200); }, }} @@ -300,15 +297,15 @@ style:z-index={zIndices[12]} use:draggable={{ bounds: coordBounds, - onDrag: ({ node }) => { + onDrag: ({ rootNode }) => { showMarkers = true; - node.style.zIndex = '20'; + rootNode.style.zIndex = '20'; }, - onDragEnd: ({ node }) => { + onDragEnd: ({ rootNode }) => { showMarkers = false; setTimeout(() => { - updateZIndex(node); + updateZIndex(rootNode); }, 200); }, }} @@ -411,6 +408,8 @@ width: var(--size); height: var(--size); + padding: 0.5rem; + background-color: var(--app-color-light); box-shadow: 0px 12.5px 10px rgba(0, 0, 0, 0.035), @@ -453,6 +452,22 @@ text-align: start; } + .box.single-handle .handle { + background: var(--app-color-dark); + color: var(--app-color-light); + + border-radius: 24px; + } + + .box .cancel { + background-color: hsla(var(--app-color-dark-hsl), 0.4); + color: var(--app-color-dark); + + border-radius: 24px; + + cursor: not-allowed; + } + .box.multiple-handles { position: relative; diff --git a/docs/src/components/home/features/bundle-sizes/BundleSizeFeature.svelte b/docs/src/components/home/features/bundle-sizes/BundleSizeFeature.svelte index 6d87b081..a44e2b8b 100644 --- a/docs/src/components/home/features/bundle-sizes/BundleSizeFeature.svelte +++ b/docs/src/components/home/features/bundle-sizes/BundleSizeFeature.svelte @@ -4,10 +4,10 @@ import SIZES from '../../../../data/sizes.json'; const sortedFrameworks = Object.entries(SIZES).sort( - ([, aSize], [, bSize]) => +aSize - +bSize - ) as unknown as [Framework, number][]; + ([, { size: aSize }], [, { size: bSize }]) => +aSize - +bSize + ) as unknown as [Framework, typeof SIZES[keyof typeof SIZES]][]; - const minSize = sortedFrameworks[0][1]; + const minSize = +sortedFrameworks[0][1].size;
@@ -20,10 +20,10 @@

- Ranges from {SIZES.svelte}KB for + Ranges from {SIZES.svelte.size}KB for Svelte to - {SIZES.react}KB for React. + {SIZES.react.size}KB for React.

@@ -36,7 +36,7 @@

- {#each sortedFrameworks.map( ([framework, size]) => [framework, size, FRAMEWORK_ICONS[framework]] ) as [framework, size, Icon]} + {#each sortedFrameworks.map( ([framework, { size }]) => [framework, size, FRAMEWORK_ICONS[framework]] ) as [framework, size, Icon]}
diff --git a/docs/src/components/home/features/multiple-frameworks/FrameworkPolygon.svelte b/docs/src/components/home/features/multiple-frameworks/FrameworkPolygon.svelte index a9e1b8db..efb8003f 100644 --- a/docs/src/components/home/features/multiple-frameworks/FrameworkPolygon.svelte +++ b/docs/src/components/home/features/multiple-frameworks/FrameworkPolygon.svelte @@ -123,6 +123,10 @@ display: grid; place-items: center; + @include media('>tablet') { + padding: 0 6rem; + } + position: relative; } @@ -158,6 +162,7 @@ position: absolute; right: 8px; top: 8px; + z-index: 20; font-size: 1.2rem; diff --git a/docs/src/components/options/Options.astro b/docs/src/components/options/Options.astro index 86d6e846..ff12ae51 100644 --- a/docs/src/components/options/Options.astro +++ b/docs/src/components/options/Options.astro @@ -13,10 +13,13 @@ type OptionsFrontMatter = { const ORDER = [ 'axis', 'bounds', + 'recomputeBounds', 'grid', 'defaultPosition', 'position', 'gpuAcceleration', + 'legacyTranslate', + 'transform', 'applyUserSelectHack', 'ignoreMultitouch', 'disabled', diff --git a/docs/src/content/exported-types.mdx b/docs/src/content/exported-types.mdx index cbfe2ba3..6cb303f6 100644 --- a/docs/src/content/exported-types.mdx +++ b/docs/src/content/exported-types.mdx @@ -23,7 +23,27 @@ This package exports these types you can use: `DragBoundsCoords` is when you're specifying the `bounds` field using an object, this is the type needed for that. +`DragEventData` is the data provided during the [events](#events) + ```ts +export type DragAxis = 'both' | 'x' | 'y' | 'none'; + +export type DragBounds = 'parent' | string | Partial; + +export type DragEventData = { + /** How much element moved from its original position horizontally */ + offsetX: number; + + /** How much element moved from its original position vertically */ + offsetY: number; + + /** The node on which the draggable is applied */ + rootNode: HTMLElement; + + /** The element being dragged */ + currentNode: HTMLElement; +}; + export type DragBoundsCoords = { /** Number of pixels from left of the window */ left: number; diff --git a/docs/src/content/installation.mdx b/docs/src/content/installation.mdx index 2376f444..68220613 100644 --- a/docs/src/content/installation.mdx +++ b/docs/src/content/installation.mdx @@ -3,14 +3,16 @@ import { Code } from 'astro/components'; ## Installation {/* prettier-ignore */} +{/* TODO(2.0): Remove next */} + diff --git a/docs/src/content/options/legacyTranslate/+option.mdx b/docs/src/content/options/legacyTranslate/+option.mdx new file mode 100644 index 00000000..056e14d5 --- /dev/null +++ b/docs/src/content/options/legacyTranslate/+option.mdx @@ -0,0 +1,209 @@ +--- +title: legacyTranslate +type: 'boolean' +defaultValue: 'true' +--- + +import Code from '$components/options/OptionsCode.astro'; +import Example from '$components/options/OptionsExample.astro'; +import Examples from '$components/options/OptionsExamples.svelte'; + +import LegacyTranslateGPUExample from './LegacyTranslateGPU.example.svelte'; +import LegacyTranslateNoGPUExample from './LegacyTranslateNoGPU.example.svelte'; +import TranslateGPUExample from './TranslateGPU.example.svelte'; +import TranslateNoGPUExample from './TranslateNoGPU.example.svelte'; + +export const shortDescription = `Whether to use the new translate property or transform: translate().`; + +

{shortDescription}

+ +At the time of writing, `translate` property has less than 90% browsers availability. +So, for now, this library will use the `transform: translate()` property to move the element. +In future, when `translate` property will be more widely available, this library will switch to it by default. `legacyTranslate`'s default value will become `false` + + + + + + +
+ ```svelte +
+ Legacy translate with GPU acceleration +
+ ``` +
+ +
+ ```vue + + ``` +
+ +
+ ```jsx +
+ Legacy translate with GPU acceleration +
+ ``` +
+ +
+ ```ts + useDraggable(draggableRef, { legacyTranslate: true, gpuAcceleration: true }); + ``` +
+ +
+ ```js + new Draggable(el, { legacyTranslate: true, gpuAcceleration: true }); + ``` +
+ +
+ +
+ + + + + +
+ ```svelte +
+ Modern translate with GPU acceleration +
+ ``` +
+ +
+ ```vue + + ``` +
+ +
+ ```jsx +
+ Modern translate with GPU acceleration +
+ ``` +
+ +
+ ```ts + useDraggable(draggableRef, { legacyTranslate: false, gpuAcceleration: true }); + ``` +
+ +
+ ```js + new Draggable(el, { legacyTranslate: false, gpuAcceleration: true }); + ``` +
+ +
+ +
+ + + + + +
+ ```svelte +
+ Legacy translate with no GPU acceleration +
+ ``` +
+ +
+ ```vue + + ``` +
+ +
+ ```jsx +
+ Legacy translate with no GPU acceleration +
+ ``` +
+ +
+ ```ts + useDraggable(draggableRef, { legacyTranslate: true, gpuAcceleration: false }); + ``` +
+ +
+ ```js + new Draggable(el, { legacyTranslate: true, gpuAcceleration: false }); + ``` +
+ +
+ +
+ + + + + +
+ ```svelte +
+ Modern translate with no GPU acceleration +
+ ``` +
+ +
+ ```vue + + ``` +
+ +
+ ```jsx +
+ Modern translate with no GPU acceleration +
+ ``` +
+ +
+ ```ts + useDraggable(draggableRef, { legacyTranslate: false, gpuAcceleration: false }); + ``` +
+ +
+ ```js + new Draggable(el, { legacyTranslate: false, gpuAcceleration: false }); + ``` +
+ +
+ +
+ +
diff --git a/docs/src/content/options/legacyTranslate/LegacyTranslateGPU.example.svelte b/docs/src/content/options/legacyTranslate/LegacyTranslateGPU.example.svelte new file mode 100644 index 00000000..2a70669a --- /dev/null +++ b/docs/src/content/options/legacyTranslate/LegacyTranslateGPU.example.svelte @@ -0,0 +1,11 @@ + + + + Legacy translate with GPU acceleration + + + transform: translate3d({x}px, {y}px, 0) + + diff --git a/docs/src/content/options/legacyTranslate/LegacyTranslateNoGPU.example.svelte b/docs/src/content/options/legacyTranslate/LegacyTranslateNoGPU.example.svelte new file mode 100644 index 00000000..d63f4797 --- /dev/null +++ b/docs/src/content/options/legacyTranslate/LegacyTranslateNoGPU.example.svelte @@ -0,0 +1,11 @@ + + + + Legacy translate with no GPU acceleration + + + transform: translate({x}px, {y}px) + + diff --git a/docs/src/content/options/legacyTranslate/TranslateGPU.example.svelte b/docs/src/content/options/legacyTranslate/TranslateGPU.example.svelte new file mode 100644 index 00000000..3ce89cb3 --- /dev/null +++ b/docs/src/content/options/legacyTranslate/TranslateGPU.example.svelte @@ -0,0 +1,11 @@ + + + + Modern translate with GPU acceleration + + + translate: {x}px {y}px 1px + + diff --git a/docs/src/content/options/legacyTranslate/TranslateNoGPU.example.svelte b/docs/src/content/options/legacyTranslate/TranslateNoGPU.example.svelte new file mode 100644 index 00000000..cd668634 --- /dev/null +++ b/docs/src/content/options/legacyTranslate/TranslateNoGPU.example.svelte @@ -0,0 +1,11 @@ + + + + Modern translate with no GPU acceleration + + + translate: {x}px {y}px + + diff --git a/docs/src/content/options/recomputeBounds/+option.mdx b/docs/src/content/options/recomputeBounds/+option.mdx new file mode 100644 index 00000000..e7107bfd --- /dev/null +++ b/docs/src/content/options/recomputeBounds/+option.mdx @@ -0,0 +1,16 @@ +--- +title: recomputeBounds +type: '{ dragStart?: boolean; drag?: boolean; dragEnd?: boolean; }' +defaultValue: '{ dragStart: true, drag: false, dragEnd: false }' +--- + +import Code from '$components/options/OptionsCode.astro'; +import Example from '$components/options/OptionsExample.astro'; +import Examples from '$components/options/OptionsExamples.svelte'; + +export const shortDescription = + 'When to recalculate the dimensions of the `bounds` element.'; + +

{shortDescription}

+ +By default, bounds are recomputed only on dragStart. Use this options to change that behavior. diff --git a/docs/src/content/options/transform/+option.mdx b/docs/src/content/options/transform/+option.mdx new file mode 100644 index 00000000..667b46b0 --- /dev/null +++ b/docs/src/content/options/transform/+option.mdx @@ -0,0 +1,157 @@ +--- +title: transform +type: '({ offsetX, offsetY, rootNode }: { offsetX: number; offsetY: number; rootNode: HTMLElement; }) => string | undefined | void' +defaultValue: 'undefined' +--- + +import Code from '$components/options/OptionsCode.astro'; +import Example from '$components/options/OptionsExample.astro'; +import Examples from '$components/options/OptionsExamples.svelte'; + +import ReturnTransformExample from './ReturnTransform.example.svelte'; +import ManualTransformExample from './ManualTransform.example.svelte'; + +export const shortDescription = + "Custom transform function to manually manage the root node's position."; + +Custom transform function. If provided, this function will be used to apply the DOM +transformations to the root node to move it. + +Existing transform logic, including `gpuAcceleration` and `legacyTranslate`, will be ignored. You can return a string +to apply to a `transform` property, or not return anything and apply your transformations using `rootNode.style.transform = VALUE` + + + + + + +
+ ```svelte +
`translate(${offsetX + 50}px, ${offsetY + 20}px)` + }} + > + Moving by returning transform string +
+ ``` +
+ +
+ ```vue + + ``` +
+ +
+ ```jsx +
`translate(${offsetX + 50}px, ${offsetY + 20}px)` + }} + > + Disabled. Won't drag, won't trigger any events +
+ ``` +
+ +
+ ```ts + useDraggable(draggableRef, { + transform: ({ offsetX, offsetY }) => `translate(${offsetX + 50}px, ${offsetY + 20}px)` + }); + ``` +
+ +
+ ```js + new Draggable(el, { + transform: ({ offsetX, offsetY }) => `translate(${offsetX + 50}px, ${offsetY + 20}px)` + }); + ``` +
+ +
+ +
+ + + + + +
+ ```svelte +
{ + rootNode.style.translate = `${offsetX + 50}px ${offsetY + 20}px`; + }, + }} + > + Moving by returning transform string +
+ ``` +
+ +
+ ```vue + + ``` +
+ +
+ ```jsx +
{ + rootNode.style.translate = `${offsetX + 50}px ${offsetY + 20}px`; + }, + }} + > + Disabled. Won't drag, won't trigger any events +
+ ``` +
+ +
+ ```ts + useDraggable(draggableRef, { + transform: ({ offsetX, offsetY, rootNode }) => { + rootNode.style.translate = `${offsetX + 50}px ${offsetY + 20}px`; + }, + }); + ``` +
+ +
+ ```js + new Draggable(el, { + transform: ({ offsetX, offsetY, rootNode }) => { + rootNode.style.translate = `${offsetX + 50}px ${offsetY + 20}px`; + }, + }); + ``` +
+
+ +
+ +
diff --git a/docs/src/content/options/transform/ManualTransform.example.svelte b/docs/src/content/options/transform/ManualTransform.example.svelte new file mode 100644 index 00000000..f3806188 --- /dev/null +++ b/docs/src/content/options/transform/ManualTransform.example.svelte @@ -0,0 +1,13 @@ + + + { + rootNode.style.translate = `${offsetX + 50}px ${offsetY + 20}px`; + }, + }} +> + Moving by manually setting rootNode.style + diff --git a/docs/src/content/options/transform/ReturnTransform.example.svelte b/docs/src/content/options/transform/ReturnTransform.example.svelte new file mode 100644 index 00000000..b54cdd41 --- /dev/null +++ b/docs/src/content/options/transform/ReturnTransform.example.svelte @@ -0,0 +1,13 @@ + + + { + return `translate(${offsetX + 50}px, ${offsetY + 20}px)`; + }, + }} +> + Moving by returning transform string + diff --git a/docs/src/css/globals.scss b/docs/src/css/globals.scss index ab68c99a..3935e0c3 100644 --- a/docs/src/css/globals.scss +++ b/docs/src/css/globals.scss @@ -26,6 +26,7 @@ body { background-color: var(--app-color-shell); scroll-behavior: smooth; + overflow-x: hidden; font-family: var(--app-font-main); } @@ -153,9 +154,12 @@ $frameworks: svelte, react, vue, solid, vanilla; } ::selection { - background-color: var(--secondary-color, var(--app-color-primary)); - color: var(--app-color-primary-contrast); - -webkit-text-fill-color: var(--app-color-primary-contrast); + background-color: hsla( + var(--secondary-color-hsl, var(--app-color-primary-hsl)), + 0.3 + ); + // color: var(--app-color-primary-contrast); + // -webkit-text-fill-color: var(--app-color-primary-contrast); } p { diff --git a/docs/src/css/themes.scss b/docs/src/css/themes.scss index a09690cd..e7029467 100644 --- a/docs/src/css/themes.scss +++ b/docs/src/css/themes.scss @@ -27,8 +27,8 @@ body.light { --app-color-shell: hsl(200, 8%, 100%); --app-color-shell-contrast: hsl(0, 0%, 10%); - --app-color-brand-svelte: hsl(15, 100%, 50%); - --app-color-brand-svelte-hsl: 15, 100%, 50%; + --app-color-brand-svelte: hsl(15, 100%, 45%); + --app-color-brand-svelte-hsl: 15, 100%, 45%; --app-color-brand-svelte-body-gradient: radial-gradient( ellipse farthest-corner at 95% 2%, hsla(var(--app-color-brand-svelte-hsl), 0.2) 0%, @@ -97,8 +97,8 @@ body.dark { --app-color-shell: #101213; --app-color-shell-contrast: var(--gray-1); - --app-color-brand-svelte: hsl(14, 100%, 55%); - --app-color-brand-svelte-hsl: 14, 100%, 55%; + --app-color-brand-svelte: hsl(14, 100%, 59%); + --app-color-brand-svelte-hsl: 14, 100%, 59%; --app-color-brand-svelte-body-gradient: radial-gradient( ellipse farthest-corner at 95% 2%, hsla(var(--app-color-brand-svelte-hsl), 0.2) 0%, diff --git a/docs/src/data/sizes.json b/docs/src/data/sizes.json index 47df5675..e98cc4c7 100644 --- a/docs/src/data/sizes.json +++ b/docs/src/data/sizes.json @@ -1,7 +1,22 @@ { - "react": "2.14", - "solid": "1.96", - "svelte": "1.89", - "vue": "1.96", - "vanilla": "1.98" + "react": { + "size": "1.95", + "version": "2.0.0-next.6" + }, + "solid": { + "size": "1.75", + "version": "2.0.0-next.6" + }, + "svelte": { + "size": "1.68", + "version": "2.0.0-next.6" + }, + "vue": { + "size": "1.77", + "version": "2.0.0-next.6" + }, + "vanilla": { + "size": "1.79", + "version": "2.0.0-next.6" + } } \ No newline at end of file diff --git a/docs/src/layouts/Layout.astro b/docs/src/layouts/Layout.astro index fb59307c..f20d4328 100644 --- a/docs/src/layouts/Layout.astro +++ b/docs/src/layouts/Layout.astro @@ -1,6 +1,9 @@ --- import PawCursor from '$components/PawCursor.svelte'; -import '@fontsource/jetbrains-mono/variable.css'; + +import '@fontsource/jetbrains-mono/400.css'; +import '@fontsource/jetbrains-mono/500.css'; +import '@fontsource/jetbrains-mono/600.css'; import '@fontsource/plus-jakarta-sans/400.css'; import '@fontsource/plus-jakarta-sans/500.css'; @@ -39,7 +42,7 @@ const bodyClass = - + - -
- Axis: - - - - -
- - -
Text
-``` - -## bounds - -**type**: `HTMLElement | 'parent' | string | { top?: number; right?: number; bottom?: number; left?: number }` - -**Default Value**: `undefined` - -Optionally limit the drag area - -`parent`: Limit to parent - -Or, you can specify any selector and it will be bound to that. - -**Note**: This library doesn't check whether the selector is bigger than the node element. -You yourself will have to make sure of that, or it may lead to unexpected behavior. - -Or, finally, you can pass an object of type `{ top: number; right: number; bottom: number; left: number }`. -These mimic the css `top`, `right`, `bottom` and `left`, in the sense that `bottom` starts from the bottom of the window, and `right` from right of window. -If any of these properties are unspecified, they are assumed to be `0`. - -**Examples**: - -Bound to any element - -```svelte -
Hello
-``` - -Bound to parent - -```svelte -
Hello
-``` - -Bound to body - -```svelte -
Hello
-``` - -Bound to an ancestor selector somewhere in page - -```svelte -
Hello
-``` - -Manually through coordinates. Empty object means bound to the `window`. - -**NOTE**: It isn't strictly empty object. If you omit any property from this object, it will be assumed as `0`. - -```svelte -
Hello
-``` - -Bound only to top and bottom, and unbounded horizontally in practice by setting bounds way beyond the screen. - -```svelte -
Hello
-``` - -## gpuAcceleration - -**type**: `boolean` - -**Default value**: `true` - -If true, uses `translate3d` instead of `translate` to move the element around, and the hardware acceleration kicks in. - -`true` by default, but can be set to `false` if [blurry text issue](https://developpaper.com/question/why-does-the-use-of-css3-translate3d-result-in-blurred-display/) occurs. - -Example 👇 - -```svelte -
Hello
-``` - -## applyUserSelectHack - -**type**: `boolean` - -**Default value**: `true` - -Applies `user-select: none` on `` element when dragging, to prevent the irritating effect where dragging doesn't happen and the text is selected. Applied when dragging starts and removed when it stops. - -## ignoreMultitouch - -**type**: `boolean` - -**Default value**: `false` - -Ignores touch events with more than 1 touch. -This helps when you have multiple elements on a canvas where you want to implement pinch-to-zoom behaviour. - -```svelte - -
Text
-``` - -## disabled - -**type**: `boolean` - -**Default Value**: `undefined` - -Disables dragging. - -## grid - -**type**: `[number, number]` - -**Default value**: `undefined` - -Applies a grid on the page to which the element snaps to when dragging, rather than the default continuous grid. - -`Note`: If you're programmatically creating the grid, do not set it to [0, 0] ever, that will stop drag at all. Set it to `undefined` to make it continuous once again. - -## position - -**type**: `{ x: number; y: number }` - -**Default Value**: `undefined` - -Controls the position of the element programmatically. Fully reactive. - -Read more below in the **Controlled vs Uncontrolled** section. - -## cancel - -**type**: `string | HTMLElement | HTMLElement[]` - -**Default value**: `undefined` - -CSS Selector of an element or multiple elements inside the parent node(on which `use:draggable` is applied). Can be an element or elements too. If it is provided, Trying to drag inside the `cancel` element(s) will prevent dragging. - -Selector: - -```svelte -
- This will drag! -
You shall not drag!!🧙‍♂️
-
-``` - -Multiple elements with selector: - -```svelte -
- This will drag! -
You shall not drag!!🧙‍♂️
-
You shall not drag too!!🧙‍♂️
-
-``` - -Element: - -```svelte -
- This will drag! -
You shall not drag!!🧙‍♂️
-
-``` - -Elements: - -```svelte - - -
- This will drag! -
You shall not drag!!🧙‍♂️
-
You shall not drag too!!🧙‍♂️
-
-``` - -## handle - -**type**: `string | HTMLElement | HTMLElement[]` - -**Default Value**: `undefined` - -CSS Selector of an element or multiple elements inside the parent node(on which `use:draggable` is applied). Can be an element or elements too. If it is provided, Only clicking and dragging on this element will allow the parent to drag, anywhere else on the parent won't work. - -```svelte -
-You shall not drag!!🧙‍♂️ -
This will drag 😁
-
-``` - -Multiple handles with selector: - -```svelte -
- You shall not drag!!🧙‍♂️ -
This will allow drag 😁
-
This will allow drag too 😁
-
This will allow drag three 😁
-
-``` - -Handle with element: - -```svelte -
- You shall not drag!!🧙‍♂️ -
This will drag 😁
-
-``` - -Multiple handles with elements - -```svelte - - -
- You shall not drag!!🧙‍♂️ -
This will allow drag 😁
-
This will allow drag too 😁
-
This will allow drag three 😁
-
-``` - -## defaultClass - -**type**: `string` - -**Default Value**: `'neodrag'` - -Class to apply on the element on which `use:draggable` is applied.

Note that if `handle` is provided, it will still apply class on the parent element, **NOT** the handle - -## defaultClassDragging - -**type**: `string` - -**Default Value**: `'neodrag-dragging'` - -Class to apply on the parent element when it is dragging - -## defaultClassDragged - -**type**: `string` - -**Default Value**: `'neodrag-dragged'` - -Class to apply on the parent element if it has been dragged at least once. - -## defaultPosition - -**type**: `{ x: number; y: number }` - -**Default Value**: `{ x: 0, y: 0 }` - -Offsets your element to the position you specify in the very beginning. `x` and `y` should be in pixels - -## onDragStart - -**type**: `(data: { offsetX: number; offsetY: number; domRect: DOMRect }) => void` - -**Default Value**: `undefined` - -Fires when dragging start. - -## onDrag - -**type**: `(data: { offsetX: number; offsetY: number; domRect: DOMRect }) => void` - -**Default Value**: `undefined` - -Fires when dragging is going on. - -## onDragEnd - -**type**: `(data: { offsetX: number; offsetY: number; domRect: DOMRect }) => void` - -**Default Value**: `undefined` - -Fires when dragging ends. - -# Events - -`@neodrag/svelte` emits 3 events, `on:neodrag`, `on:neodrag:start` & `on:neodrag:end`. These are all custom events, and can be listened on the node the `use:draggable` is applied to - -Example: - -```svelte -
console.log('Dragging started', e)} - on:neodrag={(e) => console.log(e.detail)} - on:neodrag:end={(e) => console.log('Dragging stopped', e)} -> - Hello -
-``` - -Event signatures: - -`on:neodrag:start`: `(e: CustomEvent<{ offsetX: number; offsetY: number; domRect: DOMRect }>) => void`. Provides the initial offset when dragging starts, on the `e.detail` object. - -`on:neodrag:`: `(e: CustomEvent<{ offsetX: number; offsetY: number; domRect: DOMRect }>`. Provides how far the element has been dragged from it's original position in `x` and `y` coordinates on the `event.detail` object - -`on:neodrag:end`: `(e: CustomEvent<{ offsetX: number; offsetY: number; domRect: DOMRect }>) => void`. No internal state provided to `event.detail`. Provides the final offset when dragging ends, on the `e.detail` object. - -### Alternative - -If you scroll up, you'll see 3 options, `onDragStart`, `onDrag` and `onDragEnd`. These are basically event handlers that you specify as methods of the options object. - -Why have two ways to listen to events? Because at the time of writing, the Svelte extension for VSCode doesn't work fully well with custom events when using TypeScript, even after they're explicitly typed by the user in TypeScript. - -I take TypeScript very seriously, hence I am going an extra step to provide duplicate implementations for event handling. - -How to use events-as-options? The syntax is similar to the custom events one 👇 - -```svelte -
{ - // Do something - }, - onDrag: ({ offsetX, offsetY, domRect }) => { - // Do something - }, - onDragEnd: ({ offsetX, offsetY, domRect }) => { - // Do something - }, - - }} - class="box" -/> -``` - -Ultimately, this gives everyone a choice. non-TypeScript users will prefer the `on:neodrag:*` method because it is more idiomatic, and TypeScript users can go with events-as-options way to get better TS experience - -> Note: Do not use same event in two different ways. I.E., having `on:neodrag:start` and `onDragStart` at once will have both fire at the time when dragging starts. Use only one at a time. - -If you're a TypeScript user, read on below 👇 - -# TypeScript - -This library ships with proper TypeScript typings, for the best Developer Experience, whether authoring JS or TS. - -## Events - -To get proper TypeScript typing for the events, add this line to your root `globals.d.ts` file: - -```ts -/// -``` - -Or, add to `tsconfig.json`: - -```json -{ - "compilerOptions": { - "types": ["@neodrag/svelte/globals"] - } -} -``` - -## Types Exported from package - -This package exports these types you can use: - -```ts -import type { DragAxis, DragBounds, DragBoundsCoords, DragOptions } from '@neodrag/svelte'; -``` - -`DragOptions` is the documented list of all options provided by the component. - -`DragAxis` is the type of `axis` option, and is equal to `'both' | 'x' | 'y' | 'none'`. - -`DragBounds` is `'parent' | string | Partial`, the complete type of `bounds` option. - -`DragBoundsCoords` is when you're specifying the `bounds` field using an object, this is the type needed for that. - -```ts -export type DragBoundsCoords = { - /** Number of pixels from left of the window */ - left: number; - - /** Number of pixels from top of the window */ - top: number; - - /** Number of pixels from the right side of window */ - right: number; - - /** Number of pixels from the bottom of the window */ - bottom: number; -}; -``` - -# Controlled vs Uncontrolled - -This is taken straight from React's philosophy(After all, this package is inspired from [react-draggable](https://github.com/react-grid-layout/react-draggable)). - -Uncontrolled means your app doesn't control the dragging of the app. Meaning, the user drags the element, it changes position, and you do something with that action. You yourself don't change position of the element or anything. This is the default behavior of this library. - -Controlled means your app, using state variables, changes the position of the element, or in simple terms, programmatically drag the element. You basically set the `position` property to `{ x: 10, y: 50 }`(or any other numbers), and voila! yur now controlling the position of the element programmatically 🥳🥳 - -OFC, this library doesn't go fully **Controlled**. The user can still drag it around even when `position` is set. - -So, when you change `position`, the element position changes. However, when the element is dragged by user interaction, `position` is not changed. This is done intentionally, as two-way data binding here isn't possible and also will lead to unexpected behavior. To keep the `position` variable up to date, use the `on:neodrag` event to keep your state up to date to the draggable's internal state. - -To have it be strictly **Controlled**, meaning it can only be moved programmatically, add the `disabled` option to your draggable element's config - -```svelte -
-``` - -Here are a bunch of examples showing controlled behavior 👇 - -1. [Changing with inputs](https://svelte.dev/repl/e1e707358b37467ba272891715878a1d?version=3.44.1) -2. [Changing with Sliders](https://svelte.dev/repl/6b437a1cdbfc4c748520a72330c6395b?version=3.44.1) -3. [Draggable only through external state, not user input](https://svelte.dev/repl/0eae169f272e41ba9c07ef222ed2bf66?version=3.44.1) -4. [Comes back to original position after drag end](https://svelte.dev/repl/83d3aa8c5e154b7baf1a9c417c217d2e?version=3.44.1) -5. [Comes back to original position with transition](https://svelte.dev/repl/bc84ed4ca22f45acbc28de3e33199883?version=3.44.1) - -# Why an action and not a component? - -In case you're wondering why this library is an action, and not a component, the answer is simple: Actions usage is much much simpler and elegant than a component for this case could ever be. - -If it were a component, its syntax would be like this 👇 - -```svelte - -
- Hello -
-
-``` - -This is ok, but what if there are more than 2 elements at the top. - -```svelte - -
- Hello -
- -
- You shall not pass ~ Gandalf the wizard -
-
-``` - -This poses a problem: How would I decide which of these to make a draggable? Ofc, I could wrap the `` in a `
`, apply event listeners on it, set it to `display: contents`, but it would add an extra DOM element, and sometimes, that alone can make a huge difference! - -So to not add a wrapper myself, I would need to write here in docs to pass only one root element, and give an error when I detect multiple. or I'd need to enforce passing the ref of the element into the component using `bind:this`, like this 👇 - -```svelte - - - -
- Hello -
-
-``` - -You'd have to bind the element ref which you want to make a draggable, and pass it to the component. - -This is doable, but it adds an unnecessary amount of API layer, and the code isn't idiomatic and elegant, not to mention how much extra code I would have to add as the library author. - -Not to mention, it would require much more work to make it SSR compliant, which makes no sense, cuz the server isn't dragging elements around, so why need to SSR it in the first place ¯\\\_(ツ)\_/¯. I would have to add `browser` checks everywhere to make it work, which is less than ideal. - -On the other hand, as an action, this gives ultimate control to both the user and me. - -```svelte -
- Hello -
-``` - -This is extremely simple, elegant and expressive. By applying the action, you are specifying which element you want to be draggable, without any extra overhead. It just works!! And Actions aren't run in SSR, so your app will server render without errors caused from this library, and will spare me the gruelling task of adding browser checks everywhere!! It's a win win for everyone!! 🙂 - -# Contributing - -Feel free to open an issue with a bug or feature request. - -If you wish to make a PR fixing something, please open an issue about it first! - -## Help needed 🛑 - -This library lacks something very important: **Automated Tests!** - -I'll be straight about this: I don't know how to write tests. I've tried, but not been able to. +Read the docs -So I need your help. If you wish to contribute and can add tests here, it would be great for everyone using this! 🙂 +## Credits -Specifications here: [#7](https://github.com/PuruVJ/neodrag/issues/7) +Inspired from the amazing [react-draggable](https://github.com/react-grid-layout/react-draggable) library, and implements a similar API, but 3x smaller. # License diff --git a/packages/svelte/demo/package.json b/packages/svelte/demo/package.json index 323c9f55..8fd6a245 100644 --- a/packages/svelte/demo/package.json +++ b/packages/svelte/demo/package.json @@ -8,11 +8,11 @@ "preview": "vite preview" }, "devDependencies": { - "@sveltejs/kit": "1.0.1", + "@sveltejs/kit": "1.0.7", "svelte": "^3.55.0", "svelte-preprocess": "^5.0.0", "typescript": "^4.9.4", - "vite": "^4.0.3" + "vite": "^4.0.4" }, "dependencies": { "@neodrag/svelte": "workspace:*" diff --git a/packages/svelte/demo/src/routes/2/+page.svelte b/packages/svelte/demo/src/routes/2/+page.svelte new file mode 100644 index 00000000..d9840be9 --- /dev/null +++ b/packages/svelte/demo/src/routes/2/+page.svelte @@ -0,0 +1,19 @@ + + +
{ + rootNode.style.translate = `${offsetX}px ${offsetY}px 0`; + }, + }} +> + Hello + +
+ +
Handle 1
+
Handle 2
+
diff --git a/packages/svelte/package.json b/packages/svelte/package.json index dd30ead2..0631d278 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@neodrag/svelte", - "version": "2.0.0-next.0", + "version": "2.0.0", "description": "Svelte Action to add dragging to your apps 😉", "main": "./dist/index.js", "module": "./dist/index.js", @@ -12,8 +12,12 @@ "sideEffects": false, "exports": { ".": { - "import": "./dist/index.js", - "module": "./dist/index.js" + "types": "./dist/index.d.ts", + "import": { + "production": "./dist/min/index.js", + "development": "./dist/index.js" + }, + "default": "./dist/min/index.js" }, "./package.json": "./package.json" }, @@ -46,7 +50,8 @@ "url": "https://github.com/PuruVJ/neodrag/issues" }, "devDependencies": { - "@neodrag/core": "workspace:*" + "@neodrag/core": "workspace:*", + "@neodrag/tsup-config": "workspace:*" }, - "homepage": "https://github.com/PuruVJ/neodrag/tree/main/packages/svelte#readme" + "homepage": "https://neodrag.dev/docs/svelte" } diff --git a/packages/svelte/tsup.config.ts b/packages/svelte/tsup.config.ts index 798a4832..4950a180 100644 --- a/packages/svelte/tsup.config.ts +++ b/packages/svelte/tsup.config.ts @@ -1,10 +1,3 @@ -import { defineConfig } from 'ttsup'; +import { coreConfig } from '@neodrag/tsup-config'; -export default defineConfig({ - entry: ['./src/index.ts'], - minify: 'terser', - format: 'esm', - dts: { resolve: true }, - clean: true, - sourcemap: true, -}); +export default coreConfig({}); diff --git a/packages/vanilla/CHANGELOG.md b/packages/vanilla/CHANGELOG.md index 7b90a1fd..25e1424b 100644 --- a/packages/vanilla/CHANGELOG.md +++ b/packages/vanilla/CHANGELOG.md @@ -1,20 +1,22 @@ # @neodrag/vanilla -## 2.0.0-next.0 +## 2.0.0 -### Major Changes +### Patch Changes -- [#60](https://github.com/PuruVJ/neodrag/pull/60) [`f2d1130`](https://github.com/PuruVJ/neodrag/commit/f2d113052954b055fda7516919e4113bbde849d4) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Event data provides the root node +- [#95](https://github.com/PuruVJ/neodrag/pull/95) [`3c10f6ae`](https://github.com/PuruVJ/neodrag/commit/3c10f6ae377c3e9fc9fea963ea99204a4649806c) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Add `legacyTranslate` option, remove memoization code, align to browser's RAF throttling - ```js - { - onDrag: ({ node }) => { - console.log(node); - }; - } - ``` +- [#97](https://github.com/PuruVJ/neodrag/pull/97) [`9e5c4647`](https://github.com/PuruVJ/neodrag/commit/9e5c46477c7781bc75a57944983434a0c8ceff77) Thanks [@PuruVJ](https://github.com/PuruVJ)! - New output formats -### Patch Changes +- [`da98e910`](https://github.com/PuruVJ/neodrag/commit/da98e910469d63e53e2462e74196bad3b90ea053) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Expose rootNode and currentNode from events. Remove node and domRect + +- [#99](https://github.com/PuruVJ/neodrag/pull/99) [`a1572bce`](https://github.com/PuruVJ/neodrag/commit/a1572bce5186051a5114dd580017a49fc2b3c7fc) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Add transform function + +- [`8dd0d88f`](https://github.com/PuruVJ/neodrag/commit/8dd0d88ff0458c0bd6d20e3649371fdf732c9ebb) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Add recomputeBounds option + +- [`ca8cde25`](https://github.com/PuruVJ/neodrag/commit/ca8cde252e555cc50a0919a295d01ec340207f8e) Thanks [@PuruVJ](https://github.com/PuruVJ)! Expose rootNode and currentNode from events. Remove node and domRect + +- [`2ea2bad4`](https://github.com/PuruVJ/neodrag/commit/2ea2bad4f16e798fb0ecb55f8554efcd2e50ca26) Thanks [@PuruVJ](https://github.com/PuruVJ)! Fix ouble click issue - Fix behavior when snap provided as 0 diff --git a/packages/vanilla/README.md b/packages/vanilla/README.md index 2b1f68ea..2e16b9e4 100644 --- a/packages/vanilla/README.md +++ b/packages/vanilla/README.md @@ -1,19 +1,31 @@ -# @neodrag/vanilla +

+ +

-A lightweight vanilla JS(plain JS) library to make your elements draggable. +

+@neodrag/vanilla +

-Inspired from the amazing [react-draggable](https://github.com/react-grid-layout/react-draggable) library, and implements a similar API, but 3x smaller. +

+One draggable to rule em all +

+ +

A lightweight vanillaJS library to make your elements draggable.

+ +

+ +

+ +

Getting Started

# Features -- 🤏 Tiny - Only 2.02KB min+brotli. +- 🤏 Tiny - Only 1.79KB min+brotli. - 🐇 Simple - Quite simple to use, and effectively no-config required! - 🧙‍♀️ Elegant - Single class, very easy to use. - 🗃️ Highly customizable - Offers tons of options that you can modify to get different behavior. - ⚛️ Reactive - Change options passed to it on the fly, it will **just work 🙂** - - # Installing ```bash @@ -50,7 +62,7 @@ const dragInstance = new Draggable(document.querySelector('#drag'), { Defining options elsewhere with typescript ```tsx -import { Draggable } from '@neodrag/vanilla'; +import { type Draggable } from '@neodrag/vanilla'; const options: DragOptions = { axis: 'y', @@ -81,447 +93,11 @@ dragInstance.options = { }; ``` -# Options - -There are tons of options available for this package. All of them are already documented within the code itself, so you'll never have to leave the code editor. - -## axis - -**type**: `'both' | 'x' | 'y' | 'none'` - -**Default Value**: `'both'` - -Axis on which the element can be dragged on. Valid values: `both`, `x`, `y`, `none`. - -- `both` - Element can move in any direction -- `x` - Only horizontal movement possible -- `y` - Only vertical movement possible -- `none` - No movement at all - -**Examples**: - -```tsx -// Drag only in x direction -new Draggable(el, { axis: 'x' }); -``` - -## bounds - -**type**: `HTMLElement | 'parent' | string | { top?: number; right?: number; bottom?: number; left?: number }` - -**Default Value**: `undefined` - -Optionally limit the drag area - -`parent`: Limit to parent - -Or, you can specify any selector and it will be bound to that. - -**Note**: This library doesn't check whether the selector is bigger than the node element. -You yourself will have to make sure of that, or it may lead to unexpected behavior. - -Or, finally, you can pass an object of type `{ top: number; right: number; bottom: number; left: number }`. -These mimic the css `top`, `right`, `bottom` and `left`, in the sense that `bottom` starts from the bottom of the window, and `right` from right of window. -If any of these properties are unspecified, they are assumed to be `0`. - -**Examples**: - -Bound to any element - -```ts -new Draggable(el, { bounds: document.querySelector('.some-element') }); -``` - -Bound to parent - -```ts -new Draggable(el, { bounds: 'parent' }); -``` - -Bound to body - -```ts -new Draggable(el, { bounds: 'body' }); -``` - -Bound to an ancestor selector somewhere in page - -```tsx -new Draggable(el, { bounds: '.way-up-in-the-dom' }); -``` - -Manually through coordinates. Empty object means bound to the `window`. - -**NOTE**: It isn't strictly empty object. If you omit any property from this object, it will be assumed as `0`. - -```ts -new Draggable(el, { bounds: {} }); -``` - -Bound only to top and bottom, and unbounded horizontally in practice by setting bounds way beyond the screen. - -```ts -new Draggable(el, { bounds: { top: 0, bottom: 0, left: -1000, right: -1000 } }); -``` - -## gpuAcceleration - -**type**: `boolean` - -**Default value**: `true` - -If true, uses `translate3d` instead of `translate` to move the element around, and the hardware acceleration kicks in. - -`true` by default, but can be set to `false` if [blurry text issue](https://developpaper.com/question/why-does-the-use-of-css3-translate3d-result-in-blurred-display/) occurs. - -Example 👇 - -```ts -new Draggable(el, { gpuAcceleration: false }); -``` - -## applyUserSelectHack - -**type**: `boolean` - -**Default value**: `true` - -Applies `user-select: none` on `` element when dragging, to prevent the irritating effect where dragging doesn't happen and the text is selected. Applied when dragging starts and removed when it stops. - -```tsx -new Draggable(el, { applyUserSelectHack: false }); -``` - -## ignoreMultitouch - -**type**: `boolean` - -**Default value**: `false` - -Ignores touch events with more than 1 touch. -This helps when you have multiple elements on a canvas where you want to implement pinch-to-zoom behaviour. - -```ts -new Draggable(el, { ignoreMultitouch: true }); -``` - -## disabled - -**type**: `boolean` - -**Default Value**: `undefined` - -Disables dragging. - -## grid - -**type**: `[number, number]` - -**Default value**: `undefined` - -Applies a grid on the page to which the element snaps to when dragging, rather than the default continuous grid. - -`Note`: If you're programmatically creating the grid, do not set it to [0, 0] ever, that will stop drag at all. Set it to `undefined` to make it continuous once again. - -## position - -**type**: `{ x: number; y: number }` - -**Default Value**: `undefined` - -Controls the position of the element programmatically. Fully reactive. - -Read more below in the **Controlled vs Uncontrolled** section. - -## cancel - -**type**: `string | HTMLElement | HTMLElement[]` - -**Default value**: `undefined` - -CSS Selector of an element or multiple elements inside the parent node(on which `Draggable` is applied). Can be an element or elements too. If it is provided, Trying to drag inside the `cancel` element(s) will prevent dragging. - -Selector(Selects multiple too using `el.querySelectorAll`): - -```ts -new Draggable(el, { cancel: '.cancel' }); -``` - -Element: - -```ts -new Draggable(el, { cancel: [el.querySelector('.cancel')] }); -``` - -for this element structure: - -```html -
- I can be dragged -
I won't allow dragging
-
-``` - -Multiple Elements: - -```ts -new Draggable(el, { - cancel: [el.querySelector('.cancel1'), el.querySelector('.cancel2')], -}); -``` - -With html structure - -```html -
- This will drag! -
Cancel me out
-
Cancel me out pt 2
-
-``` - -## handle - -**type**: `string | HTMLElement | HTMLElement[]` - -**Default Value**: `undefined` - -CSS Selector of an element or multiple elements inside the parent node(on which `Draggable` is applied). Can be an element or elements too. If it is provided, Only clicking and dragging on this element will allow the parent to drag, anywhere else on the parent won't work. - -Element: - -```ts -new Draggable(el, { handle: '.handle' }); -``` - -HTML structure: - -```html -
- You shall not drag!!🧙‍♂️ -
This will drag 😁
-
-``` - -Multiple handles with selector: - -```ts -new Draggable(el, { handle: '.handle' }); -``` - -```html -
- You shall not drag!!🧙‍♂️ -
This will allow drag 😁
-
This will allow drag too 😁
-
This will allow drag three 😁
-
-``` - -Handle with element: - -```ts -new Draggable(el, { cancel: [el.querySelector('.cancel')] }); -``` - -```html -
- You shall not drag!!🧙‍♂️ -
This will drag 😁
-
-``` - -Multiple handles with elements - -```ts -const handle1 = document.querySelector('.handle1'); -const handle2 = document.querySelector('.handle2'); -const handle3 = document.querySelector('.handle3'); - -new Draggable(el, { handle: [handle1, handle2, handle3] }); -``` - -```html -
- You shall not drag!!🧙‍♂️ -
This will allow drag 😁
-
This will allow drag too 😁
-
This will allow drag three 😁
-
-``` - -## defaultClass - -**type**: `string` - -**Default Value**: `'neodrag'` - -Class to apply on the element on which `new Draggable` is applied.

Note that if `handle` is provided, it will still apply class on the parent element, **NOT** the handle - -## defaultClassDragging - -**type**: `string` - -**Default Value**: `'neodrag-dragging'` - -Class to apply on the parent element when it is dragging - -## defaultClassDragged - -**type**: `string` - -**Default Value**: `'neodrag-dragged'` - -Class to apply on the parent element if it has been dragged at least once. - -## defaultPosition - -**type**: `{ x: number; y: number }` - -**Default Value**: `{ x: 0, y: 0 }` - -Offsets your element to the position you specify in the very beginning. `x` and `y` should be in pixels - -## onDragStart - -**type**: `(data: DragEventData) => void` - -**Default Value**: `undefined` - -Fires when dragging start. - -**Note**: - -```ts -type DragEventData = { offsetX: number; offsetY: number; domRect: DOMRect }; -``` - -## onDrag - -**type**: `(data: DragEventData) => void` - -**Default Value**: `undefined` - -Fires when dragging is going on. - -**Note**: - -```ts -type DragEventData = { offsetX: number; offsetY: number; domRect: DOMRect }; -``` - -## onDragEnd - -**type**: `(data: DragEventData) => void` - -**Default Value**: `undefined` - -Fires when dragging ends. - -**Note**: - -```ts -type DragEventData = { offsetX: number; offsetY: number; domRect: DOMRect }; -``` - -# Events - -`@neodrag/vanilla` emits 3 events, `onDrag`, `onDragStart` & `onDragEnd`. -Example: - -```tsx -new Draggable({ - onDragStart: (data) => console.log('Dragging started', data), - onDrag: (data) => console.log('Dragging', data), - onDragEnd: (data) => console.log('Dragging stopped', data), -}); -``` - -# TypeScript - -This library ships with proper TypeScript typings, for the best Developer Experience, whether authoring JS or TS. - -## Types Exported from package - -This package exports these types you can use: - -```ts -import type { - DragAxis, - DragBounds, - DragBoundsCoords, - DragOptions, - DragEventData, -} from '@neodrag/solid'; -``` - -`DragOptions` is the documented list of all options provided by the component. - -`DragAxis` is the type of `axis` option, and is equal to `'both' | 'x' | 'y' | 'none'`. - -`DragBounds` is `'parent' | string | Partial`, the complete type of `bounds` option. - -`DragBoundsCoords` is when you're specifying the `bounds` field using an object, this is the type needed for that. - -```ts -export type DragBoundsCoords = { - /** Number of pixels from left of the window */ - left: number; - - /** Number of pixels from top of the window */ - top: number; - - /** Number of pixels from the right side of window */ - right: number; - - /** Number of pixels from the bottom of the window */ - bottom: number; -}; -``` - -```ts -type DragEventData = { - offsetX: number; - offsetY: number; - domRect: DOMRect; -}; -``` - -# Controlled vs Uncontrolled - -This is taken straight from React's philosophy(After all, this package is inspired from [react-draggable](https://github.com/react-grid-layout/react-draggable)). - -Uncontrolled means your app doesn't control the dragging of the app. Meaning, the user drags the element, it changes position, and you do something with that action. You yourself don't change position of the element or anything. This is the default behavior of this library. - -Controlled means your app, using state variables, changes the position of the element, or in simple terms, programmatically drag the element. You basically set the `position` property to `{ x: 10, y: 50 }`(or any other numbers), and voila! yur now controlling the position of the element programmatically 🥳🥳 - -OFC, this library doesn't go fully **Controlled**. The user can still drag it around even when `position` is set. - -So, when you change `position`, the element position changes. However, when the element is dragged by user interaction, `position` is not changed. This is done intentionally, as two-way data binding here isn't possible and also will lead to unexpected behavior. To keep the `position` variable up to date, use the `onDrag` event to keep your state up to date to the draggable's internal state. - -To have it be strictly **Controlled**, meaning it can only be moved programmatically, add the `disabled` option to your draggable element's config - -```tsx -new Draggable({ position: { x: 0, y: 10 }, disabled: true }); -``` - -Here are a bunch of examples showing controlled behavior 👇 - -# Contributing - -Feel free to open an issue with a bug or feature request. - -If you wish to make a PR fixing something, please open an issue about it first! - -## Help needed 🛑 - -This library lacks something very important: **Automated Tests!** - -I'll be straight about this: I don't know how to write tests. I've tried, but not been able to. +Read the docs -So I need your help. If you wish to contribute and can add tests here, it would be great for everyone using this! 🙂. There are already some tests but it could benefit from more test cases +## Credits -Specifications here: [#7](https://github.com/PuruVJ/neodrag/issues/7) +Inspired from the amazing [react-draggable](https://github.com/react-grid-layout/react-draggable) library, and implements even more features with a similar API, but 3.7x smaller. # License diff --git a/packages/vanilla/demo/package.json b/packages/vanilla/demo/package.json index 60ad604e..288dcc70 100644 --- a/packages/vanilla/demo/package.json +++ b/packages/vanilla/demo/package.json @@ -9,7 +9,7 @@ }, "devDependencies": { "typescript": "^4.9.4", - "vite": "^4.0.3" + "vite": "^4.0.4" }, "dependencies": { "@neodrag/vanilla": "workspace:*" diff --git a/packages/vanilla/package.json b/packages/vanilla/package.json index 88a4d0b1..ff439d6d 100644 --- a/packages/vanilla/package.json +++ b/packages/vanilla/package.json @@ -1,6 +1,6 @@ { "name": "@neodrag/vanilla", - "version": "2.0.0-next.0", + "version": "2.0.0", "description": "JS library to add dragging to your apps 😉", "main": "./dist/index.js", "module": "./dist/index.js", @@ -12,8 +12,12 @@ "sideEffects": false, "exports": { ".": { - "import": "./dist/index.js", - "module": "./dist/index.js" + "types": "./dist/index.d.ts", + "import": { + "production": "./dist/min/index.js", + "development": "./dist/index.js" + }, + "default": "./dist/min/index.js" }, "./package.json": "./package.json" }, @@ -47,6 +51,7 @@ "pub:dry": "pnpm build && pnpm publish --dry-run --no-git-checks --access public" }, "devDependencies": { - "@neodrag/core": "workspace:*" + "@neodrag/core": "workspace:*", + "@neodrag/tsup-config": "workspace:*" } } diff --git a/packages/vanilla/tsup.config.ts b/packages/vanilla/tsup.config.ts index 798a4832..4950a180 100644 --- a/packages/vanilla/tsup.config.ts +++ b/packages/vanilla/tsup.config.ts @@ -1,10 +1,3 @@ -import { defineConfig } from 'ttsup'; +import { coreConfig } from '@neodrag/tsup-config'; -export default defineConfig({ - entry: ['./src/index.ts'], - minify: 'terser', - format: 'esm', - dts: { resolve: true }, - clean: true, - sourcemap: true, -}); +export default coreConfig({}); diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index c699d35e..07a1731d 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -1,20 +1,22 @@ # @neodrag/vue -## 2.0.0-next.0 +## 2.0.0 -### Major Changes +### Patch Changes -- [#60](https://github.com/PuruVJ/neodrag/pull/60) [`f2d1130`](https://github.com/PuruVJ/neodrag/commit/f2d113052954b055fda7516919e4113bbde849d4) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Event data provides the root node +- [#95](https://github.com/PuruVJ/neodrag/pull/95) [`3c10f6ae`](https://github.com/PuruVJ/neodrag/commit/3c10f6ae377c3e9fc9fea963ea99204a4649806c) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Add `legacyTranslate` option, remove memoization code, align to browser's RAF throttling - ```js - { - onDrag: ({ node }) => { - console.log(node); - }; - } - ``` +- [#97](https://github.com/PuruVJ/neodrag/pull/97) [`9e5c4647`](https://github.com/PuruVJ/neodrag/commit/9e5c46477c7781bc75a57944983434a0c8ceff77) Thanks [@PuruVJ](https://github.com/PuruVJ)! - New output formats -### Patch Changes +- [`da98e910`](https://github.com/PuruVJ/neodrag/commit/da98e910469d63e53e2462e74196bad3b90ea053) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Expose rootNode and currentNode from events. Remove node and domRect + +- [#99](https://github.com/PuruVJ/neodrag/pull/99) [`a1572bce`](https://github.com/PuruVJ/neodrag/commit/a1572bce5186051a5114dd580017a49fc2b3c7fc) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Add transform function + +- [`8dd0d88f`](https://github.com/PuruVJ/neodrag/commit/8dd0d88ff0458c0bd6d20e3649371fdf732c9ebb) Thanks [@PuruVJ](https://github.com/PuruVJ)! - Add recomputeBounds option + +- [`ca8cde25`](https://github.com/PuruVJ/neodrag/commit/ca8cde252e555cc50a0919a295d01ec340207f8e) Thanks [@PuruVJ](https://github.com/PuruVJ)! Expose rootNode and currentNode from events. Remove node and domRect + +- [`2ea2bad4`](https://github.com/PuruVJ/neodrag/commit/2ea2bad4f16e798fb0ecb55f8554efcd2e50ca26) Thanks [@PuruVJ](https://github.com/PuruVJ)! Fix ouble click issue - Fix behavior when snap provided as 0 diff --git a/packages/vue/README.md b/packages/vue/README.md index 2127d5b8..9658d752 100644 --- a/packages/vue/README.md +++ b/packages/vue/README.md @@ -1,12 +1,26 @@ -# @neodrag/vue +

+ +

-A lightweight Vue directive to make your elements draggable. +

+@neodrag/vue +

-Inspired from the amazing [react-draggable](https://github.com/react-grid-layout/react-draggable) library, and implements a similar API, but 3x smaller. +

+One draggable to rule em all +

+ +

A lightweight Vue directive to make your elements draggable.

+ +

+ +

+ +

Getting Started

-# Features +## Features -- 🤏 Tiny - Only 1.98KB min+brotli. +- 🤏 Tiny - Only 1.77KB min+brotli. - 🐇 Simple - Quite simple to use, and effectively no-config required! - 🧙‍♀️ Elegant - Vue directive, to keep the usage simple, elegant and straightforward. - 🗃️ Highly customizable - Offers tons of options that you can modify to get different behavior. @@ -14,7 +28,7 @@ Inspired from the amazing [react-draggable](https://github.com/react-grid-layout [Try it in Stackblitz](https://stackblitz.com/edit/vitejs-vite-2pg1r1?file=src%2FApp.jsx) -# Installing +## Installing ```bash pnpm add @neodrag/vue @@ -26,7 +40,7 @@ npm install @neodrag/vue yarn add @neodrag/vue ``` -# Usage +## Usage Basic usage @@ -69,472 +83,11 @@ const options: DragOptions = { ``` -# Options - -There are tons of options available for this package. All of them are already documented within the code itself, so you'll never have to leave the code editor. - -## axis - -**type**: `'both' | 'x' | 'y' | 'none'` - -**Default Value**: `'both'` - -Axis on which the element can be dragged on. Valid values: `both`, `x`, `y`, `none`. - -- `both` - Element can move in any direction -- `x` - Only horizontal movement possible -- `y` - Only vertical movement possible -- `none` - No movement at all - -**Examples**: - -```vue - -
Text
-``` - -## bounds - -**type**: `HTMLElement | 'parent' | string | { top?: number; right?: number; bottom?: number; left?: number }` - -**Default Value**: `undefined` - -Optionally limit the drag area - -`parent`: Limit to parent - -Or, you can specify any selector and it will be bound to that. - -**Note**: This library doesn't check whether the selector is bigger than the node element. -You yourself will have to make sure of that, or it may lead to unexpected behavior. - -Or, finally, you can pass an object of type `{ top: number; right: number; bottom: number; left: number }`. -These mimic the css `top`, `right`, `bottom` and `left`, in the sense that `bottom` starts from the bottom of the window, and `right` from right of window. -If any of these properties are unspecified, they are assumed to be `0`. - -**Examples**: - -Bound to any element - -```vue -
Hello
-``` - -Bound to parent - -```vue -
Hello
-``` +Read the docs -Bound to body +## Credits -```vue -
Hello
-``` - -Bound to an ancestor selector somewhere in page - -```vue -
Hello
-``` - -Manually through coordinates. Empty object means bound to the `window`. - -**NOTE**: It isn't strictly empty object. If you omit any property from this object, it will be assumed as `0`. - -```vue -
Hello
-``` - -Bound only to top and bottom, and unbounded horizontally in practice by setting bounds way beyond the screen. - -```vue -
Hello
-``` - -## gpuAcceleration - -**type**: `boolean` - -**Default value**: `true` - -If true, uses `translate3d` instead of `translate` to move the element around, and the hardware acceleration kicks in. - -`true` by default, but can be set to `false` if [blurry text issue](https://developpaper.com/question/why-does-the-use-of-css3-translate3d-result-in-blurred-display/) occurs. - -Example 👇 - -```vue -
Hello
-``` - -## applyUserSelectHack - -**type**: `boolean` - -**Default value**: `true` - -Applies `user-select: none` on `` element when dragging, to prevent the irritating effect where dragging doesn't happen and the text is selected. Applied when dragging starts and removed when it stops. - -```vue -
Text
-``` - -## ignoreMultitouch - -**type**: `boolean` - -**Default value**: `false` - -Ignores touch events with more than 1 touch. -This helps when you have multiple elements on a canvas where you want to implement pinch-to-zoom behaviour. - -```vue - -
Text
-``` - -## disabled - -**type**: `boolean` - -**Default Value**: `undefined` - -Disables dragging. - -## grid - -**type**: `[number, number]` - -**Default value**: `undefined` - -Applies a grid on the page to which the element snaps to when dragging, rather than the default continuous grid. - -`Note`: If you're programmatically creating the grid, do not set it to [0, 0] ever, that will stop drag at all. Set it to `undefined` to make it continuous once again. - -## position - -**type**: `{ x: number; y: number }` - -**Default Value**: `undefined` - -Controls the position of the element programmatically. Fully reactive. - -Read more below in the **Controlled vs Uncontrolled** section. - -## cancel - -**type**: `string | HTMLElement | HTMLElement[]` - -**Default value**: `undefined` - -CSS Selector of an element or multiple elements inside the parent node(on which `v-draggable` is applied). Can be an element or elements too. If it is provided, Trying to drag inside the `cancel` element(s) will prevent dragging. - -Selector: - -```vue - -``` - -Multiple elements with selector: - -```vue - -``` - -Element: - -```vue - - - -``` - -Elements: - -```vue - - - -``` - -## handle - -**type**: `string | HTMLElement | HTMLElement[]` - -**Default Value**: `undefined` - -CSS Selector of an element or multiple elements inside the parent node(on which `v-draggable` is applied). Can be an element or elements too. If it is provided, Only clicking and dragging on this element will allow the parent to drag, anywhere else on the parent won't work. - -```vue - -``` - -Multiple handles with selector: - -```vue - -``` - -Handle with element: - -```vue - - - -``` - -Multiple handles with elements - -```vue - - - -``` - -## defaultClass - -**type**: `string` - -**Default Value**: `'neodrag'` - -Class to apply on the element on which `v-draggable` is applied.

Note that if `handle` is provided, it will still apply class on the parent element, **NOT** the handle - -## defaultClassDragging - -**type**: `string` - -**Default Value**: `'neodrag-dragging'` - -Class to apply on the parent element when it is dragging - -## defaultClassDragged - -**type**: `string` - -**Default Value**: `'neodrag-dragged'` - -Class to apply on the parent element if it has been dragged at least once. - -## defaultPosition - -**type**: `{ x: number; y: number }` - -**Default Value**: `{ x: 0, y: 0 }` - -Offsets your element to the position you specify in the very beginning. `x` and `y` should be in pixels - -## onDragStart - -**type**: `(data: DragEventData) => void` - -**Default Value**: `undefined` - -Fires when dragging start. - -**Note**: - -```ts -type DragEventData = { offsetX: number; offsetY: number; domRect: DOMRect }; -``` - -## onDrag - -**type**: `(data: DragEventData) => void` - -**Default Value**: `undefined` - -Fires when dragging is going on. - -**Note**: - -```ts -type DragEventData = { offsetX: number; offsetY: number; domRect: DOMRect }; -``` - -## onDragEnd - -**type**: `(data: DragEventData) => void` - -**Default Value**: `undefined` - -Fires when dragging ends. - -**Note**: - -```ts -type DragEventData = { offsetX: number; offsetY: number; domRect: DOMRect }; -``` - -# Events - -`@neodrag/vue` emits 3 events, `onDrag`, `onDragStart` & `onDragEnd`. -Example: - -```vue - -``` - -# TypeScript - -This library ships with proper TypeScript typings, for the best Developer Experience, whether authoring JS or TS. - -## Types Exported from package - -This package exports these types you can use: - -```ts -import type { - DragAxis, - DragBounds, - DragBoundsCoords, - DragOptions, - DragEventData, -} from '@neodrag/vue'; -``` - -`DragOptions` is the documented list of all options provided by the component. - -`DragAxis` is the type of `axis` option, and is equal to `'both' | 'x' | 'y' | 'none'`. - -`DragBounds` is `'parent' | string | Partial`, the complete type of `bounds` option. - -`DragBoundsCoords` is when you're specifying the `bounds` field using an object, this is the type needed for that. - -```ts -export type DragBoundsCoords = { - /** Number of pixels from left of the window */ - left: number; - - /** Number of pixels from top of the window */ - top: number; - - /** Number of pixels from the right side of window */ - right: number; - - /** Number of pixels from the bottom of the window */ - bottom: number; -}; -``` - -```ts -type DragEventData = { - offsetX: number; - offsetY: number; - domRect: DOMRect; -}; -``` - -# Controlled vs Uncontrolled - -This is taken straight from React's philosophy(After all, this package is inspired from [react-draggable](https://github.com/react-grid-layout/react-draggable)). - -Uncontrolled means your app doesn't control the dragging of the app. Meaning, the user drags the element, it changes position, and you do something with that action. You yourself don't change position of the element or anything. This is the default behavior of this library. - -Controlled means your app, using state variables, changes the position of the element, or in simple terms, programmatically drag the element. You basically set the `position` property to `{ x: 10, y: 50 }`(or any other numbers), and voila! yur now controlling the position of the element programmatically 🥳🥳 - -OFC, this library doesn't go fully **Controlled**. The user can still drag it around even when `position` is set. - -So, when you change `position`, the element position changes. However, when the element is dragged by user interaction, `position` is not changed. This is done intentionally, as two-way data binding here isn't possible and also will lead to unexpected behavior. To keep the `position` variable up to date, use the `onDrag` event to keep your state up to date to the draggable's internal state. - -To have it be strictly **Controlled**, meaning it can only be moved programmatically, add the `disabled` option to your draggable element's config - -```vue -
-``` - -Here are a bunch of examples showing controlled behavior 👇 - -# Contributing - -Feel free to open an issue with a bug or feature request. - -If you wish to make a PR fixing something, please open an issue about it first! - -## Help needed 🛑 - -This library lacks something very important: **Automated Tests!** - -I'll be straight about this: I don't know how to write tests. I've tried, but not been able to. - -So I need your help. If you wish to contribute and can add tests here, it would be great for everyone using this! 🙂. There are already some tests but it could benefit from more test cases - -Specifications here: [#7](https://github.com/PuruVJ/neodrag/issues/7) +Inspired from the amazing [react-draggable](https://github.com/react-grid-layout/react-draggable) library, and implements a similar API, but 3x smaller. # License diff --git a/packages/vue/demo/CHANGELOG.md b/packages/vue/demo/CHANGELOG.md new file mode 100644 index 00000000..8d2637f5 --- /dev/null +++ b/packages/vue/demo/CHANGELOG.md @@ -0,0 +1,36 @@ +# demo + +## 0.0.3 + +### Patch Changes + +- Updated dependencies [[`bd831dcc`](https://github.com/PuruVJ/neodrag/commit/bd831dcc101d967b78505acd064cdfcde03b62ff), [`3c10f6ae`](https://github.com/PuruVJ/neodrag/commit/3c10f6ae377c3e9fc9fea963ea99204a4649806c), [`9e5c4647`](https://github.com/PuruVJ/neodrag/commit/9e5c46477c7781bc75a57944983434a0c8ceff77), [`da98e910`](https://github.com/PuruVJ/neodrag/commit/da98e910469d63e53e2462e74196bad3b90ea053), [`a1572bce`](https://github.com/PuruVJ/neodrag/commit/a1572bce5186051a5114dd580017a49fc2b3c7fc), [`8dd0d88f`](https://github.com/PuruVJ/neodrag/commit/8dd0d88ff0458c0bd6d20e3649371fdf732c9ebb)]: + - @neodrag/vue@2.0.0 + +## 0.0.3-next.5 + +### Patch Changes + +- Updated dependencies [[`a1572bc`](https://github.com/PuruVJ/neodrag/commit/a1572bce5186051a5114dd580017a49fc2b3c7fc)]: + - @neodrag/vue@2.0.0-next.6 + +## 0.0.3-next.4 + +### Patch Changes + +- Updated dependencies [[`9e5c464`](https://github.com/PuruVJ/neodrag/commit/9e5c46477c7781bc75a57944983434a0c8ceff77)]: + - @neodrag/vue@2.0.0-next.5 + +## 0.0.3-next.3 + +### Patch Changes + +- Updated dependencies []: + - @neodrag/vue@2.0.0-next.4 + +## 0.0.3-next.2 + +### Patch Changes + +- Updated dependencies [[`0f513db2`](https://github.com/PuruVJ/neodrag/commit/0f513db2c0a88ed03f0472311a03b6ae0e4f9483), [`8dd0d88f`](https://github.com/PuruVJ/neodrag/commit/8dd0d88ff0458c0bd6d20e3649371fdf732c9ebb)]: + - @neodrag/vue@2.0.0-next.3 diff --git a/packages/vue/demo/package.json b/packages/vue/demo/package.json index 1dce554e..4b667e5c 100644 --- a/packages/vue/demo/package.json +++ b/packages/vue/demo/package.json @@ -1,7 +1,7 @@ { "name": "demo", "private": true, - "version": "0.0.2", + "version": "0.0.3", "scripts": { "dev": "vite", "build": "vite build", @@ -14,7 +14,7 @@ "devDependencies": { "@vitejs/plugin-vue": "^4.0.0", "typescript": "^4.9.4", - "vite": "^4.0.3", - "vue-tsc": "^1.0.18" + "vite": "^4.0.4", + "vue-tsc": "^1.0.22" } } diff --git a/packages/vue/package.json b/packages/vue/package.json index f6eee38e..5a13f742 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@neodrag/vue", - "version": "2.0.0-next.0", + "version": "2.0.0", "description": "Vue library to add dragging to your apps 😉", "main": "./dist/index.js", "module": "./dist/index.js", @@ -12,8 +12,12 @@ "sideEffects": false, "exports": { ".": { - "import": "./dist/index.js", - "module": "./dist/index.js" + "types": "./dist/index.d.ts", + "import": { + "production": "./dist/min/index.js", + "development": "./dist/index.js" + }, + "default": "./dist/min/index.js" }, "./package.json": "./package.json" }, @@ -45,6 +49,7 @@ "pub:dry": "pnpm build && pnpm publish --dry-run --no-git-checks --access public" }, "devDependencies": { - "@neodrag/core": "workspace:*" + "@neodrag/core": "workspace:*", + "@neodrag/tsup-config": "workspace:*" } } diff --git a/packages/vue/tsup.config.ts b/packages/vue/tsup.config.ts index 2583c906..4950a180 100644 --- a/packages/vue/tsup.config.ts +++ b/packages/vue/tsup.config.ts @@ -1,11 +1,3 @@ -import { defineConfig } from 'ttsup'; +import { coreConfig } from '@neodrag/tsup-config'; -export default defineConfig({ - entry: ['./src/index.ts'], - external: ['vue'], - minify: 'terser', - format: 'esm', - dts: { resolve: true }, - clean: true, - sourcemap: true, -}); +export default coreConfig({}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4bdfb10..266cfe6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,45 +13,48 @@ importers: '@types/react-dom': ^18.0.10 brotli-size: ^4.0.0 fast-glob: ^3.2.12 - jsdom: ^20.0.3 - nx: 15.4.2 + jsdom: ^21.0.0 + nx: 15.4.5 react: ^18.2.0 react-dom: ^18.2.0 - solid-js: ^1.6.6 + solid-js: ^1.6.8 svelte: ^3.55.0 svelte-preprocess: ^5.0.0 terser: ^5.16.1 tsx: ^3.12.1 ttsup: 0.0.0-semantic-release typescript: ^4.9.4 - vite: ^4.0.3 - vitest: ^0.26.2 + vite: ^4.0.4 + vitest: ^0.26.3 vue: ^3.2.45 devDependencies: '@changesets/changelog-github': 0.4.8 '@changesets/cli': 2.26.0 - '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.3 + '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.4 '@testing-library/jest-dom': 5.16.5 '@testing-library/svelte': 3.2.2_svelte@3.55.0 '@types/react': 18.0.26 '@types/react-dom': 18.0.10 brotli-size: 4.0.0 fast-glob: 3.2.12 - jsdom: 20.0.3 - nx: 15.4.2 + jsdom: 21.0.0 + nx: 15.4.5 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - solid-js: 1.6.6 + solid-js: 1.6.8 svelte: 3.55.0 svelte-preprocess: 5.0.0_niwyv7xychq2ag6arq5eqxbomm terser: 5.16.1 tsx: 3.12.1 ttsup: 0.0.0-semantic-release_typescript@4.9.4 typescript: 4.9.4 - vite: 4.0.3_terser@5.16.1 - vitest: 0.26.2_jsdom@20.0.3+terser@5.16.1 + vite: 4.0.4_terser@5.16.1 + vitest: 0.26.3_jsdom@21.0.0+terser@5.16.1 vue: 3.2.45 + config: + specifiers: {} + docs: specifiers: '@astrojs/mdx': ^0.14.0 @@ -60,40 +63,40 @@ importers: '@astrojs/svelte': ^1.0.2 '@fontsource/jetbrains-mono': ^4.5.11 '@fontsource/plus-jakarta-sans': ^4.5.10 - '@iconify/json': ^2.1.159 + '@iconify/json': ^2.2.3 '@neodrag/svelte': workspace:* '@types/throttle-debounce': ^5.0.0 - astro: ^1.8.0 - astro-compress: ^1.1.24 - astro-critters: ^1.1.24 + astro: ^1.9.1 + astro-compress: ^1.1.25 + astro-critters: ^1.1.25 astro-seo: ^0.6.1 astrojs-service-worker: ^0.0.8 autoprefixer: ^10.4.13 hast-util-to-string: ^2.0.0 - hastscript: ^7.1.0 + hastscript: ^7.2.0 open-props: ^1.5.3 popmotion: ^11.0.5 - postcss: ^8.4.19 - postcss-jit-props: ^1.0.8 - prettier: ^2.8.1 - prettier-plugin-astro: ^0.7.0 + postcss: ^8.4.21 + postcss-jit-props: ^1.0.9 + prettier: ^2.8.2 + prettier-plugin-astro: ^0.7.2 rehype-autolink-headings: ^6.1.1 remark-custom-container: ^1.2.0 - rollup: ^3.9.0 + rollup: ^3.9.1 sass: ^1.57.1 slugify: ^1.6.5 svelte: ^3.55.0 svelte-body: ^1.3.6 svelte-copy: ^1.3.0 svelte-fast-dimension: ^0.0.3 - svelte-inview: ^3.0.1 + svelte-inview: ^3.0.2 svelte-local-storage-store: ^0.3.2 svelte-sequential-preprocessor: ^0.0.7 throttle-debounce: ^5.0.0 typescript: ^4.9.4 unplugin-auto-import: ^0.12.0 - unplugin-icons: ^0.14.14 - vite: ^4.0.3 + unplugin-icons: ^0.15.1 + vite: ^4.0.4 dependencies: '@fontsource/jetbrains-mono': 4.5.11 '@fontsource/plus-jakarta-sans': 4.5.10 @@ -104,144 +107,157 @@ importers: slugify: 1.6.5 svelte-body: 1.3.6 svelte-copy: 1.3.0 - svelte-inview: 3.0.1_svelte@3.55.0 + svelte-inview: 3.0.2_svelte@3.55.0 svelte-local-storage-store: 0.3.2_svelte@3.55.0 throttle-debounce: 5.0.0 devDependencies: - '@astrojs/mdx': 0.14.0_rollup@3.9.0 + '@astrojs/mdx': 0.14.0_rollup@3.9.1 '@astrojs/prefetch': 0.1.1 '@astrojs/sitemap': 1.0.0 - '@astrojs/svelte': 1.0.2_jme7bmw6i3a4zqc425fmrmev7u - '@iconify/json': 2.1.159 + '@astrojs/svelte': 1.0.2_3ycfnqh7byp6hgnzlm47qfxvl4 + '@iconify/json': 2.2.3 '@types/throttle-debounce': 5.0.0 - astro: 1.8.0_sass@1.57.1 - astro-compress: 1.1.24 - astro-critters: 1.1.24 + astro: 1.9.1_sass@1.57.1 + astro-compress: 1.1.25 + astro-critters: 1.1.25 astrojs-service-worker: 0.0.8 - autoprefixer: 10.4.13_postcss@8.4.20 + autoprefixer: 10.4.13_postcss@8.4.21 hast-util-to-string: 2.0.0 - hastscript: 7.1.0 - postcss: 8.4.20 - postcss-jit-props: 1.0.8_postcss@8.4.20 - prettier: 2.8.1 - prettier-plugin-astro: 0.7.0 + hastscript: 7.2.0 + postcss: 8.4.21 + postcss-jit-props: 1.0.9_postcss@8.4.21 + prettier: 2.8.2 + prettier-plugin-astro: 0.7.2 rehype-autolink-headings: 6.1.1 remark-custom-container: 1.3.1 - rollup: 3.9.0 + rollup: 3.9.1 sass: 1.57.1 svelte: 3.55.0 svelte-fast-dimension: 0.0.3_svelte@3.55.0 svelte-sequential-preprocessor: 0.0.7 typescript: 4.9.4 - unplugin-auto-import: 0.12.1_rollup@3.9.0 - unplugin-icons: 0.14.15 - vite: 4.0.3_sass@1.57.1 + unplugin-auto-import: 0.12.1_rollup@3.9.1 + unplugin-icons: 0.15.1 + vite: 4.0.4_sass@1.57.1 packages/core: - specifiers: {} + specifiers: + '@neodrag/tsup-config': workspace:* + devDependencies: + '@neodrag/tsup-config': link:../../config packages/react: specifiers: '@neodrag/core': workspace:* + '@neodrag/tsup-config': workspace:* devDependencies: '@neodrag/core': link:../core + '@neodrag/tsup-config': link:../../config packages/react/demo: specifiers: '@neodrag/react': workspace:* - '@vitejs/plugin-react': ^3.0.0 + '@vitejs/plugin-react': ^3.0.1 typescript: ^4.9.4 - vite: ^4.0.3 + vite: ^4.0.4 dependencies: '@neodrag/react': link:.. devDependencies: - '@vitejs/plugin-react': 3.0.0_vite@4.0.3 + '@vitejs/plugin-react': 3.0.1_vite@4.0.4 typescript: 4.9.4 - vite: 4.0.3 + vite: 4.0.4 packages/solid: specifiers: '@neodrag/core': workspace:* + '@neodrag/tsup-config': workspace:* devDependencies: '@neodrag/core': link:../core + '@neodrag/tsup-config': link:../../config packages/solid/demo: specifiers: '@neodrag/solid': workspace:* - solid-js: ^1.6.6 + solid-js: ^1.6.8 typescript: ^4.9.4 - vite: ^4.0.3 + vite: ^4.0.4 vite-plugin-solid: ^2.4.0 dependencies: '@neodrag/solid': link:.. - solid-js: 1.6.6 + solid-js: 1.6.8 devDependencies: typescript: 4.9.4 - vite: 4.0.3 - vite-plugin-solid: 2.5.0_solid-js@1.6.6+vite@4.0.3 + vite: 4.0.4 + vite-plugin-solid: 2.5.0_solid-js@1.6.8+vite@4.0.4 packages/svelte: specifiers: '@neodrag/core': workspace:* + '@neodrag/tsup-config': workspace:* devDependencies: '@neodrag/core': link:../core + '@neodrag/tsup-config': link:../../config packages/svelte/demo: specifiers: '@neodrag/svelte': workspace:* - '@sveltejs/kit': 1.0.1 + '@sveltejs/kit': 1.0.7 svelte: ^3.55.0 svelte-preprocess: ^5.0.0 typescript: ^4.9.4 - vite: ^4.0.3 + vite: ^4.0.4 dependencies: '@neodrag/svelte': link:.. devDependencies: - '@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.3 + '@sveltejs/kit': 1.0.7_svelte@3.55.0+vite@4.0.4 svelte: 3.55.0 svelte-preprocess: 5.0.0_niwyv7xychq2ag6arq5eqxbomm typescript: 4.9.4 - vite: 4.0.3 + vite: 4.0.4 packages/vanilla: specifiers: '@neodrag/core': workspace:* + '@neodrag/tsup-config': workspace:* devDependencies: '@neodrag/core': link:../core + '@neodrag/tsup-config': link:../../config packages/vanilla/demo: specifiers: '@neodrag/vanilla': workspace:* typescript: ^4.9.4 - vite: ^4.0.3 + vite: ^4.0.4 dependencies: '@neodrag/vanilla': link:.. devDependencies: typescript: 4.9.4 - vite: 4.0.3 + vite: 4.0.4 packages/vue: specifiers: '@neodrag/core': workspace:* + '@neodrag/tsup-config': workspace:* devDependencies: '@neodrag/core': link:../core + '@neodrag/tsup-config': link:../../config packages/vue/demo: specifiers: '@neodrag/vue': workspace:* '@vitejs/plugin-vue': ^4.0.0 typescript: ^4.9.4 - vite: ^4.0.3 + vite: ^4.0.4 vue: ^3.2.45 - vue-tsc: ^1.0.18 + vue-tsc: ^1.0.22 dependencies: '@neodrag/vue': link:.. vue: 3.2.45 devDependencies: - '@vitejs/plugin-vue': 4.0.0_vite@4.0.3+vue@3.2.45 + '@vitejs/plugin-vue': 4.0.0_vite@4.0.4+vue@3.2.45 typescript: 4.9.4 - vite: 4.0.3 - vue-tsc: 1.0.18_typescript@4.9.4 + vite: 4.0.4 + vue-tsc: 1.0.22_typescript@4.9.4 packages: @@ -264,10 +280,6 @@ packages: find-up: 5.0.0 dev: true - /@antfu/utils/0.5.2: - resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} - dev: true - /@antfu/utils/0.7.2: resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==} dev: true @@ -284,12 +296,8 @@ packages: leven: 3.1.0 dev: true - /@astrojs/compiler/0.29.19: - resolution: {integrity: sha512-lvPpoOA6Fc1NpJrPT65ZOhhFieYkiBds9wzOhWX55lXMUpNPu5CUxqzgDAkNSTIoXHZxkxHfi+6EpFNnRZBBYQ==} - dev: true - - /@astrojs/compiler/0.31.3: - resolution: {integrity: sha512-WbA05QH5xkdaJ3XtzDuYOjtqsip2InW5rk156sSdaHs5qN2NroUHbzWZthHJwmNAAjQSGXVIj+O6jQj81zzX/Q==} + /@astrojs/compiler/0.31.4: + resolution: {integrity: sha512-6bBFeDTtPOn4jZaiD3p0f05MEGQL9pw2Zbfj546oFETNmjJFWO3nzHz6/m+P53calknCvyVzZ5YhoBLIvzn5iw==} dev: true /@astrojs/language-server/0.28.3: @@ -298,8 +306,8 @@ packages: dependencies: '@vscode/emmet-helper': 2.8.6 events: 3.3.0 - prettier: 2.8.1 - prettier-plugin-astro: 0.7.0 + prettier: 2.8.2 + prettier-plugin-astro: 0.7.2 source-map: 0.7.4 vscode-css-languageservice: 6.2.1 vscode-html-languageservice: 5.0.3 @@ -341,14 +349,14 @@ packages: - supports-color dev: true - /@astrojs/mdx/0.14.0_rollup@3.9.0: + /@astrojs/mdx/0.14.0_rollup@3.9.1: resolution: {integrity: sha512-lmNh/7CeQmdZ0OCbnDnoDxQTKWleFdlT5YkjsutGIOhabY0xgCcWwb1Rbs/9m4vvTdCkp9zsZdRzUKEPFPbcsA==} engines: {node: ^14.18.0 || >=16.12.0} dependencies: '@astrojs/markdown-remark': 1.2.0 '@astrojs/prism': 1.0.2 '@mdx-js/mdx': 2.2.1 - '@mdx-js/rollup': 2.2.1_rollup@3.9.0 + '@mdx-js/rollup': 2.2.1_rollup@3.9.1 acorn: 8.8.1 es-module-lexer: 0.10.5 estree-util-visit: 1.2.0 @@ -401,16 +409,16 @@ packages: zod: 3.20.2 dev: true - /@astrojs/svelte/1.0.2_jme7bmw6i3a4zqc425fmrmev7u: + /@astrojs/svelte/1.0.2_3ycfnqh7byp6hgnzlm47qfxvl4: resolution: {integrity: sha512-cC3Pn475mOJdDM5IKMJ75hlah7jTWdVPkD7gUx+7ouJ/V9Q8H5OTmne+xG8zk2MquAHBL/ksmUS2pSzI9ByZkw==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: svelte: ^3.46.4 dependencies: - '@sveltejs/vite-plugin-svelte': 1.4.0_svelte@3.55.0+vite@4.0.3 - postcss-load-config: 3.1.4_postcss@8.4.20 + '@sveltejs/vite-plugin-svelte': 1.4.0_svelte@3.55.0+vite@4.0.4 + postcss-load-config: 3.1.4_postcss@8.4.21 svelte: 3.55.0 - svelte-preprocess: 4.10.7_7aebwwrmjccn5kot3h3sthyyui + svelte-preprocess: 4.10.7_m6rugkm63xkkcx7ozipowpv6oi svelte2tsx: 0.5.22_niwyv7xychq2ag6arq5eqxbomm transitivePeerDependencies: - '@babel/core' @@ -432,7 +440,7 @@ packages: resolution: {integrity: sha512-SJVfZHp00f8VZsT1fsx1+6acJGUNt/84xZytV5znPzzNE8RXjlE0rv03llgTsEeUHYZc6uJah91jNojS7RldFg==} engines: {node: ^14.18.0 || >=16.12.0} dependencies: - ci-info: 3.7.0 + ci-info: 3.7.1 debug: 4.3.4 dlv: 1.1.3 dset: 3.1.2 @@ -468,47 +476,47 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.20.5: - resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==} + /@babel/core/7.20.12: + resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.5 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5 - '@babel/helper-module-transforms': 7.20.2 - '@babel/helpers': 7.20.6 - '@babel/parser': 7.20.5 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.5 - '@babel/types': 7.20.5 + '@babel/generator': 7.20.7 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helpers': 7.20.7 + '@babel/parser': 7.20.7 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.12 + '@babel/types': 7.20.7 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 - json5: 2.2.1 + json5: 2.2.3 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/core/7.20.7: - resolution: {integrity: sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==} + /@babel/core/7.20.5: + resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.7 - '@babel/helper-module-transforms': 7.20.11 - '@babel/helpers': 7.20.7 - '@babel/parser': 7.20.7 - '@babel/template': 7.20.7 - '@babel/traverse': 7.20.10 - '@babel/types': 7.20.7 + '@babel/generator': 7.20.5 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helpers': 7.20.6 + '@babel/parser': 7.20.5 + '@babel/template': 7.18.10 + '@babel/traverse': 7.20.5 + '@babel/types': 7.20.5 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 - json5: 2.2.2 + json5: 2.2.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -560,14 +568,14 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.7: + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.20.10 - '@babel/core': 7.20.7 + '@babel/core': 7.20.12 '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.4 lru-cache: 5.1.1 @@ -677,7 +685,7 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.10 + '@babel/traverse': 7.20.12 '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -779,7 +787,7 @@ packages: dependencies: '@babel/helper-function-name': 7.19.0 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.10 + '@babel/traverse': 7.20.12 '@babel/types': 7.20.5 transitivePeerDependencies: - supports-color @@ -801,7 +809,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.20.10 + '@babel/traverse': 7.20.12 '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -1102,23 +1110,23 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5: + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.5 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.7: + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5: resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.7 + '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1473,37 +1481,37 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.20.5: + /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.20.12: resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.5 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.20.5: + /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.20.12: resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.5 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx/7.20.7_@babel+core@7.20.7: + /@babel/plugin-transform-react-jsx/7.20.7_@babel+core@7.20.12: resolution: {integrity: sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.7 + '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 '@babel/types': 7.20.7 dev: true @@ -1770,6 +1778,24 @@ packages: - supports-color dev: true + /@babel/traverse/7.20.12: + resolution: {integrity: sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.7 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/traverse/7.20.5: resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==} engines: {node: '>=6.9.0'} @@ -1818,7 +1844,7 @@ packages: fs-extra: 7.0.1 lodash.startcase: 4.4.0 outdent: 0.5.0 - prettier: 2.8.1 + prettier: 2.8.2 resolve-from: 5.0.0 semver: 5.7.1 dev: true @@ -2005,7 +2031,7 @@ packages: '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 - prettier: 2.8.1 + prettier: 2.8.2 dev: true /@emmetio/abbreviation/2.2.3: @@ -2054,8 +2080,8 @@ packages: dev: true optional: true - /@esbuild/android-arm/0.16.10: - resolution: {integrity: sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==} + /@esbuild/android-arm/0.16.15: + resolution: {integrity: sha512-JsJtmadyWcR+DEtHLixM7bAQsfi1s0Xotv9kVOoXbCLyhKPOHvMEyh3kJBuTbCPSE4c2jQkQVmarwc9Mg9k3bA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -2063,8 +2089,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64/0.16.10: - resolution: {integrity: sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==} + /@esbuild/android-arm64/0.16.15: + resolution: {integrity: sha512-OdbkUv7468dSsgoFtHIwTaYAuI5lDEv/v+dlfGBUbVa2xSDIIuSOHXawynw5N9+5lygo/JdXa5/sgGjiEU18gQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2072,8 +2098,8 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.16.10: - resolution: {integrity: sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==} + /@esbuild/android-x64/0.16.15: + resolution: {integrity: sha512-dPUOBiNNWAm+/bxoA75o7R7qqqfcEzXaYlb5uJk2xGHmUMNKSAnDCtRYLgx9/wfE4sXyn8H948OrDyUAHhPOuA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -2081,8 +2107,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.16.10: - resolution: {integrity: sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==} + /@esbuild/darwin-arm64/0.16.15: + resolution: {integrity: sha512-AksarYV85Hxgwh5/zb6qGl4sYWxIXPQGBAZ+jUro1ZpINy3EWumK+/4DPOKUBPnsrOIvnNXy7Rq4mTeCsMQDNA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -2090,8 +2116,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.16.10: - resolution: {integrity: sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==} + /@esbuild/darwin-x64/0.16.15: + resolution: {integrity: sha512-qqrKJxoohceZGGP+sZ5yXkzW9ZiyFZJ1gWSEfuYdOWzBSL18Uy3w7s/IvnDYHo++/cxwqM0ch3HQVReSZy7/4Q==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -2099,8 +2125,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.16.10: - resolution: {integrity: sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==} + /@esbuild/freebsd-arm64/0.16.15: + resolution: {integrity: sha512-LBWaep6RvJm5KnsKkocdVEzuwnGMjz54fcRVZ9d3R7FSEWOtPBxMhuxeA1n98JVbCLMkTPFmKN6xSnfhnM9WXQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -2108,8 +2134,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.16.10: - resolution: {integrity: sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==} + /@esbuild/freebsd-x64/0.16.15: + resolution: {integrity: sha512-LE8mKC6JPR04kPLRP9A6k7ZmG0k2aWF4ru79Sde6UeWCo7yDby5f48uJNFQ2pZqzUUkLrHL8xNdIHerJeZjHXg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -2117,8 +2143,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.16.10: - resolution: {integrity: sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==} + /@esbuild/linux-arm/0.16.15: + resolution: {integrity: sha512-+1sGlqtMJTOnJUXwLUGnDhPaGRKqxT0UONtYacS+EjdDOrSgpQ/1gUXlnze45Z/BogwYaswQM19Gu1YD1T19/w==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -2126,8 +2152,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64/0.16.10: - resolution: {integrity: sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==} + /@esbuild/linux-arm64/0.16.15: + resolution: {integrity: sha512-mRYpuQGbzY+XLczy3Sk7fMJ3DRKLGDIuvLKkkUkyecDGQMmil6K/xVKP9IpKO7JtNH477qAiMjjX7jfKae8t4g==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -2135,8 +2161,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.16.10: - resolution: {integrity: sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==} + /@esbuild/linux-ia32/0.16.15: + resolution: {integrity: sha512-puXVFvY4m8EB6/fzu3LdgjiNnEZ3gZMSR7NmKoQe51l3hyQalvTjab3Dt7aX4qGf+8Pj7dsCOBNzNzkSlr/4Aw==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -2153,8 +2179,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.16.10: - resolution: {integrity: sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==} + /@esbuild/linux-loong64/0.16.15: + resolution: {integrity: sha512-ATMGb3eg8T6ZTGZFldlGeFEcevBiVq6SBHvRAO04HMfUjZWneZ/U+JJb3YzlNZxuscJ4Tmzq+JrYxlk7ro4dRg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -2162,8 +2188,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.16.10: - resolution: {integrity: sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==} + /@esbuild/linux-mips64el/0.16.15: + resolution: {integrity: sha512-3SEA4L82OnoSATW+Ve8rPgLaKjC8WMt8fnx7De9kvi/NcVbkj8W+J7qnu/tK2P9pUPQP7Au/0sjPEqZtFeyKQQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -2171,8 +2197,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.16.10: - resolution: {integrity: sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==} + /@esbuild/linux-ppc64/0.16.15: + resolution: {integrity: sha512-8PgbeX+N6vmqeySzyxO0NyDOltCEW13OS5jUHTvCHmCgf4kNXZtAWJ+zEfJxjRGYhVezQ1FdIm7WfN1R27uOyg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -2180,8 +2206,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.16.10: - resolution: {integrity: sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==} + /@esbuild/linux-riscv64/0.16.15: + resolution: {integrity: sha512-U+coqH+89vbPVoU30no1Fllrn6gvEeO5tfEArBhjYZ+dQ3Gv7ciQXYf5nrT1QdlIFwEjH4Is1U1iiaGWW+tGpQ==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -2189,8 +2215,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.16.10: - resolution: {integrity: sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==} + /@esbuild/linux-s390x/0.16.15: + resolution: {integrity: sha512-M0nKLFMdyFGBoitxG42kq6Xap0CPeDC6gfF9lg7ZejzGF6kqYUGT+pQGl2QCQoxJBeat/LzTma1hG8C3dq2ocg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -2198,8 +2224,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.16.10: - resolution: {integrity: sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==} + /@esbuild/linux-x64/0.16.15: + resolution: {integrity: sha512-t7/fOXBUKfigvhJLGKZ9TPHHgqNgpIpYaAbcXQk1X+fPeUG7x0tpAbXJ2wST9F/gJ02+CLETPMnhG7Tra2wqsQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -2207,8 +2233,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.16.10: - resolution: {integrity: sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==} + /@esbuild/netbsd-x64/0.16.15: + resolution: {integrity: sha512-0k0Nxi6DOJmTnLtKD/0rlyqOPpcqONXY53vpkoAsue8CfyhNPWtwzba1ICFNCfCY1dqL3Ho/xEzujJhmdXq1rg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -2216,8 +2242,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.16.10: - resolution: {integrity: sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==} + /@esbuild/openbsd-x64/0.16.15: + resolution: {integrity: sha512-3SkckazfIbdSjsGpuIYT3d6n2Hx0tck3MS1yVsbahhWiLvdy4QozTpvlbjqO3GmvtvhxY4qdyhFOO2wiZKeTAQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -2225,8 +2251,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.16.10: - resolution: {integrity: sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==} + /@esbuild/sunos-x64/0.16.15: + resolution: {integrity: sha512-8PNvBC+O8X5EnyIGqE8St2bOjjrXMR17NOLenIrzolvwWnJXvwPo0tE/ahOeiAJmTOS/eAcN8b4LAZcn17Uj7w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -2234,8 +2260,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.16.10: - resolution: {integrity: sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==} + /@esbuild/win32-arm64/0.16.15: + resolution: {integrity: sha512-YPaSgm/mm7kNcATB53OxVGVfn6rDNbImTn330ZlF3hKej1e9ktCaljGjn2vH08z2dlHEf3kdt57tNjE6zs8SzA==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -2243,8 +2269,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.16.10: - resolution: {integrity: sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==} + /@esbuild/win32-ia32/0.16.15: + resolution: {integrity: sha512-0movUXbSNrTeNf5ZXT0avklEvlJD0hNGZsrrXHfsp9z4tK5xC+apCqmUEZeE9mqrb84Z8XbgGr/MS9LqafTP2A==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -2252,8 +2278,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.16.10: - resolution: {integrity: sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==} + /@esbuild/win32-x64/0.16.15: + resolution: {integrity: sha512-27h5GCcbfomVAqAnMJWvR1LqEY0dFqIq4vTe5nY3becnZNu0SX8F0+gTk3JPvgWQHzaGc6VkPzlOiMkdSUunUA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2269,22 +2295,22 @@ packages: resolution: {integrity: sha512-WWyrjO6qyL7j3itLJUEE/rHRyDfypsoIvpvI6Ld0vyEae49P613cm5UBRe5zMnPjNC7dXBQ8/fjbszbifkL6BA==} dev: false - /@iconify/json/2.1.159: - resolution: {integrity: sha512-LBJDXNsHMBhBZ2BfN2Es/cB8GmI9+2305biJz/C2riYyUWNIU1BnrM5EzDL4i0FwKq6s7I2C+j2wtBJ3pCeQjA==} + /@iconify/json/2.2.3: + resolution: {integrity: sha512-9o15HUqjUg/4VaT5webZAf0mJftToRkyzI2AI1AVjV+hffrJxkUx6Cbj8psHaMIfy4d369bnxksVBFwKKwOlAw==} dependencies: '@iconify/types': 2.0.0 - pathe: 0.3.9 + pathe: 1.0.0 dev: true /@iconify/types/2.0.0: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} dev: true - /@iconify/utils/2.0.3: - resolution: {integrity: sha512-kLpJ95/ZeT1+vIstjdeFnyfiEmmTJuekGb5SVykfKjLSJjmftTCzm7sxxzNHsd8i5mpKPl7Rws9sLGR3juKJ+g==} + /@iconify/utils/2.0.11: + resolution: {integrity: sha512-oEBZkHpkgySHcMZi80ycoJ+ZdLoJhmbN0+gUK8qNPY79ndus8fBHKPyjjwz5kIvr5U9yiym+xBTTnZOB3m5/Pw==} dependencies: '@antfu/install-pkg': 0.1.1 - '@antfu/utils': 0.5.2 + '@antfu/utils': 0.7.2 '@iconify/types': 2.0.0 debug: 4.3.4 kolorist: 1.6.0 @@ -2412,14 +2438,14 @@ packages: - supports-color dev: true - /@mdx-js/rollup/2.2.1_rollup@3.9.0: + /@mdx-js/rollup/2.2.1_rollup@3.9.1: resolution: {integrity: sha512-wpGeK9iO7gPEIyC/ZTiggLY/MkEWDj5IWSsjlpkefgjb5RbmUukXU6/D2rHA+VAopxigS3NlaIL2ctpYBi4fmg==} peerDependencies: rollup: '>=2' dependencies: '@mdx-js/mdx': 2.2.1 - '@rollup/pluginutils': 5.0.2_rollup@3.9.0 - rollup: 3.9.0 + '@rollup/pluginutils': 5.0.2_rollup@3.9.1 + rollup: 3.9.1 source-map: 0.7.4 vfile: 5.3.6 transitivePeerDependencies: @@ -2447,21 +2473,21 @@ packages: fastq: 1.14.0 dev: true - /@nrwl/cli/15.4.2: - resolution: {integrity: sha512-k/sGhqHhXsZakJxaWLmbyDJkQd/klqBEBChax3IHXAgIO9kG0lVwXHzENRqbfw3Z8TdKEZQ4IFwBJt9Dao6bCg==} + /@nrwl/cli/15.4.5: + resolution: {integrity: sha512-f13s0/hzS9jsV1+QPr1Lp3Um+3dOHD8gEP2h7uw17rEPrtJ5ggRKMj/HcZ9dkT9zDM9EmPtVTb6k38ON+NWcUw==} dependencies: - nx: 15.4.2 + nx: 15.4.5 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' - debug dev: true - /@nrwl/tao/15.4.2: - resolution: {integrity: sha512-c/hYhWMjEBvucO9cGL2h2lqH7f+4gb8DJJiuNRPwfvF+sQITLXpl9wASHlpG2unDrtnLjGFo73u5XUUqGiSKvA==} + /@nrwl/tao/15.4.5: + resolution: {integrity: sha512-UMtxXxTWqbyZOdyD9Zt2IsDY/JVXIFZtY6pO4jPha7+UIHWf2Zi8Dszs6UoUTS4mqpNMIkKymwpZGtkDTfiAJA==} hasBin: true dependencies: - nx: 15.4.2 + nx: 15.4.5 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' @@ -2474,7 +2500,7 @@ packages: requiresBuild: true dependencies: node-addon-api: 3.2.1 - node-gyp-build: 4.5.0 + node-gyp-build: 4.6.0 dev: true /@pkgr/utils/2.3.1: @@ -2563,7 +2589,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils/5.0.2_rollup@3.9.0: + /@rollup/pluginutils/5.0.2_rollup@3.9.1: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2575,7 +2601,7 @@ packages: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.9.0 + rollup: 3.9.1 dev: true /@sinclair/typebox/0.24.51: @@ -2591,8 +2617,8 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /@sveltejs/kit/1.0.1_svelte@3.55.0+vite@4.0.3: - resolution: {integrity: sha512-C41aCaDjA7xoUdsrc/lSdU1059UdLPIRE1vEIRRynzpMujNgp82bTMHkDosb6vykH6LrLf3tT2w2/5NYQhKYGQ==} + /@sveltejs/kit/1.0.7_svelte@3.55.0+vite@4.0.4: + resolution: {integrity: sha512-u8JS4aXFWlrnu/tjl+EhJ/FvBEjLYDyMaLe7EAU4sW+PfDqnqyHBAPg/IQi5JuBg6l+Z816F4WrTe+zplUTQDg==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true @@ -2600,7 +2626,7 @@ packages: svelte: ^3.54.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.3 + '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.4 '@types/cookie': 0.5.1 cookie: 0.5.0 devalue: 4.2.0 @@ -2614,12 +2640,12 @@ packages: svelte: 3.55.0 tiny-glob: 0.2.9 undici: 5.14.0 - vite: 4.0.3 + vite: 4.0.4 transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte/1.4.0_svelte@3.55.0+vite@4.0.3: + /@sveltejs/vite-plugin-svelte/1.4.0_svelte@3.55.0+vite@4.0.4: resolution: {integrity: sha512-6QupI/jemMfK+yI2pMtJcu5iO2gtgTfcBdGwMZZt+lgbFELhszbDl6Qjh000HgAV8+XUA+8EY8DusOFk8WhOIg==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -2632,13 +2658,13 @@ packages: magic-string: 0.26.7 svelte: 3.55.0 svelte-hmr: 0.15.1_svelte@3.55.0 - vite: 4.0.3_sass@1.57.1 - vitefu: 0.2.3_vite@4.0.3 + vite: 4.0.4_sass@1.57.1 + vitefu: 0.2.3_vite@4.0.4 transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.0+vite@4.0.3: + /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.0+vite@4.0.4: resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -2651,8 +2677,8 @@ packages: magic-string: 0.27.0 svelte: 3.55.0 svelte-hmr: 0.15.1_svelte@3.55.0 - vite: 4.0.3_terser@5.16.1 - vitefu: 0.2.4_vite@4.0.3 + vite: 4.0.4_terser@5.16.1 + vitefu: 0.2.4_vite@4.0.4 transitivePeerDependencies: - supports-color dev: true @@ -2759,14 +2785,14 @@ packages: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} dev: true - /@types/css-tree/2.0.0: - resolution: {integrity: sha512-mY2sXRLBnUPMYw6mkOT+6dABeaNxAEKZz6scE9kQPNJx8fKe1fOsm8Honl7+xFYe6TKX8WNk2+7oMp2vBArJ9Q==} + /@types/css-tree/2.0.1: + resolution: {integrity: sha512-eeRN9rsZK/ZD5nmJCeZXxyTwq+gsvN1EljeCPEyXk+vLOAwsgpsrdXio4lPBzxAuhIKu3MK7QvZxWUw9xDX8Bg==} dev: true /@types/csso/5.0.0: resolution: {integrity: sha512-EMrCTGpXRUsbFfZBzn2jcW6Sqg8kxWXkJcpvAGYSEzFqAJ2THDJSwiMeS2fPUw+0p6RQNT/n8F/skEc9hUBc0g==} dependencies: - '@types/css-tree': 2.0.0 + '@types/css-tree': 2.0.1 dev: true /@types/debug/4.1.7: @@ -2838,10 +2864,6 @@ packages: pretty-format: 29.3.1 dev: true - /@types/json5/0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - /@types/json5/0.0.30: resolution: {integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==} dev: true @@ -2886,6 +2908,10 @@ packages: resolution: {integrity: sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==} dev: true + /@types/node/18.11.18: + resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} + dev: true + /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -2919,7 +2945,7 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.11.15 + '@types/node': 18.11.18 dev: true /@types/resolve/1.20.2: @@ -2946,10 +2972,10 @@ packages: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} dev: true - /@types/sharp/0.31.0: - resolution: {integrity: sha512-nwivOU101fYInCwdDcH/0/Ru6yIRXOpORx25ynEOc6/IakuCmjOAGpaO5VfUl4QkDtUC6hj+Z2eCQvgXOioknw==} + /@types/sharp/0.31.1: + resolution: {integrity: sha512-5nWwamN9ZFHXaYEincMSuza8nNfOof8nmO+mcI+Agx1uMUk4/pQnNIcix+9rLPXzKrm1pS34+6WRDbDV0Jn7ag==} dependencies: - '@types/node': 18.11.17 + '@types/node': 18.11.18 dev: true /@types/stack-utils/2.0.1: @@ -2984,58 +3010,57 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@vitejs/plugin-react/3.0.0_vite@4.0.3: - resolution: {integrity: sha512-1mvyPc0xYW5G8CHQvJIJXLoMjl5Ct3q2g5Y2s6Ccfgwm45y48LBvsla7az+GkkAtYikWQ4Lxqcsq5RHLcZgtNQ==} + /@vitejs/plugin-react/3.0.1_vite@4.0.4: + resolution: {integrity: sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 dependencies: - '@babel/core': 7.20.5 - '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.20.5 - '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.20.5 + '@babel/core': 7.20.12 + '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.20.12 magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.0.3 + vite: 4.0.4 transitivePeerDependencies: - supports-color dev: true - /@vitejs/plugin-vue/4.0.0_vite@4.0.3+vue@3.2.45: + /@vitejs/plugin-vue/4.0.0_vite@4.0.4+vue@3.2.45: resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.0.3 + vite: 4.0.4 vue: 3.2.45 dev: true - /@volar/language-core/1.0.18: - resolution: {integrity: sha512-PFrqAksKhiuAqNV4fefoMilX+JutVq0Z3iM14xjLvWPv68fs2dLedwU84GiHfSPTMmRiPCJ2HhH2rz4qNY42lA==} + /@volar/language-core/1.0.22: + resolution: {integrity: sha512-hiJeCOqxNdtG/04FRGLGI9H9DVz2l6cTqPDBzwqplHXAWfMxjzUaGUrn9sfTG7YMFNZUgK4EYxJnRfhqdtbSFQ==} dependencies: - '@volar/source-map': 1.0.18 - '@vue/reactivity': 3.2.45 + '@volar/source-map': 1.0.22 muggle-string: 0.1.0 dev: true - /@volar/source-map/1.0.18: - resolution: {integrity: sha512-D8AcjrT2ukG5XiZhtSQBhcvL1TTlWOebCqS//Z/hGLGQZjpZHWaKD4OyDzKDzM0U9EtOuDh9rttnabCHDPvY2Q==} + /@volar/source-map/1.0.22: + resolution: {integrity: sha512-cv4gypHSP4MWVR82ed/+1IpI6794qAl0Q0+KJ+VGMVF8rVugsiF9QbyMCgjel9wNRsssQsazzsf6txOR9vHQiw==} dependencies: muggle-string: 0.1.0 dev: true - /@volar/typescript/1.0.18: - resolution: {integrity: sha512-xpH1Ij+PKtbIKEEYU2bF0llBRmu+ojjm/UA1WHNpi/dvsFWTIZcPniuqYEpPc32Zq/f8OPk98HbM2Oj5eue+vA==} + /@volar/typescript/1.0.22: + resolution: {integrity: sha512-VPyEicealSD4gqlE5/UQ1j3ietsO6Hfat40KtUEh/K+XEZ7h02b1KgFV64YEuBkBOaZ5hgvRW/WXKtQgXCl7Iw==} dependencies: - '@volar/language-core': 1.0.18 + '@volar/language-core': 1.0.22 dev: true - /@volar/vue-language-core/1.0.18: - resolution: {integrity: sha512-1yJcXYz9SdQUYoKWPbnr1SgMsBGXH29hS8W47p46P8Mm+5mmDdR/GFQw2+Zo5kAIS8vtLstlowI1Okoy7HFzIQ==} + /@volar/vue-language-core/1.0.22: + resolution: {integrity: sha512-Ki0G/ZdBj2/GLw+/VVH3n9XR/JL6krMIth02EekFn6JV4PGN3mNxbvoh6lOPSDZLR6biOU5nJPnnjpKy8nuXhw==} dependencies: - '@volar/language-core': 1.0.18 - '@volar/source-map': 1.0.18 + '@volar/language-core': 1.0.22 + '@volar/source-map': 1.0.22 '@vue/compiler-dom': 3.2.45 '@vue/compiler-sfc': 3.2.45 '@vue/reactivity': 3.2.45 @@ -3044,11 +3069,11 @@ packages: vue-template-compiler: 2.7.14 dev: true - /@volar/vue-typescript/1.0.18: - resolution: {integrity: sha512-pfi2/vTLgAPeRNgWzPFFv14YoLc3MnPMVKxl17ZLHStFgROUWQetTN+44FUWVYIl820MesMsyRv4kAIak0XGIQ==} + /@volar/vue-typescript/1.0.22: + resolution: {integrity: sha512-2T1o5z86PAev31OMtVOv/qp4P3ZVl9ln/2KTmykQE8Fh4A5F+868MW4nf5J7XQ6RNyx7RH9LhzgjvbqJpAfiYw==} dependencies: - '@volar/typescript': 1.0.18 - '@volar/vue-language-core': 1.0.18 + '@volar/typescript': 1.0.22 + '@volar/vue-language-core': 1.0.22 dev: true /@vscode/emmet-helper/2.8.6: @@ -3090,7 +3115,7 @@ packages: '@vue/shared': 3.2.45 estree-walker: 2.0.2 magic-string: 0.25.9 - postcss: 8.4.20 + postcss: 8.4.21 source-map: 0.6.1 /@vue/compiler-ssr/3.2.45: @@ -3322,22 +3347,22 @@ packages: hasBin: true dev: true - /astro-compress/1.1.24: - resolution: {integrity: sha512-S7yzhmYdHxMPn8N3E7XJFKhTuHFrwLovPyhMJAuReVmhISvR0cxubGxaYnSJZrE67vFePj5Y8Gkd82GJIjFS2A==} + /astro-compress/1.1.25: + resolution: {integrity: sha512-67AZL1cQ/GF0bEEOpzSRzJiHVHUExSy0mCt3kbh4maWP5ikdBmv4I4BlFhlBWOmS/POukSwtxHbkP2l9bALdbQ==} dependencies: '@types/csso': 5.0.0 '@types/html-minifier-terser': 7.0.0 - '@types/sharp': 0.31.0 + '@types/sharp': 0.31.1 csso: 5.0.5 files-pipeline: 0.0.2 html-minifier-terser: 7.1.0 - sharp: 0.31.2 + sharp: 0.31.3 svgo: 3.0.2 terser: 5.16.1 dev: true - /astro-critters/1.1.24: - resolution: {integrity: sha512-yyvAka+LeWO0LToHSc53yTjI1eUQqBDBg6uDbjEJ4vvaKegF6z122VPCFQzLe2dPeJiyYLUMUs3W5CIErZEBqQ==} + /astro-critters/1.1.25: + resolution: {integrity: sha512-jh730RIphX6PChbstzgc0N5v8qHidwYdv+WfywHILkbL1if1lBadA3s70AMSbEItAPcBnwS5fkhN+FMoLA8NGA==} dependencies: critters: 0.0.16 files-pipeline: 0.0.2 @@ -3347,21 +3372,21 @@ packages: resolution: {integrity: sha512-eszmxiycjfLcmoRyB8x5lCrWAwcSHs1i5riR1a5JbyJI8OQAl9tn1JvWFRuZvNH483CFdfNCczirnc805t/soA==} dev: false - /astro/1.8.0_sass@1.57.1: - resolution: {integrity: sha512-MZIJveOC1OCIA0w2XmxjDtKviAEuYdF142DVq0VApInE1lm+CvAoyMgJs0a1h4mydD2vgQZpTjPhYKJIdxDjOA==} + /astro/1.9.1_sass@1.57.1: + resolution: {integrity: sha512-aQ6rvAP4w4VCgipVYA/zPmnkuTbFrMZ/+x/sAv2W1uJHWU2iQmrVRrrjUFJl+i1TuYYlHAuC2vKK7aRyXCjD4A==} engines: {node: ^14.18.0 || >=16.12.0, npm: '>=6.14.0'} hasBin: true dependencies: - '@astrojs/compiler': 0.31.3 + '@astrojs/compiler': 0.31.4 '@astrojs/language-server': 0.28.3 '@astrojs/markdown-remark': 1.2.0 '@astrojs/telemetry': 1.0.1 '@astrojs/webapi': 1.1.1 - '@babel/core': 7.20.7 + '@babel/core': 7.20.12 '@babel/generator': 7.20.7 '@babel/parser': 7.20.7 - '@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.7 - '@babel/traverse': 7.20.10 + '@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.12 + '@babel/traverse': 7.20.12 '@babel/types': 7.20.7 '@proload/core': 0.3.3 '@proload/plugin-tsm': 0.2.1_@proload+core@0.3.3 @@ -3370,7 +3395,7 @@ packages: '@types/yargs-parser': 21.0.0 acorn: 8.8.1 boxen: 6.2.1 - ci-info: 3.7.0 + ci-info: 3.7.1 common-ancestor-path: 1.0.1 cookie: 0.5.0 debug: 4.3.4 @@ -3378,22 +3403,22 @@ packages: devalue: 4.2.0 diff: 5.1.0 es-module-lexer: 1.1.0 - estree-walker: 3.0.1 + estree-walker: 3.0.2 execa: 6.1.0 fast-glob: 3.2.12 - github-slugger: 1.5.0 + github-slugger: 2.0.0 gray-matter: 4.0.3 html-entities: 2.3.3 html-escaper: 3.0.3 - import-meta-resolve: 2.2.0 + import-meta-resolve: 2.2.1 kleur: 4.1.5 magic-string: 0.27.0 mime: 3.0.0 ora: 6.1.2 path-browserify: 1.0.1 path-to-regexp: 6.2.1 - postcss: 8.4.20 - postcss-load-config: 3.1.4_postcss@8.4.20 + postcss: 8.4.21 + postcss-load-config: 3.1.4_postcss@8.4.21 preferred-pm: 3.0.3 prompts: 2.4.2 recast: 0.20.5 @@ -3448,7 +3473,7 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /autoprefixer/10.4.13_postcss@8.4.20: + /autoprefixer/10.4.13_postcss@8.4.21: resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -3460,7 +3485,7 @@ packages: fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.20 + postcss: 8.4.21 postcss-value-parser: 4.2.0 dev: true @@ -3831,6 +3856,11 @@ packages: engines: {node: '>=8'} dev: true + /ci-info/3.7.1: + resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==} + engines: {node: '>=8'} + dev: true + /clean-css/5.2.0: resolution: {integrity: sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==} engines: {node: '>= 10.0'} @@ -3963,8 +3993,8 @@ packages: engines: {node: '>= 10'} dev: true - /commander/9.4.1: - resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} + /commander/9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} dev: true @@ -4003,7 +4033,7 @@ packages: css-select: 4.3.0 parse5: 6.0.1 parse5-htmlparser2-tree-adapter: 6.0.1 - postcss: 8.4.20 + postcss: 8.4.21 pretty-bytes: 5.6.0 dev: true @@ -4741,34 +4771,34 @@ packages: esbuild-windows-arm64: 0.15.18 dev: true - /esbuild/0.16.10: - resolution: {integrity: sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==} + /esbuild/0.16.15: + resolution: {integrity: sha512-v+3ozjy9wyj8cOElzx3//Lsb4TCxPfZxRmdsfm0YaEkvZu7y6rKH7Zi1UpDx4JI7dSQui+U1Qxhfij9KBbHfrA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.16.10 - '@esbuild/android-arm64': 0.16.10 - '@esbuild/android-x64': 0.16.10 - '@esbuild/darwin-arm64': 0.16.10 - '@esbuild/darwin-x64': 0.16.10 - '@esbuild/freebsd-arm64': 0.16.10 - '@esbuild/freebsd-x64': 0.16.10 - '@esbuild/linux-arm': 0.16.10 - '@esbuild/linux-arm64': 0.16.10 - '@esbuild/linux-ia32': 0.16.10 - '@esbuild/linux-loong64': 0.16.10 - '@esbuild/linux-mips64el': 0.16.10 - '@esbuild/linux-ppc64': 0.16.10 - '@esbuild/linux-riscv64': 0.16.10 - '@esbuild/linux-s390x': 0.16.10 - '@esbuild/linux-x64': 0.16.10 - '@esbuild/netbsd-x64': 0.16.10 - '@esbuild/openbsd-x64': 0.16.10 - '@esbuild/sunos-x64': 0.16.10 - '@esbuild/win32-arm64': 0.16.10 - '@esbuild/win32-ia32': 0.16.10 - '@esbuild/win32-x64': 0.16.10 + '@esbuild/android-arm': 0.16.15 + '@esbuild/android-arm64': 0.16.15 + '@esbuild/android-x64': 0.16.15 + '@esbuild/darwin-arm64': 0.16.15 + '@esbuild/darwin-x64': 0.16.15 + '@esbuild/freebsd-arm64': 0.16.15 + '@esbuild/freebsd-x64': 0.16.15 + '@esbuild/linux-arm': 0.16.15 + '@esbuild/linux-arm64': 0.16.15 + '@esbuild/linux-ia32': 0.16.15 + '@esbuild/linux-loong64': 0.16.15 + '@esbuild/linux-mips64el': 0.16.15 + '@esbuild/linux-ppc64': 0.16.15 + '@esbuild/linux-riscv64': 0.16.15 + '@esbuild/linux-s390x': 0.16.15 + '@esbuild/linux-x64': 0.16.15 + '@esbuild/netbsd-x64': 0.16.15 + '@esbuild/openbsd-x64': 0.16.15 + '@esbuild/sunos-x64': 0.16.15 + '@esbuild/win32-arm64': 0.16.15 + '@esbuild/win32-ia32': 0.16.15 + '@esbuild/win32-x64': 0.16.15 dev: true /escalade/3.1.1: @@ -4868,6 +4898,10 @@ packages: resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==} dev: true + /estree-walker/3.0.2: + resolution: {integrity: sha512-C03BvXCQIH/po+PNPONx/zSM9ziPr9weX8xNhYb/IJtdJ9z+L4z9VKPTB+UTHdmhnIopA2kc419ueyVyHVktwA==} + dev: true + /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -5226,6 +5260,10 @@ packages: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} dev: true + /github-slugger/2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + dev: true + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -5402,7 +5440,7 @@ packages: '@types/hast': 2.3.4 '@types/parse5': 6.0.3 '@types/unist': 2.0.6 - hastscript: 7.1.0 + hastscript: 7.2.0 property-information: 6.2.0 vfile: 5.3.6 vfile-location: 4.0.1 @@ -5426,8 +5464,8 @@ packages: '@types/unist': 2.0.6 dev: true - /hast-util-parse-selector/3.1.0: - resolution: {integrity: sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==} + /hast-util-parse-selector/3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} dependencies: '@types/hast': 2.3.4 dev: true @@ -5506,12 +5544,12 @@ packages: resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==} dev: true - /hastscript/7.1.0: - resolution: {integrity: sha512-uBjaTTLN0MkCZxY/R2fWUOcu7FRtUVzKRO5P/RAfgsu3yFiMB1JWCO4AjeVkgHxAira1f2UecHK5WfS9QurlWA==} + /hastscript/7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} dependencies: '@types/hast': 2.3.4 comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 3.1.0 + hast-util-parse-selector: 3.1.1 property-information: 6.2.0 space-separated-tokens: 2.0.2 dev: true @@ -5555,7 +5593,7 @@ packages: dependencies: camel-case: 4.1.2 clean-css: 5.2.0 - commander: 9.4.1 + commander: 9.5.0 entities: 4.4.0 param-case: 3.0.4 relateurl: 0.2.7 @@ -5641,6 +5679,10 @@ packages: resolution: {integrity: sha512-CpPOtiCHxP9HdtDM5F45tNiAe66Cqlv3f5uHoJjt+KlaLrUh9/Wz9vepADZ78SlqEo62aDWZtj9ydMGXV+CPnw==} dev: true + /import-meta-resolve/2.2.1: + resolution: {integrity: sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==} + dev: true + /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -6028,7 +6070,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.15 + '@types/node': 18.11.18 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -6057,8 +6099,8 @@ packages: argparse: 2.0.1 dev: true - /jsdom/20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + /jsdom/21.0.0: + resolution: {integrity: sha512-AIw+3ZakSUtDYvhwPwWHiZsUi3zHugpMEKlNPaurviseYoBqo0zBd3zqoUi3LPCNtPFlEP8FiW9MqCZdjb2IYA==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -6090,7 +6132,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.11.0 + ws: 8.12.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -6125,21 +6167,14 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true - /json5/1.0.1: - resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} - hasBin: true - dependencies: - minimist: 1.2.7 - dev: true - /json5/2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} hasBin: true dev: true - /json5/2.2.2: - resolution: {integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==} + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true @@ -7125,8 +7160,8 @@ packages: formdata-polyfill: 4.0.10 dev: true - /node-gyp-build/4.5.0: - resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==} + /node-gyp-build/4.6.0: + resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true dev: true @@ -7177,8 +7212,8 @@ packages: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true - /nx/15.4.2: - resolution: {integrity: sha512-np8eJfiBy2I8RZOWCKHr1oeUMHdqLQc7V6ihrzEQe2ZYUl9CSibtKvx0v8YGToHj/vYCiolRPhliFV5sFxgWlg==} + /nx/15.4.5: + resolution: {integrity: sha512-1spZL6sgOV8JJJuN8W5CLtJYwTOnlyaV32jPXfidavU0QMS8MP+rW3+NUQ9Uzc1UYhOu8llZWtnen93neVGQRw==} hasBin: true requiresBuild: true peerDependencies: @@ -7190,8 +7225,8 @@ packages: '@swc/core': optional: true dependencies: - '@nrwl/cli': 15.4.2 - '@nrwl/tao': 15.4.2 + '@nrwl/cli': 15.4.5 + '@nrwl/tao': 15.4.5 '@parcel/watcher': 2.0.4 '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.34 @@ -7220,7 +7255,7 @@ packages: strong-log-transformer: 2.1.0 tar-stream: 2.2.0 tmp: 0.2.1 - tsconfig-paths: 3.14.1 + tsconfig-paths: 4.1.2 tslib: 2.4.1 v8-compile-cache: 2.3.0 yargs: 17.6.2 @@ -7477,10 +7512,6 @@ packages: resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} dev: true - /pathe/0.3.9: - resolution: {integrity: sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==} - dev: true - /pathe/1.0.0: resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==} dev: true @@ -7538,13 +7569,13 @@ packages: tslib: 2.4.0 dev: false - /postcss-jit-props/1.0.8_postcss@8.4.20: - resolution: {integrity: sha512-cM9RAnigzeWzEmr6Vd+oycL83ae0gBmEJQySWvoBFeUc81PhRn/oS/QzIafU3OFhG6sFbMYZr4rO927+PzT7uQ==} + /postcss-jit-props/1.0.9_postcss@8.4.21: + resolution: {integrity: sha512-sMAo7eVF480LnEGG7G0uS+4L0wRZoXiLthxJePUqo4gHrzu17hU5obAdiscjp/aZag9TqokU6dpI1zHyDGxslA==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.2.8 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 tiny-glob: 0.2.9 dev: true @@ -7564,7 +7595,7 @@ packages: yaml: 1.10.2 dev: true - /postcss-load-config/3.1.4_postcss@8.4.20: + /postcss-load-config/3.1.4_postcss@8.4.21: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -7577,7 +7608,7 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - postcss: 8.4.20 + postcss: 8.4.21 yaml: 1.10.2 dev: true @@ -7585,8 +7616,8 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss/8.4.20: - resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} + /postcss/8.4.21: + resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 @@ -7627,18 +7658,18 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-astro/0.7.0: - resolution: {integrity: sha512-ehCUx7MqHWvkHwUmxxAWLsL35pFaCTM5YXQ8xjG/1W6dY2yBhvEks+2aCfjeI5zmMrZNCXkiMQtpznSlLSLrxw==} - engines: {node: ^14.15.0 || >=16.0.0, npm: '>=6.14.0'} + /prettier-plugin-astro/0.7.2: + resolution: {integrity: sha512-mmifnkG160BtC727gqoimoxnZT/dwr8ASxpoGGl6EHevhfblSOeu+pwH1LAm5Qu1MynizktztFujHHaijLCkww==} + engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'} dependencies: - '@astrojs/compiler': 0.29.19 - prettier: 2.8.1 + '@astrojs/compiler': 0.31.4 + prettier: 2.8.2 sass-formatter: 0.7.5 synckit: 0.8.4 dev: true - /prettier/2.8.1: - resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} + /prettier/2.8.2: + resolution: {integrity: sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -8139,16 +8170,8 @@ packages: fsevents: 2.3.2 dev: true - /rollup/3.8.0: - resolution: {integrity: sha512-+UR6PnUslneJNiJfLSzy4XH6R50ZGF0MS7UCv20ftXrktF/TkvZDwiBtXX65esblLR5p8w6LmXgPwt2f2B8SoQ==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /rollup/3.9.0: - resolution: {integrity: sha512-nGGylpmblyjTpF4lEUPgmOw6OVxRvnI6Iuuh6Lz4O/X66cVOX1XJSsqP1YamxQ+mPuFE7qJxLFDSCk8rNv5dDw==} + /rollup/3.9.1: + resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -8293,8 +8316,8 @@ packages: resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} dev: true - /sharp/0.31.2: - resolution: {integrity: sha512-DUdNVEXgS5A97cTagSLIIp8dUZ/lZtk78iNVZgHdHbx1qnQR7JAHY0BnXnwwH39Iw+VKhO08CTYhIg0p98vQ5Q==} + /sharp/0.31.3: + resolution: {integrity: sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==} engines: {node: '>=14.15.0'} requiresBuild: true dependencies: @@ -8422,12 +8445,12 @@ packages: yargs: 15.4.1 dev: true - /solid-js/1.6.6: - resolution: {integrity: sha512-5x33mEbPI8QLuywvFjQP4krjWDr8xiYFgZx9KCBH7b0ZzypQCHaUubob7bK6i+1u6nhaAqhWtvXS587Kb8DShA==} + /solid-js/1.6.8: + resolution: {integrity: sha512-+X5rf4bL3Il/LI2pn6O2d63D/KyG8Shxj3DM6violSPOhRgm5ln37Pq6uVDAvJcmsObOBeGOjXAwZvqwyZjisg==} dependencies: csstype: 3.1.1 - /solid-refresh/0.4.1_solid-js@1.6.6: + /solid-refresh/0.4.1_solid-js@1.6.8: resolution: {integrity: sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==} peerDependencies: solid-js: ^1.3 @@ -8435,7 +8458,7 @@ packages: '@babel/generator': 7.20.5 '@babel/helper-module-imports': 7.18.6 '@babel/types': 7.20.5 - solid-js: 1.6.6 + solid-js: 1.6.8 dev: true /sorcery/0.10.0: @@ -8766,8 +8789,8 @@ packages: svelte: 3.55.0 dev: true - /svelte-inview/3.0.1_svelte@3.55.0: - resolution: {integrity: sha512-kmlD4l/z5tqMqGuWLOSz6Ys2ISJ2WXg01jFVygugma0XA45UeYNGjoRazp+gMvaWoHqCQPx6D8cH9YQBS1pZxA==} + /svelte-inview/3.0.2_svelte@3.55.0: + resolution: {integrity: sha512-QdMGe8oE/dsoqbQHppeNgz9zK0Ahir+RYDqw5JwKJcbdzLOkgPGp0Dzt8c9PIdEQXoJD+piOeMGdQGrCmlyMag==} peerDependencies: svelte: ^3.0.0 dependencies: @@ -8783,7 +8806,7 @@ packages: svelte: 3.55.0 dev: false - /svelte-preprocess/4.10.7_7aebwwrmjccn5kot3h3sthyyui: + /svelte-preprocess/4.10.7_m6rugkm63xkkcx7ozipowpv6oi: resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} engines: {node: '>= 9.11.2'} requiresBuild: true @@ -8828,8 +8851,8 @@ packages: '@types/sass': 1.43.1 detect-indent: 6.1.0 magic-string: 0.25.9 - postcss: 8.4.20 - postcss-load-config: 3.1.4_postcss@8.4.20 + postcss: 8.4.21 + postcss-load-config: 3.1.4_postcss@8.4.21 sass: 1.57.1 sorcery: 0.10.0 strip-indent: 3.0.0 @@ -9112,11 +9135,11 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /tsconfig-paths/3.14.1: - resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + /tsconfig-paths/4.1.2: + resolution: {integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==} + engines: {node: '>=6'} dependencies: - '@types/json5': 0.0.29 - json5: 1.0.1 + json5: 2.2.3 minimist: 1.2.7 strip-bom: 3.0.0 dev: true @@ -9126,7 +9149,7 @@ packages: dependencies: '@types/json5': 0.0.30 '@types/resolve': 1.20.2 - json5: 2.2.2 + json5: 2.2.3 resolve: 1.22.1 strip-bom: 4.0.0 type-fest: 0.13.1 @@ -9321,10 +9344,10 @@ packages: vfile: 5.3.6 dev: true - /unimport/1.0.2_rollup@3.9.0: + /unimport/1.0.2_rollup@3.9.1: resolution: {integrity: sha512-DcYkDwl1XMZNmyEKUFzVzHAul0FZcj9m0OM/WRfaAtg6Gw1waYlypYJl6qAg31k57TnNPwGDCAxYPodYC5qomQ==} dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.0 + '@rollup/pluginutils': 5.0.2_rollup@3.9.1 escape-string-regexp: 5.0.0 fast-glob: 3.2.12 local-pkg: 0.4.2 @@ -9434,7 +9457,7 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unplugin-auto-import/0.12.1_rollup@3.9.0: + /unplugin-auto-import/0.12.1_rollup@3.9.1: resolution: {integrity: sha512-J/3ZORq5YGKG+8D5vLLOgqaHNK77izlVN07mQ752yRLqBNDbJiwPRSnUwwYqH5N6rDay1SqnJCHaUdbJ9QMI2w==} engines: {node: '>=14'} peerDependencies: @@ -9444,20 +9467,20 @@ packages: optional: true dependencies: '@antfu/utils': 0.7.2 - '@rollup/pluginutils': 5.0.2_rollup@3.9.0 + '@rollup/pluginutils': 5.0.2_rollup@3.9.1 local-pkg: 0.4.2 magic-string: 0.27.0 - unimport: 1.0.2_rollup@3.9.0 + unimport: 1.0.2_rollup@3.9.1 unplugin: 1.0.1 transitivePeerDependencies: - rollup dev: true - /unplugin-icons/0.14.15: - resolution: {integrity: sha512-J6YBA+fUzVM2IZPXCK3Pnk36jYVwQ6lkjRgOnZaXNIxpMDsmwDqrE1AGJ0zUbfuEoOa90OBGc0OPfN1r+qlSIQ==} + /unplugin-icons/0.15.1: + resolution: {integrity: sha512-d4Gc8A4qIJYIXKueltTwoHfR3Cxsdfnmz8lSN5dsITEyai5tdb0uWpbQkn3j9HUlLDSB1ybdQIf5CItxJT3UDw==} peerDependencies: '@svgr/core': '>=5.5.0' - '@vue/compiler-sfc': ^3.0.2 + '@vue/compiler-sfc': ^3.0.2 || ^2.7.0 vue-template-compiler: ^2.6.12 vue-template-es2015-compiler: ^1.9.0 peerDependenciesMeta: @@ -9472,7 +9495,7 @@ packages: dependencies: '@antfu/install-pkg': 0.1.1 '@antfu/utils': 0.7.2 - '@iconify/utils': 2.0.3 + '@iconify/utils': 2.0.11 debug: 4.3.4 kolorist: 1.6.0 local-pkg: 0.4.2 @@ -9568,8 +9591,8 @@ packages: vfile-message: 3.1.3 dev: true - /vite-node/0.26.2_u4qtfkm32ppnvboczhv56utkqi: - resolution: {integrity: sha512-4M/zlatItZAyvrQG+82zQBhgDjRZRhVJYFW4T9wcAKh7eMmSiPOVSeI5zsV9UzHXgCcIDKX0o0r3s4OxExTHqg==} + /vite-node/0.26.3_qfz55zahqkp66vn23sxaaw3yfe: + resolution: {integrity: sha512-Te2bq0Bfvq6XiO718I+1EinMjpNYKws6SNHKOmVbILAQimKoZKDd+IZLlkaYcBXPpK3HFe2U80k8Zw+m3w/a2w==} engines: {node: '>=v14.16.0'} hasBin: true dependencies: @@ -9578,7 +9601,7 @@ packages: pathe: 0.2.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.0.3_u4qtfkm32ppnvboczhv56utkqi + vite: 4.0.4_qfz55zahqkp66vn23sxaaw3yfe transitivePeerDependencies: - '@types/node' - less @@ -9589,7 +9612,7 @@ packages: - terser dev: true - /vite-plugin-solid/2.5.0_solid-js@1.6.6+vite@4.0.3: + /vite-plugin-solid/2.5.0_solid-js@1.6.8+vite@4.0.4: resolution: {integrity: sha512-VneGd3RyFJvwaiffsqgymeMaofn0IzQLPwDzafTV2f1agoWeeJlk5VrI5WqT9BTtLe69vNNbCJWqLhHr9fOdDw==} peerDependencies: solid-js: ^1.3.17 || ^1.4.0 || ^1.5.0 || ^1.6.0 @@ -9599,10 +9622,10 @@ packages: '@babel/preset-typescript': 7.18.6_@babel+core@7.20.5 babel-preset-solid: 1.6.3_@babel+core@7.20.5 merge-anything: 5.1.4 - solid-js: 1.6.6 - solid-refresh: 0.4.1_solid-js@1.6.6 - vite: 4.0.3 - vitefu: 0.2.3_vite@4.0.3 + solid-js: 1.6.8 + solid-refresh: 0.4.1_solid-js@1.6.8 + vite: 4.0.4 + vitefu: 0.2.3_vite@4.0.4 transitivePeerDependencies: - supports-color dev: true @@ -9633,7 +9656,7 @@ packages: optional: true dependencies: esbuild: 0.15.18 - postcss: 8.4.20 + postcss: 8.4.21 resolve: 1.22.1 rollup: 2.79.1 sass: 1.57.1 @@ -9641,8 +9664,8 @@ packages: fsevents: 2.3.2 dev: true - /vite/4.0.3: - resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} + /vite/4.0.4: + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -9666,16 +9689,16 @@ packages: terser: optional: true dependencies: - esbuild: 0.16.10 - postcss: 8.4.20 + esbuild: 0.16.15 + postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.8.0 + rollup: 3.9.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vite/4.0.3_sass@1.57.1: - resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} + /vite/4.0.4_qfz55zahqkp66vn23sxaaw3yfe: + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -9699,17 +9722,18 @@ packages: terser: optional: true dependencies: - esbuild: 0.16.10 - postcss: 8.4.20 + '@types/node': 18.11.18 + esbuild: 0.16.15 + postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.8.0 - sass: 1.57.1 + rollup: 3.9.1 + terser: 5.16.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vite/4.0.3_terser@5.16.1: - resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} + /vite/4.0.4_sass@1.57.1: + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -9733,17 +9757,17 @@ packages: terser: optional: true dependencies: - esbuild: 0.16.10 - postcss: 8.4.20 + esbuild: 0.16.15 + postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.8.0 - terser: 5.16.1 + rollup: 3.9.1 + sass: 1.57.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vite/4.0.3_u4qtfkm32ppnvboczhv56utkqi: - resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} + /vite/4.0.4_terser@5.16.1: + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -9767,17 +9791,16 @@ packages: terser: optional: true dependencies: - '@types/node': 18.11.17 - esbuild: 0.16.10 - postcss: 8.4.20 + esbuild: 0.16.15 + postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.8.0 + rollup: 3.9.1 terser: 5.16.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vitefu/0.2.3_vite@4.0.3: + /vitefu/0.2.3_vite@4.0.4: resolution: {integrity: sha512-75l7TTuU8isAhz1QFtNKjDkqjxvndfMC1AfIMjJ0ZQ59ZD0Ow9QOIsJJX16Wv9PS8f+zMzp6fHy5cCbKG/yVUQ==} peerDependencies: vite: ^3.0.0 || ^4.0.0 @@ -9785,7 +9808,7 @@ packages: vite: optional: true dependencies: - vite: 4.0.3_sass@1.57.1 + vite: 4.0.4_sass@1.57.1 dev: true /vitefu/0.2.4_vite@3.2.5: @@ -9799,7 +9822,7 @@ packages: vite: 3.2.5_sass@1.57.1 dev: true - /vitefu/0.2.4_vite@4.0.3: + /vitefu/0.2.4_vite@4.0.4: resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 @@ -9807,11 +9830,11 @@ packages: vite: optional: true dependencies: - vite: 4.0.3_terser@5.16.1 + vite: 4.0.4_terser@5.16.1 dev: true - /vitest/0.26.2_jsdom@20.0.3+terser@5.16.1: - resolution: {integrity: sha512-Jvqxh6SDy9SsuslkDjts0iDewDIdq4rveEt69YgDuAb1tVDGV0lDepVaeAFraoySWqneJmOt4TngFFNhlw7GfA==} + /vitest/0.26.3_jsdom@21.0.0+terser@5.16.1: + resolution: {integrity: sha512-FmHxU9aUCxTi23keF3vxb/Qp0lYXaaJ+jRLGOUmMS3qVTOJvgGE+f1VArupA6pEhaG2Ans4X+zV9dqM5WISMbg==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: @@ -9834,20 +9857,20 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.11.17 + '@types/node': 18.11.18 acorn: 8.8.1 acorn-walk: 8.2.0 chai: 4.3.7 debug: 4.3.4 - jsdom: 20.0.3 + jsdom: 21.0.0 local-pkg: 0.4.2 source-map: 0.6.1 strip-literal: 1.0.0 tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 4.0.3_u4qtfkm32ppnvboczhv56utkqi - vite-node: 0.26.2_u4qtfkm32ppnvboczhv56utkqi + vite: 4.0.4_qfz55zahqkp66vn23sxaaw3yfe + vite-node: 0.26.3_qfz55zahqkp66vn23sxaaw3yfe transitivePeerDependencies: - less - sass @@ -9925,14 +9948,14 @@ packages: he: 1.2.0 dev: true - /vue-tsc/1.0.18_typescript@4.9.4: - resolution: {integrity: sha512-JFLAz3Xh/iyTnMGdlfG3TuvcaJyFcqyELpLv50jyvOYLAS2+WHzac0IB73FQ37HmGm/4IWMkQZS5r/9FKSejQQ==} + /vue-tsc/1.0.22_typescript@4.9.4: + resolution: {integrity: sha512-xSxwgWR3czhv7sLKHWu6lzj9Xq6AtsCURVL45AY4TLGFszv2L2YlMgygXvqslyCM5bz9cyoIKSaZnzHqHTHjzA==} hasBin: true peerDependencies: typescript: '*' dependencies: - '@volar/vue-language-core': 1.0.18 - '@volar/vue-typescript': 1.0.18 + '@volar/vue-language-core': 1.0.22 + '@volar/vue-typescript': 1.0.22 typescript: 4.9.4 dev: true @@ -10276,12 +10299,12 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /ws/8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + /ws/8.12.0: + resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d38fff7e..e77bdbde 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,3 +2,4 @@ packages: - packages/** - '!**/test/**' - docs + - config diff --git a/scripts/gather-sizes.ts b/scripts/gather-sizes.ts index e0b3eac4..91aa7b20 100644 --- a/scripts/gather-sizes.ts +++ b/scripts/gather-sizes.ts @@ -1,11 +1,21 @@ import { file as brotliSize } from 'brotli-size'; import fg from 'fast-glob'; -import { writeFile, mkdir } from 'node:fs/promises'; +import { readFileSync } from 'node:fs'; +import { mkdir, writeFile } from 'node:fs/promises'; async function main() { - const files = (await fg(new URL('../packages/*/dist/index.js', import.meta.url).pathname)).filter( - (path) => !path.includes('core') - ); + const files = ( + await fg(new URL('../packages/*/dist/min/index.js', import.meta.url).pathname) + ).filter((path) => !path.includes('core')); + + const versions = (await fg(new URL('../packages/*/package.json', import.meta.url).pathname)) + .filter((path) => !path.includes('core')) + .map((path) => { + const framework = /packages\/(?[^ $]*)\/package\.json/.exec(path)?.groups + ?.framework!; + + return { framework, version: JSON.parse(readFileSync(path, 'utf-8')).version }; + }); const contents = ( await Promise.all( @@ -16,7 +26,16 @@ async function main() { return { framework, size }; }) ) - ).reduce((acc, { framework, size }) => ({ ...acc, [framework]: size }), {}); + ).reduce( + (acc, { framework, size }) => ({ + ...acc, + [framework]: { + size, + version: versions.find(({ framework: vFw }) => vFw === framework)?.version, + }, + }), + {} + ); // Ensure folder if not exists try {