5.8.0

2026-04-29

BREAKING

squared.lib
/* css */

type Specificity = [number, number, number, number, number] | [number, number, number, number, number, number, number]; // @layer [3] | [5] / @scope [4] | [6]

/* internal */

function getSpecificity(value: string, layer?: number): Specificity; // layer
squared.base
class Node {
    cssSpecificity(attr: CssStyleAttr, context?: string): Specificity | undefined;
}

ADDED

squared.base
interface AppProjectUI {
    documentRoot: LayoutRoot<NodeUI>[];
    set rendered(value);
    get rendered(): NodeUI[];
}

interface CacheValueUI {
    inlineBlock?: boolean;
}

interface DescendOptions {
    matches?: string;
}

interface AscendOptions {
    closest?: string;
    matches?: string;
}

interface NodeParseUnitOptions {
    fromFont?: boolean;
}

class ResourceUI {
    static appendId(resourceId: number, section: string, name: string): boolean;
    characterMap: StringMap;
    placeholderIntl: Record<string, StringMap>;
    getInputPlaceholder(type: string, languages: string[], fallback?: string): string;
}

class NodeUI {
    anchorSibling(orientation: OrientationAttr, documentId?: string): [AnchorPositionAttr, string][];
    getFontSizeAdjust(fontFamily: string, fontSize?: number, fallback?: number): number;
    datasetValue(name: string, global?: boolean): string | undefined;
    get scalableElement(): boolean;
    get modalElement(): boolean;
    get inlineBlock(): boolean;
    get metadata(): PlainObject | null;
}
squared.lib
/* client */

interface UserAgentFeatures {
    RULES: {
        FUNCTION: boolean;
    };
}

/* constant */

const enum CSS_UNIT {
    RESOLUTION = 64
}

/* css */

interface CSSStyleDeclaration {
    textDecorationInset: string;
}

inteface CssPropertyData {
    also?: CssStyleAttr;
}

interface ParseUnitOptions {
    typedOM?: boolean;
}

interface MatchContainerOptions {
    prefix?: string;
}

function findContainerType(element: Element, conditionText: string, name?: string): ContainerData | null;
function parseConditional(element: HTMLElement | SVGElement, attr: CssStyleAttr, value: string): string;
function hasCustomFunction(value: string): boolean;
function hasConditional(value: string): boolean;
function isResolution(value: string): boolean;

/* dom */

type PseudoDocumentElt = PseudoScrollElt | "::picker(select)" | "::picker-icon" | "::checkmark";
type PseudoStyleElt = "::search-text" | "::view-transition";
type PseudoQueryElt = "::cue(string)" | "::highlight(string)" | "view-transition-group(string)" | "::view-transition-image-pair(string)" | "::view-transition-new(string)" | "::view-transition-old(string)";
type PseudoScrollElt = "::scroll-marker-group" | "::scroll-marker" | "::scroll-button(top)" | "::scroll-button(right)" | "::scroll-button(bottom)" | "::scroll-button(left)" | "::scroll-button(block-start)" | "::scroll-button(block-end)" | "::scroll-button(inline-start)" | "::scroll-button(inline-end)";

interface ContainerData {
    conditionText?: string;
}

function isOpen(element: Element, modal?: boolean): boolean;

/* internal */

const CLIENT_FEATURES: UserAgentFeatures;

/* regex */

const STRING: {
    CSS_VARIABLE: string;
};

const CSS: {
    CUSTOM_IDENT: RegExp;
}
squared.lib.base
class Container {
    concat(list: unknown[] | Container): unknown[];
}
squared.svg
class Svg {
    shadowHost: ShadowRoot | null;
}

class SvgAnimation {
    shadowHost: ShadowRoot | null;
}

class SvgAnimate {
    insertAt(time: number, value: string, index?: number): void;
}
squared.svg.util
const TRANSFORM: {
    typeAsReset(type: number | string): string;
};

function getTargetElement(element: SVGElement, rootElement?: SVGSVGElement | null, shadowRoot?: ShadowRoot | null, contentMap?: StringMap | null): SVGElement | null; // shadowRoot
function formatSkew(value: string, type?: number): string;
android.base
interface UserResourceSettingsUI {
    createResourceIds: string | string[] | undefined; // "android" | "compose" | "fragment" | "drawable" | "animated-drawable";
    createBuildDependencies: "navigation-v3";
}

interface DocumentOutput {
    resolutionScreenWidth?: number; // copyTo | saveAs (override)
    resolutionScreenHeight?: number;
}

interface ControllerSettingsUI {
    filename: {
        id: string;
    };
}

interface ControllerSettingsDirectoryUI {
    id: string;
}

class Application {
    getTargetApi(sessionId: string): number;
}

class File {
    resourceIdToXml(stored: Required<ResourceStoredMap>, qualifier?: string | FileActionOptions, options?: FileActionOptions): string[];
    finalizeIdToXml(resourceId: number, stored: string[], directory: string, options?: FileActionOptions): string[];
}

class View {
    getLayoutConstraint(attr: "justifyContent" | "alignItems" | "alignContent", type: "flex" | "grid", direction?: "row" | "column", all?: boolean): string;
    hasConstraint(horizontal: boolean, type?: "spread" | "percent" | "wrap"): boolean;
}

CHANGED

squared.base
interface MetadataAction<T = PlainObject> { // unknown
    metadata?: T | null; // null
}

interface FileAsset extends MetadataAction {}

type AssetsVideo = Map<string, Asset & MetadataAction>;
type AssetsAudio = Map<string, Asset & MetadataAction>;

class Resource {
    static findStoredAsset(resourceId: number, type: string, name: string, options?: FindStoredAssetOptions): unknown; // options
}

interface LocalSettingsUI /* extends ElementSettingsUI */ {}

