ember-container-query
Version:
Make container queries that harness the power of Ember
53 lines (52 loc) • 1.92 kB
TypeScript
import type Owner from '@ember/owner';
import type { ArgsFor, NamedArgs, PositionalArgs } from 'ember-modifier';
import Modifier from 'ember-modifier';
type IndexSignatureParameter = string | number | symbol;
type Dimensions = {
aspectRatio: number;
height: number;
width: number;
};
type Metadata = {
dimension: keyof Dimensions;
max: number;
min: number;
};
type Features<T extends IndexSignatureParameter> = Record<T, Metadata>;
type QueryResults<T extends IndexSignatureParameter> = Record<T, boolean>;
interface ContainerQueryModifierSignature<T extends IndexSignatureParameter> {
Args: {
Named: {
dataAttributePrefix?: string;
debounce?: number;
features?: Features<T>;
onQuery?: ({ dimensions, queryResults, }: {
dimensions: Dimensions;
queryResults: QueryResults<T>;
}) => void;
};
Positional: [];
};
Element: Element;
}
export default class ContainerQueryModifier<T extends IndexSignatureParameter> extends Modifier<ContainerQueryModifierSignature<T>> {
private readonly resizeObserver;
private _dataAttributes;
private _element?;
private _named;
dimensions: Dimensions;
queryResults: QueryResults<T>;
get dataAttributePrefix(): string;
get debounce(): number;
get features(): Features<T>;
constructor(owner: Owner, args: ArgsFor<ContainerQueryModifierSignature<T>>);
private evaluateQueries;
private measureDimensions;
modify(element: Element, _positional: PositionalArgs<ContainerQueryModifierSignature<T>>, named: NamedArgs<ContainerQueryModifierSignature<T>>): void;
private queryContainer;
private registerResizeObserver;
private resetDataAttributes;
private setDataAttributes;
private onResize;
}
export type { Dimensions, Features, IndexSignatureParameter, Metadata, QueryResults, };