{"version":3,"file":"flex-controls-classes.mjs","sources":["../../../../libs/flex-controls/classes/set-compare.ts","../../../../libs/flex-controls/classes/compare-host.ts","../../../../libs/flex-controls/classes/flex-controls-classes.ts"],"sourcesContent":["import {FL_DEFAULT_COMPARE} from 'flex-controls/constants';\nimport {FlCompareFunction} from 'flex-controls/types';\n\nexport class FlSetCompare<T> implements Iterable<T> {\n    private values: Set<T> = new Set<T>();\n    private readonly compareFn: FlCompareFunction<T>;\n\n    constructor(compareFn?: FlCompareFunction<T>, newValues?: T[] | null) {\n        this.compareFn = compareFn || FL_DEFAULT_COMPARE;\n        this.values = new Set<T>(newValues || []);\n    }\n\n    get size(): number {\n        return this.values.size;\n    }\n\n    *[Symbol.iterator](): Iterator<T> {\n        for (const value of this.values) {\n            yield value;\n        }\n    }\n\n    add(value: T): void {\n        const item: T | null = this.find(value);\n        !item && this.values.add(value);\n    }\n\n    delete(value: T): void {\n        const item: T | null = this.find(value);\n        item && this.values.delete(item);\n    }\n\n    has(value: T): boolean {\n        return this.values.has(value) || !!this.find(value);\n    }\n\n    clear(): void {\n        this.values = new Set<T>();\n    }\n\n    toArray(): T[] {\n        return Array.from(this.values);\n    }\n\n    private find(value: T): T | null {\n        /* trying to find element as is, because its the fastest way */\n        if (this.values.has(value)) {\n            return value;\n        }\n\n        /* if we didn't find it then trying to use compare function to do that */\n        for (const v of this.values) {\n            if (this.compareFn(value, v)) {\n                return v;\n            }\n        }\n        return null;\n    }\n}\n","import {FlCompareFunction} from 'flex-controls/types';\n\n/** Uses to implement host with compare function */\nexport abstract class FlCompareHost<T> {\n    /** Uses to compare two values (useful to compare two objects, for example by id) */\n    abstract compareFn: FlCompareFunction<T>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;MAGa,YAAY,CAAA;AACb,IAAA,MAAM,GAAW,IAAI,GAAG,EAAK,CAAC;AACrB,IAAA,SAAS,CAAuB;IAEjD,WAAY,CAAA,SAAgC,EAAE,SAAsB,EAAA;AAChE,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,kBAAkB,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAI,SAAS,IAAI,EAAE,CAAC,CAAC;KAC7C;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KAC3B;AAED,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;AACd,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,YAAA,MAAM,KAAK,CAAC;AACf,SAAA;KACJ;AAED,IAAA,GAAG,CAAC,KAAQ,EAAA;QACR,MAAM,IAAI,GAAa,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACnC;AAED,IAAA,MAAM,CAAC,KAAQ,EAAA;QACX,MAAM,IAAI,GAAa,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACpC;AAED,IAAA,GAAG,CAAC,KAAQ,EAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvD;IAED,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAK,CAAC;KAC9B;IAED,OAAO,GAAA;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAClC;AAEO,IAAA,IAAI,CAAC,KAAQ,EAAA;;QAEjB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;;AAGD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YACzB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AAC1B,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACJ;;ACxDD;MACsB,aAAa,CAAA;AAGlC;;ACND;;AAEG;;;;"}