melt
Version:
The next generation of Melt UI. Built for Svelte 5.
53 lines (52 loc) • 1.39 kB
JavaScript
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,
};
}