### Install @solid-primitives/fullscreen Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/fullscreen/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/fullscreen # or yarn add @solid-primitives/fullscreen ``` -------------------------------- ### Install @solid-primitives/transition-group Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/transition-group/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/transition-group # or yarn add @solid-primitives/transition-group # or pnpm add @solid-primitives/transition-group ``` -------------------------------- ### Install @solid-primitives/fetch Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/fetch/README.md Install the primitive using npm or yarn. ```bash npm install @solid-primitives/fetch # or yarn add @solid-primitives/fetch ``` -------------------------------- ### Install @solid-primitives/event-listener Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/event-listener/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/event-listener # or yarn add @solid-primitives/event-listener ``` -------------------------------- ### Install @solid-primitives/storage Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/storage/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/storage # or yarn add @solid-primitives/storage ``` -------------------------------- ### Install @solid-primitives/promise Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/promise/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/promise # or yarn add @solid-primitives/promise ``` -------------------------------- ### Install @solid-primitives/virtual Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/virtual/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/virtual # or yarn add @solid-primitives/virtual # or pnpm add @solid-primitives/virtual ``` -------------------------------- ### Install @solid-primitives/refs Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/refs/README.md Install the package using npm, pnpm, or yarn. ```bash npm install @solid-primitives/refs # or pnpm add @solid-primitives/refs # or yarn add @solid-primitives/refs ``` -------------------------------- ### Install @solid-primitives/filesystem Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/filesystem/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/filesystem # or yarn add @solid-primitives/filesystem # or pnpm add @solid-primitives/filesystem ``` -------------------------------- ### Install @solid-primitives/scheduled Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/scheduled/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/scheduled # or yarn add @solid-primitives/scheduled ``` -------------------------------- ### Install @solid-primitives/pointer Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/pointer/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/pointer # or yarn add @solid-primitives/pointer ``` -------------------------------- ### Install @solid-primitives/page-visibility Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/page-visibility/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/page-visibility # or yarn add @solid-primitives/page-visibility ``` -------------------------------- ### Install @solid-primitives/utils Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/utils/README.md Install the package using npm, pnpm, or yarn. ```bash npm install @solid-primitives/utils # or pnpm add @solid-primitives/utils # or yarn add @solid-primitives/utils ``` -------------------------------- ### Install @solid-primitives/connectivity Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/connectivity/README.md Install the connectivity primitive using npm or yarn. ```bash npm install @solid-primitives/connectivity # or yarn add @solid-primitives/connectivity ``` -------------------------------- ### Install @solid-primitives/resource Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/resource/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/resource # or yarn add @solid-primitives/resource # or pnpm add @solid-primitives/resource ``` -------------------------------- ### Install @solid-primitives/pagination Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/pagination/README.md Install the pagination primitive using your preferred package manager. ```bash npm install @solid-primitives/pagination # or yarn add @solid-primitives/pagination # or pnpm add @solid-primitives/pagination ``` -------------------------------- ### Install @solid-primitives/memo Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/memo/README.md Install the package using npm, pnpm, or yarn. ```bash npm install @solid-primitives/memo # or pnpm add @solid-primitives/memo # or yarn add @solid-primitives/memo ``` -------------------------------- ### Install @solid-primitives/platform Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/platform/README.md Install the package using npm, pnpm, or yarn. ```bash npm install @solid-primitives/platform # or pnpm add @solid-primitives/platform # or yarn add @solid-primitives/platform ``` -------------------------------- ### Install @solid-primitives/styles Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/styles/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/styles # or yarn add @solid-primitives/styles # or pnpm add @solid-primitives/styles ``` -------------------------------- ### Install @solid-primitives/event-props Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/event-props/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/event-props # or yarn add @solid-primitives/event-props ``` -------------------------------- ### Install @solid-primitives/scroll Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/scroll/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/scroll # or yarn add @solid-primitives/scroll ``` -------------------------------- ### Install @solid-primitives/static-store Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/static-store/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/static-store # or yarn add @solid-primitives/static-store # or pnpm add @solid-primitives/static-store ``` -------------------------------- ### Install @solid-primitives/audio Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/audio/README.md Install the audio primitive package using npm or yarn. ```bash npm install @solid-primitives/audio # or yarn add @solid-primitives/audio ``` -------------------------------- ### Install @solid-primitives/destructure Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/destructure/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/destructure # or yarn add @solid-primitives/destructure ``` -------------------------------- ### Install @solid-primitives/spring Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/spring/README.md Install the spring primitive using npm, yarn, or pnpm. ```bash npm install @solid-primitives/spring # or yarn add @solid-primitives/spring # or pnpm add @solid-primitives/spring ``` -------------------------------- ### Install @solid-primitives/active-element Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/active-element/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/active-element # or yarn add @solid-primitives/active-element ``` -------------------------------- ### Install @solid-primitives/jsx-tokenizer Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/jsx-tokenizer/README.md Install the package using npm, pnpm, or yarn. ```bash npm install @solid-primitives/jsx-tokenizer # or pnpm add @solid-primitives/jsx-tokenizer # or yarn add @solid-primitives/jsx-tokenizer ``` -------------------------------- ### Install @solid-primitives/bounds Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/bounds/README.md Install the package using npm or yarn. ```bash npm install @solid-primitives/bounds # or yarn add @solid-primitives/bounds ``` -------------------------------- ### Install Dependencies and Build Source: https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md Run this command to install all project dependencies and build local packages. Re-run after pulling from the main branch. ```bash pnpm install ``` -------------------------------- ### Install @solid-primitives/graphql Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/graphql/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/graphql # or yarn add @solid-primitives/graphql # or pnpm add @solid-primitives/graphql ``` -------------------------------- ### Install @solid-primitives/stream Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/stream/README.md Install the stream primitive using npm or yarn. ```bash npm install @solid-primitives/stream # or yarn add @solid-primitives/stream ``` -------------------------------- ### Install Devices Primitive Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/devices/README.md Install the @solid-primitives/devices package using npm or yarn. ```bash npm install @solid-primitives/devices # or yarn add @solid-primitives/devices ``` -------------------------------- ### Install @solid-primitives/timer Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/timer/README.md Install the timer primitives package using npm or yarn. ```bash npm install @solid-primitives/timer # or yarn add @solid-primitives/timer ``` -------------------------------- ### Install @solid-primitives/idle Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/idle/README.md Install the primitive using npm, yarn, or pnpm. ```bash npm install @solid-primitives/idle # or yarn add @solid-primitives/idle # or pnpm add @solid-primitives/idle ``` -------------------------------- ### Install @solid-primitives/set Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/set/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/set # or yarn add @solid-primitives/set # or pnpm add @solid-primitives/set ``` -------------------------------- ### Install @solid-primitives/state-machine Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/state-machine/README.md Install the state-machine primitive using npm, yarn, or pnpm. ```bash npm install @solid-primitives/state-machine # or yarn add @solid-primitives/state-machine # or pnpm add @solid-primitives/state-machine ``` -------------------------------- ### Install @solid-primitives/cursor Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/cursor/README.md Install the package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/cursor # or yarn add @solid-primitives/cursor # or pnpm add @solid-primitives/cursor ``` -------------------------------- ### Install Dependencies Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/storage/tauri-storage/README.md Installs the necessary project dependencies using npm. ```bash npm i ``` -------------------------------- ### Install @solid-primitives/tween Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/tween/README.md Install the tween primitive using npm or yarn. ```bash npm install @solid-primitives/tween # or yarn add @solid-primitives/tween ``` -------------------------------- ### Install @solid-primitives/autofocus Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/autofocus/README.md Install the autofocus primitive using npm, yarn, or pnpm. ```bash npm install @solid-primitives/autofocus # or yarn add @solid-primitives/autofocus # or pnpm add @solid-primitives/autofocus ``` -------------------------------- ### Install @solid-primitives/permission Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/permission/README.md Install the permission primitive using npm or yarn. ```bash npm install @solid-primitives/permission # or yarn add @solid-primitives/permission ``` -------------------------------- ### Install @solid-primitives/template-primitive Source: https://github.com/solidjs-community/solid-primitives/blob/main/template/README.md Install the template-primitive package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/template-primitive # or yarn add @solid-primitives/template-primitive # or pnpm add @solid-primitives/template-primitive ``` -------------------------------- ### Install @solid-primitives/marker Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/marker/README.md Install the marker primitive using npm, yarn, or pnpm. ```bash npm install @solid-primitives/marker # or yarn add @solid-primitives/marker # or pnpm add @solid-primitives/marker ``` -------------------------------- ### Install @solid-primitives/masonry Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/masonry/README.md Install the masonry primitive using npm, yarn, or pnpm. ```bash npm install @solid-primitives/masonry # or yarn add @solid-primitives/masonry # or pnpm add @solid-primitives/masonry ``` -------------------------------- ### Install Event Dispatcher Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/event-dispatcher/README.md Install the @solid-primitives/event-dispatcher package using npm or yarn. ```bash npm install @solid-primitives/event-dispatcher # or yarn add @solid-primitives/event-dispatcher ``` -------------------------------- ### Install @solid-primitives/keyed Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/keyed/README.md Install the keyed primitives package using npm or yarn. ```bash npm install @solid-primitives/keyed # or yarn add @solid-primitives/keyed ``` -------------------------------- ### Install @solid-primitives/script-loader Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/script-loader/README.md Install the script-loader primitive using npm, yarn, or pnpm. ```bash npm install @solid-primitives/script-loader # or yarn add @solid-primitives/script-loader # or pnpm add @solid-primitives/script-loader ``` -------------------------------- ### Package Development Playground Source: https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md Starts a development playground for an individual package. ```bash pnpm run dev ``` -------------------------------- ### Install pnpm Source: https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md Install pnpm globally if you don't have it. This is required for managing the monorepo. ```bash npm install -g pnpm ``` -------------------------------- ### Install Controlled Props Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/controlled-props/README.md Install the @solid-primitives/controlled-props package using npm, yarn, or pnpm. ```bash npm install @solid-primitives/controlled-props # or yarn add @solid-primitives/controlled-props # or pnpm add @solid-primitives/controlled-props ``` -------------------------------- ### Install Input Mask Primitive Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/input-mask/README.md Install the @solid-primitives/input-mask package using npm or yarn. ```bash npm install @solid-primitives/input-mask # or yarn add @solid-primitives/input-mask ``` -------------------------------- ### Install Mutation Observer Primitive Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/mutation-observer/README.md Install the mutation observer primitive using npm or yarn. ```bash npm install @solid-primitives/mutation-observer # or yarn add @solid-primitives/mutation-observer ``` -------------------------------- ### Install node-fetch for Server-Side Fetch Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/fetch/README.md If using on the server with Node.js versions prior to 18.0.0, install node-fetch. ```bash npm install node-fetch # or yarn add node-fetch ``` -------------------------------- ### Basic createReducer Usage Example Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/memo/README.md A simple example demonstrating createReducer for a counter. The reducer function doubles the state, and the dispatch function is called to trigger the update. ```tsx import { createReducer } from "@solid-primitives/memo"; function Counter() { const [count, double] = createReducer(c => c * 2, 1); return ; } ``` -------------------------------- ### Basic Filesystem Operations with createFileSystem Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/filesystem/README.md Demonstrates basic filesystem operations using `createFileSystem` with a virtual filesystem adapter. Shows how to create directories, write files, and use Solid's reactivity to log file types, directory contents, and file contents. ```tsx const vfs = makeVirtualFileSystem({}); const fs = createFileSystem(vfs); // create a directory fs.mkdir("/src"); // create or overwrite a file fs.writeFile("/src/index.ts", "console.log(0);"); // checking entry type: "file" | "dir" | null (file not found) | undefined (not yet ready) // will be called again if the file or directory is deleted (-> null) createEffect(() => console.log("/src type", fs.getType("/src"))); // read a directory // will be called again if the contents of "/" change due to // writing a new file or deleting an existing file or directory createEffect(() => console.log("/", fs.readdir("/"))); // reading files // this signal (or resource for async adapters) will update if // the file is written by the same fs createEffect(() => console.log("/src/index.ts", fs.readFile("/src/index.ts"))); ``` -------------------------------- ### Create and Manage Selection Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/selection/README.md Initializes a reactive selection state and provides functions to get and set the selection. The state is represented as a tuple of the target node, start offset, and end offset. ```typescript import { createSelection } from "@solid-primitives/selection"; const [selection, setSelection] = createSelection(); // nothing is selected: selection(); // [null, NaN, NaN] // select the second to fourth letter inside a contentEditable div: setSelection([document.querySelector("div[contenteditable]"), 1, 3]); selection(); // [HTMLDivElement, 1, 3] // change the selection to a cursor behind the fourth letter inside the first input: setSelection([document.querySelector("input"), 3, 3]); selection(); // [HTMLInputElement, 3, 3] // remove the selection again: setSelection([null, NaN, NaN]); ``` -------------------------------- ### Install Geolocation Primitives Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/geolocation/README.md Install the geolocation primitives package using npm or yarn. ```bash npm install @solid-primitives/geolocation # or yarn add @solid-primitives/geolocation ``` -------------------------------- ### Create and Start Analytics Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/analytics/README.md Initialize analytics management and start the analytics process. The provided function will be called when analytics starts. ```typescript const [running, start, stop] = createAnalytics(() => console.log('hi'))); start(); ``` -------------------------------- ### Combine resource primitives Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/resource/README.md An example demonstrating the combined usage of makeAbortable, makeCache, and createAggregated with createResource. ```typescript // abort signal will abort the resource in-flight if it takes more then 10000ms const [signal, abort] = makeAbortable({ timeout: 10000 }); const fetcher = (url: string) => fetch(url, { signal: signal() }).then(r => r.json()); // cached fetcher will not be called if something for the same URL is still in cache const [cachedFetcher, invalidate] = makeCache(fetcher, { storage: localStorage }); // works with createResource, or any wrapping API with the same interface const [data, { refetch }] = createResource(address, fetcher); const aggregatedData = createAggregated(data); ``` -------------------------------- ### Scheduling Strategies Examples Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/scheduled/README.md Demonstrates how to use createScheduled with different scheduling functions like debounce, throttle, and their leading/trailing variants. ```typescript // e.g. with debounce createScheduled(fn => debounce(fn, 1000)); ``` ```typescript // e.g. with throttle createScheduled(fn => throttle(fn, 1000)); ``` ```typescript // e.g. with leading debounce createScheduled(fn => leading(debounce, fn, 1000)); ``` ```typescript // e.g. with leading throttle createScheduled(fn => leading(throttle, fn, 1000)); ``` -------------------------------- ### Using createFetch with undefined RequestInfo Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/fetch/README.md Shows how to initialize a fetch request without starting it immediately by using an accessor that returns undefined. ```typescript const [resource] = createFetch( () => undefined // Request will not start until this accessor returns a valid RequestInfo ); ``` -------------------------------- ### Build All Packages Source: https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md Builds all packages in the monorepo. ```bash pnpm run build ``` -------------------------------- ### Create Fullscreen Primitive with Options Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/fullscreen/README.md Demonstrates the signature for createFullscreen, showing how options can be passed as a second or third argument. This is particularly useful for directive-based usage. ```typescript const isActive: Accessor = createFullscreen( ref: HTMLElement | undefined, active?: Accessor, options?: FullscreenOptions ); ``` -------------------------------- ### Create and Use Tokenizer and Tokens Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/jsx-tokenizer/README.md Demonstrates creating a tokenizer, defining token components, and resolving tokens within a parent component. ```tsx import { createTokenizer, createToken, resolveTokens } from "@solid-primitives/jsx-tokenizer"; const Tokenizer = createTokenizer({ name: "Example Tokenizer", // optional (used for warnings during development) }); // lets you create multiple token components with the same id: const MyTokenA = createToken(Tokenizer, props => ({ type: "A" })); const MyTokenB = createToken(Tokenizer, props => ({ type: "B" })); function ParentComponent(props) { const tokens = resolveTokens(Tokenizer, () => props.children); return (
    {token =>
  • {token.data.type}
  • }
); } ; ``` -------------------------------- ### Typical usage of Key component Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/keyed/README.md Demonstrates the typical usage of the Key component for creating a list of elements by mapping items by a provided key. It includes a fallback for empty lists. ```tsx item.id} fallback={
No items
}> {item =>
{item()}
}
``` -------------------------------- ### Supabase Database Setup SQL Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/db-store/dev/README.md SQL statements to create the 'todos' table, enable real-time publications, and set up row-level security policies for authenticated users. ```sql create table todos ( id serial primary key, task text, user_id uuid references auth.users default auth.uid() ); alter publication supabase_realtime add table todos; create policy "realtime updates only for authenticated users" on "realtime"."messages" for select to authenticated using (true); alter table "public"."todos" enable row level security; create policy "Select only own tasks" on "public"."todos" for select to authenticated using (((SELECT auth.uid() AS uid) = user_id)); create policy "Insert only own tasks" on "public"."todos" for insert to authenticated with check (((SELECT auth.uid() AS uid) = user_id)); create policy "Delete only own tasks" on "public"."todos" for delete to authenticated using (((SELECT auth.uid() AS uid) = user_id)); create policy "Update only own tasks" on "public"."todos" for update to authenticated using (((SELECT auth.uid() AS uid) = user_id)) with check (((SELECT auth.uid() AS uid) = user_id)); ``` -------------------------------- ### Ref Component Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/refs/README.md Component to get up-to-date reference to a single child element. It accepts a `ref` prop for getting the current element or `undefined`. ```APIDOC ## ### Description Component to get up-to-date reference to a single child element. It accepts a `ref` prop for getting the current element or `undefined`. ### How to use it `` accepts only a `ref` property for getting the current element or `undefined`, and requires `children` to be passed in. ```tsx import { Ref } from "@solid-primitives/refs"; const [ref, setRef] = createSignal(); {props.children}; ``` ``` -------------------------------- ### Get Position Relative to Screen Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/mouse/README.md Converts page coordinates to coordinates relative to the screen. ```typescript const pos = getPositionToScreen(pageX, pageY); ``` -------------------------------- ### Basic makeSSE Usage Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/sse/README.md Demonstrates how to create a raw EventSource connection using `makeSSE`. Event handlers are attached immediately, and you are responsible for calling the returned cleanup function. ```typescript import { makeSSE } from "@solid-primitives/sse"; const [source, cleanup] = makeSSE("https://api.example.com/events", { onOpen: () => console.log("Connected"), onMessage: e => console.log("Message:", e.data), onError: e => console.error("Error:", e), events: { // Named SSE event types (server sends `event: update`) update: e => console.log("Update:", e.data), }, }); // When done: cleanup(); ``` -------------------------------- ### Create and Use Event Stack Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/event-bus/README.md Demonstrates how to create an event stack with optional value parsing and how to listen to, emit, and manage events. ```typescript import { createEventStack } from "@solid-primitives/event-bus"; const bus = createEventStack({ // toValue parsing function is optional toValue: e => ({ message: e }) }); // can be destructured: const { listen, emit, clear, value } = bus; const listener: EventStackListener<{ text: string }> = ({ event, stack, remove }) => { console.log(event, stack); // you can remove the value from stack remove(); }; bus.listen(listener); bus.emit({ text: "foo" }); // a signal accessor: bus.value() // => { text: string }[] bus.setValue(stack => stack.filter(item => {...})) ``` -------------------------------- ### Get Position Relative to Element Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/mouse/README.md Converts page coordinates to coordinates relative to a specified element. ```typescript const pos = getPositionToElement(pageX, pageY, element); ``` -------------------------------- ### Create Permission State Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/permission/README.md Use the createPermission function to get the permission state for a given descriptor. ```typescript const state: "unknown" | PermissionState = createPermission(descriptor: PermissionDescription | PermissionName); ``` -------------------------------- ### Create and Use GraphQL Client Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/graphql/README.md Initialize a GraphQL client with a URL and create a query. The query function returns data and a refetch function. ```typescript import { createGraphQLClient, gql } from "@solid-primitives/graphql"; const newQuery = createGraphQLClient("https://foobar.com/v1/api"); const [data, { refetch }] = newQuery( gql` query data($path: ID!) { PageItem(id: $path) { content { body } } } `, { path: "home" }, ); ``` -------------------------------- ### Get Timestamp Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/date/README.md Converts various inputs (timestamp, date string, Date instance) into a timestamp number. ```typescript /** * @param init timestamp `number` | date `string` | `Date` instance * @returns timestamp `number` */ const getTime = (init: DateInit): number ``` -------------------------------- ### Create Latest Updated Source Values Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/memo/README.md Use createLatestMany to get the values of all sources that were updated in the last tick. ```typescript import { createLatestMany } from "@solid-primitives/memo"; const [count, setCount] = createSignal(1); const [text, setText] = createSignal("hello"); const lastUpdated = createLatestMany([count, text]); lastUpdated(); // => [1, "hello"] setCount(4); lastUpdated(); // => [4] ``` -------------------------------- ### Static Dictionaries with createMemo Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/i18n/README.md Use createMemo for static dictionaries when dynamic loading is not required. This example shows how to import dictionaries and create a memoized flattened dictionary for translation. ```tsx import * as en from "./i18n/en.js"; import * as fr from "./i18n/fr.js"; import * as es from "./i18n/es.js"; const dictionaries = { en: en.dict, fr: fr.dict, es: es.dict, }; const [locale, setLocale] = createSignal("en"); const dict = createMemo(() => i18n.flatten(dictionaries[locale()])); const t = i18n.translator(dict); ``` -------------------------------- ### Get Date Instance Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/date/README.md Converts various inputs (timestamp, date string, Date instance) into a Date instance. ```typescript /** * @param init timestamp `number` | date `string` | `Date` instance * @returns `Date` instance */ const getDate = (init: DateInit): Date ``` -------------------------------- ### Create WebSocket Server with Ping-Pong Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/websocket/README.md Sets up a WebSocket server that listens for 'ping' messages and responds with 'pong'. This example demonstrates basic message handling and error reporting back to the client. ```typescript 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 })); } }); }), ); ``` -------------------------------- ### Using trackStore for Deep Tracking Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/history/README.md Illustrates using `trackStore` from `@solid-primitives/deep` for granular store tracking and `structuredClone` for deep cloning state. ```ts import { trackStore } from "@solid-primitives/deep"; const history = createUndoHistory(() => { // track any update to the store trackStore(state); // clone the object underneath the store const copy = structuredClone(unwrap(state)); // reconcile the state back to the tracked value return () => setState(reconcile(copy)); }); ``` -------------------------------- ### SSEReadyState Enum Example Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/sse/README.md Demonstrates how to import and access the SSEReadyState constants for managing connection states. These constants are tree-shakeable. ```typescript import { SSEReadyState } from "@solid-primitives/sse"; SSEReadyState.CONNECTING; // 0 SSEReadyState.OPEN; // 1 SSEReadyState.CLOSED; // 2 ``` -------------------------------- ### IndexRange Component Usage Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/range/README.md Shows basic usage of the `` control flow component with specified start, to, and step props. ```tsx
``` -------------------------------- ### Basic ReactiveSet Usage Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/set/README.md Demonstrates creating a ReactiveSet, listening to its changes reactively, and applying standard Set operations. ```typescript const set = new ReactiveSet([1, 1, 2, 3]); // listen for changes reactively createEffect(() => { [...set]; // => [1,2,3] (reactive on any change) set.has(2); // => true (reactive on change to the result) }); // apply like with normal Set set.add(4); set.delete(2); set.clear(); ``` -------------------------------- ### indexRange Function Definition Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/range/README.md Defines the signature for the `indexRange` function, which maps a number range with specified start, to, and step values. ```typescript function indexRange( start: Accessor, to: Accessor, step: Accessor, mapFn: (n: Accessor) => T, options?: { fallback?: Accessor; }, ): Accessor; ``` -------------------------------- ### createAudio Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/audio/README.md Creates a comprehensive audio player with reactive properties for controlling playback state, volume, and accessing duration and current time. It also provides controls for seeking and volume adjustment. ```APIDOC ## createAudio ### Description Creates a very basic audio/sound player with reactive properties to control the audio. Be careful not to destructure the value properties provided by the primitive as it will likely break reactivity. ### Method Signature ```typescript function createAudio( src: AudioSource | Accessor, playing?: Accessor, volume?: Accessor, ): [ { state: AudioState; currentTime: number; duration: number; volume: number; player: HTMLAudioElement; }, { seek: (time: number) => void; setVolume: (volume: number) => void; play: VoidFunction; pause: VoidFunction; }, ]; ``` ### Parameters - **src** (AudioSource | Accessor) - The source of the audio file, can be a signal. - **playing** (Accessor, optional) - A signal to control the playing state. - **volume** (Accessor, optional) - A signal to control the volume. ### Returns A tuple containing: 1. An object with reactive properties: - **state**: The current audio state (e.g., 'LOADING', 'PLAYING', 'PAUSED'). - **currentTime**: The current playback time in seconds. - **duration**: The total duration of the audio in seconds. - **volume**: The current volume level. - **player**: The underlying HTMLAudioElement instance. 2. An object with control functions: - **seek**: Function to seek to a specific time in the audio. - **setVolume**: Function to set the audio volume. - **play**: Function to play the audio. - **pause**: Function to pause the audio. ``` -------------------------------- ### makeResizeObserver Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/resize-observer/README.md Instantiates a new ResizeObserver that automatically gets disposed on cleanup. It returns observe and unobserve functions for managing targets. ```APIDOC ## makeResizeObserver ### Description Instantiates a new ResizeObserver that automatically gets disposed on cleanup. It returns `observe` and `unobserve` functions for managing targets. ### Usage ```ts import { makeResizeObserver } from "@solid-primitives/resize-observer"; const { observe, unobserve } = makeResizeObserver(handleObserverCallback, { box: "content-box" }); observe(document.body); observe(ref); function handleObserverCallback(entries: ResizeObserverEntry[]) { for (const entry of entries) { console.log(entry.contentRect.width); } } ``` ### Disposing `makeResizeObserver` will dispose itself with its parent reactive owner. To dispose early, wrap the primitive with a [`createRoot`](https://www.solidjs.com/docs/latest/api#createroot). ```ts const { dispose } = createRoot(dispose => { const { observe, unobserve } = makeResizeObserver(handleObserverCallback); return { dispose, observe, unobserve }; }); // dispose early dispose(); ``` ``` -------------------------------- ### Run Demo Application Source: https://github.com/solidjs-community/solid-primitives/blob/main/packages/storage/tauri-storage/README.md Commands to run the tauriStorage demo application. Use 'npm run dev' for the web version and 'npm run tauri dev' for the Tauri version. ```bash # web version npm run dev # tauri version npm run tauri dev ```