class NodeUI {
    get localSettings(): LocalSettingsUI & ElementSettingsUI; // ElementSettingsUI
}
squared.lib
/* dom */

type PseudoElt = "::target-text";
type PseudoStyleElt = "::target-text"; // PseudoDocumentElt

/* internal */

function performQuerySelector(value: string, documentRoot: SelectorRoot, type: 0 | 1 | 2 | 4 | 8, shadowRoot?: ShadowRoot | null, sessionId?: string): ArrayLike<Element>; // sessionId

/* util */

function hasKeys(obj: object, prefix?: string): boolean; // prefix
squared.svg.util
const TRANSFORM: {
    parse(element: SVGElement, options: SvgTransformParseOptions): SvgTransform[] | null; // options
};
android.base
interface InsertStoredAssetOptions {} // extends MetadataAction
interface AddImageSrcOptions {}
interface AddImageOptions {}
interface ParseImageOptions {}

class Resource {
    static addRawAsset(resourceId: number, type: ResourceRawAsset | "images", name: string, value: unknown, options?: InsertStoredAssetOptions): string; // options
    addImageSet(resourceId: number, images: StringMap, options?: AddImageOptions): string; // options
}

class Node {
    descend(options?: DescendParameterOptions<Node>, error?: (item: Node) => boolean): Node[];
    descendOne(options?: DescendParameterOptions<Node>, error?: (item: Node) => boolean): Node | undefined;
}

class NodeUI {
    static baseline(list: NodeUI[], options: BaselineOptions): NodeUI | null; // options
}

DEPRECATED

squared.base
interface FinalizeDataExtensionUI {} // AppProjectUI

interface AppProcessing {
    containerName: Record<string, WeakMap<HTMLElement, ContainerData>>;
    styleMap?: Record<string, CssStyleMap | Record<string, [string, boolean]>> | null;
}

class ControllerUI {
    optimize(rendered: NodeUI[], project?: AppProjectUI): Promise<void>;
    finalize(layouts: FileAsset[], project?: AppProjectUI): Promise<void>;
}

class Resource {
    get mimeTypeMap(): Record<string, MIMEOrAll>;
}

class ResourceUI {
    writeRawSvg(resourceId: number, element: SVGSVGElement, dimension?: Dimension): string;
    get STRING_SPACE(): string; // characterMap
    get STRING_NEWLINE(): string;
    get STRING_WBR(): string;
}
squared.base.lib
/* css */

function parseKeyframes(rules: CSSRuleList): KeyframeData | null; // Node.keyframes
function getKeyframesRules(documentRoot?: DocumentOrShadowRoot | null): KeyframesMap; // svg.lib
function parseFontFeatureValues(documentRoot?: DocumentOrShadowRoot | null): FontFeatureValuesMap; // NodeUI.elementData.fontFeatureValues
function parseBorderRadius(value: string, options?: ParseBorderRadiusOptions): BoxOf<number>[] | null; // svg.lib

/* regex */

const DOM: {
    PRE_IDENT: RegExp;
};

/* util */

function splitAll(value: string, char: string, trim?: boolean): string[];
squared.lib
/* client */

interface UserAgentFeatures {
    REGEXP: {
        DOT_ALL: boolean;
        LOOK_BEHIND: boolean;
        NAMED_CAPTURE_GROUPS: boolean;
        HAS_INDICES: boolean;
    };
    PROMISE: {
        FINALLY: boolean;
        ALL_SETTLED: boolean;
        ANY: boolean;
    };
    RULES: {
        STYLE_SHEET: boolean;
    };
    FONT: {
        ACTUAL_BOUNDING_BOX: boolean;
        BOUNDING_BOX: boolean;
    };
    CONSTRUCTOR: {
        INTL_SEGMENTER: boolean;
    };
}

/* css */

interface MatchContainerOptions {
    conditionStyle?: boolean; // prefix
}

interface CalculateVarAsStringOptions {
    errorString?: RegExp;
}

function calculateStyle(element: StyleElement, attr: string, value: string, boundingBox?: Dimension | null, percent?: boolean): string; // boundingBox | percent

/* dom */

interface ContainerData {
    descendantOf?: HTMLElement[];
}

/* internal */

function startsWith(value: string, leading: string): boolean; // squared.lib.util
function endsWith(value: string, trailing: string): boolean;

/* regex */

const CSS: {
    LIGHT_DARK: RegExp;
};

/* util */

function replaceAll(value: string, searchValue: string, replaceWith: string, replaceCount?: number): string; // String.replaceAll
function concatArray(list: unknown[], appending: unknown[]): unknown[]; // Array.concat
function joinArray(list: ArrayBase<unknown>, predicate: IteratorPredicate<unknown, string>, char?: string): string; // String.join
squared.svg
class Svg {
    keyframesMap?: KeyframesMap; // keyframes
}
squared.svg.lib.util
function getAttribute(element: SVGElement, attr: string, computed?: boolean, named?: boolean): string; // named
function getParentAttribute(element: SVGElement, attr: string, computed?: boolean, named?: boolean): string;
android.base
class Resource {
    static findStoredAsset(resourceId: number, type: string, name: string, remove?: boolean): unknown; // options
    addImageSet(resourceId: number, images: StringMap, prefix?: string): string; // options
}
android.lib.util
function getDataSet(dataset: StringMap | DOMStringMap, prefix: string): StringMap | undefined; // squared.lib.base
chrome.base
interface DocumentOutput {
    useSessionCache?: boolean; // "false" to disable
}

DELETED

squared.base
interface ElementSettingsUI {}

interface UserSettingsAction {}

interface ChecksumBase {
    digest?: string; // digestEncoding
}
android.lib.constant
const CONTAINER_ELEMENT: {
    FENCEDFRAME: number;
};