diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
deleted file mode 100644
index 22ed36451..000000000
--- a/.github/workflows/pages.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: Deploy demo pages
-
-# Controls when the workflow will run
-on:
- push:
- branches: [main]
-
- # Allows you to run this workflow manually from the Actions tab
- workflow_dispatch:
-
-jobs:
- build:
- runs-on: ubuntu-latest
-
- steps:
- # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- - uses: actions/checkout@v3
-
- - uses: pnpm/action-setup@v2.2.4
-
- - name: install
- run: pnpm i
-
- - name: pages
- run: pnpm run pages
-
- - name: deploy pages
- uses: JamesIves/github-pages-deploy-action@v4.4.1
- with:
- branch: gh-pages # The branch the action should deploy to.
- folder: pages # The folder the action should deploy.
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 5a25679cb..719975175 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,7 +1,9 @@
{
"typescript.tsdk": "node_modules\\typescript\\lib",
+ "cSpell.words": ["Biase", "deopt", "gzipped", "rehype"],
"editor.codeActionsOnSave": {
"source.fixAll.eslint": false
},
- "cSpell.words": ["Biase", "deopt", "gzipped", "rehype"]
+ /* For allowing @apply and @tailwind custom rules in SCSS files */
+ "scss.lint.unknownAtRules": "ignore"
}
diff --git a/README.md b/README.md
index 262010f69..47eb3751c 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
[](https://pnpm.io/)
[](https://turborepo.org/)
-[](https://dash.deno.com/playground/combined-npm-downloads)
+[](https://dash.deno.com/playground/combined-npm-downloads)
A project that strives to develop high-quality, community contributed Solid primitives. All utilities are well tested and continuously maintained. Every contribution to the repository is checked for quality and maintained to the highest degree of excellence. The ultimate goal is to extend Solid's primary and secondary primitives with a set of tertiary primitives.
@@ -60,6 +60,7 @@ The goal of Solid Primitives is to wrap client and server side functionality to
|[fetch](https://github.com/solidjs-community/solid-primitives/tree/main/packages/fetch#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createFetch](https://github.com/solidjs-community/solid-primitives/tree/main/packages/fetch#createfetch)|[](https://bundlephobia.com/package/@solid-primitives/fetch)|[](https://www.npmjs.com/package/@solid-primitives/fetch)|
|[graphql](https://github.com/solidjs-community/solid-primitives/tree/main/packages/graphql#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createGraphQLClient](https://github.com/solidjs-community/solid-primitives/tree/main/packages/graphql#creategraphqlclient)|[](https://bundlephobia.com/package/@solid-primitives/graphql)|[](https://www.npmjs.com/package/@solid-primitives/graphql)|
|[stream](https://github.com/solidjs-community/solid-primitives/tree/main/packages/stream#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createStream](https://github.com/solidjs-community/solid-primitives/tree/main/packages/stream#createstream) [createAmplitudeStream](https://github.com/solidjs-community/solid-primitives/tree/main/packages/stream#createamplitudestream) [createMediaPermissionRequest](https://github.com/solidjs-community/solid-primitives/tree/main/packages/stream#createmediapermissionrequest) [createAmplitudeFromStream](https://github.com/solidjs-community/solid-primitives/tree/main/packages/stream#createamplitudefromstream) [createScreen](https://github.com/solidjs-community/solid-primitives/tree/main/packages/stream#createscreen)|[](https://bundlephobia.com/package/@solid-primitives/stream)|[](https://www.npmjs.com/package/@solid-primitives/stream)|
+|[websocket](https://github.com/solidjs-community/solid-primitives/tree/main/packages/websocket#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[makeWS](https://github.com/solidjs-community/solid-primitives/tree/main/packages/websocket#makews) [createWS](https://github.com/solidjs-community/solid-primitives/tree/main/packages/websocket#createws) [createWSState](https://github.com/solidjs-community/solid-primitives/tree/main/packages/websocket#createwsstate) [makeReconnectingWS](https://github.com/solidjs-community/solid-primitives/tree/main/packages/websocket#makereconnectingws) [createReconnectingWS](https://github.com/solidjs-community/solid-primitives/tree/main/packages/websocket#createreconnectingws) [makeHeartbeatWS](https://github.com/solidjs-community/solid-primitives/tree/main/packages/websocket#makeheartbeatws)|[](https://bundlephobia.com/package/@solid-primitives/websocket)|[](https://www.npmjs.com/package/@solid-primitives/websocket)|
|
*Control Flow*
|
|[context](https://github.com/solidjs-community/solid-primitives/tree/main/packages/context#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createContextProvider](https://github.com/solidjs-community/solid-primitives/tree/main/packages/context#createcontextprovider) [MultiProvider](https://github.com/solidjs-community/solid-primitives/tree/main/packages/context#multiprovider)|[](https://bundlephobia.com/package/@solid-primitives/context)|[](https://www.npmjs.com/package/@solid-primitives/context)|
|[jsx-tokenizer](https://github.com/solidjs-community/solid-primitives/tree/main/packages/jsx-tokenizer#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createTokenizer](https://github.com/solidjs-community/solid-primitives/tree/main/packages/jsx-tokenizer#createtokenizer) [createToken](https://github.com/solidjs-community/solid-primitives/tree/main/packages/jsx-tokenizer#createtoken) [resolveTokens](https://github.com/solidjs-community/solid-primitives/tree/main/packages/jsx-tokenizer#resolvetokens) [isToken](https://github.com/solidjs-community/solid-primitives/tree/main/packages/jsx-tokenizer#istoken)|[](https://bundlephobia.com/package/@solid-primitives/jsx-tokenizer)|[](https://www.npmjs.com/package/@solid-primitives/jsx-tokenizer)|
@@ -73,6 +74,7 @@ The goal of Solid Primitives is to wrap client and server side functionality to
|[event-bus](https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-bus#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createEventBus](https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-bus#createeventbus) [createEmitter](https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-bus#createemitter) [createEventHub](https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-bus#createeventhub) [createEventStack](https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-bus#createeventstack)|[](https://bundlephobia.com/package/@solid-primitives/event-bus)|[](https://www.npmjs.com/package/@solid-primitives/event-bus)|
|[event-dispatcher](https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-dispatcher#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createEventDispatcher](https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-dispatcher#createeventdispatcher)|[](https://bundlephobia.com/package/@solid-primitives/event-dispatcher)|[](https://www.npmjs.com/package/@solid-primitives/event-dispatcher)|
|[flux-store](https://github.com/solidjs-community/solid-primitives/tree/main/packages/flux-store#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createFluxStore](https://github.com/solidjs-community/solid-primitives/tree/main/packages/flux-store#createfluxstore) [createFluxFactory](https://github.com/solidjs-community/solid-primitives/tree/main/packages/flux-store#createfluxfactory) [createActions](https://github.com/solidjs-community/solid-primitives/tree/main/packages/flux-store#createactions) [createAction](https://github.com/solidjs-community/solid-primitives/tree/main/packages/flux-store#createaction)|[](https://bundlephobia.com/package/@solid-primitives/flux-store)|[](https://www.npmjs.com/package/@solid-primitives/flux-store)|
+|[history](https://github.com/solidjs-community/solid-primitives/tree/main/packages/history#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createUndoHistory](https://github.com/solidjs-community/solid-primitives/tree/main/packages/history#createundohistory)|[](https://bundlephobia.com/package/@solid-primitives/history)|[](https://www.npmjs.com/package/@solid-primitives/history)|
|[i18n](https://github.com/solidjs-community/solid-primitives/tree/main/packages/i18n#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createI18nContext](https://github.com/solidjs-community/solid-primitives/tree/main/packages/i18n#createi18ncontext) [createChainedI18n](https://github.com/solidjs-community/solid-primitives/tree/main/packages/i18n#createchainedi18n)|[](https://bundlephobia.com/package/@solid-primitives/i18n)|[](https://www.npmjs.com/package/@solid-primitives/i18n)|
|[platform](https://github.com/solidjs-community/solid-primitives/tree/main/packages/platform#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[List of variables](https://github.com/solidjs-community/solid-primitives/tree/main/packages/platform#list-of-variables)|[](https://bundlephobia.com/package/@solid-primitives/platform)|[](https://www.npmjs.com/package/@solid-primitives/platform)|
|[promise](https://github.com/solidjs-community/solid-primitives/tree/main/packages/promise#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[promiseTimeout](https://github.com/solidjs-community/solid-primitives/tree/main/packages/promise#promisetimeout) [raceTimeout](https://github.com/solidjs-community/solid-primitives/tree/main/packages/promise#racetimeout) [until](https://github.com/solidjs-community/solid-primitives/tree/main/packages/promise#until)|[](https://bundlephobia.com/package/@solid-primitives/promise)|[](https://www.npmjs.com/package/@solid-primitives/promise)|
@@ -86,7 +88,7 @@ The goal of Solid Primitives is to wrap client and server side functionality to
|[immutable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/immutable#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createImmutable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/immutable#createimmutable)|[](https://bundlephobia.com/package/@solid-primitives/immutable)|[](https://www.npmjs.com/package/@solid-primitives/immutable)|
|[lifecycle](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createIsMounted](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#createismounted) [isHydrated](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#ishydrated) [onConnect](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#onconnect)|[](https://bundlephobia.com/package/@solid-primitives/lifecycle)|[](https://www.npmjs.com/package/@solid-primitives/lifecycle)|
|[map](https://github.com/solidjs-community/solid-primitives/tree/main/packages/map#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[ReactiveMap](https://github.com/solidjs-community/solid-primitives/tree/main/packages/map#reactivemap) [ReactiveWeakMap](https://github.com/solidjs-community/solid-primitives/tree/main/packages/map#reactiveweakmap)|[](https://bundlephobia.com/package/@solid-primitives/map)|[](https://www.npmjs.com/package/@solid-primitives/map)|
-|[memo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createLatest](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createlatest) [createWritableMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createwritablememo) [createLazyMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createlazymemo) [createAsyncMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createasyncmemo) [createDebouncedMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createdebouncedmemo) [createDebouncedMemoOn](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createdebouncedmemoon) [createThrottledMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createthrottledmemo) [createPureReaction](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createpurereaction) [createMemoCache](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#creatememocache) [createReducer](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createreducer)|[](https://bundlephobia.com/package/@solid-primitives/memo)|[](https://www.npmjs.com/package/@solid-primitives/memo)|
+|[memo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createLatest](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createlatest) [createLatestMany](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createlatestmany) [createWritableMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createwritablememo) [createLazyMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createlazymemo) [createPureReaction](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createpurereaction) [createMemoCache](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#creatememocache) [createReducer](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createreducer)|[](https://bundlephobia.com/package/@solid-primitives/memo)|[](https://www.npmjs.com/package/@solid-primitives/memo)|
|[resource](https://github.com/solidjs-community/solid-primitives/tree/main/packages/resource#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createAggregated](https://github.com/solidjs-community/solid-primitives/tree/main/packages/resource#createaggregated) [createDeepSignal](https://github.com/solidjs-community/solid-primitives/tree/main/packages/resource#createdeepsignal) [makeAbortable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/resource#makeabortable) [makeCache](https://github.com/solidjs-community/solid-primitives/tree/main/packages/resource#makecache) [makeRetrying](https://github.com/solidjs-community/solid-primitives/tree/main/packages/resource#makeretrying)|[](https://bundlephobia.com/package/@solid-primitives/resource)|[](https://www.npmjs.com/package/@solid-primitives/resource)|
|[rootless](https://github.com/solidjs-community/solid-primitives/tree/main/packages/rootless#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createSubRoot](https://github.com/solidjs-community/solid-primitives/tree/main/packages/rootless#createsubroot) [createCallback](https://github.com/solidjs-community/solid-primitives/tree/main/packages/rootless#createcallback) [createDisposable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/rootless#createdisposable) [createSharedRoot](https://github.com/solidjs-community/solid-primitives/tree/main/packages/rootless#createsharedroot) [createRootPool](https://github.com/solidjs-community/solid-primitives/tree/main/packages/rootless#createrootpool)|[](https://bundlephobia.com/package/@solid-primitives/rootless)|[](https://www.npmjs.com/package/@solid-primitives/rootless)|
|[set](https://github.com/solidjs-community/solid-primitives/tree/main/packages/set#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[ReactiveSet](https://github.com/solidjs-community/solid-primitives/tree/main/packages/set#reactiveset) [ReactiveWeakSet](https://github.com/solidjs-community/solid-primitives/tree/main/packages/set#reactiveweakset)|[](https://bundlephobia.com/package/@solid-primitives/set)|[](https://www.npmjs.com/package/@solid-primitives/set)|
@@ -98,8 +100,11 @@ The goal of Solid Primitives is to wrap client and server side functionality to
|[masonry](https://github.com/solidjs-community/solid-primitives/tree/main/packages/masonry#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createMasonry](https://github.com/solidjs-community/solid-primitives/tree/main/packages/masonry#createmasonry)|[](https://bundlephobia.com/package/@solid-primitives/masonry)|[](https://www.npmjs.com/package/@solid-primitives/masonry)|
|[pagination](https://github.com/solidjs-community/solid-primitives/tree/main/packages/pagination#readme)|[](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createPagination](https://github.com/solidjs-community/solid-primitives/tree/main/packages/pagination#createpagination) [createInfiniteScroll](https://github.com/solidjs-community/solid-primitives/tree/main/packages/pagination#createinfinitescroll)|[](https://bundlephobia.com/package/@solid-primitives/pagination)|[](https://www.npmjs.com/package/@solid-primitives/pagination)|
|
- );
+ const [mounted, setMounted] = createSignal(false);
+ onMount(() => setMounted(true));
+
+ return {mounted() && };
};
-render(() => , document.getElementById("root") as HTMLElement);
+export default App;
diff --git a/packages/geolocation/dev/vite.config.ts b/packages/geolocation/dev/vite.config.ts
deleted file mode 100644
index 110baf399..000000000
--- a/packages/geolocation/dev/vite.config.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-import mkcert from "vite-plugin-mkcert";
-
-viteConfig.server = { https: true };
-viteConfig.plugins.push(mkcert());
-
-export default viteConfig;
diff --git a/packages/geolocation/package.json b/packages/geolocation/package.json
index 0a70ea008..0ddf65cc8 100644
--- a/packages/geolocation/package.json
+++ b/packages/geolocation/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/geolocation",
- "version": "1.4.9",
+ "version": "1.4.10",
"description": "Primitives to query geolocation and observe changes.",
"author": "David Di Biase ",
"license": "MIT",
@@ -42,11 +42,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"devDependencies": {
"@types/leaflet": "^1.9.3",
diff --git a/packages/gestures/dev/index.html b/packages/gestures/dev/index.html
deleted file mode 100644
index ff752026f..000000000
--- a/packages/gestures/dev/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/gestures/dev/index.tsx b/packages/gestures/dev/index.tsx
index f1c0b87dd..b5acacfae 100644
--- a/packages/gestures/dev/index.tsx
+++ b/packages/gestures/dev/index.tsx
@@ -1,7 +1,6 @@
import { pan } from "../src";
import { Component, createSignal, onMount } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
pan;
const App: Component = () => {
@@ -47,4 +46,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root"));
+export default App;
diff --git a/packages/gestures/dev/tsconfig.json b/packages/gestures/dev/tsconfig.json
deleted file mode 100644
index e27ffb701..000000000
--- a/packages/gestures/dev/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "module": "ESNext",
- "moduleResolution": "node",
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "jsx": "preserve",
- "jsxImportSource": "solid-js",
- "types": ["vite/client"]
- }
-}
diff --git a/packages/gestures/dev/vite.config.ts b/packages/gestures/dev/vite.config.ts
deleted file mode 100644
index 6bb63fec8..000000000
--- a/packages/gestures/dev/vite.config.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { defineConfig } from "vite";
-import solidPlugin from "vite-plugin-solid";
-import Unocss from "unocss/vite";
-
-export default defineConfig({
- plugins: [
- solidPlugin(),
- Unocss({
- shortcuts: {
- "center-child": "flex justify-center items-center",
- caption: "text-sm font-mono leading-tight",
- btn: "bg-teal-600 border-1 border-teal-500 hover:bg-teal-500 rounded cursor-pointer center-child select-none text-white font-semibold p-4 py-3",
- "node-h": "p-8 flex justify-center items-center space-x-8 bg-gray-700 rounded-2xl",
- "node-v": "node-h flex-col space-x-0 space-y-8",
- },
- }),
- ],
- build: {
- target: "esnext",
- polyfillDynamicImport: false,
- },
-});
diff --git a/packages/gestures/package.json b/packages/gestures/package.json
index ed7f80482..67fde6500 100644
--- a/packages/gestures/package.json
+++ b/packages/gestures/package.json
@@ -26,12 +26,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "start": "vite serve dev --host",
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/graphql/CHANGELOG.md b/packages/graphql/CHANGELOG.md
index 6ffdae647..9f5242ed0 100644
--- a/packages/graphql/CHANGELOG.md
+++ b/packages/graphql/CHANGELOG.md
@@ -1,5 +1,13 @@
# @solid-primitives/graphql
+## 1.5.9
+
+### Patch Changes
+
+- c4fd5890: fix resource states by omitting `initialValue` option if passed `undefined`
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 1.5.8
### Patch Changes
diff --git a/packages/graphql/dev/index.html b/packages/graphql/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/graphql/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/graphql/dev/index.tsx b/packages/graphql/dev/index.tsx
index 7ad8b4c40..8855b7fab 100644
--- a/packages/graphql/dev/index.tsx
+++ b/packages/graphql/dev/index.tsx
@@ -1,8 +1,7 @@
import { Component, createSignal, Show, For } from "solid-js";
-import { render } from "solid-js/web";
+
import { gql, createGraphQLClient, request, multipartRequest } from "../src";
import { CountryQueryDocument } from "./gqlgen";
-import "uno.css";
// This query will be used by `graphql-code-generator` to generate `CountryQueryDocument`.
// Normally it would be defined inside it's own file, but this is just
@@ -89,4 +88,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/graphql/dev/vite.config.ts b/packages/graphql/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/graphql/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/graphql/package.json b/packages/graphql/package.json
index e9114c392..c62059418 100644
--- a/packages/graphql/package.json
+++ b/packages/graphql/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/graphql",
- "version": "1.5.8",
+ "version": "1.5.9",
"description": "Primitive that generates a client and reactive GraphQL queries",
"author": "David Di Biase ",
"contributors": [
@@ -39,12 +39,12 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
"gqlgen": "graphql-codegen --config dev/codegen.yml",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"graphql",
diff --git a/packages/graphql/src/index.ts b/packages/graphql/src/index.ts
index 42065df46..cf1731d55 100644
--- a/packages/graphql/src/index.ts
+++ b/packages/graphql/src/index.ts
@@ -50,7 +50,7 @@ export const createGraphQLClient =
const variables = typeof vars === "boolean" ? {} : vars;
return request(access(url), query, { ...options, variables });
},
- { initialValue },
+ initialValue !== undefined ? { initialValue } : undefined,
);
/**
diff --git a/packages/history/CHANGELOG.md b/packages/history/CHANGELOG.md
new file mode 100644
index 000000000..d887898e2
--- /dev/null
+++ b/packages/history/CHANGELOG.md
@@ -0,0 +1,8 @@
+# @solid-primitives/history
+
+## 0.0.2
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
diff --git a/packages/history/LICENSE b/packages/history/LICENSE
new file mode 100644
index 000000000..38b41d975
--- /dev/null
+++ b/packages/history/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Solid Primitives Working Group
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/packages/history/README.md b/packages/history/README.md
new file mode 100644
index 000000000..5c6a10cce
--- /dev/null
+++ b/packages/history/README.md
@@ -0,0 +1,182 @@
+
+
+
+
+# @solid-primitives/history
+
+[](https://turborepo.org/)
+[](https://bundlephobia.com/package/@solid-primitives/history)
+[](https://www.npmjs.com/package/@solid-primitives/history)
+[](https://github.com/solidjs-community/solid-primitives#contribution-process)
+
+Primitives for managing undo/redo history in Solid.
+
+## Installation
+
+```bash
+npm install @solid-primitives/history
+# or
+yarn add @solid-primitives/history
+# or
+pnpm add @solid-primitives/history
+```
+
+## `createUndoHistory`
+
+Creates an undo history from a reactive source for going back and forth between state snapshots.
+
+### How to use it
+
+`createUndoHistory` takes two arguments:
+
+- `source` - A function or an array thereof that tracks the state to be restored, and returns a callback to restore it.
+- `options` - Configuration object. Optional.
+ - `limit` - The maximum number of history states. Defaults to `100`.
+
+```tsx
+import { createUndoHistory } from "@solid-primitives/history";
+
+const [count, setCount] = createSignal(0);
+
+const history = createUndoHistory(() => {
+ // track the changes to the state (and clone if you need to)
+ const v = count();
+ // return a callback to set the state back to the tracked value
+ return () => setCount(v);
+});
+
+// undo the last change
+history.undo();
+
+// redo the last change
+history.redo();
+
+// check if there are any changes to undo/redo with .canUndo() and .canRedo()
+return (
+ <>
+
+
+ >
+);
+```
+
+### Observing stores
+
+Stores have many independent points of updates, so you can choose how and what to track.
+
+But for the most part, you may want to track and copy the whole store value.
+
+Copying is important so that the history points are not affected by future mutations to the store.
+
+```ts
+const [state, setState] = createStore({ a: 0, b: 0 });
+
+const history = createUndoHistory(() => {
+ // track and clone the whole state
+ const stateVal = structuredClone(state);
+ // reconcile the state back to the tracked value
+ return () => setState(reconcile(stateVal));
+});
+```
+
+### Observing multiple sources
+
+You can track as many signals in the `source` callback as you want. Then any updates will create a point in history for all of them.
+
+```ts
+const [a, setA] = createSignal(0);
+const [b, setB] = createSignal(0);
+
+const history = createUndoHistory(() => {
+ const aVal = a();
+ const bVal = b();
+ return () => {
+ setA(aVal);
+ setB(bVal);
+ };
+});
+
+// set them both at the same time, to only create one point in history
+batch(() => {
+ setA(1);
+ setB(1);
+});
+```
+
+### Observing multiple independent sources
+
+If you want to track multiple independent sources, you can pass an array of source functions to `createUndoHistory`.
+
+This way the undo history will still be shared, but the individual source and setter functions will be called when needed, instead of all at once. This is useful for tracking multiple stores where you want to avoid unnecessary cloning and reconciliation.
+
+```ts
+const [a, setA] = createSignal(0);
+const [b, setB] = createSignal(0);
+
+const history = createUndoHistory([
+ () => {
+ const aVal = a();
+ return () => setA(aVal);
+ },
+ () => {
+ const bVal = b();
+ return () => setB(bVal);
+ },
+]);
+
+// e.g.
+setA(1);
+history.undo(); // will only call setA(0)
+```
+
+### Changing souces or clearing history
+
+If you want to change what sources get tracked, or clear the history, you can wrap the `createUndoHistory` call in a `createMemo`:
+
+Example of clearing the history:
+
+```ts
+const [trackClear, clear] = createSignal(undefined, { equals: false });
+
+const history = createMemo(() => {
+ // track what should rerun the memo
+ trackClear();
+ return createUndoHistory(/* ... */);
+});
+
+// history is now a signal
+history().undo();
+
+// clear the history
+clear();
+```
+
+Example of changing the source:
+
+```ts
+const [a, setA] = createSignal(0);
+const [b, setB] = createSignal(0);
+const [useA, setUseA] = createSignal(true);
+
+const history = createMemo(() =>
+ createUndoHistory(
+ useA()
+ ? () => {
+ const aVal = a();
+ return () => setA(aVal);
+ }
+ : () => {
+ const bVal = b();
+ return () => setB(bVal);
+ },
+ ),
+);
+```
+
+## Changelog
+
+See [CHANGELOG.md](./CHANGELOG.md)
diff --git a/packages/history/dev/index.tsx b/packages/history/dev/index.tsx
new file mode 100644
index 000000000..4df393e87
--- /dev/null
+++ b/packages/history/dev/index.tsx
@@ -0,0 +1,74 @@
+import { Component, JSX, createSignal } from "solid-js";
+import { render } from "solid-js/web";
+
+import { createUndoHistory } from "../src";
+
+const Button = (props: {
+ onClick: () => void;
+ onRightClick: () => void;
+ children: JSX.Element;
+}) => (
+
+);
+
+const App: Component = () => {
+ const [a, setA] = createSignal(0);
+ const [b, setB] = createSignal(0);
+
+ const history = createUndoHistory(
+ // createMultiHistorySource(
+ (
+ [
+ ["a", a, setA],
+ ["b", b, setB],
+ ] as const
+ ).map(([name, get, set]) => () => {
+ const v = get();
+ return () => {
+ console.log("set", name, v);
+ set(v);
+ };
+ }),
+ // ),
+ );
+
+ return (
+
);
};
-render(() => , document.getElementById("root"));
+export default App;
diff --git a/packages/mutation-observer/dev/tsconfig.json b/packages/mutation-observer/dev/tsconfig.json
deleted file mode 100644
index e27ffb701..000000000
--- a/packages/mutation-observer/dev/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "module": "ESNext",
- "moduleResolution": "node",
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "jsx": "preserve",
- "jsxImportSource": "solid-js",
- "types": ["vite/client"]
- }
-}
diff --git a/packages/mutation-observer/dev/vite.config.ts b/packages/mutation-observer/dev/vite.config.ts
deleted file mode 100644
index 21693af34..000000000
--- a/packages/mutation-observer/dev/vite.config.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { defineConfig } from "vite";
-import solidPlugin from "vite-plugin-solid";
-import Unocss from "unocss/vite";
-
-export default defineConfig({
- plugins: [
- solidPlugin(),
- Unocss({
- shortcuts: {
- "center-child": "flex justify-center items-center",
- caption: "text-xs text-gray-500",
- "btn-node":
- "absolute -inset-1px bg-teal-600 border-1 border-teal-500 hover:bg-teal-500 rounded cursor-pointer center-child select-none",
- "btn-node-parent":
- "w-14 h-10 relative bg-gray-800 border-1 border-gray-700 hover:bg-gray-700 rounded cursor-pointer",
- },
- }),
- ],
- build: {
- target: "esnext",
- polyfillDynamicImport: false,
- },
-});
diff --git a/packages/mutation-observer/package.json b/packages/mutation-observer/package.json
index 0d88c994a..741d50559 100644
--- a/packages/mutation-observer/package.json
+++ b/packages/mutation-observer/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/mutation-observer",
- "version": "1.1.12",
+ "version": "1.1.13",
"description": "Primitive providing the ability to watch for changes made to the DOM tree.",
"author": "Damian Tarnawski @thetarnav ",
"license": "MIT",
@@ -41,10 +41,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite -r ./dev/ -c ./dev/vite.config.ts",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"devDependencies": {
"@solid-primitives/composites": "^1.1.1"
diff --git a/packages/page-visibility/CHANGELOG.md b/packages/page-visibility/CHANGELOG.md
index 5a09f15bd..70b25078d 100644
--- a/packages/page-visibility/CHANGELOG.md
+++ b/packages/page-visibility/CHANGELOG.md
@@ -1,5 +1,21 @@
# @solid-primitives/page-visibility
+## 2.0.12
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+ - @solid-primitives/event-listener@2.2.13
+ - @solid-primitives/rootless@1.4.1
+
+## 2.0.11
+
+### Patch Changes
+
+- Updated dependencies [f03c47b0]
+ - @solid-primitives/event-listener@2.2.12
+
## 2.0.10
### Patch Changes
diff --git a/packages/page-visibility/package.json b/packages/page-visibility/package.json
index 1dec398b1..7fe605e9e 100644
--- a/packages/page-visibility/package.json
+++ b/packages/page-visibility/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/page-visibility",
- "version": "2.0.10",
+ "version": "2.0.12",
"description": "Primitive to track page visibility",
"author": "David Di Biase",
"contributors": [
@@ -39,9 +39,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr",
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr",
"test:watch": "watchlist src test -- npm test"
},
"keywords": [
diff --git a/packages/pagination/CHANGELOG.md b/packages/pagination/CHANGELOG.md
index 1e6dd16cc..e58493557 100644
--- a/packages/pagination/CHANGELOG.md
+++ b/packages/pagination/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/pagination
+## 0.2.7
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 0.2.6
### Patch Changes
diff --git a/packages/pagination/README.md b/packages/pagination/README.md
index 51febfa5e..0ca417337 100644
--- a/packages/pagination/README.md
+++ b/packages/pagination/README.md
@@ -113,7 +113,7 @@ return (
### Demo
You may view a working example here:
-https://solidjs-community.github.io/solid-primitives/pagination/
+https://primitives.solidjs.community/playground/pagination/
## `createInfiniteScroll`
diff --git a/packages/pagination/dev/index.html b/packages/pagination/dev/index.html
deleted file mode 100644
index 38e477282..000000000
--- a/packages/pagination/dev/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/pagination/dev/index.tsx b/packages/pagination/dev/index.tsx
index 91a0daf25..981f01434 100644
--- a/packages/pagination/dev/index.tsx
+++ b/packages/pagination/dev/index.tsx
@@ -1,6 +1,5 @@
import { Component, For, Show } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
import { createInfiniteScroll, createPagination } from "../src";
async function fetcher(page: number) {
@@ -48,4 +47,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/pagination/dev/vite.config.ts b/packages/pagination/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/pagination/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/pagination/package.json b/packages/pagination/package.json
index 8e5f94f2a..043571d87 100644
--- a/packages/pagination/package.json
+++ b/packages/pagination/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/pagination",
- "version": "0.2.6",
+ "version": "0.2.7",
"description": "A primitive that creates all the reactive data to manage your pagination.",
"author": "Alex Lohr ",
"contributors": [
@@ -49,11 +49,11 @@
},
"typesVersions": {},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"dependencies": {
"@solid-primitives/utils": "workspace:^"
diff --git a/packages/permission/dev/index.html b/packages/permission/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/permission/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/permission/dev/index.tsx b/packages/permission/dev/index.tsx
index 5d3c7523b..31bab2ab1 100644
--- a/packages/permission/dev/index.tsx
+++ b/packages/permission/dev/index.tsx
@@ -1,7 +1,6 @@
import { Component } from "solid-js";
-import { render } from "solid-js/web";
+
import { createPermission } from "../src";
-import "uno.css";
const App: Component = () => {
const micPermission = createPermission("microphone");
@@ -29,4 +28,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/permission/dev/vite.config.ts b/packages/permission/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/permission/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/permission/package.json b/packages/permission/package.json
index 6bbe0ffdc..719e5e16c 100644
--- a/packages/permission/package.json
+++ b/packages/permission/package.json
@@ -35,10 +35,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "dev": "vite serve dev --host",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/platform/dev/index.html b/packages/platform/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/platform/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/platform/dev/index.tsx b/packages/platform/dev/index.tsx
index 05c452f80..19b5ca397 100644
--- a/packages/platform/dev/index.tsx
+++ b/packages/platform/dev/index.tsx
@@ -1,6 +1,5 @@
import { Component } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
import * as platform from "../src";
const App: Component = () => {
@@ -28,4 +27,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/platform/dev/vite.config.ts b/packages/platform/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/platform/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/platform/package.json b/packages/platform/package.json
index f35fac4a9..ec847b7b5 100644
--- a/packages/platform/package.json
+++ b/packages/platform/package.json
@@ -46,11 +46,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/pointer/CHANGELOG.md b/packages/pointer/CHANGELOG.md
index 841aeff7d..fde71d186 100644
--- a/packages/pointer/CHANGELOG.md
+++ b/packages/pointer/CHANGELOG.md
@@ -1,5 +1,21 @@
# @solid-primitives/pointer
+## 0.2.14
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+ - @solid-primitives/event-listener@2.2.13
+ - @solid-primitives/rootless@1.4.1
+
+## 0.2.13
+
+### Patch Changes
+
+- Updated dependencies [f03c47b0]
+ - @solid-primitives/event-listener@2.2.12
+
## 0.2.12
### Patch Changes
diff --git a/packages/pointer/dev/index.html b/packages/pointer/dev/index.html
deleted file mode 100644
index ff752026f..000000000
--- a/packages/pointer/dev/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/pointer/dev/index.tsx b/packages/pointer/dev/index.tsx
index 900a35c45..e9c758a43 100644
--- a/packages/pointer/dev/index.tsx
+++ b/packages/pointer/dev/index.tsx
@@ -1,7 +1,6 @@
import { createPointerListeners, pointerHover, createPointerList } from "../src";
import { Component, createSignal, For } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
pointerHover;
const App: Component = () => {
@@ -86,4 +85,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root"));
+export default App;
diff --git a/packages/pointer/dev/tsconfig.json b/packages/pointer/dev/tsconfig.json
deleted file mode 100644
index e27ffb701..000000000
--- a/packages/pointer/dev/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "module": "ESNext",
- "moduleResolution": "node",
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "jsx": "preserve",
- "jsxImportSource": "solid-js",
- "types": ["vite/client"]
- }
-}
diff --git a/packages/pointer/dev/vite.config.ts b/packages/pointer/dev/vite.config.ts
deleted file mode 100644
index fc616fe3f..000000000
--- a/packages/pointer/dev/vite.config.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { defineConfig } from "vite";
-import solidPlugin from "vite-plugin-solid";
-import Unocss from "unocss/vite";
-
-export default defineConfig({
- plugins: [
- solidPlugin(),
- Unocss({
- shortcuts: {
- "center-child": "flex justify-center items-center",
- caption: "text-sm font-mono leading-tight",
- btn: "bg-teal-600 border-1 border-teal-500 hover:bg-teal-500 rounded cursor-pointer center-child select-none text-white font-semibold p-4 py-3 m-2",
- "wrapper-h":
- "p-6 flex justify-center items-center space-x-4 space-y-0 bg-gray-700 rounded-2xl",
- "wrapper-v": "wrapper-h flex-col space-x-0 space-y-4",
- node: "p-4 bg-orange-600 rounded m-2",
- ball: "w-8 h-8 fixed -top-4 -left-4 opacity-50 rounded-full pointer-events-none",
- row: "flex items-center space-x-2",
- },
- }),
- ],
- build: {
- target: "esnext",
- polyfillDynamicImport: false,
- },
-});
diff --git a/packages/pointer/package.json b/packages/pointer/package.json
index d16ec73fd..84686e58c 100644
--- a/packages/pointer/package.json
+++ b/packages/pointer/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/pointer",
- "version": "0.2.12",
+ "version": "0.2.14",
"description": "A collection of primitives, giving you a nicer API to handle pointer events in a reactive context.",
"author": "Damian Tarnawski @thetarnav ",
"license": "MIT",
@@ -47,11 +47,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"dependencies": {
"@solid-primitives/event-listener": "workspace:^",
diff --git a/packages/presence/CHANGELOG.md b/packages/presence/CHANGELOG.md
new file mode 100644
index 000000000..39cd42a69
--- /dev/null
+++ b/packages/presence/CHANGELOG.md
@@ -0,0 +1,8 @@
+# @solid-primitives/presence
+
+## 0.0.2
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
diff --git a/packages/presence/LICENSE b/packages/presence/LICENSE
new file mode 100644
index 000000000..38b41d975
--- /dev/null
+++ b/packages/presence/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Solid Primitives Working Group
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/packages/presence/README.md b/packages/presence/README.md
new file mode 100644
index 000000000..d29e9cd20
--- /dev/null
+++ b/packages/presence/README.md
@@ -0,0 +1,174 @@
+
+
+
+
+# @solid-primitives/presence
+
+[](https://turborepo.org/)
+[](https://bundlephobia.com/package/@solid-primitives/presence)
+[](https://www.npmjs.com/package/@solid-primitives/presence)
+[](https://github.com/solidjs-community/solid-primitives#contribution-process)
+
+A small SolidJS utility to animate the presence of an element. Inspired by & directly forked from [`use-presence`](https://www.npmjs.com/package/use-presence).
+
+### The problem
+
+There are two problems that you have to solve when animating the presence of an element:
+
+1. During enter animations, you have to render an initial state where the element is hidden and only after the latest state has propagated to the DOM, you can can animate the final state that the element should animate towards.
+2. Exit animations are a bit tricky in SolidJS, since this typically means that a component unmounts. However when the component has already unmounted, you can't animate it anymore. A workaround is often to keep the element mounted, but that keeps unnecessary elements around and can hurt accessibility, as hidden interactive elements might still be focusable.
+
+### This solution
+
+This utility provides a lightweight solution where the animating element is only mounted the minimum of time, while making sure the animation is fully visible to the user. The rendering is left to the user to support all kinds of styling solutions.
+
+## Installation
+
+```bash
+npm install @solid-primitives/presence
+# or
+yarn add @solid-primitives/presence
+# or
+pnpm add @solid-primitives/presence
+```
+
+## How to use it
+
+### `createPresence` boolean example
+
+```tsx
+const FirstExample = () => {
+ const [showStuff, setShowStuff] = createSignal(true);
+ const { isVisible, isMounted } = createPresence(showStuff, {
+ transitionDuration: 500,
+ });
+
+ return (
+
+
+
+
+ I am the stuff!
+
+
+
+ );
+};
+```
+
+### `createPresence` switching example
+
+The first argument of `createPresence` is a signal accessor of arbitrary type. This allows you to use it with any kind of data, not just booleans. This is useful if you want to animate between different items. If you utilize the returned `mountedItem` property, you can get the data which should be currently mounted regardless of the animation state
+
+```tsx
+const SecondExample = () => {
+ const items = ["foo", "bar", "baz", "qux"];
+ const [activeItem, setActiveItem] = createSignal(items[0]);
+ const presence = createPresence(activeItem, {
+ transitionDuration: 500,
+ });
+
+ return (
+
+
+ {item => (
+
+ )}
+
+
+
+ {presence.mountedItem()}
+
+
+
+ );
+};
+```
+
+### `createPresence` options API
+
+```ts
+function createPresence(
+ item: Accessor,
+ options: Options,
+): PresenceResult;
+
+type Options = {
+ /** Duration in milliseconds used both for enter and exit transitions. */
+ transitionDuration: MaybeAccessor;
+ /** Duration in milliseconds used for enter transitions (overrides `transitionDuration` if provided). */
+ enterDuration: MaybeAccessor;
+ /** Duration in milliseconds used for exit transitions (overrides `transitionDuration` if provided). */
+ exitDuration: MaybeAccessor;
+ /** Opt-in to animating the entering of an element if `isVisible` is `true` during the initial mount. */
+ initialEnter?: boolean;
+};
+
+type PresenceResult = {
+ /** Should the component be returned from render? */
+ isMounted: Accessor;
+ /** The item that is currently mounted. */
+ mountedItem: Accessor;
+ /** Should the component have its visible styles applied? */
+ isVisible: Accessor;
+ /** Is the component either entering or exiting currently? */
+ isAnimating: Accessor;
+ /** Is the component entering currently? */
+ isEntering: Accessor;
+ /** Is the component exiting currently? */
+ isExiting: Accessor;
+};
+```
+
+## Demo
+
+Demo can be seen [here](https://stackblitz.com/edit/presence-demo).
+
+## Changelog
+
+See [CHANGELOG.md](./CHANGELOG.md)
+
+## Related
+
+- [`use-presence`](https://www.npmjs.com/package/use-presence)
+- [`@solid-primitives/transition-group`](https://www.npmjs.com/package/@solid-primitives/transition-group)
diff --git a/packages/presence/dev/index.tsx b/packages/presence/dev/index.tsx
new file mode 100644
index 000000000..352f5a626
--- /dev/null
+++ b/packages/presence/dev/index.tsx
@@ -0,0 +1,102 @@
+import { Component, For, Show, createSignal } from "solid-js";
+import { createPresence } from "../src";
+
+const App: Component = () => {
+ return (
+ <>
+
+
+ >
+ );
+};
+
+const FirstExample = () => {
+ const [showStuff, setShowStuff] = createSignal(true);
+ const { isVisible, isMounted } = createPresence(showStuff, {
+ transitionDuration: 500,
+ });
+
+ return (
+
+ );
+};
+
+export default App;
diff --git a/packages/presence/package.json b/packages/presence/package.json
new file mode 100644
index 000000000..829ed5f75
--- /dev/null
+++ b/packages/presence/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "@solid-primitives/presence",
+ "version": "0.0.2",
+ "description": "Utility to animate the presence of an element based on the existence of data or lack thereof.",
+ "author": "Ethan Standel ",
+ "license": "MIT",
+ "homepage": "https://github.com/solidjs-community/solid-primitives/tree/main/packages/presence#readme",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/solidjs-community/solid-primitives.git"
+ },
+ "primitive": {
+ "name": "presence",
+ "stage": 0,
+ "list": [
+ "createPresence"
+ ],
+ "category": "Animation"
+ },
+ "files": [
+ "dist"
+ ],
+ "private": false,
+ "sideEffects": false,
+ "type": "module",
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.js",
+ "types": "./dist/index.d.ts",
+ "browser": {},
+ "exports": {
+ "import": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ },
+ "require": "./dist/index.cjs"
+ },
+ "keywords": [
+ "animation",
+ "animate",
+ "presence",
+ "transition"
+ ],
+ "scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
+ "build": "jiti ../../scripts/build.ts",
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
+ },
+ "dependencies": {
+ "@solid-primitives/utils": "workspace:^"
+ },
+ "peerDependencies": {
+ "solid-js": "^1.6.12"
+ },
+ "typesVersions": {}
+}
diff --git a/packages/presence/src/index.ts b/packages/presence/src/index.ts
new file mode 100644
index 000000000..e720e1c4b
--- /dev/null
+++ b/packages/presence/src/index.ts
@@ -0,0 +1,181 @@
+/*
+
+MIT License (MIT)
+Inspired by & directly forked from use-presence by Jan Amann @amannn
+See https://github.com/amannn/react-hooks/tree/main/packages/use-presence
+
+*/
+
+import {
+ createSignal,
+ createEffect,
+ onCleanup,
+ type Accessor,
+ createMemo,
+ untrack,
+} from "solid-js";
+import { MaybeAccessor, asAccessor } from "@solid-primitives/utils";
+
+export type SharedTransitionConfig = {
+ /** Duration in milliseconds used both for enter and exit transitions. */
+ transitionDuration: MaybeAccessor;
+};
+
+export type SeparateTransitionConfig = {
+ /** Duration in milliseconds used for enter transitions (overrides `transitionDuration` if provided). */
+ enterDuration: MaybeAccessor;
+ /** Duration in milliseconds used for exit transitions (overrides `transitionDuration` if provided). */
+ exitDuration: MaybeAccessor;
+};
+
+export type Options = (
+ | SharedTransitionConfig
+ | SeparateTransitionConfig
+ | (SharedTransitionConfig & SeparateTransitionConfig)
+) & {
+ /** Opt-in to animating the entering of an element if `isVisible` is `true` during the initial mount. */
+ initialEnter?: boolean;
+};
+
+/**
+ * Animates the appearance of its children.
+ *
+ * @internal - to be combined with `createPresence` in the future
+ */
+function createPresenceBase(
+ /** Indicates whether the component that the resulting values will be used upon should be visible to the user. */
+ source: Accessor,
+ options: Options,
+) {
+ const exitDuration = asAccessor(
+ "exitDuration" in options ? options.exitDuration : options.transitionDuration,
+ );
+ const enterDuration = asAccessor(
+ "enterDuration" in options ? options.enterDuration : options.transitionDuration,
+ );
+
+ const initialSource = untrack(source);
+ const initialState = options.initialEnter ? false : initialSource;
+ const [isVisible, setIsVisible] = createSignal(initialState);
+ const [isMounted, setIsMounted] = createSignal(initialSource);
+ const [hasEntered, setHasEntered] = createSignal(initialState);
+
+ const isExiting = createMemo(() => isMounted() && !source());
+ const isEntering = createMemo(() => source() && !hasEntered());
+ const isAnimating = createMemo(() => isEntering() || isExiting());
+
+ createEffect(() => {
+ if (source()) {
+ // `animateVisible` needs to be set to `true` in a second step, as
+ // when both flags would be flipped at the same time, there would
+ // be no transition. See the second effect below.
+ setIsMounted(true);
+ } else {
+ setHasEntered(false);
+ setIsVisible(false);
+
+ const timeoutId = setTimeout(() => {
+ setIsMounted(false);
+ }, exitDuration());
+
+ onCleanup(() => clearTimeout(timeoutId));
+ }
+ });
+
+ createEffect(() => {
+ if (source() && isMounted() && !isVisible()) {
+ document.body.offsetHeight; // force reflow
+
+ const animationFrameId = requestAnimationFrame(() => {
+ setIsVisible(true);
+ });
+
+ onCleanup(() => cancelAnimationFrame(animationFrameId));
+ }
+ });
+
+ createEffect(() => {
+ if (isVisible() && !hasEntered()) {
+ const timeoutId = setTimeout(() => {
+ setHasEntered(true);
+ }, enterDuration());
+
+ onCleanup(() => clearTimeout(timeoutId));
+ }
+ });
+
+ return {
+ isMounted,
+ isVisible,
+ isAnimating,
+ isEntering,
+ isExiting,
+ };
+}
+
+const itemShouldBeMounted = (item: TItem) => item !== false && item != null;
+
+/**
+ * The result of {@link createPresence}.
+ */
+export type PresenceResult = {
+ /** Should the component be returned from render? */
+ isMounted: Accessor;
+ /** The item that is currently mounted. */
+ mountedItem: Accessor;
+ /** Should the component have its visible styles applied? */
+ isVisible: Accessor;
+ /** Is the component either entering or exiting currently? */
+ isAnimating: Accessor;
+ /** Is the component entering currently? */
+ isEntering: Accessor;
+ /** Is the component exiting currently? */
+ isExiting: Accessor;
+};
+
+/**
+ * Utility to animate the presence of an element based on the existence of data or lack thereof.
+ *
+ * @param item a reactive value driving the transition
+ * @param options options to configure the transition, see {@link Options}
+ * @returns an object with reactive accessors representing the state of the transition. See {@link PresenceResult}.
+ *
+ * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/presence#createPresence
+ *
+ * @example
+ * ```ts
+ * const items = ["foo", "bar", "baz", "qux"];
+ * const [activeItem, setActiveItem] = createSignal(items[0]);
+ * const presence = createPresence(activeItem);
+ * ```
+ */
+export function createPresence(
+ item: Accessor,
+ options: Options,
+): PresenceResult {
+ const initial = untrack(item);
+ const [mountedItem, setMountedItem] = createSignal(initial);
+ const [shouldBeMounted, setShouldBeMounted] = createSignal(itemShouldBeMounted(initial));
+ const { isMounted, ...rest } = createPresenceBase(shouldBeMounted, options);
+
+ createEffect(() => {
+ if (mountedItem() !== item()) {
+ if (isMounted()) {
+ setShouldBeMounted(false);
+ } else if (itemShouldBeMounted(item())) {
+ setMountedItem(() => item());
+ setShouldBeMounted(true);
+ }
+ } else if (!itemShouldBeMounted(item())) {
+ setShouldBeMounted(false);
+ } else if (itemShouldBeMounted(item())) {
+ setShouldBeMounted(true);
+ }
+ });
+
+ return {
+ ...rest,
+ isMounted: () => isMounted() && mountedItem() !== undefined,
+ mountedItem,
+ };
+}
diff --git a/packages/presence/test/createPresence.test.ts b/packages/presence/test/createPresence.test.ts
new file mode 100644
index 000000000..5dd1dbe1a
--- /dev/null
+++ b/packages/presence/test/createPresence.test.ts
@@ -0,0 +1,191 @@
+import { describe, it, expect } from "vitest";
+import { createRoot, createSignal } from "solid-js";
+import { createPresence } from "../src";
+
+const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
+// The state transitions often take an extra ~20ms to changeover
+// because the transition currently has an awaited animation frame
+// which Vitest seems to just assume is (1 / 60Hz) seconds
+// So 50 is added onto wait times for safety
+const transitionTimeOffset = 50;
+
+describe("createPresence", () => {
+ it("initially marks the element's mounted & visibility status based on the initial state", () =>
+ createRoot(dispose => {
+ const [shouldRender] = createSignal(true);
+ const first = createPresence(shouldRender, {
+ transitionDuration: 50,
+ });
+ expect(first.isMounted()).toBe(true);
+ expect(first.isVisible()).toBe(true);
+
+ const [shouldNotRender] = createSignal(false);
+ const second = createPresence(shouldNotRender, {
+ transitionDuration: 50,
+ });
+ expect(second.isMounted()).toBe(false);
+ expect(second.isVisible()).toBe(false);
+ dispose();
+ }));
+
+ it("initially is never animating by default", () =>
+ createRoot(dispose => {
+ const [shouldRender] = createSignal(true);
+ const first = createPresence(shouldRender, {
+ transitionDuration: 50,
+ });
+ expect(first.isAnimating()).toBe(false);
+
+ const [shouldNotRender] = createSignal(false);
+ const second = createPresence(shouldNotRender, {
+ transitionDuration: 50,
+ });
+ expect(second.isAnimating()).toBe(false);
+ dispose();
+ }));
+
+ it("is animating if the initial render state is true and the initialEnter option is provided as true", () =>
+ createRoot(dispose => {
+ const [shouldRender] = createSignal(true);
+ const first = createPresence(shouldRender, {
+ transitionDuration: 50,
+ initialEnter: true,
+ });
+ expect(first.isAnimating()).toBe(true);
+
+ const [shouldNotRender] = createSignal(false);
+ const second = createPresence(shouldNotRender, {
+ transitionDuration: 50,
+ initialEnter: true,
+ });
+ // not animating because it doesn't exist initially
+ expect(second.isAnimating()).toBe(false);
+ dispose();
+ }));
+
+ it("is in a mounted & animating state for the transitionDuration and then it is only in a mounted state", () =>
+ createRoot(async dispose => {
+ const [shouldRender, setShouldRender] = createSignal(false);
+ const transitionDuration = 50;
+ const { isMounted, isAnimating } = createPresence(shouldRender, {
+ transitionDuration,
+ });
+ expect(isMounted()).toBe(false);
+ expect(isAnimating()).toBe(false);
+ setShouldRender(true);
+ await sleep(0);
+ expect(isMounted()).toBe(true);
+ expect(isAnimating()).toBe(true);
+ await sleep(transitionDuration + transitionTimeOffset);
+ expect(isMounted()).toBe(true);
+ expect(isAnimating()).toBe(false);
+ setShouldRender(false);
+ await sleep(0);
+ expect(isMounted()).toBe(true);
+ expect(isAnimating()).toBe(true);
+ await sleep(transitionDuration + transitionTimeOffset);
+ expect(isMounted()).toBe(false);
+ expect(isAnimating()).toBe(false);
+ dispose();
+ }));
+
+ it("swaps between a mounted & unmounted state based on unique enter & exit transition states", () =>
+ createRoot(async dispose => {
+ const [shouldRender, setShouldRender] = createSignal(false);
+ // using longer durations to ensure that the transitionTimeOffset
+ // is doesn't play into the test timings
+ const enterDuration = 300;
+ const exitDuration = 150;
+ const { isMounted, isAnimating } = createPresence(shouldRender, {
+ enterDuration,
+ exitDuration,
+ });
+ expect(isMounted()).toBe(false);
+ expect(isAnimating()).toBe(false);
+ setShouldRender(true);
+ await sleep(0);
+ expect(isMounted()).toBe(true);
+ expect(isAnimating()).toBe(true);
+ // ensure that we're not done animating after the shorter time
+ await sleep(exitDuration + transitionTimeOffset);
+ expect(isAnimating()).toBe(true);
+ await sleep(exitDuration + transitionTimeOffset);
+ expect(isMounted()).toBe(true);
+ expect(isAnimating()).toBe(false);
+ setShouldRender(false);
+ await sleep(0);
+ expect(isMounted()).toBe(true);
+ expect(isAnimating()).toBe(true);
+ await sleep(exitDuration + transitionTimeOffset);
+ expect(isMounted()).toBe(false);
+ expect(isAnimating()).toBe(false);
+ dispose();
+ }));
+
+ // data switching tests
+
+ type Data = "foo" | "bar" | "baz" | undefined;
+
+ it("initially identifies as not mounted if the initial data is undefined", () =>
+ createRoot(dispose => {
+ const [data] = createSignal();
+ const { mountedItem, isMounted } = createPresence(data, {
+ transitionDuration: 50,
+ });
+ expect(mountedItem()).toBe(undefined);
+ expect(isMounted()).toBe(false);
+ dispose();
+ }));
+
+ it("initially identifies as mounted if the initial data is defined", () =>
+ createRoot(dispose => {
+ const [data] = createSignal("foo");
+ const { mountedItem, isMounted } = createPresence(data, {
+ transitionDuration: 50,
+ });
+ expect(mountedItem()).toBe("foo");
+ expect(isMounted()).toBe(true);
+ dispose();
+ }));
+
+ it("initially animates if the initial data is defined", () =>
+ createRoot(async dispose => {
+ const [data] = createSignal("foo");
+ const transitionDuration = 50;
+ const { mountedItem, isAnimating } = createPresence(data, {
+ transitionDuration,
+ initialEnter: true,
+ });
+ expect(mountedItem()).toBe("foo");
+ expect(isAnimating()).toBe(true);
+ await sleep(transitionDuration + transitionTimeOffset);
+ expect(isAnimating()).toBe(false);
+ dispose();
+ }));
+
+ it("initially exchanges the data over the transition time", () =>
+ createRoot(async dispose => {
+ const [data, setData] = createSignal("foo");
+ const transitionDuration = 150;
+ const { mountedItem, isAnimating, isEntering, isExiting } = createPresence(data, {
+ transitionDuration,
+ });
+ expect(isAnimating()).toBe(false);
+ setData("bar");
+ await sleep(0);
+ expect(isAnimating()).toBe(true);
+ expect(mountedItem()).toBe("foo");
+ expect(isExiting()).toBe(true);
+ expect(isEntering()).toBe(false);
+ await sleep(transitionDuration + transitionTimeOffset);
+ expect(isAnimating()).toBe(true);
+ expect(mountedItem()).toBe("bar");
+ expect(isEntering()).toBe(true);
+ expect(isExiting()).toBe(false);
+ await sleep(transitionDuration + transitionTimeOffset);
+ expect(isAnimating()).toBe(false);
+ expect(isEntering()).toBe(false);
+ expect(isExiting()).toBe(false);
+ dispose();
+ }));
+});
diff --git a/packages/presence/test/server.test.ts b/packages/presence/test/server.test.ts
new file mode 100644
index 000000000..53458ebfe
--- /dev/null
+++ b/packages/presence/test/server.test.ts
@@ -0,0 +1,43 @@
+import { describe, test, expect } from "vitest";
+import { createPresence } from "../src";
+import { createSignal } from "solid-js";
+
+describe("on server", () => {
+ test("createPresence initializes requested state as expected", () => {
+ const [shouldRender] = createSignal(true);
+ const first = createPresence(shouldRender, { transitionDuration: 50, initialEnter: true });
+ expect(first.isAnimating()).toBe(true);
+ expect(first.isEntering()).toBe(true);
+ expect(first.isExiting()).toBe(false);
+ expect(first.isMounted()).toBe(true);
+ expect(first.isVisible()).toBe(false);
+
+ const [shouldNotRender] = createSignal(false);
+ const second = createPresence(shouldNotRender, { transitionDuration: 50 });
+ expect(second.isAnimating()).toBe(false);
+ expect(second.isEntering()).toBe(false);
+ expect(second.isExiting()).toBe(false);
+ expect(second.isMounted()).toBe(false);
+ expect(second.isVisible()).toBe(false);
+ });
+
+ test("createPresence initializes requested switching state as expected", () => {
+ const [data] = createSignal("foo");
+ const first = createPresence(data, { transitionDuration: 50, initialEnter: true });
+ expect(first.mountedItem()).toBe("foo");
+ expect(first.isAnimating()).toBe(true);
+ expect(first.isEntering()).toBe(true);
+ expect(first.isExiting()).toBe(false);
+ expect(first.isMounted()).toBe(true);
+ expect(first.isVisible()).toBe(false);
+
+ const [noData] = createSignal();
+ const second = createPresence(noData, { transitionDuration: 50 });
+ expect(second.mountedItem()).toBe(undefined);
+ expect(second.isAnimating()).toBe(false);
+ expect(second.isEntering()).toBe(false);
+ expect(second.isExiting()).toBe(false);
+ expect(second.isMounted()).toBe(false);
+ expect(second.isVisible()).toBe(false);
+ });
+});
diff --git a/packages/presence/tsconfig.json b/packages/presence/tsconfig.json
new file mode 100644
index 000000000..4082f16a5
--- /dev/null
+++ b/packages/presence/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../../tsconfig.json"
+}
diff --git a/packages/promise/CHANGELOG.md b/packages/promise/CHANGELOG.md
index ca4bb6411..db56da359 100644
--- a/packages/promise/CHANGELOG.md
+++ b/packages/promise/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/until
+## 1.0.12
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 1.0.11
### Patch Changes
diff --git a/packages/promise/package.json b/packages/promise/package.json
index e81061c53..5257caf62 100644
--- a/packages/promise/package.json
+++ b/packages/promise/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/promise",
- "version": "1.0.11",
+ "version": "1.0.12",
"description": "Promised one-time watch for changes. Await a reactive condition.",
"author": "Damian Tarnawski @thetarnav ",
"license": "MIT",
@@ -37,9 +37,11 @@
"dist"
],
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"until",
diff --git a/packages/props/CHANGELOG.md b/packages/props/CHANGELOG.md
index cc55b935a..49f1d1fc8 100644
--- a/packages/props/CHANGELOG.md
+++ b/packages/props/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/props
+## 3.1.6
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 3.1.5
### Patch Changes
diff --git a/packages/props/dev/index.html b/packages/props/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/props/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/props/dev/index.tsx b/packages/props/dev/index.tsx
index 067911161..95b3b9af4 100644
--- a/packages/props/dev/index.tsx
+++ b/packages/props/dev/index.tsx
@@ -1,6 +1,5 @@
import { Component, ComponentProps, createSignal, Show } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
import { combineProps } from "../src";
const Button = (props: ComponentProps<"button">) => {
@@ -68,4 +67,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/props/dev/vite.config.ts b/packages/props/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/props/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/props/package.json b/packages/props/package.json
index f617352b9..05a7bc59e 100644
--- a/packages/props/package.json
+++ b/packages/props/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/props",
- "version": "3.1.5",
+ "version": "3.1.6",
"description": "Library of primitives focused around component props.",
"author": "Damian Tarnawski ",
"contributors": [],
@@ -42,11 +42,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"dependencies": {
"@solid-primitives/utils": "workspace:^"
diff --git a/packages/raf/CHANGELOG.md b/packages/raf/CHANGELOG.md
index aee8af029..998fd9a20 100644
--- a/packages/raf/CHANGELOG.md
+++ b/packages/raf/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/raf
+## 2.1.12
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 2.1.11
### Patch Changes
diff --git a/packages/raf/dev/index.html b/packages/raf/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/raf/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/raf/dev/index.tsx b/packages/raf/dev/index.tsx
index 57eccdddb..36bb09ac5 100644
--- a/packages/raf/dev/index.tsx
+++ b/packages/raf/dev/index.tsx
@@ -1,5 +1,5 @@
import { Component, createSignal, Show, createEffect } from "solid-js";
-import { render } from "solid-js/web";
+
import RAF from "./raf";
const App: Component = () => {
@@ -25,4 +25,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/raf/dev/vite.config.ts b/packages/raf/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/raf/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/raf/package.json b/packages/raf/package.json
index 2dd88f0d8..1fabc1ee8 100644
--- a/packages/raf/package.json
+++ b/packages/raf/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/raf",
- "version": "2.1.11",
+ "version": "2.1.12",
"description": "Primitive that facilitates RAF functionality",
"author": "David Di Biase ",
"contributors": [
@@ -40,10 +40,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "start": "vite serve dev --host",
- "dev": "vite serve dev",
- "page": "vite build dev",
- "build": "jiti ../../scripts/build.ts"
+ "dev": "jiti ../../scripts/dev.ts",
+ "build": "jiti ../../scripts/build.ts",
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"raf",
diff --git a/packages/range/CHANGELOG.md b/packages/range/CHANGELOG.md
index 309543d0c..ede9d702c 100644
--- a/packages/range/CHANGELOG.md
+++ b/packages/range/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/range
+## 0.1.14
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 0.1.13
### Patch Changes
diff --git a/packages/range/dev/index.html b/packages/range/dev/index.html
deleted file mode 100644
index 1c5586c54..000000000
--- a/packages/range/dev/index.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/range/dev/index.tsx b/packages/range/dev/index.tsx
index 6b2afe8a0..10dd7f404 100644
--- a/packages/range/dev/index.tsx
+++ b/packages/range/dev/index.tsx
@@ -1,8 +1,8 @@
import { Repeat, Range, IndexRange } from "../src";
import { Component, createSignal, onCleanup } from "solid-js";
-import { render } from "solid-js/web";
+
import { TransitionGroup } from "solid-transition-group";
-import "uno.css";
+
import { createStore } from "solid-js/store";
const Ball = (props: { n: number }) => (
@@ -78,4 +78,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/range/dev/vite.config.ts b/packages/range/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/range/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/range/package.json b/packages/range/package.json
index f1255bac0..048698c8f 100644
--- a/packages/range/package.json
+++ b/packages/range/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/range",
- "version": "0.1.13",
+ "version": "0.1.14",
"description": "Control Flow Primitives for displaying given number or a number range of elements.",
"author": "Damian Tarnawski @thetarnav ",
"contributors": [],
@@ -51,11 +51,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"devDependencies": {
"solid-transition-group": "^0.2.2"
diff --git a/packages/refs/CHANGELOG.md b/packages/refs/CHANGELOG.md
index e0a378fa0..53967f517 100644
--- a/packages/refs/CHANGELOG.md
+++ b/packages/refs/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/refs
+## 1.0.4
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 1.0.3
### Patch Changes
diff --git a/packages/refs/dev/index.html b/packages/refs/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/refs/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/refs/dev/index.tsx b/packages/refs/dev/index.tsx
index 50e250bc3..69c9303cc 100644
--- a/packages/refs/dev/index.tsx
+++ b/packages/refs/dev/index.tsx
@@ -1,7 +1,6 @@
import { Component, lazy } from "solid-js";
-import { render } from "solid-js/web";
+
import { Router, Routes, Route, Link } from "solid-app-router";
-import "uno.css";
const Key = lazy(() => import("./key"));
@@ -24,4 +23,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/refs/dev/vite.config.ts b/packages/refs/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/refs/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/refs/package.json b/packages/refs/package.json
index a27a1bef6..9ec6a519a 100644
--- a/packages/refs/package.json
+++ b/packages/refs/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/refs",
- "version": "1.0.3",
+ "version": "1.0.4",
"description": "Library of primitives, components and directives for SolidJS that help managing references to JSX elements.",
"author": "Damian Tarnawski @thetarnav ",
"license": "MIT",
@@ -40,11 +40,11 @@
},
"typesVersions": {},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"elements",
diff --git a/packages/resize-observer/CHANGELOG.md b/packages/resize-observer/CHANGELOG.md
index dcbd3882e..b104b213b 100644
--- a/packages/resize-observer/CHANGELOG.md
+++ b/packages/resize-observer/CHANGELOG.md
@@ -1,5 +1,22 @@
# @solid-primitives/resize-observer
+## 2.0.18
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+ - @solid-primitives/event-listener@2.2.13
+ - @solid-primitives/rootless@1.4.1
+ - @solid-primitives/static-store@0.0.4
+
+## 2.0.17
+
+### Patch Changes
+
+- Updated dependencies [f03c47b0]
+ - @solid-primitives/event-listener@2.2.12
+
## 2.0.16
### Patch Changes
diff --git a/packages/resize-observer/dev/index.html b/packages/resize-observer/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/resize-observer/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/resize-observer/dev/index.tsx b/packages/resize-observer/dev/index.tsx
index 58fce94d9..8c8d94101 100644
--- a/packages/resize-observer/dev/index.tsx
+++ b/packages/resize-observer/dev/index.tsx
@@ -1,6 +1,5 @@
import { Component, createSignal, Setter } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
import { createElementSize, createWindowSize, createResizeObserver } from "../src";
const NumberInput: Component<{ value: number; setValue: Setter; name: string }> = props => {
@@ -60,4 +59,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/resize-observer/dev/vite.config.ts b/packages/resize-observer/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/resize-observer/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/resize-observer/package.json b/packages/resize-observer/package.json
index cf4bbcfe3..56390a3a7 100644
--- a/packages/resize-observer/package.json
+++ b/packages/resize-observer/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/resize-observer",
- "version": "2.0.16",
+ "version": "2.0.18",
"description": "Reactive primitives for observing resizing of HTML elements.",
"author": "Moshe Udimar",
"contributors": [
@@ -46,11 +46,11 @@
"primitives"
],
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"dependencies": {
"@solid-primitives/event-listener": "workspace:^",
diff --git a/packages/resource/README.md b/packages/resource/README.md
index d7294310c..6e2d02f05 100644
--- a/packages/resource/README.md
+++ b/packages/resource/README.md
@@ -249,7 +249,7 @@ Just use an interval with refetch; ideally, also use [`makeAbortable`](#makeabor
## Demo
You may view a working example of createFileSystem/makeVirtualFileSystem/makeWebAccessFileSystem here:
-https://solidjs-community.github.io/solid-primitives/resource/
+https://primitives.solidjs.community/playground/resource/
## Changelog
diff --git a/packages/resource/dev/index.html b/packages/resource/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/resource/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/resource/dev/index.tsx b/packages/resource/dev/index.tsx
index 45529efea..6ae48d14e 100644
--- a/packages/resource/dev/index.tsx
+++ b/packages/resource/dev/index.tsx
@@ -1,7 +1,6 @@
import { Component, createResource, createSignal, For, onCleanup, Show } from "solid-js";
-import { render } from "solid-js/web";
+
import { makeAbortable, makeCache, makeRetrying } from "../src";
-import "uno.css";
const setsPath = "https://api.tcgdex.net/v2/en/sets";
const cardPath = "https://api.tcgdex.net/v2/en/cards";
@@ -191,4 +190,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/resource/dev/vite.config.ts b/packages/resource/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/resource/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/resource/package.json b/packages/resource/package.json
index feb8d1406..f737d894a 100644
--- a/packages/resource/package.json
+++ b/packages/resource/package.json
@@ -47,11 +47,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.0"
diff --git a/packages/rootless/CHANGELOG.md b/packages/rootless/CHANGELOG.md
index 7a8566ad9..188a8b2e3 100644
--- a/packages/rootless/CHANGELOG.md
+++ b/packages/rootless/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/rootless
+## 1.4.1
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 1.4.0
### Minor Changes
diff --git a/packages/rootless/dev/index.html b/packages/rootless/dev/index.html
deleted file mode 100644
index c768a70c2..000000000
--- a/packages/rootless/dev/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
diff --git a/packages/rootless/dev/index.tsx b/packages/rootless/dev/index.tsx
index 80bbb1ae4..d2ca14e1e 100644
--- a/packages/rootless/dev/index.tsx
+++ b/packages/rootless/dev/index.tsx
@@ -1,8 +1,5 @@
import { Accessor, Component, For, batch, createSignal } from "solid-js";
import { StoreSetter, createStore, unwrap } from "solid-js/store";
-import { render } from "solid-js/web";
-
-import "uno.css";
import { createRootPool } from "../src";
type TodoItem = { title: string; done: boolean };
@@ -65,4 +62,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/rootless/dev/vite.config.ts b/packages/rootless/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/rootless/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/rootless/package.json b/packages/rootless/package.json
index b70021a5d..0c266d6e4 100644
--- a/packages/rootless/package.json
+++ b/packages/rootless/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/rootless",
- "version": "1.4.0",
+ "version": "1.4.1",
"description": "A collection of helpers that aim to simplify using reactive primitives outside of reactive roots, and managing disposal of reactive roots.",
"author": "Damian Tarnawski @thetarnav ",
"license": "MIT",
@@ -40,11 +40,11 @@
},
"typesVersions": {},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"solid",
diff --git a/packages/scheduled/dev/index.html b/packages/scheduled/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/scheduled/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/scheduled/dev/index.tsx b/packages/scheduled/dev/index.tsx
index 69ee8add9..c68ab96bf 100644
--- a/packages/scheduled/dev/index.tsx
+++ b/packages/scheduled/dev/index.tsx
@@ -1,8 +1,8 @@
/* @refresh reload */
import { Component } from "solid-js";
-import { render } from "solid-js/web";
+
import { Router, Routes, Route, A } from "@solidjs/router";
-import "uno.css";
+
import Timeline from "./timeline";
import Reactive from "./reactive";
@@ -27,4 +27,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/scheduled/dev/vite.config.ts b/packages/scheduled/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/scheduled/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/scheduled/package.json b/packages/scheduled/package.json
index 34784b085..d48b1ffc2 100644
--- a/packages/scheduled/package.json
+++ b/packages/scheduled/package.json
@@ -45,12 +45,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "start": "vite serve dev --host",
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"solid",
diff --git a/packages/script-loader/package.json b/packages/script-loader/package.json
index 9b9a43a73..f6065ffa2 100644
--- a/packages/script-loader/package.json
+++ b/packages/script-loader/package.json
@@ -38,9 +38,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/scroll/CHANGELOG.md b/packages/scroll/CHANGELOG.md
index c93768059..51bcd8b7c 100644
--- a/packages/scroll/CHANGELOG.md
+++ b/packages/scroll/CHANGELOG.md
@@ -1,5 +1,20 @@
# @solid-primitives/scroll
+## 2.0.17
+
+### Patch Changes
+
+- @solid-primitives/event-listener@2.2.13
+- @solid-primitives/rootless@1.4.1
+- @solid-primitives/static-store@0.0.4
+
+## 2.0.16
+
+### Patch Changes
+
+- Updated dependencies [f03c47b0]
+ - @solid-primitives/event-listener@2.2.12
+
## 2.0.15
### Patch Changes
diff --git a/packages/scroll/dev/index.html b/packages/scroll/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/scroll/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/scroll/dev/index.tsx b/packages/scroll/dev/index.tsx
index 75670a06e..a0e5222d6 100644
--- a/packages/scroll/dev/index.tsx
+++ b/packages/scroll/dev/index.tsx
@@ -1,6 +1,5 @@
import { Component } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
import { createScrollPosition } from "../src";
const App: Component = () => {
@@ -29,4 +28,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/scroll/dev/vite.config.ts b/packages/scroll/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/scroll/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/scroll/package.json b/packages/scroll/package.json
index 7fa7199f1..31bb60bbf 100644
--- a/packages/scroll/package.json
+++ b/packages/scroll/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/scroll",
- "version": "2.0.15",
+ "version": "2.0.17",
"description": "Reactive primitives to react to element/window scrolling.",
"author": "David Di Biase ",
"contributors": [
@@ -39,12 +39,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "start": "vite serve dev --host",
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr",
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr",
"test:watch": "watchlist src test -- npm test"
},
"keywords": [
diff --git a/packages/selection/README.md b/packages/selection/README.md
index f5a000694..bfa5072a0 100644
--- a/packages/selection/README.md
+++ b/packages/selection/README.md
@@ -81,7 +81,7 @@ At some point, this might move into the [utils](../utils/README.md) package if u
### DEMO
-https://solidjs-community.github.io/solid-primitives/selection
+https://primitives.solidjs.community/playground/selection
## Changelog
diff --git a/packages/selection/dev/index.html b/packages/selection/dev/index.html
deleted file mode 100644
index b9cd3d4fa..000000000
--- a/packages/selection/dev/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/selection/dev/index.tsx b/packages/selection/dev/index.tsx
index d173d4527..47a89c30b 100644
--- a/packages/selection/dev/index.tsx
+++ b/packages/selection/dev/index.tsx
@@ -1,7 +1,6 @@
import { Component, createEffect, createSignal } from "solid-js";
-import { render } from "solid-js/web";
+
import { createSelection } from "../src";
-import "uno.css";
const App: Component = () => {
const [selection, setSelection] = createSelection();
@@ -75,4 +74,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/selection/dev/vite.config.ts b/packages/selection/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/selection/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/selection/package.json b/packages/selection/package.json
index 0b0831987..c5891ffde 100644
--- a/packages/selection/package.json
+++ b/packages/selection/package.json
@@ -38,12 +38,11 @@
"dist"
],
"scripts": {
- "start": "vite serve dev --host",
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"solid",
diff --git a/packages/set/CHANGELOG.md b/packages/set/CHANGELOG.md
index 88c9c27b3..c0d95ba41 100644
--- a/packages/set/CHANGELOG.md
+++ b/packages/set/CHANGELOG.md
@@ -1,5 +1,11 @@
# @solid-primitives/set
+## 0.4.5
+
+### Patch Changes
+
+- @solid-primitives/trigger@1.0.7
+
## 0.4.4
### Patch Changes
diff --git a/packages/set/dev/index.html b/packages/set/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/set/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/set/dev/index.tsx b/packages/set/dev/index.tsx
index 71b25dd25..857fa5ac5 100644
--- a/packages/set/dev/index.tsx
+++ b/packages/set/dev/index.tsx
@@ -1,7 +1,6 @@
import { Component, createEffect, For } from "solid-js";
-import { render } from "solid-js/web";
+
import { ReactiveSet } from "../src";
-import "uno.css";
const App: Component = () => {
const set = new ReactiveSet([1, 2, 3]);
@@ -25,4 +24,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/set/dev/vite.config.ts b/packages/set/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/set/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/set/package.json b/packages/set/package.json
index 575986a6e..b70ae6059 100644
--- a/packages/set/package.json
+++ b/packages/set/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/set",
- "version": "0.4.4",
+ "version": "0.4.5",
"description": "The Set & WeakSet data structures as a reactive signals.",
"author": "Damian Tarnawski @thetarnav ",
"license": "MIT",
@@ -43,11 +43,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/share/dev/index.html b/packages/share/dev/index.html
deleted file mode 100644
index 20d81f14d..000000000
--- a/packages/share/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/share/dev/index.tsx b/packages/share/dev/index.tsx
index 800b701da..eab8445f0 100644
--- a/packages/share/dev/index.tsx
+++ b/packages/share/dev/index.tsx
@@ -1,6 +1,4 @@
import { Component, createEffect, createSignal } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
import { createWebShare } from "../src/index";
@@ -28,4 +26,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/share/dev/vite.config.ts b/packages/share/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/share/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/share/package.json b/packages/share/package.json
index 8866139f8..52e853489 100644
--- a/packages/share/package.json
+++ b/packages/share/package.json
@@ -46,11 +46,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/signal-builders/CHANGELOG.md b/packages/signal-builders/CHANGELOG.md
index d4efcbad9..71973ba36 100644
--- a/packages/signal-builders/CHANGELOG.md
+++ b/packages/signal-builders/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/signal-builders
+## 0.1.13
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 0.1.12
### Patch Changes
diff --git a/packages/signal-builders/package.json b/packages/signal-builders/package.json
index 75e6f9188..5ce6477fe 100644
--- a/packages/signal-builders/package.json
+++ b/packages/signal-builders/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/signal-builders",
- "version": "0.1.12",
+ "version": "0.1.13",
"description": "A collection of chainable and composable reactive signal calculations, aka Signal Builders.",
"author": "Your Name ",
"license": "MIT",
@@ -40,9 +40,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"dependencies": {
"@solid-primitives/utils": "workspace:^"
diff --git a/packages/start/LICENSE b/packages/start/LICENSE
new file mode 100644
index 000000000..38b41d975
--- /dev/null
+++ b/packages/start/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Solid Primitives Working Group
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/packages/start/README.md b/packages/start/README.md
new file mode 100644
index 000000000..591a7aa6e
--- /dev/null
+++ b/packages/start/README.md
@@ -0,0 +1,75 @@
+
+
+
+
+# @solid-primitives/start
+
+[](https://turborepo.org/)
+[](https://bundlephobia.com/package/@solid-primitives/start)
+[](https://www.npmjs.com/package/@solid-primitives/start)
+[](https://github.com/solidjs-community/solid-primitives#contribution-process)
+
+A set of primitives for Solid Start
+
+- [`createServerCookie`](#createservercookie) - Provides a getter and setter for a reactive cookie, which works isomorphically.
+- [`createUserTheme`](#createusertheme) - Creates a Server Cookie providing a type safe way to store a theme and access it on the server or client.
+
+## Installation
+
+```bash
+npm install @solid-primitives/start
+# or
+yarn add @solid-primitives/start
+# or
+pnpm add @solid-primitives/start
+```
+
+## How to use it
+
+## `createServerCookie`
+
+A primitive for creating a cookie that can be accessed isomorphically on the client, or the server.
+
+```ts
+const [cookie, setCookie] = createServerCookie("cookieName");
+
+cookie(); // => string | undefined
+```
+
+### Custom serialization
+
+Custom cookie serializers and deserializers can also be implemented
+
+```ts
+const [serverCookie, setServerCookie] = createServerCookie("coolCookie", {
+ deserialize: str => (str ? str.split(" ") : []), // Deserializes cookie into a string[]
+ serialize: val => (val ? val.join(" ") : ""), // serializes the value back into a string
+});
+
+serverCookie(); // => string[]
+```
+
+## `createUserTheme`
+
+Composes `createServerCookie` to provide a type safe way to store a theme and access it on the server or client.
+
+```ts
+const [theme, setTheme] = createUserTheme("cookieName");
+
+theme(); // => "light" | "dark" | undefined
+
+// with default value
+const [theme, setTheme] = createUserTheme("cookieName", {
+ defaultValue: "light",
+});
+
+theme(); // => "light" | "dark"
+```
+
+## Demo
+
+You can view a demo of this primitive here:
+
+## Changelog
+
+See [CHANGELOG.md](./CHANGELOG.md)
diff --git a/packages/start/dev/index.tsx b/packages/start/dev/index.tsx
new file mode 100644
index 000000000..340378c0f
--- /dev/null
+++ b/packages/start/dev/index.tsx
@@ -0,0 +1,21 @@
+import { Component, createSignal } from "solid-js";
+
+const App: Component = () => {
+ const [count, setCount] = createSignal(0);
+ const increment = () => setCount(count() + 1);
+ return (
+
+
+
+
Counter component
+
it's very important...
+
+
+
+
+ );
+};
+
+export default App;
diff --git a/packages/start/package.json b/packages/start/package.json
new file mode 100644
index 000000000..a646afa33
--- /dev/null
+++ b/packages/start/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "@solid-primitives/start",
+ "version": "0.0.1",
+ "description": "A set of primitives for Solid Start",
+ "author": "Thomas",
+ "contributors": [
+ "Damian Tarnawski "
+ ],
+ "license": "MIT",
+ "homepage": "https://github.com/solidjs-community/solid-primitives/tree/main/packages/start#readme",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/solidjs-community/solid-primitives.git"
+ },
+ "bugs": {
+ "url": "https://github.com/solidjs-community/solid-primitives/issues"
+ },
+ "primitive": {
+ "name": "start",
+ "stage": 0,
+ "list": [
+ "createServerCookie",
+ "createUserTheme"
+ ],
+ "category": "Solid Start"
+ },
+ "keywords": [
+ "solid",
+ "primitives",
+ "solid-start",
+ "ssr"
+ ],
+ "private": false,
+ "sideEffects": false,
+ "files": [
+ "dist"
+ ],
+ "type": "module",
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.js",
+ "types": "./dist/index.d.ts",
+ "browser": {},
+ "exports": {
+ "import": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ },
+ "require": "./dist/index.cjs"
+ },
+ "typesVersions": {},
+ "scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
+ "build": "jiti ../../scripts/build.ts",
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
+ },
+ "peerDependencies": {
+ "solid-js": "^1.6.12",
+ "solid-start": "^0.2.26"
+ }
+}
diff --git a/packages/start/src/index.ts b/packages/start/src/index.ts
new file mode 100644
index 000000000..259879c0e
--- /dev/null
+++ b/packages/start/src/index.ts
@@ -0,0 +1,101 @@
+import { createSignal, createEffect, Signal } from "solid-js";
+import { isServer } from "solid-js/web";
+import { parseCookie } from "solid-start";
+import { useRequest } from "solid-start/server";
+
+export type MaxAgeOptions = {
+ /**
+ * The maximum age of the cookie in seconds. Defaults to 1 year.
+ */
+ cookieMaxAge?: number;
+};
+
+export type ServerCookieOptions = MaxAgeOptions & {
+ /**
+ * A function to deserialize the cookie value to be used as signal value
+ */
+ deserialize?: (str: string | undefined) => T;
+ /**
+ * A function to serialize the signal value to be used as cookie value
+ */
+ serialize?: (value: T) => string;
+};
+
+const YEAR = 365 * 24 * 60 * 60;
+
+/**
+ * A primitive for creating a cookie that can be accessed isomorphically on the client, or the server
+ *
+ * @param name The name of the cookie to be set
+ * @param options Options for the cookie {@see ServerCookieOptions}
+ * @return Returns an accessor and setter to manage the user's current theme
+ */
+export function createServerCookie(
+ name: string,
+ options: ServerCookieOptions & {
+ deserialize: (str: string | undefined) => T;
+ serialize: (value: T) => string;
+ },
+): Signal;
+export function createServerCookie(
+ name: string,
+ options?: ServerCookieOptions,
+): Signal;
+export function createServerCookie(
+ name: string,
+ options?: ServerCookieOptions,
+): Signal {
+ const {
+ deserialize = (v: any) => v as T,
+ serialize = String,
+ cookieMaxAge = YEAR,
+ } = options ?? {};
+
+ const [cookie, setCookie] = createSignal(
+ deserialize(
+ parseCookie(isServer ? useRequest().request.headers.get("cookie") ?? "" : document.cookie)[
+ name
+ ],
+ ),
+ );
+
+ createEffect(p => {
+ const string = serialize(cookie());
+ if (p !== string) document.cookie = `${name}=${string};max-age=${cookieMaxAge}`;
+ return string;
+ });
+
+ return [cookie, setCookie];
+}
+
+export type Theme = "light" | "dark";
+
+export type UserThemeOptions = MaxAgeOptions & {
+ /**
+ * The default theme to be used if the cookie is not set
+ */
+ defaultValue?: Theme;
+};
+
+/**
+ * Composes {@link createServerCookie} to provide a type safe way to store a theme and access it on the server or client.
+ *
+ * @param name The name of the cookie to be set
+ * @param options Options for the cookie {@link UserThemeOptions}
+ */
+export function createUserTheme(
+ name: string | undefined,
+ options: UserThemeOptions & { defaultValue: Theme },
+): Signal;
+export function createUserTheme(
+ name?: string,
+ options?: UserThemeOptions,
+): Signal;
+export function createUserTheme(name = "theme", options?: UserThemeOptions): Signal {
+ const defaultValue = options?.defaultValue;
+ return createServerCookie(name, {
+ ...options,
+ deserialize: str => (str === "light" || str === "dark" ? str : defaultValue),
+ serialize: String,
+ });
+}
diff --git a/packages/start/tsconfig.json b/packages/start/tsconfig.json
new file mode 100644
index 000000000..4082f16a5
--- /dev/null
+++ b/packages/start/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../../tsconfig.json"
+}
diff --git a/packages/static-store/CHANGELOG.md b/packages/static-store/CHANGELOG.md
index c6d272da1..c085b8b7a 100644
--- a/packages/static-store/CHANGELOG.md
+++ b/packages/static-store/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/static-store
+## 0.0.4
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 0.0.3
### Patch Changes
diff --git a/packages/static-store/dev/index.html b/packages/static-store/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/static-store/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/static-store/dev/index.tsx b/packages/static-store/dev/index.tsx
index 3dcc7570a..e2e5113e6 100644
--- a/packages/static-store/dev/index.tsx
+++ b/packages/static-store/dev/index.tsx
@@ -1,6 +1,4 @@
import { Component, createSignal } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
const App: Component = () => {
const [count, setCount] = createSignal(0);
@@ -19,4 +17,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/static-store/dev/vite.config.ts b/packages/static-store/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/static-store/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/static-store/package.json b/packages/static-store/package.json
index d857d391c..8696092f9 100644
--- a/packages/static-store/package.json
+++ b/packages/static-store/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/static-store",
- "version": "0.0.3",
+ "version": "0.0.4",
"description": "Primitives for creating small reactive objects that doesn't change their shape over time - don't need a proxy wrapper.",
"author": "Damian Tarnawski ",
"contributors": [],
@@ -45,11 +45,11 @@
},
"typesVersions": {},
"scripts": {
- "dev": "vite serve dev",
- "page": "echo TODO",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/storage/CHANGELOG.md b/packages/storage/CHANGELOG.md
index d845ea047..e5d862778 100644
--- a/packages/storage/CHANGELOG.md
+++ b/packages/storage/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/storage
+## 1.3.11
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 1.3.10
### Patch Changes
diff --git a/packages/storage/package.json b/packages/storage/package.json
index 4e2a48bf2..a07f5947c 100644
--- a/packages/storage/package.json
+++ b/packages/storage/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/storage",
- "version": "1.3.10",
+ "version": "1.3.11",
"description": "Primitive that provides reactive wrappers for storage access",
"author": "Alex Lohr ",
"contributors": [
@@ -43,9 +43,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"localStorage",
diff --git a/packages/stream/CHANGELOG.md b/packages/stream/CHANGELOG.md
index 605a84cbb..f57dbed38 100644
--- a/packages/stream/CHANGELOG.md
+++ b/packages/stream/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/stream
+## 0.6.10
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 0.6.9
### Patch Changes
diff --git a/packages/stream/README.md b/packages/stream/README.md
index 8cd12ab46..b4ce14970 100644
--- a/packages/stream/README.md
+++ b/packages/stream/README.md
@@ -40,7 +40,7 @@ createMediaPermissionRequest(target?: 'audio' | 'video' | MediaStreamConstraints
## Demo
-https://solidjs-community.github.io/solid-primitives/stream
+https://primitives.solidjs.community/playground/stream
## Changelog
diff --git a/packages/stream/demo/index.tsx b/packages/stream/demo/index.tsx
index 36d46d873..77082dad3 100644
--- a/packages/stream/demo/index.tsx
+++ b/packages/stream/demo/index.tsx
@@ -1,12 +1,9 @@
-import { render } from "solid-js/web";
import { type Component, type JSX, createEffect, createSignal } from "solid-js";
import { createStore } from "solid-js/store";
import { createStream } from "../src";
import { createPermission } from "../../permission/src";
import { createCameras, createMicrophones } from "../../devices/src";
-import "uno.css";
-
declare module "solid-js" {
namespace JSX {
interface ExplicitProperties {
@@ -173,4 +170,4 @@ const App: Component = (): JSX.Element => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/stream/dev/index.html b/packages/stream/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/stream/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/stream/dev/index.tsx b/packages/stream/dev/index.tsx
index b33666040..0b8db465a 100644
--- a/packages/stream/dev/index.tsx
+++ b/packages/stream/dev/index.tsx
@@ -1,13 +1,12 @@
import type { Component, JSX } from "solid-js";
import { createSignal, Show } from "solid-js";
-import { render } from "solid-js/web";
+
import {
createStream,
createAmplitudeStream,
createMediaPermissionRequest,
createScreen,
} from "../src";
-import "uno.css";
declare module "solid-js" {
namespace JSX {
@@ -58,4 +57,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/stream/dev/vite.config.ts b/packages/stream/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/stream/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/stream/package.json b/packages/stream/package.json
index 7f0a2e8b9..ab9ba950b 100644
--- a/packages/stream/package.json
+++ b/packages/stream/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/stream",
- "version": "0.6.9",
+ "version": "0.6.10",
"description": "Primitive that gets a user media stream from microphone, camera or screen",
"author": "Alex Lohr ",
"license": "MIT",
@@ -39,12 +39,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr",
- "start": "vite serve dev --host",
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr",
"demo": "vite serve demo --host"
},
"keywords": [
diff --git a/packages/styles/CHANGELOG.md b/packages/styles/CHANGELOG.md
index 194359bdd..8864d990f 100644
--- a/packages/styles/CHANGELOG.md
+++ b/packages/styles/CHANGELOG.md
@@ -1,5 +1,13 @@
# @solid-primitives/styles
+## 0.0.110
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+ - @solid-primitives/rootless@1.4.1
+
## 0.0.109
### Patch Changes
diff --git a/packages/styles/dev/index.html b/packages/styles/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/styles/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/styles/dev/index.tsx b/packages/styles/dev/index.tsx
index f0a208341..59f9535cc 100644
--- a/packages/styles/dev/index.tsx
+++ b/packages/styles/dev/index.tsx
@@ -1,6 +1,5 @@
import { Component } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
import { createRemSize } from "../src";
const App: Component = () => {
@@ -15,4 +14,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/styles/dev/vite.config.ts b/packages/styles/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/styles/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/styles/package.json b/packages/styles/package.json
index 4b5858622..6cf4dd1a3 100644
--- a/packages/styles/package.json
+++ b/packages/styles/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/styles",
- "version": "0.0.109",
+ "version": "0.0.110",
"description": "Collection of reactive primitives focused on styles.",
"author": "Damian Tarnawski ",
"contributors": [
@@ -41,12 +41,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "start": "vite serve dev --host",
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"solid",
diff --git a/packages/timer/dev/index.html b/packages/timer/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/timer/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/timer/dev/index.tsx b/packages/timer/dev/index.tsx
index 3ab50139d..ca43b4644 100644
--- a/packages/timer/dev/index.tsx
+++ b/packages/timer/dev/index.tsx
@@ -1,6 +1,5 @@
import { Component, createSignal, createEffect } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
+
import { createTimer } from "../src";
const Counter: Component<{ timer: typeof setTimeout | typeof setInterval }> = props => {
@@ -44,4 +43,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/timer/dev/vite.config.ts b/packages/timer/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/timer/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/timer/package.json b/packages/timer/package.json
index 72d6f68b1..453d8fbf0 100644
--- a/packages/timer/package.json
+++ b/packages/timer/package.json
@@ -46,12 +46,11 @@
"dist"
],
"scripts": {
- "start": "vite serve dev --host",
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"setInterval",
diff --git a/packages/transition-group/README.md b/packages/transition-group/README.md
index cdf9e2240..7c675885c 100644
--- a/packages/transition-group/README.md
+++ b/packages/transition-group/README.md
@@ -186,7 +186,7 @@ return createListTransition(resolved.toArray, {
## Demo
-[Deployed example](https://solidjs-community.github.io/solid-primitives/transition-group) | [Source code](https://github.com/solidjs-community/solid-primitives/tree/main/packages/transition-group/dev)
+[Deployed example](https://primitives.solidjs.community/playground/transition-group) | [Source code](https://github.com/solidjs-community/solid-primitives/tree/main/packages/transition-group/dev)
## Usage references
diff --git a/packages/transition-group/dev/index.html b/packages/transition-group/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/transition-group/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/transition-group/dev/index.tsx b/packages/transition-group/dev/index.tsx
index a4c9580f0..dee91d4cf 100644
--- a/packages/transition-group/dev/index.tsx
+++ b/packages/transition-group/dev/index.tsx
@@ -1,12 +1,10 @@
import { A, Route, Router, Routes } from "@solidjs/router";
-import { render } from "solid-js/web";
+
import ListPage from "./list-page";
import SwitchPage from "./switch-page";
-import "uno.css";
-
-render(
- () => (
+function App() {
+ return (
- ),
- document.getElementById("root")!,
-);
+ );
+}
+
+export default App;
diff --git a/packages/transition-group/dev/list-page.tsx b/packages/transition-group/dev/list-page.tsx
index e2fe43c8a..6d86bc855 100644
--- a/packages/transition-group/dev/list-page.tsx
+++ b/packages/transition-group/dev/list-page.tsx
@@ -1,5 +1,4 @@
import {
- children,
createRenderEffect,
createResource,
onCleanup,
@@ -32,7 +31,8 @@ const ListPage: Component = () => {
const [res] = createResource(runResource, () => new Promise(r => (resolve = r)));
const [isTransitioning, startTransition] = useTransition();
- const appear = localStorage.getItem("transition-group-appear") === "true";
+ // const appear = localStorage.getItem("transition-group-appear") === "true";
+ const appear = true;
return (
<>
@@ -152,7 +152,7 @@ const ListPage: Component = () => {
const options = { duration: 600, easing: "cubic-bezier(0.4, 0, 0.2, 1)" };
- return createListTransition(resolved.toArray, {
+ const transition = createListTransition(resolved.toArray, {
appear,
onChange({ added, finishRemoved, unchanged, removed }) {
added.forEach(el => {
@@ -216,6 +216,8 @@ const ListPage: Component = () => {
});
},
});
+
+ return <>{transition()}>;
})}
diff --git a/packages/transition-group/dev/switch-page.tsx b/packages/transition-group/dev/switch-page.tsx
index 2d96f2044..f9032b0c0 100644
--- a/packages/transition-group/dev/switch-page.tsx
+++ b/packages/transition-group/dev/switch-page.tsx
@@ -13,7 +13,8 @@ import {
import { resolveFirst } from "@solid-primitives/refs";
import { createSwitchTransition, TransitionMode } from "../src";
-const appear = localStorage.getItem("transition-group-appear") === "true";
+// const appear = localStorage.getItem("transition-group-appear") === "true";
+const appear = true;
function Transition(props: ParentProps & { mode: TransitionMode }): JSX.Element {
const el = resolveFirst(
@@ -56,7 +57,7 @@ function Transition(props: ParentProps & { mode: TransitionMode }): JSX.Element
const animationMap = new Map();
- return createSwitchTransition(el, {
+ const transition = createSwitchTransition(el, {
onEnter(el, done) {
queueMicrotask(() => animateIn(el, done));
},
@@ -66,6 +67,8 @@ function Transition(props: ParentProps & { mode: TransitionMode }): JSX.Element
mode: props.mode,
appear,
});
+
+ return <>{transition()}>;
}
const grayOutOnDispose = (el: HTMLElement) => {
diff --git a/packages/transition-group/dev/vite.config.ts b/packages/transition-group/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/transition-group/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/transition-group/package.json b/packages/transition-group/package.json
index 2d0e99605..7f6b0340a 100644
--- a/packages/transition-group/package.json
+++ b/packages/transition-group/package.json
@@ -47,11 +47,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/trigger/CHANGELOG.md b/packages/trigger/CHANGELOG.md
index ff6d84d26..52519ab0e 100644
--- a/packages/trigger/CHANGELOG.md
+++ b/packages/trigger/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/trigger
+## 1.0.7
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 1.0.6
### Patch Changes
diff --git a/packages/trigger/dev/index.html b/packages/trigger/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/trigger/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/trigger/dev/index.tsx b/packages/trigger/dev/index.tsx
index 810a49745..8e7429365 100644
--- a/packages/trigger/dev/index.tsx
+++ b/packages/trigger/dev/index.tsx
@@ -1,6 +1,4 @@
import { Component, createSignal } from "solid-js";
-import { render } from "solid-js/web";
-import "uno.css";
const App: Component = () => {
// const [count, setCount] = createSignal(0);
@@ -19,4 +17,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root")!);
+export default App;
diff --git a/packages/trigger/dev/vite.config.ts b/packages/trigger/dev/vite.config.ts
deleted file mode 100644
index 7ca66a520..000000000
--- a/packages/trigger/dev/vite.config.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { viteConfig } from "../../../configs/vite.config";
-export default viteConfig;
diff --git a/packages/trigger/package.json b/packages/trigger/package.json
index 129ad11b1..92243f6d1 100644
--- a/packages/trigger/package.json
+++ b/packages/trigger/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/trigger",
- "version": "1.0.6",
+ "version": "1.0.7",
"description": "A set of primitives based on Solid signals, used to trigger computations.",
"author": "Damian Tarnawski ",
"contributors": [],
@@ -40,11 +40,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "vite serve dev",
- "page": "vite build dev",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"solid",
diff --git a/packages/tween/package.json b/packages/tween/package.json
index 7056bc99c..a4b8b5093 100644
--- a/packages/tween/package.json
+++ b/packages/tween/package.json
@@ -41,9 +41,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"peerDependencies": {
"solid-js": "^1.6.12"
diff --git a/packages/upload/CHANGELOG.md b/packages/upload/CHANGELOG.md
index 927a853f3..ba00cf3fe 100644
--- a/packages/upload/CHANGELOG.md
+++ b/packages/upload/CHANGELOG.md
@@ -1,5 +1,12 @@
# @solid-primitives/upload
+## 0.0.113
+
+### Patch Changes
+
+- Updated dependencies [3c007b92]
+ - @solid-primitives/utils@6.2.0
+
## 0.0.112
### Patch Changes
diff --git a/packages/upload/dev/index.html b/packages/upload/dev/index.html
deleted file mode 100644
index 65f53c4b6..000000000
--- a/packages/upload/dev/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Solid App
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/upload/dev/index.tsx b/packages/upload/dev/index.tsx
index 3b53ec82c..a05d8bcb4 100644
--- a/packages/upload/dev/index.tsx
+++ b/packages/upload/dev/index.tsx
@@ -1,8 +1,8 @@
import { Component, createSignal, For } from "solid-js";
-import { render } from "solid-js/web";
+
import { createDropzone, createFileUploader, fileUploader } from "../src";
import { doStuff } from "../src/helpers";
-import "uno.css";
+
import { UploadFile } from "../src/types";
fileUploader;
@@ -123,4 +123,4 @@ const App: Component = () => {
);
};
-render(() => , document.getElementById("root"));
+export default App;
diff --git a/packages/upload/dev/tsconfig.json b/packages/upload/dev/tsconfig.json
deleted file mode 100644
index e27ffb701..000000000
--- a/packages/upload/dev/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "module": "ESNext",
- "moduleResolution": "node",
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "jsx": "preserve",
- "jsxImportSource": "solid-js",
- "types": ["vite/client"]
- }
-}
diff --git a/packages/upload/dev/vite.config.ts b/packages/upload/dev/vite.config.ts
deleted file mode 100644
index 36ff0f017..000000000
--- a/packages/upload/dev/vite.config.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { defineConfig } from "vite";
-import solidPlugin from "vite-plugin-solid";
-import Unocss from "unocss/vite";
-
-export default defineConfig({
- plugins: [
- solidPlugin(),
- Unocss({
- shortcuts: {
- "center-child": "flex justify-center items-center",
- caption: "text-sm font-mono leading-tight",
- btn: "bg-teal-600 border-1 border-teal-500 hover:bg-teal-500 rounded cursor-pointer center-child select-none text-white font-semibold p-4 py-3 m-2",
- "wrapper-h":
- "p-6 flex justify-center items-center space-x-4 space-y-0 bg-gray-700 rounded-2xl",
- "wrapper-v": "wrapper-h flex-col space-x-0 space-y-4",
- node: "p-4 bg-orange-600 rounded m-2",
- },
- }),
- ],
- build: {
- target: "esnext",
- polyfillDynamicImport: false,
- },
-});
diff --git a/packages/upload/package.json b/packages/upload/package.json
index 371236565..d9582894f 100644
--- a/packages/upload/package.json
+++ b/packages/upload/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/upload",
- "version": "0.0.112",
+ "version": "0.0.113",
"description": "Primitives for uploading files.",
"author": "Rustam Ashurmatov ",
"license": "MIT",
@@ -43,10 +43,11 @@
"require": "./dist/index.cjs"
},
"scripts": {
- "dev": "yarn start",
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"dependencies": {
"@solid-primitives/utils": "workspace:^"
diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md
index d725e6ce1..f01a84e9d 100644
--- a/packages/utils/CHANGELOG.md
+++ b/packages/utils/CHANGELOG.md
@@ -1,5 +1,11 @@
# @solid-primitives/utils
+## 6.2.0
+
+### Minor Changes
+
+- 3c007b92: Add more of common constants to utils
+
## 6.1.1
### Patch Changes
diff --git a/packages/utils/package.json b/packages/utils/package.json
index c228f82d0..3fe294a3e 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@solid-primitives/utils",
- "version": "6.1.1",
+ "version": "6.2.0",
"description": "A bunch of reactive utility types and functions, for building primitives with Solid.js",
"author": "Damian Tarnawski @thetarnav ",
"contributors": [
@@ -49,9 +49,11 @@
}
},
"scripts": {
+ "dev": "jiti ../../scripts/dev.ts",
"build": "jiti ../../scripts/build.ts",
- "test": "vitest -c ../../configs/vitest.config.ts",
- "test:ssr": "pnpm run test --mode ssr"
+ "vitest": "vitest -c ../../configs/vitest.config.ts",
+ "test": "pnpm run vitest",
+ "test:ssr": "pnpm run vitest --mode ssr"
},
"keywords": [
"utilities",
diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts
index ffdc8ac96..90e4c0fa2 100644
--- a/packages/utils/src/index.ts
+++ b/packages/utils/src/index.ts
@@ -28,15 +28,21 @@ export * from "./types";
// GENERAL HELPERS:
//
+export { isServer };
+export const isClient = !isServer;
+export const isDev = isClient && !!DEV;
+export const isProd = !isDev;
+
/** no operation */
export const noop = (() => void 0) as Noop;
export const trueFn: () => boolean = () => true;
export const falseFn: () => boolean = () => false;
-export { isServer };
-export const isClient = !isServer;
-export const isDev = isClient && !!DEV;
-export const isProd = !isDev;
+/** default `equals` camparator. `(a, b) => a === b` */
+export const defaultEquals = (a: unknown, b: unknown): boolean => a === b;
+
+export const EQUALS_FALSE_OPTIONS = { equals: false } as const satisfies SignalOptions;
+export const INTERNAL_OPTIONS = { internal: true } as const satisfies SignalOptions;
/**
* Check if the value is an instance of ___
diff --git a/packages/websocket/CHANGELOG.md b/packages/websocket/CHANGELOG.md
index 505961b28..25f0b4865 100644
--- a/packages/websocket/CHANGELOG.md
+++ b/packages/websocket/CHANGELOG.md
@@ -1,5 +1,17 @@
# @solid-primitives/websocket
+## 1.1.0
+
+### Minor Changes
+
+- eb3e9a2d: ready state signal for websockets
+
+## 1.0.0
+
+### Major Changes
+
+- 01b581ed: websocket: rewrite
+
## 0.3.7
### Patch Changes
diff --git a/packages/websocket/README.md b/packages/websocket/README.md
index 99075fd4c..c3a4ec7e4 100644
--- a/packages/websocket/README.md
+++ b/packages/websocket/README.md
@@ -2,8 +2,6 @@
-## Warning: This package is under active development and will change.
-
# @solid-primitives/websocket
[](https://turborepo.org/)
@@ -11,17 +9,146 @@
Primitive to help establish, maintain and operate a websocket connection.
-`createWebsocket` - Core primitive that setups up a basic outbound connection.
+- `makeWS` - sets up a web socket connection with a buffered send
+- `createWS` - sets up a web socket connection that disconnects on cleanup
+- `craeteWSState` - creates a reactive signal containing the readyState of a websocket
+- `makeReconnectingWS` - sets up a web socket connection that reconnects if involuntarily closed
+- `createReconnectingWS` - sets up a reconnecting web socket connection that disconnects on cleanup
+- `makeHeartbeatWS` - wraps a reconnecting web socket to send a heart beat and reconnect if the answer fails
+
+All of them return a WebSocket instance extended with a `message` prop containing an accessor for the last received message for convenience and the ability to receive messages to send before the connection is opened.
## How to use it
```ts
-const [connect, disconnect] = createWebsocket("http://localhost", "", 3, 5000);
+const ws = createWS("ws://localhost:5000");
+const state = createWSState(ws);
+const states = ["Connecting", "Connected", "Disconnecting", "Disconnected"];
+ws.send("it works");
+createEffect(on(ws.message, msg => console.log(msg), { defer: true }));
+return
Connection: {states[state()]}
;
+
+const socket = makeHeartbeatWS(
+ makeReconnectingWS(`ws://${location.hostName}/api/ws`, undefined, { timeout: 500 }),
+ { message: "👍" },
+);
+// with the primitives starting with `make...`, one needs to manually clean up:
+socket.send("this will reconnect if connection fails");
+```
+
+### Definitions
+
+```ts
+/** Arguments of the primitives */
+type WSProps = [url: string, protocols?: string | string[]];
+type WSMessage = string | ArrayBufferLike | ArrayBufferView | Blob;
+type WSReadyState = WebSocket.CONNECTING | WebSocket.OPEN | WebSocket.CLOSING | WebSocket.CLOSED;
+type WSEventMap = {
+ close: CloseEvent;
+ error: Event;
+ message: MessageEvent;
+ open: Event;
+};
+type ReconnectingWebSocket = WebSocket & {
+ reconnect: () => void;
+ // ws.send.before is meant to be used by heartbeat
+ send: ((msg: WSMessage) => void) & { before: () => void };
+};
+type WSHeartbeatOptions = {
+ /**
+ * Heartbeat message being sent to the server in order to validate the connection
+ * @default "ping"
+ */
+ message?: WSMessage;
+ /**
+ * The time between messages being sent in milliseconds
+ * @default 1000
+ */
+ interval?: number;
+ /**
+ * The time after the heartbeat message being sent to wait for the next message in milliseconds
+ * @default 1500
+ */
+ wait?: number;
+};
```
+If you want to use the messages as a signal, have a look at the [`event-listener`](../event-listener/README.md) package:
+
+```ts
+import { createWS } from "@solid-primitives/websocket";
+import { createEventSignal } from "@solid-primitives/event-listener";
+
+const ws = createWS("ws://localhost:5000");
+const messageEvent = createEventSignal(ws, "message");
+const message = () => messageEvent().data;
+```
+
+Otherwise, you can simply use the message event to get message.data:
+
+```ts
+import { createStore } from "solid-js/store";
+import { createReconnectingWS, WSMessage } from "@solid-primitives/websocket";
+
+const ws = createReconnectingWS("ws://localhost:5000");
+const [messages, setMessages] = createStore();
+ws.addEventListener("message", (ev) => setMessages(messages.length, ev.data));
+
+ messages}>
+ {(message) => ...}
+
+```
+
+## Setting up a websocket server
+
+While you can use this primitive with solid-start, it already provides a package for websockets that handles both the server and the client side:
+
+```ts
+import { createWebSocketServer } from "solid-start/websocket";
+import server$ from "solid-start/server";
+
+const pingPong = createWebSocketServer(
+ server$(function (webSocket) {
+ webSocket.addEventListener("message", async msg => {
+ try {
+ // Parse the incoming message
+ let incomingMessage = JSON.parse(msg.data);
+ console.log(incomingMessage);
+
+ switch (incomingMessage.type) {
+ case "ping":
+ webSocket.send(
+ JSON.stringify([
+ {
+ type: "pong",
+ data: {
+ id: incomingMessage.data.id,
+ time: Date.now(),
+ },
+ },
+ ]),
+ );
+ break;
+ }
+ } catch (err: any) {
+ // Report any exceptions directly back to the client. As with our handleErrors() this
+ // probably isn't what you'd want to do in production, but it's convenient when testing.
+ webSocket.send(JSON.stringify({ error: err.stack }));
+ }
+ });
+ }),
+);
+```
+
+Otherwise, in order to set up your own production-use websocket server, we recommend packages like
+
+- nodejs: [`ws`](https://github.com/websockets/ws)
+- rust: [`websocket`](https://docs.rs/websocket/latest/websocket/)
+
## Demo
-You may find a semi-functional example here: https://codesandbox.io/s/solid-websocket-65ynu?file=/src/index.tsx
+You may view a working example here:
+https://primitives.solidjs.community/playground/websocket/
## Changelog
diff --git a/packages/websocket/dev/index.tsx b/packages/websocket/dev/index.tsx
new file mode 100644
index 000000000..38a7715dc
--- /dev/null
+++ b/packages/websocket/dev/index.tsx
@@ -0,0 +1,64 @@
+import { Component, For, createSignal } from "solid-js";
+import { createStore } from "solid-js/store";
+import { type WSMessage, createReconnectingWS } from "../src";
+
+const App: Component = () => {
+ const [textArea, setTextArea] = createSignal();
+ const [messageBox, setMessageBox] = createSignal();
+ const ws = createReconnectingWS("wss://socketsbay.com/wss/v2/1/demo/");
+ const [messages, setMessages] = createStore([]);
+ const addMessage = (msg: WSMessage) => {
+ setMessages(messages.length, msg);
+ setTimeout(() => messageBox()?.lastElementChild?.scrollIntoView(), 50);
+ };
+ ws.addEventListener("message", msg => msg && addMessage(`RECEIVED: ${msg}`));
+
+ return (
+