{"version":3,"file":"bootkit-ng1-common.mjs","sources":["../../../projects/ng1/common/types.ts","../../../projects/ng1/common/layout.ts","../../../projects/ng1/common/string-utils.ts","../../../projects/ng1/common/rxjs-utils.ts","../../../projects/ng1/common/array-utils.ts","../../../projects/ng1/common/enum.ts","../../../projects/ng1/common/id-generator.ts","../../../projects/ng1/common/css-class.ts","../../../projects/ng1/common/equality-comparer.ts","../../../projects/ng1/common/value-writer.ts","../../../projects/ng1/common/comparer.ts","../../../projects/ng1/common/filter.ts","../../../projects/ng1/common/track-by.ts","../../../projects/ng1/common/if.directive.ts","../../../projects/ng1/common/bootkit-ng1-common.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\n\nexport const RTL = new InjectionToken<boolean>('RTL Direction');\n\n","export type Placement = 'start' | 'end' | 'top' | 'bottom';\nexport type Alignment = 'start' | 'center' | 'end';\n\n/**\n * Flips the placement direction.\n * @param placement The placement direction to flip.\n * @returns The flipped placement direction.\n */\nexport function flipPlacement(placement: Placement) {\n    switch (placement) {\n        case 'bottom':\n            return 'top'\n        case 'top':\n            return 'bottom'\n        case 'start':\n            return 'end'\n        case 'end':\n            return 'start'\n    }\n}\n\n\n","/**\n * Formats a string by replacing placeholders with the provided arguments.\n * @param str The string to format, containing placeholders in the form of {0}, {1}, etc.\n * @param args The values to replace the placeholders with.\n * @returns The formatted string.\n */\nexport function formatString(str: string, ...args: any[]) {\n    return str.replace(/\\{(\\d+)\\}/g, function (match, index) {\n        return args[index];\n    });\n}\n","import { from, Observable, of } from 'rxjs';\n\n/**\n * Converts a value to an Observable.\n * If the value is already an Observable, it returns it directly.\n * If the value is a Promise, it converts it to an Observable.\n * If the value is neither, it wraps it in an Observable using `of`.\n * @param value The value to convert.\n * @returns An Observable that emits the value.\n */\nexport function toObservable<T>(value: T | Observable<T> | Promise<T>): Observable<T> {\n    if (value instanceof Observable) {\n        return value;\n    } else if (value instanceof Promise) {\n        return from(value);\n    } else {\n        return of(value);\n    }\n}\n","/**\n * Creates an array of numbers within a specified range.\n * @param start The starting number of the range (inclusive).\n * @param end The ending number of the range (inclusive).\n * @returns An array of numbers within the specified range.\n */\nexport function numberArray(start: number, end: number) {\n  return Array.from({ length: end - start + 1 }, (_, i) => i + start)\n}\n\n/**\n * Deletes multiple entries from an array based on the provided indices.\n * @param array \n * @param indices \n * @private\n */\nexport function deleteEntries(array: any[], indices: number[]) {\n  // Sort indices in descending order\n  // This prevents index shifting issues when removing multiple items\n  indices.sort((a, b) => b - a); \n  indices.forEach(index => {\n    if (index >= 0 && index < array.length) {\n      array.splice(index, 1);\n    } else {\n      throw new Error(`Index out of bounds: ${index}`);\n    }\n  });\n}\n","\nexport function getEnumValues(enumClass: Record<string, string | number>): Array<string | number> {\n    return Object.keys(enumClass)\n    .filter(k => isNaN(Number(k))) // remove reverse-mapping keys\n    .map(k => enumClass[k]);\n};\n","let _idCounter = 0;\n\n/**\n * Type definition for an ID generator function.\n * @param item The item for which the ID is to be generated.\n * @returns A string representing the generated ID.\n */\nexport type IdGenerator = (item: any) => string;\n\n/**\n * Type definition for an ID generator which can be a function or a string representing the property name to extract the ID from.\n */\nexport type IdGeneratorLike = IdGenerator | string;\n\n/**\n * Creates a sequential ID generator function with an optional prefix.\n * This function generates unique IDs by incrementing a counter each time it is called.\n * @param prefix Optional prefix for the generated IDs.\n * @returns A function that generates sequential IDs with the given prefix.\n */\nexport function sequentialIdGenerator(prefix?: string): IdGenerator {\n    return (item: any) => `${prefix || ''}${_idCounter++}`;\n}\n\n/**\n * Converts an IdGeneratorLike to an IdGenerator function.\n * @param v The ID generator to convert.\n * @returns An IdGenerator function.\n */\nexport function IdGeneratorAttribute(v: IdGeneratorLike): IdGenerator {\n    if (typeof v === 'function')\n        return v;\n    else if (typeof v === 'string') {\n        return (item: any) => item ? item[v] : undefined;\n    }\n\n    throw Error('invalid id generator');\n}\n","/**\n * CSS class type which can be a string, array of strings, set of strings, or an object with class names as keys.\n */\nexport type CssClass = string | string[] | Set<string> | { [klass: string]: any } | null | undefined;\n\n/**\n * A function that takes an item and returns a CssClass.\n * @param item The item to get the CSS class for.\n * @returns The CSS class for the item.\n */\nexport type CssClassGetter = (obj: any) => CssClass;\n\n/**\n * A type that represents a CSS class or a function that returns a CSS class.\n */\nexport type CssClassLike = CssClass | CssClassGetter;\n\n\n/**\n * Converts a CssClassLike to a CssClassGetter function.\n * @param v The CssClassLike to convert.\n * @returns A function that returns the desired CSS class.\n */\nexport function CssClassAttribute(v: CssClassLike): CssClassGetter {\n    if (v === undefined || v === null) {\n        return (item: any) => undefined;\n    } else if (typeof v === 'function')\n        return v as CssClassGetter;\n    else if (typeof v === 'string' || Array.isArray(v) || typeof v === 'object') {\n        return (item: any) => v;\n    }\n\n    throw Error('invalid css class getter');\n}\n","/**\n * Equality comparer function type.\n * @param a First value to compare.\n * @param b Second value to compare.\n * @returns true if a is considered equal to b else returns false\n */\nexport type EqualityComparer = (a: any, b: any) => boolean;\n\n/**\n * Equality comparer like type.\n * can be a function or a string representing the property name to compare.\n */\nexport type EqualityComparerLike = EqualityComparer | string;\n\n/**\n * Default equality comparer function.\n * @param a First value to compare.\n * @param b Second value to compare.\n * @returns true if a === b else returns false\n */\nexport function defaultEqualityComparer(a: any, b: any): boolean {\n    return a === b;\n}\n\n/**\n * Converts an EqualityComparerLike to an EqualityComparer function.\n * @param e The EqualityComparerLike to convert.\n * @returns The converted EqualityComparer.\n */\nexport function equalityComparerAttribute(e: EqualityComparerLike): EqualityComparer {\n    if (typeof e === 'function')\n        return e;\n    if (typeof e === 'string') {\n        return (a: any, b: any) => {\n            let a2 = a != null && Object.hasOwn(a, e) ? a[e] : a;\n            let b2 = b != null && Object.hasOwn(b, e) ? b[e] : b;\n            return a2 === b2;\n        }\n    }\n\n    throw Error('invalid equality comparer');\n}\n","/**\n * Value writer function type.\n * @param a The input value\n * @returns The written value\n */\nexport type ValueWriter = (a: any) => any;\n\n/**\n * Value writer can be a function or a string representing the property name to extract the value from.\n */\nexport type ValueWriterLike = ValueWriter | string;\n\n\n/**\n * Default value writer function.\n * @param a The input value\n * @returns the input value (it does not transform it)\n */\nexport function defaultValueWriter(a: any): any {\n    return a;\n}\n\n/**\n * Converts a ValueWriterLike to a ValueWriterFunction.\n * @param v The value writer to convert.\n * @returns A ValueWriter function.\n */\nexport function valueWriterAttribute(v: ValueWriterLike): ValueWriter {\n    if (typeof v === 'function')\n        return v;\n    if (typeof v === 'string') {\n        return (item: any) => item ? item[v] : undefined;\n    }\n\n    throw Error('invalid value writer');\n}\n","/**\n * A comparison function type that defines an ordering relation between two values.\n * @param a The first value to compare.\n * @param b The second value to compare.\n * @returns\n * - A negative number if `a` should come before `b`\n * - A positive number if `a` should come after `b`\n * - Zero if `a` and `b` are considered equal\n */\nexport type Comparer = (a: any, b: any) => number;\n\n/**\n * Value comparer can be a function or a string representing the property name to compare.\n */\nexport type ComparerLike = Comparer | string;\n\n/**\n * A simple comparer function.\n * @param a The first value to compare.\n * @param b The second value to compare.\n * @returns -1 if a < b, 1 if a > b, 0 if a === b\n */\nexport function defaultComparer(a: any, b: any): number {\n    return a === b ? 0 : a < b ? -1 : 1;\n}\n\n/**\n * Converts a ComparerLike to a Comparer.\n * @param v The comparer to convert.\n * @returns A function that compares two values.\n */\nexport function comparerAttribute(v: ComparerLike): Comparer {\n    if (typeof v === 'function')\n        return v;\n    if (typeof v === 'string') {\n        return (a: any, b: any) => a?.[v] === b?.[v] ? 0 : a?.[v] < b?.[v] ? -1 : 1;\n    }\n\n    throw Error('invalid value comparer');\n}\n\n","/**\n * Filter predicate function type.\n * @param item The item to test against the filter.\n * @param params Additional parameters to pass to the filter.\n * @returns True if the item matches the filter, false otherwise.\n */\nexport type FilterPredicate = (item: any, ...params: any[]) => boolean;\n\n/**\n * Filter predicate can be a function or a string representing the property name to filter.\n */\nexport type FilterPredicateLike = FilterPredicate | string;\n\n/**\n * No-op filter predicate that always returns true.\n * @param item The item to test against the filter.\n * @returns true\n */\nexport const noopFilter: FilterPredicate = (item: any, ...params: any[]) => true;\n\n\n/**\n * A simple filter predicate that checks if the item's string representation includes the match string.\n * @param item The item to test against the filter.\n * @param match The string to match.\n * @returns True if the item matches the filter, false otherwise.\n */\nexport const defaultFilter: FilterPredicate = (item: any, match: string) => {\n    if (match == undefined || match == '') {\n        return true;\n    }\n\n    if (item == undefined) {\n        return false;\n    }\n\n    return (item as Object).toString().toLowerCase().includes(match.toLowerCase());\n}\n\n\n/**\n * Converts a FilterPredicateLike to a FilterPredicate function.\n * If the input is a string, it creates a predicate that checks the property with that name.\n * @param v The FilterPredicateLike to convert.\n * @returns The corresponding FilterPredicate function.\n */\nexport function filterPredicateAttribute(v: FilterPredicateLike): FilterPredicate {\n    if (typeof v === 'function')\n        return v;\n    else if (typeof v === 'string') {\n        return (item: any, match: string) => \n            item != null && Object.hasOwn(item, v) ? defaultFilter(item[v], match) : false;\n    }\n\n    throw Error('invalid filter predicate');\n}\n","import { TrackByFunction } from \"@angular/core\";\n\n/**\n * An item tracker that can be either a TrackByFunction or a string property name.\n */\nexport type TrackByLike = TrackByFunction<any> | string;\n\n/**\n * A trackBy function that tracks items by their index.\n */\nexport const trackByIndex: TrackByFunction<any> = (index: number, item: any) => index;\n\n/**\n * A trackBy function that tracks items by the item itself.\n */\nexport const trackByItem: TrackByFunction<any> = (index: number, item: any) => item;\n\n/**\n * Converts a TrackByLike to a TrackByFunction.\n * @param v The item tracker to convert.\n * @returns A TrackByFunction.\n */\nexport function TrackByAttribute(v: TrackByLike): TrackByFunction<any> {\n    if (typeof v === 'function')\n        return v;\n    else if (typeof v === 'string') {\n        if(v.startsWith('@item')) {\n            return trackByItem;\n        } else if(v.startsWith('@index')) {\n            return trackByIndex;\n        } else {\n            return (index: number, item: any) => item ? item[v] : undefined;\n        }\n    }\n\n    throw Error('invalid TrackBy value');\n}\n","import { input, inject, Directive, TemplateRef, effect, ViewContainerRef, EmbeddedViewRef } from '@angular/core';\n\n/**\n * IfDirective is a structural directive that conditionally includes or excludes a template\n * based on the boolean value of the `show` input property.\n * \n */\n@Directive({\n    selector: '[ng0If]',\n    exportAs: 'ng0If',\n    standalone: true,\n})\nexport class IfDirective {\n    private readonly _templateRef = inject(TemplateRef<any>);\n    private _vcr = inject(ViewContainerRef);\n    private _viewRef?: EmbeddedViewRef<any>;\n    public readonly show = input(true, { alias: 'ng0If' });\n\n    constructor() {\n        effect(() => {\n            if (this.show()) {\n                if (!this._viewRef) {\n                    this._viewRef = this._vcr.createEmbeddedView(this._templateRef);\n                }\n\n                if (this._vcr.length === 0) {\n                    this._vcr.insert(this._viewRef);\n                }\n            } else {\n                if (this._vcr.length > 0) {\n                    this._vcr.detach(0);\n                }\n            }\n        })\n    }\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}