bits-ui
Version:
The headless components for Svelte.
98 lines (97 loc) • 2.9 kB
JavaScript
export function getDataOpenClosed(condition) {
return condition ? "open" : "closed";
}
export function getDataChecked(condition) {
return condition ? "checked" : "unchecked";
}
export function getAriaDisabled(condition) {
return condition ? "true" : "false";
}
export function getAriaReadonly(condition) {
return condition ? "true" : "false";
}
export function getAriaExpanded(condition) {
return condition ? "true" : "false";
}
export function getDataDisabled(condition) {
return condition ? "" : undefined;
}
export function getAriaRequired(condition) {
return condition ? "true" : "false";
}
export function getAriaSelected(condition) {
return condition ? "true" : "false";
}
export function getAriaChecked(checked, indeterminate) {
if (indeterminate) {
return "mixed";
}
return checked ? "true" : "false";
}
export function getAriaOrientation(orientation) {
return orientation;
}
export function getAriaHidden(condition) {
return condition ? "true" : undefined;
}
export function getAriaInvalid(condition) {
return condition ? "true" : undefined;
}
export function getDataOrientation(orientation) {
return orientation;
}
export function getDataInvalid(condition) {
return condition ? "" : undefined;
}
export function getDataRequired(condition) {
return condition ? "" : undefined;
}
export function getDataReadonly(condition) {
return condition ? "" : undefined;
}
export function getDataSelected(condition) {
return condition ? "" : undefined;
}
export function getDataUnavailable(condition) {
return condition ? "" : undefined;
}
export function getHidden(condition) {
return condition ? true : undefined;
}
export function getDisabled(condition) {
return condition ? true : undefined;
}
export function getAriaPressed(condition) {
return condition ? "true" : "false";
}
export function getRequired(condition) {
return condition ? true : undefined;
}
export class BitsAttrs {
#variant;
#prefix;
attrs;
constructor(config) {
this.#variant = config.getVariant ? config.getVariant() : null;
this.#prefix = this.#variant ? `data-${this.#variant}-` : `data-${config.component}-`;
this.getAttr = this.getAttr.bind(this);
this.selector = this.selector.bind(this);
this.attrs = Object.fromEntries(config.parts.map((part) => [part, this.getAttr(part)]));
}
getAttr(part, variantOverride) {
if (variantOverride)
return `data-${variantOverride}-${part}`;
return `${this.#prefix}${part}`;
}
selector(part, variantOverride) {
return `[${this.getAttr(part, variantOverride)}]`;
}
}
export function createBitsAttrs(config) {
const bitsAttrs = new BitsAttrs(config);
return {
...bitsAttrs.attrs,
selector: bitsAttrs.selector,
getAttr: bitsAttrs.getAttr,
};
}