@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
JSX
// 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
};