UNPKG

melt

Version:

The next generation of Melt UI. Built for Svelte 5.

53 lines (52 loc) 1.39 kB
import { createAttachmentKey } from "svelte/attachments"; import { keys } from "./object"; let id = 0; export function createId() { return `melt-${id++}`; } /** * @deprecated use `createBuilderMetaData` instead */ export function createDataIds(name, parts) { return parts.reduce((acc, part) => { acc[part] = `data-melt-${name}-${part}`; return acc; }, {}); } export function createIds(identifiers) { const id = createId(); return Object.keys(identifiers).reduce((acc, key) => { acc[key] = `${key}-${id}`; return acc; }, {}); } export function createBuilderMetadata(name, parts) { // TODO: clean this up const dataAttrs = createDataIds(name, parts); const dataSelectors = keys(dataAttrs).reduce((acc, key) => { acc[key] = `[${dataAttrs[key]}]`; return acc; }, {}); return { dataAttrs, dataSelectors, createIds: () => createIds(dataAttrs), createReferences: () => createReferences(), }; } export function createReferences() { const refs = new Map(); const ak = createAttachmentKey(); return { get(key) { return refs.get(key); }, attach(key) { return (node) => { refs.set(key, node); return () => refs.delete(key); }; }, key: ak, }; }