UNPKG

@ark-ui/solid

Version:

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

87 lines (84 loc) 3.14 kB
import { GridCollection, ListCollection, TreeCollection, filePathToTree } from '@zag-js/collection'; import { createMemo, splitProps, createSignal } from 'solid-js'; // src/components/collection/grid-collection.ts var createGridCollection = (options) => new GridCollection(options); var createListCollection = (options) => new ListCollection(options); var createTreeCollection = (options) => new TreeCollection(options); var createFileTreeCollection = (paths) => filePathToTree(paths); 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 { createFileTreeCollection, createGridCollection, createListCollection, createTreeCollection, useListCollection };