UNPKG

@ark-ui/solid

Version:

A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.

105 lines (100 loc) 3.38 kB
// src/components/collection/grid-collection.ts import { GridCollection } from "@zag-js/collection"; var createGridCollection = (options) => new GridCollection(options); // src/components/collection/list-collection.ts import { ListCollection } from "@zag-js/collection"; var createListCollection = (options) => new ListCollection(options); // src/components/collection/tree-collection.ts import { TreeCollection, filePathToTree } from "@zag-js/collection"; var createTreeCollection = (options) => new TreeCollection(options); var createFileTreeCollection = (paths) => filePathToTree(paths); // src/components/collection/use-list-collection.ts import { createMemo, createSignal, splitProps } from "solid-js"; function useListCollection(props) { const splittedProps = createMemo(() => { const rawProps = typeof props === "function" ? props() : props; return splitProps(rawProps, ["initialItems", "filter", "limit"]); }); const create = (items) => { const [, collectionProps] = splittedProps(); return createListCollection({ ...collectionProps, items }); }; const init = () => { const [localProps] = splittedProps(); return create( localProps.limit != null ? localProps.initialItems.slice(0, localProps.limit) : localProps.initialItems ); }; const [collection, setCollectionImpl] = createSignal(init()); const setCollection = (collection2) => { const [localProps] = splittedProps(); setCollectionImpl( localProps.limit == null ? collection2 : collection2.copy(collection2.items.slice(0, localProps.limit)) ); }; return { collection, filter: (inputValue) => { const [localProps] = splittedProps(); const filter = localProps.filter; if (!filter) return; const filtered = create(localProps.initialItems).filter((itemString) => filter(itemString, inputValue)); setCollection(filtered); }, set: (items) => { setCollection(create(items)); }, reset: () => { const [localProps] = splittedProps(); setCollection(create(localProps.initialItems)); }, clear: () => { setCollection(create([])); }, insert: (index, ...items) => { setCollection(collection().insert(index, ...items)); }, insertBefore: (value, ...items) => { setCollection(collection().insertBefore(value, ...items)); }, insertAfter: (value, ...items) => { setCollection(collection().insertAfter(value, ...items)); }, remove: (...itemOrValues) => { setCollection(collection().remove(...itemOrValues)); }, move: (value, to) => { setCollection(collection().move(value, to)); }, moveBefore: (value, ...values) => { setCollection(collection().moveBefore(value, ...values)); }, moveAfter: (value, ...values) => { setCollection(collection().moveAfter(value, ...values)); }, reorder: (from, to) => { setCollection(collection().reorder(from, to)); }, append: (...items) => { setCollection(collection().append(...items)); }, prepend: (...items) => { setCollection(collection().prepend(...items)); }, update: (value, item) => { setCollection(collection().update(value, item)); } }; } export { createGridCollection, createListCollection, createTreeCollection, createFileTreeCollection, useListCollection };