{"version":3,"file":"Utility.js","sources":["../../Framework/Utility/http.ts","../../Framework/Utility/address.ts","../../Framework/Utility/arrayUtils.ts","../../Framework/Utility/linq.ts","../../Framework/Utility/guid.ts","../../Framework/Utility/stringUtils.ts","../../Framework/Utility/localeDateFormatter.ts","../../Framework/Utility/aspDateFormat.ts","../../Framework/Utility/rockDateTime.ts","../../Framework/Utility/cancellation.ts","../../Framework/Utility/util.ts","../../Framework/Utility/browserBus.ts","../../Framework/Utility/block.ts","../../Framework/Utility/booleanUtils.ts","../../Framework/Utility/cache.ts","../../Framework/Utility/suspense.ts","../../Framework/Utility/numberUtils.ts","../../Framework/Utility/component.ts","../../Framework/Utility/dateKey.ts","../../Framework/Utility/page.ts","../../Framework/Utility/dialogs.ts","../../Framework/Utility/dom.ts","../../Framework/Utility/email.ts","../../Framework/Utility/enumUtils.ts","../../Framework/Utility/fieldTypes.ts","../../Framework/Utility/file.ts","../../Framework/Utility/form.ts","../../Framework/Utility/fullscreen.ts","../../Framework/Utility/geo.ts","../../Framework/Utility/internetCalendar.ts","../../Framework/Utility/lava.ts","../../Framework/Utility/listItemBag.ts","../../Framework/Utility/mergeField.ts","../../Framework/Utility/objectUtils.ts","../../Framework/Utility/phone.ts","../../Framework/Utility/popover.ts","../../Framework/Utility/promiseUtils.ts","../../Framework/Utility/realTime.ts","../../Framework/Utility/regexPatterns.ts","../../Framework/Utility/rockCurrency.ts","../../Framework/Utility/screenSize.ts","../../Framework/Utility/slidingDateRange.ts","../../Framework/Utility/structuredContentEditor.ts","../../Framework/Utility/tooltip.ts","../../Framework/Utility/treeItemProviders.ts","../../Framework/Utility/url.ts","../../Framework/Utility/validationRules.ts"],"sourcesContent":["// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Guid } from \"@Obsidian/Types\";\nimport axios, { AxiosError, AxiosProgressEvent, AxiosResponse } from \"axios\";\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\nimport { HttpBodyData, HttpMethod, HttpFunctions, HttpResult, HttpUrlParams } from \"@Obsidian/Types/Utility/http\";\nimport { inject, provide, getCurrentInstance, ref, type Ref } from \"vue\";\n\n\n// #region HTTP Requests\n\n/**\n * Make an API call. This is only place Axios (or AJAX library) should be referenced to allow tools like performance metrics to provide\n * better insights.\n * @param method\n * @param url\n * @param params\n * @param data\n */\nasync function doApiCallRaw(method: HttpMethod, url: string, params: HttpUrlParams, data: HttpBodyData): Promise<AxiosResponse<unknown>> {\n    return await axios({\n        method,\n        url,\n        params,\n        data\n    });\n}\n\n/**\n * Make an API call.  This is a special use function that should not\n * normally be used. Instead call useHttp() to get the HTTP functions that\n * can be used.\n *\n * @param {string} method The HTTP method, such as GET\n * @param {string} url The endpoint to access, such as /api/campuses/\n * @param {object} params Query parameter object.  Will be converted to ?key1=value1&key2=value2 as part of the URL.\n * @param {any} data This will be the body of the request\n */\nexport async function doApiCall<T>(method: HttpMethod, url: string, params: HttpUrlParams = undefined, data: HttpBodyData = undefined): Promise<HttpResult<T>> {\n    try {\n        const result = await doApiCallRaw(method, url, params, data);\n\n        return {\n            data: result.data as T,\n            isError: false,\n            isSuccess: true,\n            statusCode: result.status,\n            errorMessage: null\n        } as HttpResult<T>;\n    }\n    catch (e) {\n        if (axios.isAxiosError(e)) {\n            if (e.response?.data?.Message || e?.response?.data?.message) {\n                return {\n                    data: null,\n                    isError: true,\n                    isSuccess: false,\n                    statusCode: e.response.status,\n                    errorMessage: e?.response?.data?.Message ?? e.response.data.message\n                } as HttpResult<T>;\n            }\n\n            return {\n                data: null,\n                isError: true,\n                isSuccess: false,\n                statusCode: e.response?.status ?? 0,\n                errorMessage: null\n            } as HttpResult<T>;\n        }\n        else {\n            return {\n                data: null,\n                isError: true,\n                isSuccess: false,\n                statusCode: 0,\n                errorMessage: null\n            } as HttpResult<T>;\n        }\n    }\n}\n\n/**\n * Make a GET HTTP request. This is a special use function that should not\n * normally be used. Instead call useHttp() to get the HTTP functions that\n * can be used.\n *\n * @param {string} url The endpoint to access, such as /api/campuses/\n * @param {object} params Query parameter object.  Will be converted to ?key1=value1&key2=value2 as part of the URL.\n */\nexport async function get<T>(url: string, params: HttpUrlParams = undefined): Promise<HttpResult<T>> {\n    return await doApiCall<T>(\"GET\", url, params, undefined);\n}\n\n/**\n * Make a POST HTTP request. This is a special use function that should not\n * normally be used. Instead call useHttp() to get the HTTP functions that\n * can be used.\n *\n * @param {string} url The endpoint to access, such as /api/campuses/\n * @param {object} params Query parameter object.  Will be converted to ?key1=value1&key2=value2 as part of the URL.\n * @param {any} data This will be the body of the request\n */\nexport async function post<T>(url: string, params: HttpUrlParams = undefined, data: HttpBodyData = undefined): Promise<HttpResult<T>> {\n    return await doApiCall<T>(\"POST\", url, params, data);\n}\n\nconst httpFunctionsSymbol = Symbol(\"http-functions\");\n\n/**\n * Provides the HTTP functions that child components will use. This is an\n * internal API and should not be used by third party components.\n *\n * @param functions The functions that will be made available to child components.\n */\nexport function provideHttp(functions: HttpFunctions): void {\n    provide(httpFunctionsSymbol, functions);\n}\n\n/**\n * Gets the HTTP functions that can be used by the component. This is the\n * standard way to make HTTP requests.\n *\n * @returns An object that contains the functions which can be called.\n */\nexport function useHttp(): HttpFunctions {\n    let http: HttpFunctions | undefined;\n\n    // Check if we are inside a setup instance. This prevents warnings\n    // from being displayed if being called outside a setup() function.\n    if (getCurrentInstance()) {\n        http = inject<HttpFunctions>(httpFunctionsSymbol);\n    }\n\n    return http || {\n        doApiCall: doApiCall,\n        get: get,\n        post: post\n    };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ApiCallerOptions<ReturnType, Args extends any[] = []> = {\n    url: string;\n    params?: HttpUrlParams | ((...args: Args) => HttpUrlParams);\n    data?: HttpBodyData | ((...args: Args) => HttpBodyData);\n    onComplete?: ((data: ReturnType, ...args: Args) => void) | null | undefined;\n    method?: \"get\" | \"post\" | \"GET\" | \"POST\" | undefined;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ApiCallerReturnType<ReturnType, Args extends any[] = []> = {\n    run: (...args: Args) => Promise<ReturnType | undefined>;\n    readonly isLoading: Ref<boolean>;\n    readonly hasError: Ref<boolean>;\n    readonly errorMessage: Ref<string | undefined>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createApiCaller<ReturnType = unknown, Args extends any[] = []> (options: ApiCallerOptions<ReturnType, Args>): ApiCallerReturnType<ReturnType, Args> {\n    const fetchFunction = useHttp()[(options.method || \"post\").toLowerCase()];\n    const isLoading = ref(false);\n    const hasError = ref(false);\n    const errorMessage = ref<string>();\n\n    return {\n        isLoading,\n        hasError,\n        errorMessage,\n        async run (...args) {\n            isLoading.value = true;\n            hasError.value = false;\n            errorMessage.value = undefined;\n\n            const params = typeof options.params === \"function\" ? options.params(...args) : options.params;\n            const data = typeof options.data === \"function\" ? options.data(...args) : options.data;\n\n            try {\n                const result = (await fetchFunction<ReturnType>(options.url, params, data)) as HttpResult<ReturnType>;\n\n                if (result.isSuccess) {\n                    if (typeof options.onComplete === \"function\") {\n                        options.onComplete(result.data as ReturnType, ...args);\n                    }\n\n                    return result.data as ReturnType;\n                }\n                else {\n                    hasError.value = true;\n                    errorMessage.value = result.errorMessage ?? undefined;\n                }\n            }\n            catch (e: unknown) {\n                hasError.value = true;\n\n                if (e instanceof Error) {\n                    errorMessage.value = e.message;\n                }\n                else if (typeof e === \"string\") {\n                    errorMessage.value = e;\n                }\n                else {\n                    errorMessage.value = \"An unknown error occurred.\";\n                }\n            }\n            finally {\n                isLoading.value = false;\n            }\n        }\n    };\n\n}\n\n// #endregion\n\n// #region File Upload\n\ntype FileUploadResponse = {\n    /* eslint-disable @typescript-eslint/naming-convention */\n    Guid: Guid;\n    FileName: string;\n    /* eslint-enable */\n};\n\n/**\n * Progress reporting callback used when uploading a file into Rock.\n */\nexport type UploadProgressCallback = (progress: number, total: number, percent: number) => void;\n\n/**\n * Options used when uploading a file into Rock to change the default behavior.\n */\nexport type UploadOptions = {\n    /**\n     * The base URL to use when uploading the file, must accept the same parameters\n     * and as the standard FileUploader.ashx handler.\n     */\n    baseUrl?: string;\n\n    /** True if the file should be uploaded as temporary, only applies to binary files. */\n    isTemporary?: boolean;\n\n    /** A function to call to report the ongoing progress of the upload. */\n    progress: UploadProgressCallback;\n\n    /** The parent entity type identifier */\n    parentEntityTypeId?: number;\n\n    /** The parent entity identifier */\n    parentEntityId?: number;\n};\n\n/**\n * Uploads a file in the form data into Rock. This is an internal function and\n * should not be exported.\n *\n * @param url The URL to use for the POST request.\n * @param data The form data to send in the request body.\n * @param progress The optional callback to use to report progress.\n *\n * @returns The response from the upload handler.\n */\nasync function uploadFile(url: string, data: FormData, progress: UploadProgressCallback | undefined): Promise<FileUploadResponse> {\n    let result: AxiosResponse<FileUploadResponse | string> | undefined;\n    try {\n        result = await axios.post<FileUploadResponse | string>(url, data, {\n            headers: {\n                \"Content-Type\": \"multipart/form-data\"\n            },\n            onUploadProgress: (event: AxiosProgressEvent) => {\n                if (progress && event.total !== undefined) {\n                    progress(event.loaded, event.total, Math.floor(event.loaded * 100 / event.total));\n                }\n            }\n        });\n    }\n    catch(e) {\n        result = (e as AxiosError<FileUploadResponse | string>).response;\n    }\n\n    if (!result) {\n        throw new Error(\"Upload failed.\");\n    }\n\n    // Check for a \"everything went perfectly fine\" response.\n    if (result.status === 200 && typeof result.data === \"object\") {\n        return result.data;\n    }\n\n    if (result.status === 406) {\n        throw new Error(\"File type is not allowed.\");\n    }\n\n    if (typeof result.data === \"string\") {\n        throw new Error(result.data);\n    }\n\n    throw new Error(\"Upload failed.\");\n}\n\n/**\n * Uploads a file to the Rock file system, usually inside the ~/Content directory.\n *\n * @param file The file to be uploaded to the server.\n * @param encryptedRootFolder The encrypted root folder specified by the server,\n * this specifies the jail the upload operation is limited to.\n * @param folderPath The additional sub-folder path to use inside the root folder.\n * @param options The options to use when uploading the file.\n *\n * @returns A ListItemBag that contains the scrubbed filename that was uploaded.\n */\nexport async function uploadContentFile(file: File, encryptedRootFolder: string, folderPath: string, options?: UploadOptions): Promise<ListItemBag> {\n    const url = `${options?.baseUrl ?? \"/FileUploader.ashx\"}?rootFolder=${encodeURIComponent(encryptedRootFolder)}`;\n    const formData = new FormData();\n\n    formData.append(\"file\", file);\n\n    if (folderPath) {\n        formData.append(\"folderPath\", folderPath);\n    }\n\n    const result = await uploadFile(url, formData, options?.progress);\n\n    return {\n        value: \"\",\n        text: result.FileName\n    };\n}\n\n/**\n * Uploads a file to an asset storage provider.\n *\n * @param file The file to be uploaded to the server.\n * @param folderPath The additional sub-folder path to use inside the root folder.\n * @param assetStorageId The ID of the asset storage provider that the file is being uploaded to\n * @param options The options to use when uploading the file.\n *\n * @returns A ListItemBag that contains the scrubbed filename that was uploaded.\n */\nexport async function uploadAssetProviderFile(file: File, folderPath: string, assetStorageId: string, options?: UploadOptions): Promise<ListItemBag> {\n    const url = `${options?.baseUrl ?? \"/FileUploader.ashx\"}?rootFolder=`;\n    const formData = new FormData();\n\n    if (!assetStorageId) {\n        throw \"Asset Storage Id and Key are required.\";\n    }\n\n    formData.append(\"file\", file);\n        formData.append(\"StorageId\", assetStorageId);\n        formData.append(\"Key\", folderPath);\n        formData.append(\"IsAssetStorageProviderAsset\", \"true\");\n\n    const result = await uploadFile(url, formData, options?.progress);\n\n    return {\n        value: \"\",\n        text: result.FileName\n    };\n}\n\n/**\n * Uploads a BinaryFile into Rock. The specific storage location is defined by\n * the file type.\n *\n * @param file The file to be uploaded into Rock.\n * @param binaryFileTypeGuid The unique identifier of the BinaryFileType to handle the upload.\n * @param options The options ot use when uploading the file.\n *\n * @returns A ListItemBag whose value contains the new file Guid and text specifies the filename.\n */\nexport async function uploadBinaryFile(file: File, binaryFileTypeGuid: Guid, options?: UploadOptions): Promise<ListItemBag> {\n    let url = `${options?.baseUrl ?? \"/FileUploader.ashx\"}?isBinaryFile=True&fileTypeGuid=${binaryFileTypeGuid}`;\n\n    // Assume file is temporary unless specified otherwise so that files\n    // that don't end up getting used will get cleaned up.\n    if (options?.isTemporary === false) {\n        url += \"&isTemporary=False\";\n    }\n    else {\n        url += \"&isTemporary=True\";\n    }\n\n    if (options?.parentEntityTypeId) {\n        url += \"&ParentEntityTypeId=\" + options.parentEntityTypeId;\n    }\n\n    if (options?.parentEntityId) {\n        url += \"&ParentEntityId=\" + options.parentEntityId;\n    }\n\n    const formData = new FormData();\n    formData.append(\"file\", file);\n\n    const result = await uploadFile(url, formData, options?.progress);\n\n    return {\n        value: result.Guid,\n        text: result.FileName\n    };\n}\n\n// #endregion\n\nexport default {\n    doApiCall,\n    post,\n    get\n};\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { HttpResult } from \"@Obsidian/Types/Utility/http\";\nimport { AddressControlBag } from \"@Obsidian/ViewModels/Controls/addressControlBag\";\nimport { AddressControlValidateAddressOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/AddressControlValidateAddressOptionsBag\";\nimport { AddressControlValidateAddressResultsBag } from \"@Obsidian/ViewModels/Rest/Controls/AddressControlValidateAddressResultsBag\";\nimport { useHttp } from \"./http\";\n\nexport function getDefaultAddressControlModel(): AddressControlBag {\n    return {\n        state: \"AZ\",\n        country: \"US\"\n    };\n}\n\nexport function validateAddress(address: AddressControlValidateAddressOptionsBag): Promise<HttpResult<AddressControlValidateAddressResultsBag>> {\n    const post = useHttp().post;\n    return post<AddressControlValidateAddressResultsBag>(\"/api/v2/Controls/AddressControlValidateAddress\", undefined, address);\n}\n\nexport function getAddressString(address: AddressControlBag): Promise<HttpResult<string>> {\n    const post = useHttp().post;\n    return post<string>(\"/api/v2/Controls/AddressControlGetStreetAddressString\", undefined, address);\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n/**\n * Flatten a nested array down by the given number of levels.\n * Meant to be a replacement for the official Array.prototype.flat, which isn't supported by all browsers we support.\n * Adapted from Polyfill: https://github.com/behnammodi/polyfill/blob/master/array.polyfill.js#L591\n *\n * @param arr (potentially) nested array to be flattened\n * @param depth The depth level specifying how deep a nested array structure should be flattened. Defaults to 1.\n *\n * @returns A new array with the sub-array elements concatenated into it.\n */\nexport function flatten<T>(arr: T[][], depth: number = 1): T[] {\n    const result: T[] = [];\n    const forEach = result.forEach;\n\n    const flatDeep = function (arr, depth): void {\n        forEach.call(arr, function (val) {\n            if (depth > 0 && Array.isArray(val)) {\n                flatDeep(val, depth - 1);\n            }\n            else {\n                result.push(val);\n            }\n        });\n    };\n\n    flatDeep(arr, depth);\n    return result;\n}\n\n/**\n * Convert a single item to an array of one item. If the value is already an\n * array then it is just returned as is.\n *\n * @param value The value from the parent component.\n *\n * @returns The value trimmed down to just the actual selection value.\n */\nexport function forceToArray<T>(value: T | T[] | undefined | null, multiple: boolean): T[] {\n    if (value === undefined || value === null) {\n        return [];\n    }\n    else if (Array.isArray(value)) {\n        if (!multiple && value.length > 1) {\n            return [value[0]];\n        }\n        else {\n            return value;\n        }\n    }\n    else {\n        return [value];\n    }\n}","/**\n * A function that will select a value from the object.\n */\ntype ValueSelector<T> = (value: T) => string | number | boolean | null | undefined;\n\n/**\n * A function that will perform testing on a value to see if it meets\n * a certain condition and return true or false.\n */\ntype PredicateFn<T> = (value: T, index: number) => boolean;\n\n/**\n * A function that will compare two values to see which one should\n * be ordered first.\n */\ntype ValueComparer<T> = (a: T, b: T) => number;\n\nconst moreThanOneElement = \"More than one element was found in collection.\";\n\nconst noElementsFound = \"No element was found in collection.\";\n\n/**\n * Compares the values of two objects given the selector function.\n *\n * For the purposes of a compare, null and undefined are always a lower\n * value - unless both values are null or undefined in which case they\n * are considered equal.\n * \n * @param keySelector The function that will select the value.\n * @param descending True if this comparison should be in descending order.\n */\nfunction valueComparer<T>(keySelector: ValueSelector<T>, descending: boolean): ValueComparer<T> {\n    return (a: T, b: T): number => {\n        const valueA = keySelector(a);\n        const valueB = keySelector(b);\n\n        // If valueA is null or undefined then it will either be considered\n        // lower than or equal to valueB.\n        if (valueA === undefined || valueA === null) {\n            // If valueB is also null or undefined then they are considered equal.\n            if (valueB === undefined || valueB === null) {\n                return 0;\n            }\n\n            return !descending ? -1 : 1;\n        }\n\n        // If valueB is undefined or null (but valueA is not) then it is considered\n        // a lower value than valueA.\n        if (valueB === undefined || valueB === null) {\n            return !descending ? 1 : -1;\n        }\n\n        // Perform a normal comparison.\n        if (valueA > valueB) {\n            return !descending ? 1 : -1;\n        }\n        else if (valueA < valueB) {\n            return !descending ? -1 : 1;\n        }\n        else {\n            return 0;\n        }\n    };\n}\n\n\n/**\n * Provides LINQ style access to an array of elements.\n */\nexport class List<T> {\n    /** The elements being tracked by this list. */\n    protected elements: T[];\n\n    // #region Constructors\n\n    /**\n     * Creates a new list with the given elements.\n     * \n     * @param elements The elements to be made available to LINQ queries.\n     */\n    constructor(elements?: T[]) {\n        if (elements === undefined) {\n            this.elements = [];\n        }\n        else {\n            // Copy the array so if the caller makes changes it won't be reflected by us.\n            this.elements = [...elements];\n        }\n    }\n\n    /**\n     * Creates a new List from the elements without copying to a new array.\n     * \n     * @param elements The elements to initialize the list with.\n     * @returns A new list of elements.\n     */\n    public static fromArrayNoCopy<T>(elements: T[]): List<T> {\n        const list = new List<T>();\n\n        list.elements = elements;\n\n        return list;\n    }\n\n    // #endregion\n\n    /**\n     * Returns a boolean that determines if the collection contains any elements.\n     *\n     * @returns true if the collection contains any elements; otherwise false.\n     */\n    public any(): boolean;\n\n    /**\n     * Filters the list by the predicate and then returns a boolean that determines\n     * if the filtered collection contains any elements.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns true if the collection contains any elements; otherwise false.\n     */\n    public any(predicate: PredicateFn<T>): boolean;\n\n    /**\n     * Filters the list by the predicate and then returns a boolean that determines\n     * if the filtered collection contains any elements.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns true if the collection contains any elements; otherwise false.\n     */\n    public any(predicate?: PredicateFn<T>): boolean {\n        let elements = this.elements;\n\n        if (predicate !== undefined) {\n            elements = elements.filter(predicate);\n        }\n\n        return elements.length > 0;\n    }\n\n    /**\n     * Returns the first element from the collection if there are any elements.\n     * Otherwise will throw an exception.\n     *\n     * @returns The first element in the collection.\n     */\n    public first(): T;\n\n    /**\n     * Filters the list by the predicate and then returns the first element\n     * in the collection if any remain. Otherwise throws an exception.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns The first element in the collection.\n     */\n    public first(predicate: PredicateFn<T>): T;\n\n    /**\n     * Filters the list by the predicate and then returns the first element\n     * in the collection if any remain. Otherwise throws an exception.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns The first element in the collection.\n     */\n    public first(predicate?: PredicateFn<T>): T {\n        let elements = this.elements;\n\n        if (predicate !== undefined) {\n            elements = elements.filter(predicate);\n        }\n\n        if (elements.length >= 1) {\n            return elements[0];\n        }\n        else {\n            throw noElementsFound;\n        }\n    }\n\n    /**\n     * Returns the first element found in the collection or undefined if the\n     * collection contains no elements.\n     *\n     * @returns The first element in the collection or undefined.\n     */\n    public firstOrUndefined(): T | undefined;\n\n    /**\n     * Filters the list by the predicate and then returns the first element\n     * found in the collection. If no elements remain then undefined is\n     * returned instead.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns The first element in the filtered collection or undefined.\n     */\n    public firstOrUndefined(predicate: PredicateFn<T>): T | undefined;\n\n    /**\n     * Filters the list by the predicate and then returns the first element\n     * found in the collection. If no elements remain then undefined is\n     * returned instead.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns The first element in the filtered collection or undefined.\n     */\n    public firstOrUndefined(predicate?: PredicateFn<T>): T | undefined {\n        let elements = this.elements;\n\n        if (predicate !== undefined) {\n            elements = elements.filter(predicate);\n        }\n\n        if (elements.length === 1) {\n            return elements[0];\n        }\n        else {\n            return undefined;\n        }\n    }\n\n    /**\n     * Returns a single element from the collection if there is a single\n     * element. Otherwise will throw an exception.\n     *\n     * @returns An element.\n     */\n    public single(): T;\n\n    /**\n     * Filters the list by the predicate and then returns the single remaining\n     * element from the collection. If more than one element remains then an\n     * exception will be thrown.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns An element.\n     */\n    public single(predicate: PredicateFn<T>): T;\n\n    /**\n     * Filters the list by the predicate and then returns the single remaining\n     * element from the collection. If more than one element remains then an\n     * exception will be thrown.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns An element.\n     */\n    public single(predicate?: PredicateFn<T>): T {\n        let elements = this.elements;\n\n        if (predicate !== undefined) {\n            elements = elements.filter(predicate);\n        }\n\n        if (elements.length === 1) {\n            return elements[0];\n        }\n        else {\n            throw moreThanOneElement;\n        }\n    }\n\n    /**\n     * Returns a single element from the collection if there is a single\n     * element. If no elements are found then undefined is returned. More\n     * than a single element will throw an exception.\n     *\n     * @returns An element or undefined.\n     */\n    public singleOrUndefined(): T | undefined;\n\n    /**\n     * Filters the list by the predicate and then returns the single element\n     * from the collection if there is only one remaining. If no elements\n     * remain then undefined is returned. More than a single element will throw\n     * an exception.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns An element or undefined.\n     */\n    public singleOrUndefined(predicate: PredicateFn<T>): T | undefined;\n\n    /**\n     * Filters the list by the predicate and then returns the single element\n     * from the collection if there is only one remaining. If no elements\n     * remain then undefined is returned. More than a single element will throw\n     * an exception.\n     *\n     * @param predicate The predicate to filter the elements by.\n     *\n     * @returns An element or undefined.\n     */\n    public singleOrUndefined(predicate?: PredicateFn<T>): T | undefined {\n        let elements = this.elements;\n\n        if (predicate !== undefined) {\n            elements = elements.filter(predicate);\n        }\n\n        if (elements.length === 0) {\n            return undefined;\n        }\n        else if (elements.length === 1) {\n            return elements[0];\n        }\n        else {\n            throw moreThanOneElement;\n        }\n    }\n\n    /**\n     * Orders the elements of the array and returns a new list of items\n     * in that order.\n     * \n     * @param keySelector The selector for the key to be ordered by.\n     * @returns A new ordered list of elements.\n     */\n    public orderBy(keySelector: ValueSelector<T>): OrderedList<T> {\n        const comparer = valueComparer(keySelector, false);\n\n        return new OrderedList(this.elements, comparer);\n    }\n\n    /**\n     * Orders the elements of the array in descending order and returns a\n     * new list of items in that order.\n     *\n     * @param keySelector The selector for the key to be ordered by.\n     * @returns A new ordered list of elements.\n     */\n    public orderByDescending(keySelector: ValueSelector<T>): OrderedList<T> {\n        const comparer = valueComparer(keySelector, true);\n\n        return new OrderedList(this.elements, comparer);\n    }\n\n    /**\n     * Filters the results and returns a new list containing only the elements\n     * that match the predicate.\n     * \n     * @param predicate The predicate to filter elements with.\n     * \n     * @returns A new collection of elements that match the predicate.\n     */\n    public where(predicate: PredicateFn<T>): List<T> {\n        return new List<T>(this.elements.filter(predicate));\n    }\n\n    /**\n     * Get the elements of this list as a native array of items.\n     *\n     * @returns An array of items with all filters applied.\n     */\n    public toArray(): T[] {\n        return [...this.elements];\n    }\n}\n\n/**\n * A list of items that has ordering already applied.\n */\nclass OrderedList<T> extends List<T> {\n    /** The base comparer to use when ordering. */\n    private baseComparer!: ValueComparer<T>;\n\n    // #region Constructors\n\n    constructor(elements: T[], baseComparer: ValueComparer<T>) {\n        super(elements);\n\n        this.baseComparer = baseComparer;\n        this.elements.sort(this.baseComparer);\n    }\n\n    // #endregion\n\n    /**\n     * Orders the elements of the array and returns a new list of items\n     * in that order.\n     * \n     * @param keySelector The selector for the key to be ordered by.\n     * @returns A new ordered list of elements.\n     */\n    public thenBy(keySelector: ValueSelector<T>): OrderedList<T> {\n        const comparer = valueComparer(keySelector, false);\n\n        return new OrderedList(this.elements, (a: T, b: T) => this.baseComparer(a, b) || comparer(a, b));\n    }\n\n    /**\n     * Orders the elements of the array in descending order and returns a\n     * new list of items in that order.\n     *\n     * @param keySelector The selector for the key to be ordered by.\n     * @returns A new ordered list of elements.\n     */\n    public thenByDescending(keySelector: ValueSelector<T>): OrderedList<T> {\n        const comparer = valueComparer(keySelector, true);\n\n        return new OrderedList(this.elements, (a: T, b: T) => this.baseComparer(a, b) || comparer(a, b));\n    }\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Guid } from \"@Obsidian/Types\";\n\n/** An empty unique identifier. */\nexport const emptyGuid = \"00000000-0000-0000-0000-000000000000\";\n\n/**\n* Generates a new Guid\n*/\nexport function newGuid (): Guid {\n    return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n        const r = Math.random() * 16 | 0;\n        const v = c === \"x\" ? r : r & 0x3 | 0x8;\n        return v.toString(16);\n    });\n}\n\n/**\n * Returns a normalized Guid that can be compared with string equality (===)\n * @param a\n */\nexport function normalize (a: Guid | null | undefined): Guid | null {\n    if (!a) {\n        return null;\n    }\n\n    return a.toLowerCase();\n}\n\n/**\n * Checks if the given string is a valid Guid. To be considered valid it must\n * be a bare guid with hyphens. Bare means not enclosed in '{' and '}'.\n * \n * @param guid The Guid to be checked.\n * @returns True if the guid is valid, otherwise false.\n */\nexport function isValidGuid(guid: Guid | string): boolean {\n    return /^[0-9A-Fa-f]{8}-(?:[0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$/.test(guid);\n}\n\n/**\n * Converts the string value to a Guid.\n * \n * @param value The value to be converted.\n * @returns A Guid value or null is the string could not be parsed as a Guid.\n */\nexport function toGuidOrNull(value: string | null | undefined): Guid | null {\n    if (value === null || value === undefined) {\n        return null;\n    }\n\n    if (!isValidGuid(value)) {\n        return null;\n    }\n\n    return value as Guid;\n}\n\n/**\n * Are the guids equal?\n * @param a\n * @param b\n */\nexport function areEqual (a: Guid | null | undefined, b: Guid | null | undefined): boolean {\n    return normalize(a) === normalize(b);\n}\n\nexport default {\n    newGuid,\n    normalize,\n    areEqual\n};\n\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { areEqual, toGuidOrNull } from \"./guid\";\nimport { Pluralize } from \"@Obsidian/Libs/pluralize\";\n\n/**\n * Is the value an empty string?\n * @param val\n */\nexport function isEmpty(val: unknown): boolean {\n    if (typeof val === \"string\") {\n        return val.length === 0;\n    }\n\n    return false;\n}\n\n/**\n * Is the value an empty string?\n * @param val\n */\nexport function isWhiteSpace(val: unknown): boolean {\n    if (typeof val === \"string\") {\n        return val.trim().length === 0;\n    }\n\n    return false;\n}\n\n/**\n * Is the value null, undefined or whitespace?\n * @param val\n */\nexport function isNullOrWhiteSpace(val: unknown): boolean {\n    return isWhiteSpace(val) || val === undefined || val === null;\n}\n\n/**\n * Turns camelCase or PascalCase strings into separate strings - \"MyCamelCaseString\" turns into \"My Camel Case String\"\n * @param val\n */\nexport function splitCase(val: string): string {\n    // First, insert a space before sequences of capital letters followed by a lowercase letter (e.g., \"RESTKey\" -> \"REST Key\")\n    val = val.replace(/([A-Z]+)([A-Z][a-z])/g, \"$1 $2\");\n    // Then, insert a space before sequences of a lowercase letter or number followed by a capital letter (e.g., \"myKey\" -> \"my Key\")\n    return val.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n}\n\n/**\n * Returns a string that has each item comma separated except for the last\n * which will use the word \"and\".\n *\n * @example\n * ['a', 'b', 'c'] => 'a, b and c'\n *\n * @param strs The strings to be joined.\n * @param andStr The custom string to use instead of the word \"and\".\n *\n * @returns A string that represents all the strings.\n */\nexport function asCommaAnd(strs: string[], andStr?: string): string {\n    if (strs.length === 0) {\n        return \"\";\n    }\n\n    if (strs.length === 1) {\n        return strs[0];\n    }\n\n    if (!andStr) {\n        andStr = \"and\";\n    }\n\n    if (strs.length === 2) {\n        return `${strs[0]} ${andStr} ${strs[1]}`;\n    }\n\n    const last = strs.pop();\n    return `${strs.join(\", \")} ${andStr} ${last}`;\n}\n\n/**\n * Convert the string to the title case.\n * hellO worlD => Hello World\n * @param str\n */\nexport function toTitleCase(str: string | null): string {\n    if (!str) {\n        return \"\";\n    }\n\n    return str.replace(/\\w\\S*/g, (word) => {\n        return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n    });\n}\n\n/**\n * Capitalize the first character\n */\nexport function upperCaseFirstCharacter(str: string | null): string {\n    if (!str) {\n        return \"\";\n    }\n\n    return str.charAt(0).toUpperCase() + str.substring(1);\n}\n\n/**\n * Pluralizes the given word. If count is specified and is equal to 1 then\n * the singular form of the word is returned. This will also de-pluralize a\n * word if required.\n *\n * @param word The word to be pluralized or singularized.\n * @param count An optional count to indicate when the word should be singularized.\n *\n * @returns The word in plural or singular form depending on the options.\n */\nexport function pluralize(word: string, count?: number): string {\n    return Pluralize(word, count);\n}\n\n/**\n * Returns a singular or plural phrase depending on if the number is 1.\n * (0, Cat, Cats) => Cats\n * (1, Cat, Cats) => Cat\n * (2, Cat, Cats) => Cats\n * @param num\n * @param singular\n * @param plural\n */\nexport function pluralConditional(num: number, singular: string, plural: string): string {\n    return num === 1 ? singular : plural;\n}\n\n/**\n * Pad the left side of a string so it is at least length characters long.\n *\n * @param str The string to be padded.\n * @param length The minimum length to make the string.\n * @param padCharacter The character to use to pad the string.\n */\nexport function padLeft(str: string | undefined | null, length: number, padCharacter: string = \" \"): string {\n    if (padCharacter == \"\") {\n        padCharacter = \" \";\n    }\n    else if (padCharacter.length > 1) {\n        padCharacter = padCharacter.substring(0, 1);\n    }\n\n    if (!str) {\n        return Array(length + 1).join(padCharacter);\n    }\n\n    if (str.length >= length) {\n        return str;\n    }\n\n    return Array(length - str.length + 1).join(padCharacter) + str;\n}\n\n/**\n * Pad the right side of a string so it is at least length characters long.\n *\n * @param str The string to be padded.\n * @param length The minimum length to make the string.\n * @param padCharacter The character to use to pad the string.\n */\nexport function padRight(str: string | undefined | null, length: number, padCharacter: string = \" \"): string {\n    if (padCharacter == \"\") {\n        padCharacter = \" \";\n    }\n    else if (padCharacter.length > 1) {\n        padCharacter = padCharacter.substring(0, 1);\n    }\n\n    if (!str) {\n        return Array(length).join(padCharacter);\n    }\n\n    if (str.length >= length) {\n        return str;\n    }\n\n    return str + Array(length - str.length + 1).join(padCharacter);\n}\n\nexport type TruncateOptions = {\n    ellipsis?: boolean;\n};\n\n/**\n * Ensure a string does not go over the character limit. Truncation happens\n * on word boundaries.\n *\n * @param str The string to be truncated.\n * @param limit The maximum length of the resulting string.\n * @param options Additional options that control how truncation will happen.\n *\n * @returns The truncated string.\n */\nexport function truncate(str: string, limit: number, options?: TruncateOptions): string {\n    // Early out if the string is already under the limit.\n    if (str.length <= limit) {\n        return str;\n    }\n\n    // All the whitespace characters that we can split on.\n    const trimmable = \"\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u2028\\u2029\\u3000\\uFEFF\";\n    const reg = new RegExp(`(?=[${trimmable}])`);\n    const words = str.split(reg);\n    let count = 0;\n\n    // If we are appending ellipsis, then shorten the limit size.\n    if (options && options.ellipsis === true) {\n        limit -= 3;\n    }\n\n    // Get a list of words that will fit within our length requirements.\n    const visibleWords = words.filter(function (word) {\n        count += word.length;\n        return count <= limit;\n    });\n\n    return `${visibleWords.join(\"\")}...`;\n}\n\n/** The regular expression that contains the characters to be escaped. */\nconst escapeHtmlRegExp = /[\"'&<>]/g;\n\n/** The character map of the characters to be replaced and the strings to replace them with. */\nconst escapeHtmlMap: Record<string, string> = {\n    '\"': \"&quot;\",\n    \"&\": \"&amp;\",\n    \"'\": \"&#39;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\"\n};\n\n/**\n * Escapes a string so it can be used in HTML. This turns things like the <\n * character into the &lt; sequence so it will still render as \"<\".\n *\n * @param str The string to be escaped.\n * @returns A string that has all HTML entities escaped.\n */\nexport function escapeHtml(str: string): string {\n    return str.replace(escapeHtmlRegExp, (ch) => {\n        return escapeHtmlMap[ch];\n    });\n}\n\n/**\n * The default compare value function for UI controls. This checks if both values\n * are GUIDs and if so does a case-insensitive compare, otherwise it does a\n * case-sensitive compare of the two values.\n *\n * @param value The value selected in the UI.\n * @param itemValue The item value to be compared against.\n *\n * @returns true if the two values are considered equal; otherwise false.\n */\nexport function defaultControlCompareValue(value: string, itemValue: string): boolean {\n    const guidValue = toGuidOrNull(value);\n    const guidItemValue = toGuidOrNull(itemValue);\n\n    if (guidValue !== null && guidItemValue !== null) {\n        return areEqual(guidValue, guidItemValue);\n    }\n\n    return value === itemValue;\n}\n\n/**\n * Determins whether or not a given string contains any HTML tags in.\n *\n * @param value The string potentially containing HTML\n *\n * @returns true if it contains HTML, otherwise false\n */\nexport function containsHtmlTag(value: string): boolean {\n    return /<[/0-9a-zA-Z]/.test(value);\n}\n\n\n/**\n * Create a 32-bit integer hash representation of a string.\n *\n * @param str The string to be hashed\n *\n * @returns The 32-bit integer hash representation of the string.\n */\nexport function createHash(str: string): number {\n    let hash = 0;\n\n    for (let i = 0; i < str.length; i++) {\n        const chr = str.charCodeAt(i);\n        hash = ((hash << 5) - hash) + chr;\n        hash |= 0; // Convert to 32bit integer\n    }\n\n    return hash;\n}\nexport default {\n    asCommaAnd,\n    containsHtmlTag,\n    escapeHtml,\n    splitCase,\n    isNullOrWhiteSpace,\n    isWhiteSpace,\n    isEmpty,\n    toTitleCase,\n    upperCaseFirstCharacter,\n    pluralize,\n    pluralConditional,\n    padLeft,\n    padRight,\n    truncate,\n    createHash\n};\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n/**\n * A helper object that provides equivalent format strings for a given locale,\n * for the various date libraries used throughout Rock.\n *\n * This API is internal to Rock, and is not subject to the same compatibility\n * standards as public APIs. It may be changed or removed without notice in any\n * release. You should not use this API directly in any plug-ins. Doing so can\n * result in application failures when updating to a new Rock release.\n */\nexport class LocaleDateFormatter {\n    /**\n     * The internal JavaScript date format string for the locale represented\n     * by this formatter instance.\n     */\n    private jsDateFormatString: string;\n\n    /**\n     * The internal ASP C# date format string for the locale represented by this\n     * formatter instance.\n     */\n    private aspDateFormatString: string | undefined;\n\n    /**\n     * The internal date picker format string for the locale represented by this\n     * formatter instance.\n     */\n    private datePickerFormatString: string | undefined;\n\n    /**\n     * Creates a new instance of LocaleDateFormatter.\n     *\n     * @param jsDateFormatString The JavaScript date format string for the\n     * locale represented by this formatter instance.\n     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format\n     */\n    private constructor(jsDateFormatString: string) {\n        this.jsDateFormatString = jsDateFormatString;\n    }\n\n    /**\n     * Creates a new instance of LocaleDateFormatter from the current locale. If\n     * the current locale cannot be determined, a default \"en-US\" locale\n     * formatter instance will be returned.\n     *\n     * @returns A LocaleDateFormatter instance representing the current locale.\n     */\n    public static fromCurrent(): LocaleDateFormatter {\n        // Create an arbitrary date with recognizable numeric parts; format the\n        // date using the current locale settings and then replace the numeric\n        // parts with date format placeholders to get the locale date format\n        // string. Note that month is specified as an index in the Date\n        // constructor, so \"2\" represents month \"3\".\n        const date = new Date(2222, 2, 4);\n        const localeDateString = date.toLocaleDateString(undefined, {\n            year: \"numeric\",\n            month: \"numeric\",\n            day: \"numeric\"\n        });\n\n        // Fall back to a default, en-US format string if any step of the\n        // parsing fails.\n        const defaultFormatString = \"MM/DD/YYYY\";\n\n        let localeFormatString = localeDateString;\n\n        // Replace the known year date part with a 2 or 4 digit format string.\n        if (localeDateString.includes(\"2222\")) {\n            localeFormatString = localeDateString\n                .replace(\"2222\", \"YYYY\");\n        }\n        else if (localeDateString.includes(\"22\")) {\n            localeFormatString = localeDateString\n                .replace(\"22\", \"YY\");\n        }\n        else {\n            return new LocaleDateFormatter(defaultFormatString);\n        }\n\n        // Replace the known month date part with a 1 or 2 digit format string.\n        if (localeFormatString.includes(\"03\")) {\n            localeFormatString = localeFormatString.replace(\"03\", \"MM\");\n        }\n        else if (localeFormatString.includes(\"3\")) {\n            localeFormatString = localeFormatString.replace(\"3\", \"M\");\n        }\n        else {\n            return new LocaleDateFormatter(defaultFormatString);\n        }\n\n        // Replace the known day date part with a 1 or 2 digit format string.\n        if (localeFormatString.includes(\"04\")) {\n            localeFormatString = localeFormatString.replace(\"04\", \"DD\");\n        }\n        else if (localeFormatString.includes(\"4\")) {\n            localeFormatString = localeFormatString.replace(\"4\", \"D\");\n        }\n        else {\n            return new LocaleDateFormatter(defaultFormatString);\n        }\n\n        return new LocaleDateFormatter(localeFormatString);\n    }\n\n    /**\n     * The ASP C# date format string for the locale represented by this\n     * formatter instance.\n     */\n    public get aspDateFormat(): string {\n        if (!this.aspDateFormatString) {\n            // Transform the standard JavaScript format string to follow C# date\n            // formatting rules.\n            // https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\n            this.aspDateFormatString = this.jsDateFormatString\n                .replace(/D/g, \"d\")\n                .replace(/Y/g, \"y\");\n        }\n\n        return this.aspDateFormatString;\n    }\n\n    /**\n     * The date picker format string for the locale represented by this\n     * formatter instance.\n     */\n    public get datePickerFormat(): string {\n        if (!this.datePickerFormatString) {\n            // Transform the standard JavaScript format string to follow the\n            // bootstrap-datepicker library's formatting rules.\n            // https://bootstrap-datepicker.readthedocs.io/en/stable/options.html#format\n            this.datePickerFormatString = this.jsDateFormatString\n                .replace(/D/g, \"d\")\n                .replace(/M/g, \"m\")\n                .replace(/Y/g, \"y\");\n        }\n\n        return this.datePickerFormatString;\n    }\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { List } from \"./linq\";\nimport { padLeft, padRight } from \"./stringUtils\";\nimport { RockDateTime } from \"./rockDateTime\";\nimport { LocaleDateFormatter } from \"./localeDateFormatter\";\n\n/**\n * Returns a blank string if the string value is 0.\n *\n * @param value The value to check and return.\n * @returns The value passed in or an empty string if it equates to zero.\n */\nfunction blankIfZero(value: string): string {\n    return parseInt(value) === 0 ? \"\" : value;\n}\n\n/**\n * Gets the 12 hour value of the given 24-hour number.\n *\n * @param hour The hour in a 24-hour format.\n * @returns The hour in a 12-hour format.\n */\nfunction get12HourValue(hour: number): number {\n    if (hour == 0) {\n        return 12;\n    }\n    else if (hour < 13) {\n        return hour;\n    }\n    else {\n        return hour - 12;\n    }\n}\ntype DateFormatterCommand = (date: RockDateTime) => string;\n\nconst englishDayNames = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\nconst englishMonthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n\nconst dateFormatters: Record<string, DateFormatterCommand> = {\n    \"yyyyy\": date => padLeft(date.year.toString(), 5, \"0\"),\n    \"yyyy\": date => padLeft(date.year.toString(), 4, \"0\"),\n    \"yyy\": date => padLeft(date.year.toString(), 3, \"0\"),\n    \"yy\": date => padLeft((date.year % 100).toString(), 2, \"0\"),\n    \"y\": date => (date.year % 100).toString(),\n\n    \"MMMM\": date => englishMonthNames[date.month - 1],\n    \"MMM\": date => englishMonthNames[date.month - 1].substr(0, 3),\n    \"MM\": date => padLeft(date.month.toString(), 2, \"0\"),\n    \"M\": date => date.month.toString(),\n\n    \"dddd\": date => englishDayNames[date.dayOfWeek],\n    \"ddd\": date => englishDayNames[date.dayOfWeek].substr(0, 3),\n    \"dd\": date => padLeft(date.day.toString(), 2, \"0\"),\n    \"d\": date => date.day.toString(),\n\n    \"fffffff\": date => padRight((date.millisecond * 10000).toString(), 7, \"0\"),\n    \"ffffff\": date => padRight((date.millisecond * 1000).toString(), 6, \"0\"),\n    \"fffff\": date => padRight((date.millisecond * 100).toString(), 5, \"0\"),\n    \"ffff\": date => padRight((date.millisecond * 10).toString(), 4, \"0\"),\n    \"fff\": date => padRight(date.millisecond.toString(), 3, \"0\"),\n    \"ff\": date => padRight(Math.floor(date.millisecond / 10).toString(), 2, \"0\"),\n    \"f\": date => padRight(Math.floor(date.millisecond / 100).toString(), 1, \"0\"),\n\n    \"FFFFFFF\": date => blankIfZero(padRight((date.millisecond * 10000).toString(), 7, \"0\")),\n    \"FFFFFF\": date => blankIfZero(padRight((date.millisecond * 1000).toString(), 6, \"0\")),\n    \"FFFFF\": date => blankIfZero(padRight((date.millisecond * 100).toString(), 5, \"0\")),\n    \"FFFF\": date => blankIfZero(padRight((date.millisecond * 10).toString(), 4, \"0\")),\n    \"FFF\": date => blankIfZero(padRight(date.millisecond.toString(), 3, \"0\")),\n    \"FF\": date => blankIfZero(padRight(Math.floor(date.millisecond / 10).toString(), 2, \"0\")),\n    \"F\": date => blankIfZero(padRight(Math.floor(date.millisecond / 100).toString(), 1, \"0\")),\n\n    \"g\": date => date.year < 0 ? \"B.C.\" : \"A.D.\",\n    \"gg\": date => date.year < 0 ? \"B.C.\" : \"A.D.\",\n\n    \"hh\": date => padLeft(get12HourValue(date.hour).toString(), 2, \"0\"),\n    \"h\": date => get12HourValue(date.hour).toString(),\n\n    \"HH\": date => padLeft(date.hour.toString(), 2, \"0\"),\n    \"H\": date => date.hour.toString(),\n\n    \"mm\": date => padLeft(date.minute.toString(), 2, \"0\"),\n    \"m\": date => date.minute.toString(),\n\n    \"ss\": date => padLeft(date.second.toString(), 2, \"0\"),\n    \"s\": date => date.second.toString(),\n\n    \"K\": date => {\n        const offset = date.offset;\n        const offsetHour = Math.abs(Math.floor(offset / 60));\n        const offsetMinute = Math.abs(offset % 60);\n        return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}:${padLeft(offsetMinute.toString(), 2, \"0\")}`;\n    },\n\n    \"tt\": date => date.hour >= 12 ? \"PM\" : \"AM\",\n    \"t\": date => date.hour >= 12 ? \"P\" : \"A\",\n\n    \"zzz\": date => {\n        const offset = date.offset;\n        const offsetHour = Math.abs(Math.floor(offset / 60));\n        const offsetMinute = Math.abs(offset % 60);\n        return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}:${padLeft(offsetMinute.toString(), 2, \"0\")}`;\n    },\n    \"zz\": date => {\n        const offset = date.offset;\n        const offsetHour = Math.abs(Math.floor(offset / 60));\n        return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}`;\n    },\n    \"z\": date => {\n        const offset = date.offset;\n        const offsetHour = Math.abs(Math.floor(offset / 60));\n        return `${offset >= 0 ? \"+\" : \"-\"}${offsetHour}`;\n    },\n\n    \":\": () => \":\",\n    \"/\": () => \"/\"\n};\n\nconst dateFormatterKeys = new List<string>(Object.keys(dateFormatters))\n    .orderByDescending(k => k.length)\n    .toArray();\n\nconst currentLocaleDateFormatter = LocaleDateFormatter.fromCurrent();\n\nconst standardDateFormats: Record<string, DateFormatterCommand> = {\n    \"d\": date => formatAspDate(date, currentLocaleDateFormatter.aspDateFormat),\n    \"D\": date => formatAspDate(date, \"dddd, MMMM dd, yyyy\"),\n    \"t\": date => formatAspDate(date, \"h:mm tt\"),\n    \"T\": date => formatAspDate(date, \"h:mm:ss tt\"),\n    \"M\": date => formatAspDate(date, \"MMMM dd\"),\n    \"m\": date => formatAspDate(date, \"MMMM dd\"),\n    \"Y\": date => formatAspDate(date, \"yyyy MMMM\"),\n    \"y\": date => formatAspDate(date, \"yyyy MMMM\"),\n    \"f\": date => `${formatAspDate(date, \"D\")} ${formatAspDate(date, \"t\")}`,\n    \"F\": date => `${formatAspDate(date, \"D\")} ${formatAspDate(date, \"T\")}`,\n    \"g\": date => `${formatAspDate(date, \"d\")} ${formatAspDate(date, \"t\")}`,\n    \"G\": date => `${formatAspDate(date, \"d\")} ${formatAspDate(date, \"T\")}`,\n    \"o\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz`),\n    \"O\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz`),\n    \"r\": date => formatAspDate(date, `ddd, dd MMM yyyy HH':'mm':'ss 'GMT'`),\n    \"R\": date => formatAspDate(date, `ddd, dd MMM yyyy HH':'mm':'ss 'GMT'`),\n    \"s\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss`),\n    \"u\": date => formatAspDate(date, `yyyy'-'MM'-'dd HH':'mm':'ss'Z'`),\n    \"U\": date => {\n        return formatAspDate(date.universalDateTime, `F`);\n    },\n};\n\n/**\n * Formats the Date object using custom format specifiers.\n *\n * @param date The date object to be formatted.\n * @param format The custom format string.\n * @returns A string that represents the date in the specified format.\n */\nfunction formatAspCustomDate(date: RockDateTime, format: string): string {\n    let result = \"\";\n\n    for (let i = 0; i < format.length;) {\n        let matchFound = false;\n\n        for (const k of dateFormatterKeys) {\n            if (format.substr(i, k.length) === k) {\n                result += dateFormatters[k](date);\n                matchFound = true;\n                i += k.length;\n                break;\n            }\n        }\n\n        if (matchFound) {\n            continue;\n        }\n\n        if (format[i] === \"\\\\\") {\n            i++;\n            if (i < format.length) {\n                result += format[i++];\n            }\n        }\n        else if (format[i] === \"'\") {\n            i++;\n            for (; i < format.length && format[i] !== \"'\"; i++) {\n                result += format[i];\n            }\n            i++;\n        }\n        else if (format[i] === '\"') {\n            i++;\n            for (; i < format.length && format[i] !== '\"'; i++) {\n                result += format[i];\n            }\n            i++;\n        }\n        else {\n            result += format[i++];\n        }\n    }\n\n    return result;\n}\n\n/**\n * Formats the Date object using a standard format string.\n *\n * @param date The date object to be formatted.\n * @param format The standard format specifier.\n * @returns A string that represents the date in the specified format.\n */\nfunction formatAspStandardDate(date: RockDateTime, format: string): string {\n    if (standardDateFormats[format] !== undefined) {\n        return standardDateFormats[format](date);\n    }\n\n    return format;\n}\n\n/**\n * Formats the given Date object using nearly the same rules as the ASP C#\n * format methods.\n *\n * @param date The date object to be formatted.\n * @param format The format string to use.\n */\nexport function formatAspDate(date: RockDateTime, format: string): string {\n    if (format.length === 1) {\n        return formatAspStandardDate(date, format);\n    }\n    else if (format.length === 2 && format[0] === \"%\") {\n        return formatAspCustomDate(date, format[1]);\n    }\n    else {\n        return formatAspCustomDate(date, format);\n    }\n}\n","import { DateTime, FixedOffsetZone, Zone } from \"luxon\";\nimport { formatAspDate } from \"./aspDateFormat\";\nimport { DayOfWeek } from \"@Obsidian/Enums/Controls/dayOfWeek\";\n\n/**\n * The days of the week that are used by RockDateTime.\n */\nexport { DayOfWeek } from \"@Obsidian/Enums/Controls/dayOfWeek\";\n\n/**\n * The various date and time formats supported by the formatting methods.\n */\nexport const DateTimeFormat: Record<string, Intl.DateTimeFormatOptions> = {\n    DateFull: {\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\"\n    },\n\n    DateMedium: {\n        year: \"numeric\",\n        month: \"short\",\n        day: \"numeric\"\n    },\n\n    DateShort: {\n        year: \"numeric\",\n        month: \"numeric\",\n        day: \"numeric\"\n    },\n\n    TimeShort: {\n        hour: \"numeric\",\n        minute: \"numeric\",\n    },\n\n    TimeWithSeconds: {\n        hour: \"numeric\",\n        minute: \"numeric\",\n        second: \"numeric\"\n    },\n\n    DateTimeShort: {\n        year: \"numeric\",\n        month: \"numeric\",\n        day: \"numeric\",\n        hour: \"numeric\",\n        minute: \"numeric\"\n    },\n\n    DateTimeShortWithSeconds: {\n        year: \"numeric\",\n        month: \"numeric\",\n        day: \"numeric\",\n        hour: \"numeric\",\n        minute: \"numeric\",\n        second: \"numeric\"\n    },\n\n    DateTimeMedium: {\n        year: \"numeric\",\n        month: \"short\",\n        day: \"numeric\",\n        hour: \"numeric\",\n        minute: \"numeric\"\n    },\n\n    DateTimeMediumWithSeconds: {\n        year: \"numeric\",\n        month: \"short\",\n        day: \"numeric\",\n        hour: \"numeric\",\n        minute: \"numeric\",\n        second: \"numeric\"\n    },\n\n    DateTimeFull: {\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\",\n        hour: \"numeric\",\n        minute: \"numeric\"\n    },\n\n    DateTimeFullWithSeconds: {\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\",\n        hour: \"numeric\",\n        minute: \"numeric\",\n        second: \"numeric\"\n    }\n};\n\n/**\n * A date and time object that handles time zones and formatting. This class is\n * immutable and cannot be modified. All modifications are performed by returning\n * a new RockDateTime instance.\n */\nexport class RockDateTime {\n    /** The internal DateTime object that holds our date information. */\n    private dateTime: DateTime;\n\n    // #region Constructors\n\n    /**\n     * Creates a new instance of RockDateTime.\n     *\n     * @param dateTime The Luxon DateTime object that is used to track the internal state.\n     */\n    private constructor(dateTime: DateTime) {\n        this.dateTime = dateTime;\n    }\n\n    /**\n     * Creates a new instance of RockDateTime from the given date and time parts.\n     *\n     * @param year The year of the new date.\n     * @param month The month of the new date (1-12).\n     * @param day The day of month of the new date.\n     * @param hour The hour of the day.\n     * @param minute The minute of the hour.\n     * @param second The second of the minute.\n     * @param millisecond The millisecond of the second.\n     * @param zone The time zone offset to construct the date in.\n     *\n     * @returns A RockDateTime instance or null if the requested date was not valid.\n     */\n    public static fromParts(year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number, zone?: number | string): RockDateTime | null {\n        let luxonZone: Zone | string | undefined;\n\n        if (zone !== undefined) {\n            if (typeof zone === \"number\") {\n                luxonZone = FixedOffsetZone.instance(zone);\n            }\n            else {\n                luxonZone = zone;\n            }\n        }\n\n        const dateTime = DateTime.fromObject({\n            year,\n            month,\n            day,\n            hour,\n            minute,\n            second,\n            millisecond\n        }, {\n            zone: luxonZone\n        });\n\n        if (!dateTime.isValid) {\n            return null;\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new instance of RockDateTime that represents the time specified\n     * as the Javascript milliseconds value. The time zone is set to the browser\n     * time zone.\n     *\n     * @param milliseconds The time in milliseconds since the epoch.\n     *\n     * @returns A new RockDateTime instance or null if the specified date was not valid.\n     */\n    public static fromMilliseconds(milliseconds: number): RockDateTime | null {\n        const dateTime = DateTime.fromMillis(milliseconds);\n\n        if (!dateTime.isValid) {\n            return null;\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Construct a new RockDateTime instance from a Javascript Date object.\n     *\n     * @param date The Javascript date object that contains the date information.\n     *\n     * @returns A RockDateTime instance or null if the date was not valid.\n     */\n    public static fromJSDate(date: Date): RockDateTime | null {\n        const dateTime = DateTime.fromJSDate(date);\n\n        if (!dateTime.isValid) {\n            return null;\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Constructs a new RockDateTime instance by parsing the given string from\n     * ISO 8601 format.\n     *\n     * @param dateString The string that contains the ISO 8601 formatted text.\n     *\n     * @returns A new RockDateTime instance or null if the date was not valid.\n     */\n    public static parseISO(dateString: string): RockDateTime | null {\n        const dateTime = DateTime.fromISO(dateString, { setZone: true });\n\n        if (!dateTime.isValid) {\n            return null;\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Constructs a new RockDateTime instance by parsing the given string from\n     * RFC 1123 format. This is common in HTTP headers.\n     *\n     * @param dateString The string that contains the RFC 1123 formatted text.\n     *\n     * @returns A new RockDateTime instance or null if the date was not valid.\n     */\n    public static parseHTTP(dateString: string): RockDateTime | null {\n        const dateTime = DateTime.fromHTTP(dateString, { setZone: true });\n\n        if (!dateTime.isValid) {\n            return null;\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the current date and time.\n     *\n     * @returns A RockDateTime instance.\n     */\n    public static now(): RockDateTime {\n        return new RockDateTime(DateTime.now());\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the current time in UTC.\n     *\n     * @returns A new RockDateTime instance in the UTC time zone.\n     */\n    public static utcNow(): RockDateTime {\n        return new RockDateTime(DateTime.now().toUTC());\n    }\n\n    // #endregion\n\n    // #region Properties\n\n    /**\n     * The Date portion of this RockDateTime instance. All time properties of\n     * the returned instance will be set to 0.\n     */\n    public get date(): RockDateTime {\n        const date = RockDateTime.fromParts(this.year, this.month, this.day, 0, 0, 0, 0, this.offset);\n\n        if (date === null) {\n            throw \"Could not convert to date instance.\";\n        }\n\n        return date;\n    }\n\n    /**\n     * The raw date with no offset applied to it. Use this method when you only\n     * care about comparing explicit dates without the time zone, as we do within\n     * the grid's date column filter.\n     *\n     * This API is internal to Rock, and is not subject to the same compatibility\n     * standards as public APIs. It may be changed or removed without notice in any\n     * release. You should not use this API directly in any plug-ins. Doing so can\n     * result in application failures when updating to a new Rock release.\n     */\n    public get rawDate(): RockDateTime {\n        const date = RockDateTime.fromParts(this.year, this.month, this.day, 0, 0, 0, 0);\n\n        if (date === null) {\n            throw \"Could not convert to date instance.\";\n        }\n\n        return date;\n    }\n\n    /**\n     * The day of the month represented by this instance.\n     */\n    public get day(): number {\n        return this.dateTime.day;\n    }\n\n    /**\n     * The day of the week represented by this instance.\n     */\n    public get dayOfWeek(): DayOfWeek {\n        switch (this.dateTime.weekday) {\n            case 1:\n                return DayOfWeek.Monday;\n\n            case 2:\n                return DayOfWeek.Tuesday;\n\n            case 3:\n                return DayOfWeek.Wednesday;\n\n            case 4:\n                return DayOfWeek.Thursday;\n\n            case 5:\n                return DayOfWeek.Friday;\n\n            case 6:\n                return DayOfWeek.Saturday;\n\n            case 7:\n                return DayOfWeek.Sunday;\n        }\n\n        throw \"Could not determine day of week.\";\n    }\n\n    /**\n     * The day of the year represented by this instance.\n     */\n    public get dayOfYear(): number {\n        return this.dateTime.ordinal;\n    }\n\n    /**\n     * The hour of the day represented by this instance.\n     */\n    public get hour(): number {\n        return this.dateTime.hour;\n    }\n\n    /**\n     * The millisecond of the second represented by this instance.\n     */\n    public get millisecond(): number {\n        return this.dateTime.millisecond;\n    }\n\n    /**\n     * The minute of the hour represented by this instance.\n     */\n    public get minute(): number {\n        return this.dateTime.minute;\n    }\n\n    /**\n     * The month of the year represented by this instance (1-12).\n     */\n    public get month(): number {\n        return this.dateTime.month;\n    }\n\n    /**\n     * The offset from UTC represented by this instance. If the timezone of this\n     * instance is UTC-7 then the value returned is -420.\n     */\n    public get offset(): number {\n        return this.dateTime.offset;\n    }\n\n    /**\n     * The second of the minute represented by this instance.\n     */\n    public get second(): number {\n        return this.dateTime.second;\n    }\n\n    /**\n     * The year represented by this instance.\n     */\n    public get year(): number {\n        return this.dateTime.year;\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the same point in\n     * time represented in the local browser time zone.\n     */\n    public get localDateTime(): RockDateTime {\n        return new RockDateTime(this.dateTime.toLocal());\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the same point in\n     * time represented in the organization time zone.\n     */\n    public get organizationDateTime(): RockDateTime {\n        throw \"Not Implemented\";\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the same point in\n     * time represented in UTC.\n     */\n    public get universalDateTime(): RockDateTime {\n        return new RockDateTime(this.dateTime.toUTC());\n    }\n\n    // #endregion\n\n    // #region Methods\n\n    /**\n     * Creates a new RockDateTime instance that represents the date and time\n     * after adding the number of days to this instance.\n     *\n     * @param days The number of days to add.\n     *\n     * @returns A new instance of RockDateTime that represents the new date and time.\n     */\n    public addDays(days: number): RockDateTime {\n        const dateTime = this.dateTime.plus({ days: days });\n\n        if (!dateTime.isValid) {\n            throw \"Operation produced an invalid date.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the last millisecond\n     * of the end of the month for this instance.\n     *\n     * @example\n     * RockDateTime.fromJSDate(new Date(2014, 3, 3)).endOfMonth().toISOString(); //=> '2014-03-31T23:59:59.999-05:00'\n     */\n    public endOfMonth(): RockDateTime {\n        const dateTime = this.dateTime.endOf(\"month\");\n\n        if (!dateTime.isValid) {\n            throw \"Operation produced an invalid date.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the date and time\n     * after adding the number of hours to this instance.\n     *\n     * @param days The number of hours to add.\n     *\n     * @returns A new instance of RockDateTime that represents the new date and time.\n     */\n    public addHours(hours: number): RockDateTime {\n        const dateTime = this.dateTime.plus({ hours: hours });\n\n        if (!dateTime.isValid) {\n            throw \"Operation produced an invalid date.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the date and time\n     * after adding the number of milliseconds to this instance.\n     *\n     * @param days The number of milliseconds to add.\n     *\n     * @returns A new instance of RockDateTime that represents the new date and time.\n     */\n    public addMilliseconds(milliseconds: number): RockDateTime {\n        const dateTime = this.dateTime.plus({ milliseconds: milliseconds });\n\n        if (!dateTime.isValid) {\n            throw \"Operation produced an invalid date.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the date and time\n     * after adding the number of minutes to this instance.\n     *\n     * @param days The number of minutes to add.\n     *\n     * @returns A new instance of RockDateTime that represents the new date and time.\n     */\n    public addMinutes(minutes: number): RockDateTime {\n        const dateTime = this.dateTime.plus({ minutes: minutes });\n\n        if (!dateTime.isValid) {\n            throw \"Operation produced an invalid date.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the date and time\n     * after adding the number of months to this instance.\n     *\n     * @param days The number of months to add.\n     *\n     * @returns A new instance of RockDateTime that represents the new date and time.\n     */\n    public addMonths(months: number): RockDateTime {\n        const dateTime = this.dateTime.plus({ months: months });\n\n        if (!dateTime.isValid) {\n            throw \"Operation produced an invalid date.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the date and time\n     * after adding the number of seconds to this instance.\n     *\n     * @param days The number of seconds to add.\n     *\n     * @returns A new instance of RockDateTime that represents the new date and time.\n     */\n    public addSeconds(seconds: number): RockDateTime {\n        const dateTime = this.dateTime.plus({ seconds: seconds });\n\n        if (!dateTime.isValid) {\n            throw \"Operation produced an invalid date.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Creates a new RockDateTime instance that represents the date and time\n     * after adding the number of years to this instance.\n     *\n     * @param days The number of years to add.\n     *\n     * @returns A new instance of RockDateTime that represents the new date and time.\n     */\n    public addYears(years: number): RockDateTime {\n        const dateTime = this.dateTime.plus({ years: years });\n\n        if (!dateTime.isValid) {\n            throw \"Operation produced an invalid date.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Converts the date time representation into the number of milliseconds\n     * that have elapsed since the epoch (1970-01-01T00:00:00Z).\n     *\n     * @returns The number of milliseconds since the epoch.\n     */\n    public toMilliseconds(): number {\n        return this.dateTime.toMillis();\n    }\n\n    /**\n     * Creates a new instance of RockDateTime that represents the same point\n     * in time as represented by the specified time zone offset.\n     *\n     * @param zone The time zone offset as a number or string such as \"UTC+4\".\n     *\n     * @returns A new RockDateTime instance that represents the specified time zone.\n     */\n    public toOffset(zone: number | string): RockDateTime {\n        let dateTime: DateTime;\n\n        if (typeof zone === \"number\") {\n            dateTime = this.dateTime.setZone(FixedOffsetZone.instance(zone));\n        }\n        else {\n            dateTime = this.dateTime.setZone(zone);\n        }\n\n        if (!dateTime.isValid) {\n            throw \"Invalid time zone specified.\";\n        }\n\n        return new RockDateTime(dateTime);\n    }\n\n    /**\n     * Formats this instance according to C# formatting rules.\n     *\n     * @param format The string that specifies the format to use.\n     *\n     * @returns A string representing this instance in the given format.\n     */\n    public toASPString(format: string): string {\n        return formatAspDate(this, format);\n    }\n\n    /**\n     * Creates a string representation of this instance in ISO8601 format.\n     *\n     * @returns An ISO8601 formatted string.\n     */\n    public toISOString(): string {\n        // We never create an instance of RockDateTime if dateTime is not valid\n        // and that is the only time toISO() would return null.\n        return <string>this.dateTime.toISO();\n    }\n\n    /**\n     * Formats this instance using standard locale formatting rules to display\n     * a date and time in the browsers specified locale.\n     *\n     * @param format The format to use when generating the string.\n     *\n     * @returns A string that represents the date and time in then specified format.\n     */\n    public toLocaleString(format: Intl.DateTimeFormatOptions): string {\n        return this.dateTime.toLocaleString(format);\n    }\n\n    /**\n     * Transforms the date into a human friendly elapsed time string.\n     *\n     * @example\n     * // Returns \"21yrs\"\n     * RockDateTime.fromParts(2000, 3, 4).toElapsedString();\n     *\n     * @returns A string that represents the amount of time that has elapsed.\n     */\n    public toElapsedString(currentDateTime?: RockDateTime): string {\n        const msPerSecond = 1000;\n        const msPerMinute= 1000 * 60;\n        const msPerHour = 1000 * 60 * 60;\n        const hoursPerDay = 24;\n        const daysPerYear = 365;\n\n        let start = new RockDateTime(this.dateTime);\n        let end = currentDateTime ?? RockDateTime.now();\n        let direction = \"Ago\";\n        let totalMs = end.toMilliseconds() - start.toMilliseconds();\n\n        if (totalMs < 0) {\n            direction = \"From Now\";\n            totalMs = Math.abs(totalMs);\n            start = end;\n            end = new RockDateTime(this.dateTime);\n        }\n\n        const totalSeconds = totalMs / msPerSecond;\n        const totalMinutes = totalMs / msPerMinute;\n        const totalHours = totalMs / msPerHour;\n        const totalDays = totalHours / hoursPerDay;\n\n        if (totalHours < 24) {\n            if (totalSeconds < 2) {\n                return `1 Second ${direction}`;\n            }\n\n            if (totalSeconds < 60) {\n                return `${Math.floor(totalSeconds)} Seconds ${direction}`;\n            }\n\n            if (totalMinutes < 2) {\n                return `1 Minute ${direction}`;\n            }\n\n            if (totalMinutes < 60) {\n                return `${Math.floor(totalMinutes)} Minutes ${direction}`;\n            }\n\n            if (totalHours < 2) {\n                return `1 Hour ${direction}`;\n            }\n\n            if (totalHours < 60) {\n                return `${Math.floor(totalHours)} Hours ${direction}`;\n            }\n        }\n\n        if (totalDays < 2) {\n            return `1 Day ${direction}`;\n        }\n\n        if (totalDays < 31) {\n            return `${Math.floor(totalDays)} Days ${direction}`;\n        }\n\n        const totalMonths = end.totalMonths(start);\n\n        if (totalMonths <= 1) {\n            return `1 Month ${direction}`;\n        }\n\n        if (totalMonths <= 18) {\n            return `${Math.round(totalMonths)} Months ${direction}`;\n        }\n\n        const totalYears = Math.floor(totalDays / daysPerYear);\n\n        if (totalYears <= 1) {\n            return `1 Year ${direction}`;\n        }\n\n        return `${Math.round(totalYears)} Years ${direction}`;\n    }\n\n    /**\n     * Formats this instance as a string that can be used in HTTP headers and\n     * cookies.\n     *\n     * @returns A new string that conforms to RFC 1123\n     */\n    public toHTTPString(): string {\n        // We never create an instance of RockDateTime if dateTime is not valid\n        // and that is the only time toHTTP() would return null.\n        return <string>this.dateTime.toHTTP();\n    }\n\n    /**\n     * Get the value of the date and time in a format that can be used in\n     * comparisons.\n     *\n     * @returns A number that represents the date and time.\n     */\n    public valueOf(): number {\n        return this.dateTime.valueOf();\n    }\n\n    /**\n     * Creates a standard string representation of the date and time.\n     *\n     * @returns A string representation of the date and time.\n     */\n    public toString(): string {\n        return this.toLocaleString(DateTimeFormat.DateTimeFull);\n    }\n\n    /**\n     * Checks if this instance is equal to another RockDateTime instance. This\n     * will return true if the two instances represent the same point in time,\n     * even if they have been associated with different time zones. In other\n     * words \"2021-09-08 12:00:00 Z\" == \"2021-09-08 14:00:00 UTC+2\".\n     *\n     * @param otherDateTime The other RockDateTime to be compared against.\n     *\n     * @returns True if the two instances represent the same point in time.\n     */\n    public isEqualTo(otherDateTime: RockDateTime): boolean {\n        return this.dateTime.toMillis() === otherDateTime.dateTime.toMillis();\n    }\n\n    /**\n     * Checks if this instance is later than another RockDateTime instance.\n     *\n     * @param otherDateTime The other RockDateTime to be compared against.\n     *\n     * @returns True if this instance represents a point in time that occurred after another point in time, regardless of time zone.\n     */\n    public isLaterThan(otherDateTime: RockDateTime): boolean {\n        return this.dateTime.toMillis() > otherDateTime.dateTime.toMillis();\n    }\n\n    /**\n     * Checks if this instance is earlier than another RockDateTime instance.\n     *\n     * @param otherDateTime The other RockDateTime to be compared against.\n     *\n     * @returns True if this instance represents a point in time that occurred before another point in time, regardless of time zone.\n     */\n    public isEarlierThan(otherDateTime: RockDateTime): boolean {\n        return this.dateTime.toMillis() < otherDateTime.dateTime.toMillis();\n    }\n\n    /**\n     * Calculates the elapsed time between this date and the reference date and\n     * returns that difference in a human friendly way.\n     *\n     * @param otherDateTime The reference date and time. If not specified then 'now' is used.\n     *\n     * @returns A string that represents the elapsed time.\n     */\n    public humanizeElapsed(otherDateTime?: RockDateTime): string {\n        otherDateTime = otherDateTime ?? RockDateTime.now();\n\n        const totalSeconds = Math.floor((otherDateTime.dateTime.toMillis() - this.dateTime.toMillis()) / 1000);\n\n        if (totalSeconds <= 1) {\n            return \"right now\";\n        }\n        else if (totalSeconds < 60) { // less than 1 minute\n            return `${totalSeconds} seconds ago`;\n        }\n        else if (totalSeconds >= 60 && totalSeconds <= 119) { // 1 minute ago\n            return \"1 minute ago\";\n        }\n        else if (totalSeconds < 3600) { // 1 hour\n            return `${Math.floor(totalSeconds / 60)} minutes ago`;\n        }\n        else if (totalSeconds < 86400) { // 1 day\n            return `${Math.floor(totalSeconds / 3600)} hours ago`;\n        }\n        else if (totalSeconds < 31536000) { // 1 year\n            return `${Math.floor(totalSeconds / 86400)} days ago`;\n        }\n        else {\n            return `${Math.floor(totalSeconds / 31536000)} years ago`;\n        }\n    }\n\n    /**\n     * The total number of months between the two dates.\n     * @param otherDateTime The reference date and time.\n     * @returns An int that represents the number of months between the two dates.\n     */\n    public totalMonths(otherDateTime: RockDateTime): number {\n        return ((this.year * 12) + this.month) - ((otherDateTime.year * 12) + otherDateTime.month);\n    }\n\n    // #endregion\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport mitt, { Emitter } from \"mitt\";\n\n// NOTE: Much of the logic for this was taken from VSCode's MIT licensed version:\n// https://github.com/microsoft/vscode/blob/342394d1e7d43d3324dc2ede1d634cffd52ba159/src/vs/base/common/cancellation.ts\n\n/**\n * A cancellation token can be used to instruct some operation to run but abort\n * if a certain condition is met.\n */\nexport interface ICancellationToken {\n    /**\n     * A flag signalling is cancellation has been requested.\n     */\n    readonly isCancellationRequested: boolean;\n\n    /**\n     * Registers a listener for when cancellation has been requested. This event\n     * only ever fires `once` as cancellation can only happen once. Listeners\n     * that are registered after cancellation will be called (next event loop run),\n     * but also only once.\n     *\n     * @param listener The function to be called when the token has been cancelled.\n     */\n    onCancellationRequested(listener: () => void): void;\n}\n\nfunction shortcutCancelledEvent(listener: () => void): void {\n    window.setTimeout(listener, 0);\n}\n\n/**\n * Determines if something is a cancellation token.\n *\n * @param thing The thing to be checked to see if it is a cancellation token.\n *\n * @returns true if the @{link thing} is a cancellation token, otherwise false.\n */\nexport function isCancellationToken(thing: unknown): thing is ICancellationToken {\n    if (thing === CancellationTokenNone || thing === CancellationTokenCancelled) {\n        return true;\n    }\n    if (thing instanceof MutableToken) {\n        return true;\n    }\n    if (!thing || typeof thing !== \"object\") {\n        return false;\n    }\n    return typeof (thing as ICancellationToken).isCancellationRequested === \"boolean\"\n        && typeof (thing as ICancellationToken).onCancellationRequested === \"function\";\n}\n\n/**\n * A cancellation token that will never be in a cancelled state.\n */\nexport const CancellationTokenNone = Object.freeze<ICancellationToken>({\n    isCancellationRequested: false,\n    onCancellationRequested() {\n        // Intentionally blank.\n    }\n});\n\n/**\n * A cancellation token that is already in a cancelled state.\n */\nexport const CancellationTokenCancelled = Object.freeze<ICancellationToken>({\n    isCancellationRequested: true,\n    onCancellationRequested: shortcutCancelledEvent\n});\n\n/**\n * Internal implementation of a cancellation token that starts initially as\n * active but can later be switched to a cancelled state.\n */\nclass MutableToken implements ICancellationToken {\n    private isCancelled: boolean = false;\n    private emitter: Emitter<Record<string, unknown>> | null = null;\n\n    /**\n     * Cancels the token and fires any registered event listeners.\n     */\n    public cancel(): void {\n        if (!this.isCancelled) {\n            this.isCancelled = true;\n            if (this.emitter) {\n                this.emitter.emit(\"cancel\", undefined);\n                this.emitter = null;\n            }\n        }\n    }\n\n    // #region ICancellationToken implementation\n\n    get isCancellationRequested(): boolean {\n        return this.isCancelled;\n    }\n\n    onCancellationRequested(listener: () => void): void {\n        if (this.isCancelled) {\n            return shortcutCancelledEvent(listener);\n        }\n\n        if (!this.emitter) {\n            this.emitter = mitt();\n        }\n\n        this.emitter.on(\"cancel\", listener);\n    }\n\n    // #endregion\n}\n\n/**\n * Creates a source instance that can be used to trigger a cancellation\n * token into the cancelled state.\n */\nexport class CancellationTokenSource {\n    /** The token that can be passed to functions. */\n    private internalToken?: ICancellationToken = undefined;\n\n    /**\n     * Creates a new instance of {@link CancellationTokenSource}.\n     *\n     * @param parent The parent cancellation token that will also cancel this source.\n     */\n    constructor(parent?: ICancellationToken) {\n        if (parent) {\n            parent.onCancellationRequested(() => this.cancel());\n        }\n    }\n\n    /**\n     * The cancellation token that can be used to determine when the task\n     * should be cancelled.\n     */\n    get token(): ICancellationToken {\n        if (!this.internalToken) {\n            // be lazy and create the token only when\n            // actually needed\n            this.internalToken = new MutableToken();\n        }\n\n        return this.internalToken;\n    }\n\n    /**\n     * Moves the token into a cancelled state.\n     */\n    cancel(): void {\n        if (!this.internalToken) {\n            // Save an object creation by returning the default cancelled\n            // token when cancellation happens before someone asks for the\n            // token.\n            this.internalToken = CancellationTokenCancelled;\n\n        }\n        else if (this.internalToken instanceof MutableToken) {\n            // Actually cancel the existing token.\n            this.internalToken.cancel();\n        }\n    }\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { CancellationTokenSource, ICancellationToken } from \"./cancellation\";\n\n/**\n * Compares two values for equality by performing deep nested comparisons\n * if the values are objects or arrays.\n *\n * @param a The first value to compare.\n * @param b The second value to compare.\n * @param strict True if strict comparision is required (meaning 1 would not equal \"1\").\n *\n * @returns True if the two values are equal to each other.\n */\nexport function deepEqual(a: unknown, b: unknown, strict: boolean): boolean {\n    // Catches everything but objects.\n    if (strict && a === b) {\n        return true;\n    }\n    else if (!strict && a == b) {\n        return true;\n    }\n\n    // NaN never equals another NaN, but functionally they are the same.\n    if (typeof a === \"number\" && typeof b === \"number\" && isNaN(a) && isNaN(b)) {\n        return true;\n    }\n\n    // Remaining value types must both be of type object\n    if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n        // Array status must match.\n        if (Array.isArray(a) !== Array.isArray(b)) {\n            return false;\n        }\n\n        if (Array.isArray(a) && Array.isArray(b)) {\n            // Array lengths must match.\n            if (a.length !== b.length) {\n                return false;\n            }\n\n            // Each element in the array must match.\n            for (let i = 0; i < a.length; i++) {\n                if (!deepEqual(a[i], b[i], strict)) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n        else {\n            // NOTE: There are a few edge cases not accounted for here, but they\n            // are rare and unusual:\n            // Map, Set, ArrayBuffer, RegExp\n\n            // The objects must be of the same \"object type\".\n            if (a.constructor !== b.constructor) {\n                return false;\n            }\n\n            // Get all the key/value pairs of each object and sort them so they\n            // are in the same order as each other.\n            const aEntries = Object.entries(a).sort((a, b) => a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0));\n            const bEntries = Object.entries(b).sort((a, b) => a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0));\n\n            // Key/value count must be identical.\n            if (aEntries.length !== bEntries.length) {\n                return false;\n            }\n\n            for (let i = 0; i < aEntries.length; i++) {\n                const aEntry = aEntries[i];\n                const bEntry = bEntries[i];\n\n                // Ensure the keys are equal, must always be strict.\n                if (!deepEqual(aEntry[0], bEntry[0], true)) {\n                    return false;\n                }\n\n                // Ensure the values are equal.\n                if (!deepEqual(aEntry[1], bEntry[1], strict)) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n    }\n\n    return false;\n}\n\n\n/**\n * Debounces the function so it will only be called once during the specified\n * delay period. The returned function should be called to trigger the original\n * function that is to be debounced.\n *\n * @param fn The function to be called once per delay period.\n * @param delay The period in milliseconds. If the returned function is called\n * more than once during this period then fn will only be executed once for\n * the period. If not specified then it defaults to 250ms.\n * @param eager If true then the fn function will be called immediately and\n * then any subsequent calls will be debounced.\n *\n * @returns A function to be called when fn should be executed.\n */\nexport function debounce(fn: (() => void), delay: number = 250, eager: boolean = false): (() => void) {\n    let timeout: NodeJS.Timeout | null = null;\n\n    return (): void => {\n        if (timeout) {\n            clearTimeout(timeout);\n        }\n        else if (eager) {\n            // If there was no previous timeout and we are configured for\n            // eager calls, then execute now.\n            fn();\n\n            // An eager call should not result in a final debounce call.\n            timeout = setTimeout(() => timeout = null, delay);\n\n            return;\n        }\n\n        // If we had a previous timeout or we are not set for eager calls\n        // then set a timeout to initiate the function after the delay.\n        timeout = setTimeout(() => {\n            timeout = null;\n            fn();\n        }, delay);\n    };\n}\n\n/**\n * Options for debounceAsync function\n */\ntype DebounceAsyncOptions = {\n    /**\n     * The period in milliseconds. If the returned function is called more than\n     * once during this period, then `fn` will only be executed once for the\n     * period.\n     * @default 250\n     */\n    delay?: number;\n\n    /**\n     * If `true`, then the `fn` function will be called immediately on the first\n     * call, and any subsequent calls will be debounced.\n     * @default false\n     */\n    eager?: boolean;\n};\n\n/**\n * Debounces the function so it will only be called once during the specified\n * delay period. The returned function should be called to trigger the original\n * function that is to be debounced.\n *\n * **Note:** Due to the asynchronous nature of JavaScript and how promises work,\n * `fn` may be invoked multiple times before previous invocations have completed.\n * To ensure that only the latest invocation proceeds and to prevent stale data,\n * you should check `cancellationToken.isCancellationRequested` at appropriate\n * points within your `fn` implementation—ideally after you `await` data from the\n * server. If cancellation is requested, `fn` should promptly abort execution.\n *\n * @param fn The function to be called once per delay period.\n * @param options An optional object specifying debounce options.\n *\n * @returns A function to be called when `fn` should be executed. This function\n * accepts an optional `parentCancellationToken` that, when canceled, will also\n * cancel the execution of `fn`.\n */\nexport function debounceAsync(\n    fn: ((cancellationToken?: ICancellationToken) => PromiseLike<void>),\n    options?: DebounceAsyncOptions\n): ((parentCancellationToken?: ICancellationToken) => Promise<void>) {\n    const delay = options?.delay ?? 250;\n    const eager = options?.eager ?? false;\n\n    let timeout: NodeJS.Timeout | null = null;\n    let source: CancellationTokenSource | null = null;\n    let isEagerExecutionInProgress = false;\n\n    return async (parentCancellationToken?: ICancellationToken): Promise<void> => {\n        // Always cancel any ongoing execution of fn.\n        source?.cancel();\n\n        if (timeout) {\n            clearTimeout(timeout);\n            timeout = null;\n        }\n        else if (eager && !isEagerExecutionInProgress) {\n            // Execute immediately on the first call.\n            isEagerExecutionInProgress = true;\n            source = new CancellationTokenSource(parentCancellationToken);\n\n            // Set the timeout before awaiting fn.\n            timeout = setTimeout(() => {\n                timeout = null;\n                isEagerExecutionInProgress = false;\n            }, delay);\n\n            try {\n                await fn(source.token);\n            }\n            catch (e) {\n                console.error(e || \"Unknown error while debouncing async function call.\");\n                throw e;\n            }\n\n            return;\n        }\n\n        // Schedule the function to run after the delay.\n        source = new CancellationTokenSource(parentCancellationToken);\n        const cts = source;\n        timeout = setTimeout(async () => {\n            try {\n                await fn(cts.token);\n            }\n            catch (e) {\n                console.error(e || \"Unknown error while debouncing async function call.\");\n                throw e;\n            }\n\n            timeout = null;\n            isEagerExecutionInProgress = false;\n        }, delay);\n    };\n}\n","import { Guid } from \"@Obsidian/Types\";\nimport { BlockBeginEditData, BlockEndEditData, BrowserBusCallback, BrowserBusOptions, Message, QueryStringChangedData } from \"@Obsidian/Types/Utility/browserBus\";\nimport { areEqual } from \"./guid\";\n\n/*\n * READ THIS BEFORE MAKING ANY CHANGES TO THE BUS.\n *\n * OVERVIEW\n *\n * The browser bus is a basic pubsub interface within a single page. If you\n * publish a message to one instance of the bus it will be available to any\n * other instance on the same page. This uses document.addEventListener()\n * and document.dispatchEvent() with a single custom event name of `rockMessage`.\n *\n * The browser bus will not communicate with other browsers on the same page or\n * even other tabs within the same browser.\n *\n * For full documentation, see the gitbook developer documentation.\n *\n * FRAMEWORK MESSAGES\n *\n * All \"framework\" messages should have a type defined in\n * @Obsidian/Types/Utility/browserBus that specify the data type expected. If\n * no data type is expected than `void` can be used as the type. Message data\n * should always be an object rather than a primitive. This allows us to add\n * additional values without it being a breaking change to existing code.\n *\n * Additionally, all framework messages should have their name defined in either\n * the PageMessages object or BlockMessages object. This is for uniformity so it\n * is easier for core code and plugins to subscribe to these messages and know\n * they got the right message name.\n *\n * SUBSCRIBE OVERLOADS\n *\n * When adding new framework messages, be sure to add overloads to the\n * subscribe, subscribeToBlock and subscribeToBlockType functions for that\n * message name and data type. This compiles away to nothing but provides a\n * much better TypeScript experience.\n */\n\n\n/**\n * Framework messages that will be sent for pages.\n */\nexport const PageMessages = {\n    /**\n     * Sent when the query string is changed outside the context of a page load.\n     */\n    QueryStringChanged: \"page.core.queryStringChanged\"\n} as const;\n\n/**\n * Framework messages that will be sent for blocks.\n */\nexport const BlockMessages = {\n    /**\n     * Sent just before a block switches into edit mode.\n     */\n    BeginEdit: \"block.core.beginEdit\",\n\n    /**\n     * Sent just after a block switches out of edit mode.\n     */\n    EndEdit: \"block.core.endEdit\",\n} as const;\n\n/**\n * Gets an object that will provide access to the browser bus. This bus will\n * allow different code on the page to send and receive messages betwen each\n * other as well as plain JavaScript. This bus does not cross page boundaries.\n *\n * Meaning, if you publish a message in one tab it will not show up in another\n * tab in the same (or a different) browser. Neither will messages magically\n * persist across page loads.\n *\n * If you call this method you are responsible for calling the {@link BrowserBus.dispose}\n * function when you are done with the bus. If you do not then your component\n * will probably never be garbage collected and your subscribed event handlers\n * will continue to be called.\n *\n * @param options Custom options to construct the {@link BrowserBus} object with. This should normally not be needed.\n *\n * @returns The object that provides access to the browser bus.\n */\nexport function useBrowserBus(options?: BrowserBusOptions): BrowserBus {\n    return new BrowserBus(options ?? {});\n}\n\n// #region Internal Types\n\n/**\n * Internal message handler state that includes the filters used to decide\n * if the callback is valid for the message.\n */\ntype MessageHandler = {\n    /** If not nullish messages must match this message name. */\n    name?: string;\n\n    /** If not nullish then messages must be from this block type. */\n    blockType?: Guid;\n\n    /** If not nullish them messages must be from this block instance. */\n    block?: Guid;\n\n    /** The callback that will be called. */\n    callback: BrowserBusCallback;\n};\n\n// #endregion\n\n// #region Internal Implementation\n\n/** This is the JavaScript event name we use with dispatchEvent(). */\nconst customDomEventName = \"rockMessage\";\n\n/**\n * The main browser bus implementation. This uses a shared method to publish\n * and subscribe to messages such that if you create two BrowserBus instances on\n * the same page they will still be able to talk to each other.\n *\n * However, they will not be able to talk to instances on other pages such as\n * in other browser tabs.\n */\nexport class BrowserBus {\n    /** The registered handlers that will potentially be invoked. */\n    private handlers: MessageHandler[] = [];\n\n    /** The options we were created with. */\n    private options: BrowserBusOptions;\n\n    /** The event listener. Used so we can remove the listener later. */\n    private eventListener: (e: Event) => void;\n\n    /**\n     * Creates a new instance of the bus and prepares it to receive messages.\n     *\n     * This should be considered an internal constructor and not used by plugins.\n     *\n     * @param options The options that describe how this instance should operate.\n     */\n    constructor(options: BrowserBusOptions) {\n        this.options = { ...options };\n\n        this.eventListener = e => this.onEvent(e);\n        document.addEventListener(customDomEventName, this.eventListener);\n    }\n\n    // #region Private Functions\n\n    /**\n     * Called when an event is received from the document listener.\n     *\n     * @param event The low level JavaScript even that was received.\n     */\n    private onEvent(event: Event): void {\n        if (!(event instanceof CustomEvent)) {\n            return;\n        }\n\n        let message = event.detail as Message;\n\n        // Discard the message if it is not valid.\n        if (!message.name) {\n            return;\n        }\n\n        // If we got a message without a timestamp, it probably came from\n        // plain JavaScript, so set it to 0.\n        if (typeof message.timestamp === \"undefined\") {\n            message = { ...message, timestamp: 0 };\n        }\n\n        this.onMessage(message);\n    }\n\n    /**\n     * Called when a browser bus message is received from the bus.\n     *\n     * @param message The message that was received.\n     */\n    private onMessage(message: Message): void {\n        // Make a copy of the handlers in case our list of handlers if modified\n        // inside a handler.\n        const handlers = [...this.handlers];\n\n        for (const handler of handlers) {\n            try {\n                // Perform all the filtering. We could do this all in one\n                // line but this is easier to read and understand.\n                if (handler.name && handler.name !== message.name) {\n                    continue;\n                }\n\n                if (handler.blockType && !areEqual(handler.blockType, message.blockType)) {\n                    continue;\n                }\n\n                if (handler.block && !areEqual(handler.block, message.block)) {\n                    continue;\n                }\n\n                // All filters passed, execute the callback.\n                handler.callback(message);\n            }\n            catch (e) {\n                // Catch the error and display it so other handlers will still\n                // be checked and called.\n                console.error(e);\n            }\n        }\n    }\n\n    // #endregion\n\n    // #region Public Functions\n\n    /**\n     * Frees up any resources used by this browser bus instance.\n     */\n    public dispose(): void {\n        document.removeEventListener(customDomEventName, this.eventListener);\n        this.handlers.splice(0, this.handlers.length);\n    }\n\n    /**\n     * Publishes a named message without any data.\n     *\n     * @param messageName The name of the message to publish.\n     */\n    public publish(messageName: string): void;\n\n    /**\n     * Publishes a named message with some custom data.\n     *\n     * @param messageName The name of the message to publish.\n     * @param data The custom data to include with the message.\n     */\n    public publish(messageName: string, data: unknown): void;\n\n    /**\n     * Publishes a named message with some custom data.\n     *\n     * @param messageName The name of the message to publish.\n     * @param data The custom data to include with the message.\n     */\n    public publish(messageName: string, data?: unknown): void {\n        this.publishMessage({\n            name: messageName,\n            timestamp: Date.now(),\n            blockType: this.options.blockType,\n            block: this.options.block,\n            data\n        });\n    }\n\n    /**\n     * Publishes a message to the browser bus. No changes are made to the\n     * message object.\n     *\n     * Do not use this message to publish a block message unless you have\n     * manually filled in the {@link Message.blockType} and\n     * {@link Message.block} properties.\n     *\n     * @param message The message to publish.\n     */\n    public publishMessage(message: Message): void {\n        const event = new CustomEvent<Message>(customDomEventName, {\n            detail: message\n        });\n\n        document.dispatchEvent(event);\n    }\n\n    // #endregion\n\n    // #region subscribe()\n\n    /**\n     * Subscribes to the named message from any source.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribe<TData = unknown>(messageName: string, callback: BrowserBusCallback<TData>): void;\n\n    /**\n     * Subscribes to the named message from any source.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribe(messageName: \"page.core.queryStringChanged\", callback: BrowserBusCallback<QueryStringChangedData>): void;\n\n    /**\n     * Subscribes to the named message from any source.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribe(messageName: \"block.core.beginEdit\", callback: BrowserBusCallback<BlockBeginEditData>): void;\n\n    /**\n     * Subscribes to the named message from any source.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribe(messageName: \"block.core.endEdit\", callback: BrowserBusCallback<BlockEndEditData>): void;\n\n    /**\n     * Subscribes to any message that is sent.\n     *\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribe(callback: BrowserBusCallback): void;\n\n    /**\n     * Subscribes to messages from any source.\n     *\n     * @param messageNameOrCallback The name of the message to subscribe to or the callback.\n     * @param callback The callback to invoke when the message is received.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public subscribe(messageNameOrCallback: string | BrowserBusCallback<any>, callback?: BrowserBusCallback<any>): void {\n        let name: string | undefined;\n\n        if (typeof messageNameOrCallback === \"string\") {\n            name = messageNameOrCallback;\n        }\n        else {\n            name = undefined;\n            callback = messageNameOrCallback;\n        }\n\n        if (!callback) {\n            return;\n        }\n\n        this.handlers.push({\n            name,\n            callback\n        });\n    }\n\n    // #endregion\n\n    // #region subscribeToBlockType()\n\n    /**\n     * Subscribes to the named message from any block instance with a matching\n     * block type identifier.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param blockType The identifier of the block type.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribeToBlockType<TData = unknown>(messageName: string, blockType: Guid, callback: BrowserBusCallback<TData>): void;\n\n    /**\n     * Subscribes to the named message from any block instance with a matching\n     * block type identifier.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param blockType The identifier of the block type.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribeToBlockType(messageName: \"block.core.beginEdit\", blockType: Guid, callback: BrowserBusCallback<BlockBeginEditData>): void;\n\n    /**\n     * Subscribes to the named message from any block instance with a matching\n     * block type identifier.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param blockType The identifier of the block type.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribeToBlockType(messageName: \"block.core.endEdit\", blockType: Guid, callback: BrowserBusCallback<BlockEndEditData>): void;\n\n    /**\n     * Subscribes to any message that is sent from any block instance with a\n     * matching block type identifier.\n     *\n     * @param blockType The identifier of the block type.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribeToBlockType(blockType: Guid, callback: BrowserBusCallback): void;\n\n    /**\n     * Subscribes to messages from any block instance with a matching block\n     * type identifier.\n     *\n     * @param messageNameOrBlockType The name of the message to subscribe to or the block type.\n     * @param blockTypeOrCallback The block type or the callback function.\n     * @param callback The callback to invoke when the message is received.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public subscribeToBlockType(messageNameOrBlockType: string | Guid, blockTypeOrCallback: Guid | BrowserBusCallback<any>, callback?: BrowserBusCallback<any>): void {\n        let name: string | undefined;\n        let blockType: Guid;\n\n        if (typeof blockTypeOrCallback === \"string\") {\n            name = messageNameOrBlockType;\n            blockType = blockTypeOrCallback;\n        }\n        else {\n            blockType = messageNameOrBlockType;\n            callback = blockTypeOrCallback;\n        }\n\n        if (!blockType || !callback) {\n            return;\n        }\n\n        this.handlers.push({\n            name,\n            blockType,\n            callback\n        });\n    }\n\n    // #endregion\n\n    // #region subscribeToBlock()\n\n    /**\n     * Subscribes to the named message from a single block instance.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param block The identifier of the block.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribeToBlock<TData = unknown>(messageName: string, block: Guid, callback: BrowserBusCallback<TData>): void;\n\n    /**\n     * Subscribes to the named message from a single block instance.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param block The identifier of the block.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribeToBlock(messageName: \"block.core.beginEdit\", block: Guid, callback: BrowserBusCallback<BlockBeginEditData>): void;\n\n    /**\n     * Subscribes to the named message from a single block instance.\n     *\n     * @param messageName The name of the message to subscribe to.\n     * @param block The identifier of the block.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribeToBlock(messageName: \"block.core.endEdit\", block: Guid, callback: BrowserBusCallback<BlockEndEditData>): void;\n\n    /**\n     * Subscribes to any message that is sent from a single block instance.\n     *\n     * @param block The identifier of the block.\n     * @param callback The callback to invoke when the message is received.\n     */\n    public subscribeToBlock(block: Guid, callback: BrowserBusCallback): void;\n\n    /**\n     * Subscribes to messages from a single block instance.\n     *\n     * @param messageNameOrBlock The name of the message to subscribe to or the block.\n     * @param blockOrCallback The block or the callback function.\n     * @param callback The callback to invoke when the message is received.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public subscribeToBlock(messageNameOrBlock: string | Guid, blockOrCallback: Guid | BrowserBusCallback<any>, callback?: BrowserBusCallback<any>): void {\n        let name: string | undefined;\n        let block: Guid;\n\n        if (typeof blockOrCallback === \"string\") {\n            name = messageNameOrBlock;\n            block = blockOrCallback;\n        }\n        else {\n            block = messageNameOrBlock;\n            callback = blockOrCallback;\n        }\n\n        if (!block || !callback) {\n            return;\n        }\n\n        this.handlers.push({\n            name,\n            block,\n            callback\n        });\n    }\n\n    // #endregion\n}\n\n// #endregion\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { BlockEvent, InvokeBlockActionFunc, SecurityGrant } from \"@Obsidian/Types/Utility/block\";\nimport { IBlockPersonPreferencesProvider, IPersonPreferenceCollection } from \"@Obsidian/Types/Core/personPreferences\";\nimport { ExtendedRef } from \"@Obsidian/Types/Utility/component\";\nimport { DetailBlockBox } from \"@Obsidian/ViewModels/Blocks/detailBlockBox\";\nimport { inject, provide, Ref, ref, watch } from \"vue\";\nimport { RockDateTime } from \"./rockDateTime\";\nimport { Guid } from \"@Obsidian/Types\";\nimport { HttpBodyData, HttpPostFunc, HttpResult } from \"@Obsidian/Types/Utility/http\";\nimport { BlockActionContextBag } from \"@Obsidian/ViewModels/Blocks/blockActionContextBag\";\nimport { ValidPropertiesBox } from \"@Obsidian/ViewModels/Utility/validPropertiesBox\";\nimport { IEntity } from \"@Obsidian/ViewModels/entity\";\nimport { debounce } from \"./util\";\nimport { BrowserBus, useBrowserBus } from \"./browserBus\";\n\nconst blockReloadSymbol = Symbol();\nconst configurationValuesChangedSymbol = Symbol();\nconst staticContentSymbol = Symbol(\"static-content\");\nconst blockBrowserBusSymbol = Symbol(\"block-browser-bus\");\n\n// TODO: Change these to use symbols\n\n/**\n * Maps the block configuration values to the expected type.\n *\n * @returns The configuration values for the block.\n */\nexport function useConfigurationValues<T>(): T {\n    const result = inject<Ref<T>>(\"configurationValues\");\n\n    if (result === undefined) {\n        throw \"Attempted to access block configuration outside of a RockBlock.\";\n    }\n\n    return result.value;\n}\n\n/**\n * Gets the function that will be used to invoke block actions.\n *\n * @returns An instance of @see {@link InvokeBlockActionFunc}.\n */\nexport function useInvokeBlockAction(): InvokeBlockActionFunc {\n    const result = inject<InvokeBlockActionFunc>(\"invokeBlockAction\");\n\n    if (result === undefined) {\n        throw \"Attempted to access block action invocation outside of a RockBlock.\";\n    }\n\n    return result;\n}\n\n/**\n * Gets the function that will return the URL for a block action.\n *\n * @returns A function that can be called to determine the URL for a block action.\n */\nexport function useBlockActionUrl(): (actionName: string) => string {\n    const result = inject<(actionName: string) => string>(\"blockActionUrl\");\n\n    if (result === undefined) {\n        throw \"Attempted to access block action URL outside of a RockBlock.\";\n    }\n\n    return result;\n}\n\n/**\n * Creates a function that can be provided to the block that allows calling\n * block actions.\n *\n * @private This should not be used by plugins.\n *\n * @param post The function to handle the post operation.\n * @param pageGuid The unique identifier of the page.\n * @param blockGuid The unique identifier of the block.\n * @param pageParameters The parameters to include with the block action calls.\n *\n * @returns A function that can be used to provide the invoke block action.\n */\nexport function createInvokeBlockAction(post: HttpPostFunc, pageGuid: Guid, blockGuid: Guid, pageParameters: Record<string, string>, interactionGuid: Guid): InvokeBlockActionFunc {\n    async function invokeBlockAction<T>(actionName: string, data: HttpBodyData | undefined = undefined, actionContext: BlockActionContextBag | undefined = undefined): Promise<HttpResult<T>> {\n        let context: BlockActionContextBag = {};\n\n        if (actionContext) {\n            context = { ...actionContext };\n        }\n\n        context.pageParameters = pageParameters;\n        context.interactionGuid = interactionGuid;\n\n        return await post<T>(`/api/v2/BlockActions/${pageGuid}/${blockGuid}/${actionName}`, undefined, {\n            __context: context,\n            ...data\n        });\n    }\n\n    return invokeBlockAction;\n}\n\n/**\n * Provides the reload block callback function for a block. This is an internal\n * method and should not be used by plugins.\n *\n * @param callback The callback that will be called when a block wants to reload itself.\n */\nexport function provideReloadBlock(callback: () => void): void {\n    provide(blockReloadSymbol, callback);\n}\n\n/**\n * Gets a function that can be called when a block wants to reload itself.\n *\n * @returns A function that will cause the block component to be reloaded.\n */\nexport function useReloadBlock(): () => void {\n    return inject<() => void>(blockReloadSymbol, () => {\n        // Intentionally blank, do nothing by default.\n    });\n}\n\n/**\n * Provides the data for a block to be notified when its configuration values\n * have changed. This is an internal method and should not be used by plugins.\n *\n * @returns An object with an invoke and reset function.\n */\nexport function provideConfigurationValuesChanged(): { invoke: () => void, reset: () => void } {\n    const callbacks: (() => void)[] = [];\n\n    provide(configurationValuesChangedSymbol, callbacks);\n\n    return {\n        invoke: (): void => {\n            for (const c of callbacks) {\n                c();\n            }\n        },\n\n        reset: (): void => {\n            callbacks.splice(0, callbacks.length);\n        }\n    };\n}\n\n/**\n * Registered a function to be called when the block configuration values have\n * changed.\n *\n * @param callback The function to be called when the configuration values have changed.\n */\nexport function onConfigurationValuesChanged(callback: () => void): void {\n    const callbacks = inject<(() => void)[]>(configurationValuesChangedSymbol);\n\n    if (callbacks !== undefined) {\n        callbacks.push(callback);\n    }\n}\n\n/**\n * Provides the static content that the block provided on the server.\n *\n * @param content The static content from the server.\n */\nexport function provideStaticContent(content: Ref<Node[]>): void {\n    provide(staticContentSymbol, content);\n}\n\n/**\n * Gets the static content that was provided by the block on the server.\n *\n * @returns A string of HTML content or undefined.\n */\nexport function useStaticContent(): Node[] {\n    const content = inject<Ref<Node[]>>(staticContentSymbol);\n\n    if (!content) {\n        return [];\n    }\n\n    return content.value;\n}\n\n/**\n * Provides the browser bus configured to publish messages for the current\n * block.\n *\n * @param bus The browser bus.\n */\nexport function provideBlockBrowserBus(bus: BrowserBus): void {\n    provide(blockBrowserBusSymbol, bus);\n}\n\n/**\n * Gets the browser bus configured for use by the current block. If available\n * this will be properly configured to publish messages with the correct block\n * and block type. If this is called outside the context of a block then a\n * generic use {@link BrowserBus} will be returned.\n *\n * @returns An instance of {@link BrowserBus}.\n */\nexport function useBlockBrowserBus(): BrowserBus {\n    return inject<BrowserBus>(blockBrowserBusSymbol, () => useBrowserBus(), true);\n}\n\n\n/**\n * A type that returns the keys of a child property.\n */\ntype ChildKeys<T extends Record<string, unknown>, PropertyName extends string> = keyof NonNullable<T[PropertyName]> & string;\n\n/**\n * A valid properties box that uses the specified name for the content bag.\n */\ntype ValidPropertiesSettingsBox = {\n    validProperties?: string[] | null;\n} & {\n    settings?: Record<string, unknown> | null;\n};\n\n/**\n * Sets the a value for a custom settings box. This will set the value and then\n * add the property name to the list of valid properties.\n *\n * @param box The box whose custom setting value will be set.\n * @param propertyName The name of the custom setting property to set.\n * @param value The new value of the custom setting.\n */\nexport function setCustomSettingsBoxValue<T extends ValidPropertiesSettingsBox, S extends NonNullable<T[\"settings\"]>, K extends ChildKeys<T, \"settings\">>(box: T, propertyName: K, value: S[K]): void {\n    if (!box.settings) {\n        box.settings = {} as Record<string, unknown>;\n    }\n\n    box.settings[propertyName] = value;\n\n    if (!box.validProperties) {\n        box.validProperties = [];\n    }\n\n    if (!box.validProperties.includes(propertyName)) {\n        box.validProperties.push(propertyName);\n    }\n}\n\n/**\n * Sets the a value for a property box. This will set the value and then\n * add the property name to the list of valid properties.\n *\n * @param box The box whose property value will be set.\n * @param propertyName The name of the property on the bag to set.\n * @param value The new value of the property.\n */\nexport function setPropertiesBoxValue<T extends Record<string, unknown>, K extends keyof T & string>(box: ValidPropertiesBox<T>, propertyName: K, value: T[K]): void {\n    if (!box.bag) {\n        box.bag = {} as Record<string, unknown> as T;\n    }\n\n    box.bag[propertyName] = value;\n\n    if (!box.validProperties) {\n        box.validProperties = [];\n    }\n\n    if (!box.validProperties.some(p => p.toLowerCase() === propertyName.toLowerCase())) {\n        box.validProperties.push(propertyName);\n    }\n}\n\n/**\n * Dispatches a block event to the document.\n *\n * @deprecated Do not use this function anymore, it will be removed in the future.\n * Use the BrowserBus instead.\n *\n * @param eventName The name of the event to be dispatched.\n * @param eventData The custom data to be attached to the event.\n *\n * @returns true if preventDefault() was called on the event, otherwise false.\n */\nexport function dispatchBlockEvent(eventName: string, blockGuid: Guid, eventData?: unknown): boolean {\n    const ev = new CustomEvent(eventName, {\n        cancelable: true,\n        detail: {\n            guid: blockGuid,\n            data: eventData\n        }\n    });\n\n    return document.dispatchEvent(ev);\n}\n\n/**\n * Tests if the given event is a custom block event. This does not ensure\n * that the event data is the correct type, only the event itself.\n *\n * @param event The event to be tested.\n *\n * @returns true if the event is a block event.\n */\nexport function isBlockEvent<TData = undefined>(event: Event): event is CustomEvent<BlockEvent<TData>> {\n    return event instanceof CustomEvent\n        && typeof event.detail === \"object\"\n        && \"guid\" in event.detail\n        && \"data\" in event.detail;\n}\n\n// #region Entity Detail Blocks\n\nconst entityTypeNameSymbol = Symbol(\"EntityTypeName\");\nconst entityTypeGuidSymbol = Symbol(\"EntityTypeGuid\");\n\ntype UseEntityDetailBlockOptions = {\n    /** The block configuration. */\n    blockConfig: Record<string, unknown>;\n\n    /**\n     * The entity that will be used by the block, this will cause the\n     * onPropertyChanged logic to be generated.\n     */\n    entity?: Ref<ValidPropertiesBox<IEntity>>;\n};\n\ntype UseEntityDetailBlockResult = {\n    /** The onPropertyChanged handler for the edit panel. */\n    onPropertyChanged?(propertyName: string): void;\n};\n\n/**\n * Performs any framework-level initialization of an entity detail block.\n *\n * @param options The options to use when initializing the detail block logic.\n *\n * @returns An object that contains information which can be used by the block.\n */\nexport function useEntityDetailBlock(options: UseEntityDetailBlockOptions): UseEntityDetailBlockResult {\n    const securityGrant = getSecurityGrant(options.blockConfig.securityGrantToken as string);\n\n    provideSecurityGrant(securityGrant);\n\n    if (options.blockConfig.entityTypeName) {\n        provideEntityTypeName(options.blockConfig.entityTypeName as string);\n    }\n\n    if (options.blockConfig.entityTypeGuid) {\n        provideEntityTypeGuid(options.blockConfig.entityTypeGuid as Guid);\n    }\n\n    const entity = options.entity;\n\n    const result: Record<string, unknown> = {};\n\n    if (entity) {\n        const invokeBlockAction = useInvokeBlockAction();\n        const refreshAttributesDebounce = debounce(() => refreshEntityDetailAttributes(entity, invokeBlockAction), undefined, true);\n\n        result.onPropertyChanged = (propertyName: string): void => {\n            // If we don't have any qualified attribute properties or this property\n            // is not one of them then do nothing.\n            if (!options.blockConfig.qualifiedAttributeProperties || !(options.blockConfig.qualifiedAttributeProperties as string[]).some(n => n.toLowerCase() === propertyName.toLowerCase())) {\n                return;\n            }\n\n            refreshAttributesDebounce();\n        };\n    }\n\n    return result;\n}\n\n/**\n * Provides the entity type name to child components.\n *\n * @param name The entity type name in PascalCase, such as `GroupMember`.\n */\nexport function provideEntityTypeName(name: string): void {\n    provide(entityTypeNameSymbol, name);\n}\n\n/**\n * Gets the entity type name provided from a parent component.\n *\n * @returns The entity type name in PascalCase, such as `GroupMember` or undefined.\n */\nexport function useEntityTypeName(): string | undefined {\n    return inject<string | undefined>(entityTypeNameSymbol, undefined);\n}\n\n/**\n * Provides the entity type unique identifier to child components.\n *\n * @param guid The entity type unique identifier.\n */\nexport function provideEntityTypeGuid(guid: Guid): void {\n    provide(entityTypeGuidSymbol, guid);\n}\n\n/**\n * Gets the entity type unique identifier provided from a parent component.\n *\n * @returns The entity type unique identifier or undefined.\n */\nexport function useEntityTypeGuid(): Guid | undefined {\n    return inject<string | undefined>(entityTypeGuidSymbol, undefined);\n}\n\n// #endregion\n\n// #region Security Grants\n\nconst securityGrantSymbol = Symbol();\n\n/**\n * Use a security grant token value provided by the server. This returns a reference\n * to the actual value and will automatically handle renewing the token and updating\n * the value. This function is meant to be used by blocks. Controls should use the\n * useSecurityGrant() function instead.\n *\n * @param token The token provided by the server.\n *\n * @returns A reference to the security grant that will be updated automatically when it has been renewed.\n */\nexport function getSecurityGrant(token: string | null | undefined): SecurityGrant {\n    // Use || so that an empty string gets converted to null.\n    const tokenRef = ref(token || null);\n    const invokeBlockAction = useInvokeBlockAction();\n    let renewalTimeout: NodeJS.Timeout | null = null;\n\n    // Internal function to renew the token and re-schedule renewal.\n    const renewToken = async (): Promise<void> => {\n        const result = await invokeBlockAction<string>(\"RenewSecurityGrantToken\");\n\n        if (result.isSuccess && result.data) {\n            tokenRef.value = result.data;\n\n            scheduleRenewal();\n        }\n    };\n\n    // Internal function to schedule renewal based on the expiration date in\n    // the existing token. Renewal happens 15 minutes before expiration.\n    const scheduleRenewal = (): void => {\n        // Cancel any existing renewal timer.\n        if (renewalTimeout !== null) {\n            clearTimeout(renewalTimeout);\n            renewalTimeout = null;\n        }\n\n        // No token, nothing to do.\n        if (tokenRef.value === null) {\n            return;\n        }\n\n        const segments = tokenRef.value?.split(\";\");\n\n        // Token not in expected format.\n        if (segments.length !== 3 || segments[0] !== \"1\") {\n            return;\n        }\n\n        const expiresDateTime = RockDateTime.parseISO(segments[1]);\n\n        // Could not parse expiration date and time.\n        if (expiresDateTime === null) {\n            return;\n        }\n\n        const renewTimeout = expiresDateTime.addMinutes(-15).toMilliseconds() - RockDateTime.now().toMilliseconds();\n\n        // Renewal request would be in the past, ignore.\n        if (renewTimeout < 0) {\n            return;\n        }\n\n        // Schedule the renewal task to happen 15 minutes before expiration.\n        renewalTimeout = setTimeout(renewToken, renewTimeout);\n    };\n\n    scheduleRenewal();\n\n    return {\n        token: tokenRef,\n        updateToken(newToken) {\n            tokenRef.value = newToken || null;\n            scheduleRenewal();\n        }\n    };\n}\n\n/**\n * Provides the security grant to child components to use in their API calls.\n *\n * @param grant The grant to provide to child components.\n */\nexport function provideSecurityGrant(grant: SecurityGrant): void {\n    provide(securityGrantSymbol, grant);\n}\n\n/**\n * Uses a previously provided security grant token by a parent component.\n * This function is meant to be used by controls that need to obtain a security\n * grant from a parent component.\n *\n * @returns A string reference that contains the security grant token.\n */\nexport function useSecurityGrantToken(): Ref<string | null> {\n    const grant = inject<SecurityGrant>(securityGrantSymbol);\n\n    return grant ? grant.token : ref(null);\n}\n\n// #endregion\n\n// #region Extended References\n\n/** An emit object that conforms to having a propertyChanged event. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PropertyChangedEmitFn<E extends \"propertyChanged\"> = E extends Array<infer EE> ? (event: EE, ...args: any[]) => void : (event: E, ...args: any[]) => void;\n\n/**\n * Watches for changes to the given Ref objects and emits a special event to\n * indicate that a given property has changed.\n *\n * @param propertyRefs The ExtendedRef objects to watch for changes.\n * @param emit The emit function for the component.\n */\nexport function watchPropertyChanges<E extends \"propertyChanged\">(propertyRefs: ExtendedRef<unknown>[], emit: PropertyChangedEmitFn<E>): void {\n    for (const propRef of propertyRefs) {\n        watch(propRef, () => {\n            if (propRef.context.propertyName) {\n                emit(\"propertyChanged\", propRef.context.propertyName);\n            }\n        });\n    }\n}\n\n/**\n * Requests an updated attribute list from the server based on the\n * current UI selections made.\n *\n * @param box The valid properties box that will be used to determine current\n * property values and then updated with the new attributes and values.\n * @param invokeBlockAction The function to use when calling the block action.\n */\nasync function refreshEntityDetailAttributes<TEntityBag extends IEntity>(box: Ref<ValidPropertiesBox<TEntityBag>>, invokeBlockAction: InvokeBlockActionFunc): Promise<void> {\n    const result = await invokeBlockAction<ValidPropertiesBox<TEntityBag>>(\"RefreshAttributes\", {\n        box: box.value\n    });\n\n    if (result.isSuccess) {\n        if (result.statusCode === 200 && result.data && box.value) {\n            const newBox: ValidPropertiesBox<TEntityBag> = {\n                ...box.value,\n                bag: {\n                    ...box.value.bag as TEntityBag,\n                    attributes: result.data.bag?.attributes,\n                    attributeValues: result.data.bag?.attributeValues\n                }\n            };\n\n            box.value = newBox;\n        }\n    }\n}\n\n/**\n * Requests an updated attribute list from the server based on the\n * current UI selections made.\n *\n * @param bag The entity bag that will be used to determine current property values\n * and then updated with the new attributes and values.\n * @param validProperties The properties that are considered valid on the bag when\n * the server will read the bag.\n * @param invokeBlockAction The function to use when calling the block action.\n */\nexport async function refreshDetailAttributes<TEntityBag>(bag: Ref<TEntityBag>, validProperties: string[], invokeBlockAction: InvokeBlockActionFunc): Promise<void> {\n    const data: DetailBlockBox<unknown, unknown> = {\n        entity: bag.value,\n        isEditable: true,\n        validProperties: validProperties\n    };\n\n    const result = await invokeBlockAction<DetailBlockBox<Record<string, unknown>, unknown>>(\"RefreshAttributes\", {\n        box: data\n    });\n\n    if (result.isSuccess) {\n        if (result.statusCode === 200 && result.data && bag.value) {\n            const newBag: TEntityBag = {\n                ...bag.value,\n                attributes: result.data.entity?.attributes,\n                attributeValues: result.data.entity?.attributeValues\n            };\n\n            bag.value = newBag;\n        }\n    }\n}\n\n// #endregion Extended Refs\n\n// #region Block and BlockType Guid\n\nconst blockGuidSymbol = Symbol(\"block-guid\");\nconst blockTypeGuidSymbol = Symbol(\"block-type-guid\");\n\n/**\n * Provides the block unique identifier to all child components.\n * This is an internal method and should not be used by plugins.\n *\n * @param blockGuid The unique identifier of the block.\n */\nexport function provideBlockGuid(blockGuid: string): void {\n    provide(blockGuidSymbol, blockGuid);\n}\n\n/**\n * Gets the unique identifier of the current block in this component chain.\n *\n * @returns The unique identifier of the block.\n */\nexport function useBlockGuid(): Guid | undefined {\n    return inject<Guid>(blockGuidSymbol);\n}\n\n/**\n * Provides the block type unique identifier to all child components.\n * This is an internal method and should not be used by plugins.\n *\n * @param blockTypeGuid The unique identifier of the block type.\n */\nexport function provideBlockTypeGuid(blockTypeGuid: string): void {\n    provide(blockTypeGuidSymbol, blockTypeGuid);\n}\n\n/**\n * Gets the block type unique identifier of the current block in this component\n * chain.\n *\n * @returns The unique identifier of the block type.\n */\nexport function useBlockTypeGuid(): Guid | undefined {\n    return inject<Guid>(blockTypeGuidSymbol);\n}\n\n// #endregion\n\n// #region Person Preferences\n\nconst blockPreferenceProviderSymbol = Symbol();\n\n/** An no-op implementation of {@link IPersonPreferenceCollection}. */\nconst emptyPreferences: IPersonPreferenceCollection = {\n    getValue(): string {\n        return \"\";\n    },\n    setValue(): void {\n        // Intentionally empty.\n    },\n    getKeys(): string[] {\n        return [];\n    },\n    containsKey(): boolean {\n        return false;\n    },\n    save(): Promise<void> {\n        return Promise.resolve();\n    },\n    withPrefix(): IPersonPreferenceCollection {\n        return emptyPreferences;\n    },\n    on(): void {\n        // Intentionally empty.\n    },\n    off(): void {\n        // Intentionally empty.\n    }\n};\n\nconst emptyPreferenceProvider: IBlockPersonPreferencesProvider = {\n    blockPreferences: emptyPreferences,\n    getGlobalPreferences() {\n        return Promise.resolve(emptyPreferences);\n    },\n    getEntityPreferences() {\n        return Promise.resolve(emptyPreferences);\n    }\n};\n\n/**\n * Provides the person preferences provider that will be used by components\n * to access the person preferences associated with their block.\n *\n * @private This is an internal method and should not be used by plugins.\n *\n * @param blockGuid The unique identifier of the block.\n */\nexport function providePersonPreferences(provider: IBlockPersonPreferencesProvider): void {\n    provide(blockPreferenceProviderSymbol, provider);\n}\n\n/**\n * Gets the person preference provider that can be used to access block\n * preferences as well as other preferences.\n *\n * @returns An object that implements {@link IBlockPersonPreferencesProvider}.\n */\nexport function usePersonPreferences(): IBlockPersonPreferencesProvider {\n    return inject<IBlockPersonPreferencesProvider>(blockPreferenceProviderSymbol)\n        ?? emptyPreferenceProvider;\n}\n\n// #endregion\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n/**\n * Transform the value into true, false, or null\n * @param val\n */\nexport function asBooleanOrNull(val: unknown): boolean | null {\n    if (val === undefined || val === null) {\n        return null;\n    }\n\n    if (typeof val === \"boolean\") {\n        return val;\n    }\n\n    if (typeof val === \"string\") {\n        const asString = (val || \"\").trim().toLowerCase();\n\n        if (!asString) {\n            return null;\n        }\n\n        return [\"true\", \"yes\", \"t\", \"y\", \"1\"].indexOf(asString) !== -1;\n    }\n\n    if (typeof val === \"number\") {\n        return !!val;\n    }\n\n    return null;\n}\n\n/**\n * Transform the value into true or false\n * @param val\n */\nexport function asBoolean(val: unknown): boolean {\n    return !!asBooleanOrNull(val);\n}\n\n/** Transform the value into the strings \"Yes\", \"No\", or null */\nexport function asYesNoOrNull(val: unknown): \"Yes\" | \"No\" | null {\n    const boolOrNull = asBooleanOrNull(val);\n\n    if (boolOrNull === null) {\n        return null;\n    }\n\n    return boolOrNull ? \"Yes\" : \"No\";\n}\n\n/** Transform the value into the strings \"True\", \"False\", or null */\nexport function asTrueFalseOrNull(val: unknown): \"True\" | \"False\" | null {\n    const boolOrNull = asBooleanOrNull(val);\n\n    if (boolOrNull === null) {\n        return null;\n    }\n\n    return boolOrNull ? \"True\" : \"False\";\n}\n\n/** Transform the value into the strings \"True\" if truthy or \"False\" if falsey */\nexport function asTrueOrFalseString(val: unknown): \"True\" | \"False\" {\n    const boolOrNull = asBooleanOrNull(val);\n\n    return boolOrNull ? \"True\" : \"False\";\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport { RockDateTime } from \"./rockDateTime\";\n\n\ntype CacheEntry<T> = {\n    value: T;\n    expiration: number;\n};\n\nconst keyPrefix = \"ObsidianCache_\";\n\n/**\n* Stores the value using the given key. The cache will expire at the expiration or in\n* 1 minute if none is provided\n* @param key Unique key to store the value under\n* @param value Value to store\n* @param ttl Time to live in seconds (how long the cached value is valid for). Defaults to 60 if not provided.\n*/\nfunction set<T>(key: string, value: T, ttl: number = 60): void {\n    // Can be removed in Rock v18\n    if (typeof ttl !== \"number\") {\n        ttl = 60;\n        console.warn(\"Cache.set has been changed to use a Time-To-Live instead of an expiration date/time. Please update your code to use a Time-To-Live.\");\n    }\n\n    const expiration = RockDateTime.now().addSeconds(ttl).toMilliseconds();\n\n    const cache: CacheEntry<T> = { expiration, value };\n    const cacheJson = JSON.stringify(cache);\n    sessionStorage.setItem(keyPrefix + key, cacheJson);\n}\n\n/**\n * Gets a stored cache value if there is one that has not yet expired.\n * @param key\n */\nfunction get<T>(key: string): T | null {\n    const cacheJson = sessionStorage.getItem(keyPrefix + key);\n\n    if (!cacheJson) {\n        return null;\n    }\n\n    const cache = JSON.parse(cacheJson) as CacheEntry<T>;\n\n    if (!cache || !cache.expiration) {\n        return null;\n    }\n\n    if (cache.expiration < RockDateTime.now().toMilliseconds()) {\n        return null;\n    }\n\n    return cache.value;\n}\n\n// Stores promises that are in flight so that if a second fetch is fired before the first resolves\n// (before value gets cached), just return the promise that's already in flight to prevent duplicate calls\nconst promiseCache: Record<string, Promise<unknown> | undefined> = {};\n\n/**\n * Since Promises can't be cached, we need to store them in memory until we get the result back. This wraps\n * a function in another function that returns a promise and...\n * - If there's a cached result, return it\n * - Otherwise if there's a cached Promise, return it\n * - Otherwise call the given function and cache it's promise and return it. Once the the Promise resolves, cache its result\n *\n * @param key Key for identifying the cached values\n * @param fn Function that returns a Promise that we want to cache the value of\n * @param ttl Time to live in seconds (how long the cached value is valid for)\n *\n * @returns A function that wraps the given function, that can be called instead of the given function and that will use the cache when appropriate.\n */\nfunction cachePromiseFactory<T>(key: string, fn: () => Promise<T>, ttl?: number): () => Promise<T> {\n    return async function (): Promise<T> {\n        // Can be removed in Rock v18\n        if (typeof ttl !== \"number\" || ttl !== undefined) {\n            console.warn(\"Cache.cachePromiseFactory has been changed to use a Time-To-Live instead of an expiration date/time. Please update your code to use a Time-To-Live.\");\n        }\n\n        // If it's cached, grab it\n        const cachedResult = get<T>(key);\n        if (cachedResult) {\n            return cachedResult;\n        }\n\n        // If it's not cached yet but we've already started fetching it\n        // (it's not cached until we receive the results), return the existing Promise\n        if (promiseCache[key]) {\n            return promiseCache[key] as Promise<T>;\n        }\n\n        // Not stored anywhere, so fetch it and save it on the stored Promise for the next call\n        promiseCache[key] = fn();\n\n        // Once it's resolved, cache the result\n        promiseCache[key]?.then((result) => {\n            set(key, result, ttl);\n            delete promiseCache[key];\n            return result;\n        }).catch((e: Error) => {\n            // Something's wrong, let's get rid of the stored promise, so we can try again.\n            delete promiseCache[key];\n            throw e;\n        });\n\n        return promiseCache[key] as Promise<T>;\n    };\n}\n\n\nexport default {\n    set,\n    get,\n    cachePromiseFactory\n};\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Guid } from \"@Obsidian/Types\";\nimport { newGuid } from \"./guid\";\nimport { inject, nextTick, provide } from \"vue\";\n\nconst suspenseSymbol = Symbol(\"RockSuspense\");\n\n/**\n * Defines the interface for a provider of suspense monitoring. These are used\n * to track asynchronous operations that components may be performing so the\n * watching component can perform an operation once all pending operations\n * have completed.\n */\nexport interface ISuspenseProvider {\n    /**\n     * Adds a new operation identified by the promise. When the promise\n     * either resolves or fails the operation is considered completed.\n     *\n     * @param operation The promise that represents the operation.\n     */\n    addOperation(operation: Promise<unknown>): void;\n\n    /**\n     * Notes that an asynchronous operation has started on a child component.\n     *\n     * @param key The key that identifies the operation.\n     */\n    startAsyncOperation(key: Guid): void;\n\n    /**\n     * Notes that an asynchrounous operation has completed on a child component.\n     *\n     * @param key The key that was previously passed to startAsyncOperation.\n     */\n    completeAsyncOperation(key: Guid): void;\n}\n\n/**\n * A basic provider that handles the guts of a suspense provider. This can be\n * used by components that need to know when child components have completed\n * their work.\n */\nexport class BasicSuspenseProvider implements ISuspenseProvider {\n    private readonly operationKey: Guid;\n\n    private readonly parentProvider: ISuspenseProvider | undefined;\n\n    private readonly pendingOperations: Guid[];\n\n    private finishedHandlers: (() => void)[];\n\n    /**\n     * Creates a new suspense provider.\n     *\n     * @param parentProvider The parent suspense provider that will be notified of pending operations.\n     */\n    constructor(parentProvider: ISuspenseProvider | undefined) {\n        this.operationKey = newGuid();\n        this.parentProvider = parentProvider;\n        this.pendingOperations = [];\n        this.finishedHandlers = [];\n    }\n\n    /**\n     * Called when all pending operations are complete. Notifies all handlers\n     * that the pending operations have completed as well as the parent provider.\n     */\n    private allOperationsComplete(): void {\n        // Wait until the next Vue tick in case a new async operation started.\n        // This can happen, for example, with defineAsyncComponent(). It will\n        // complete its async operation (loading the JS file) and then the\n        // component defined in the file might start an async operation. This\n        // prevents us from completing too soon.\n        nextTick(() => {\n            // Verify nothing started a new asynchronous operation while we\n            // we waiting for the next tick.\n            if (this.pendingOperations.length !== 0) {\n                return;\n            }\n\n            // Notify all pending handlers that all operations completed.\n            for (const handler of this.finishedHandlers) {\n                handler();\n            }\n            this.finishedHandlers = [];\n\n            // Notify the parent that our own pending operation has completed.\n            if (this.parentProvider) {\n                this.parentProvider.completeAsyncOperation(this.operationKey);\n            }\n        });\n    }\n\n    /**\n     * Adds a new operation identified by the promise. When the promise\n     * either resolves or fails the operation is considered completed.\n     *\n     * @param operation The promise that represents the operation.\n     */\n    public addOperation(operation: Promise<unknown>): void {\n        const operationKey = newGuid();\n\n        this.startAsyncOperation(operationKey);\n\n        operation.then(() => this.completeAsyncOperation(operationKey))\n            .catch(() => this.completeAsyncOperation(operationKey));\n    }\n\n    /**\n     * Notes that an asynchronous operation has started on a child component.\n     *\n     * @param key The key that identifies the operation.\n     */\n    public startAsyncOperation(key: Guid): void {\n        this.pendingOperations.push(key);\n\n        // If this is the first operation we started, notify the parent provider.\n        if (this.pendingOperations.length === 1 && this.parentProvider) {\n            this.parentProvider.startAsyncOperation(this.operationKey);\n        }\n    }\n\n    /**\n     * Notes that an asynchrounous operation has completed on a child component.\n     *\n     * @param key The key that was previously passed to startAsyncOperation.\n     */\n    public completeAsyncOperation(key: Guid): void {\n        const index = this.pendingOperations.indexOf(key);\n\n        if (index !== -1) {\n            this.pendingOperations.splice(index, 1);\n        }\n\n        // If this was the last operation then send notifications.\n        if (this.pendingOperations.length === 0) {\n            this.allOperationsComplete();\n        }\n    }\n\n    /**\n     * Checks if this provider has any asynchronous operations that are still\n     * pending completion.\n     *\n     * @returns true if there are pending operations; otherwise false.\n     */\n    public hasPendingOperations(): boolean {\n        return this.pendingOperations.length > 0;\n    }\n\n    /**\n     * Adds a new handler that is called when all pending operations have been\n     * completed. This is a fire-once, meaning the callback will only be called\n     * when the current pending operations have completed. If new operations\n     * begin after the callback is executed it will not be called again unless\n     * it is added with this method again.\n     *\n     * @param callback The function to call when all pending operations have completed.\n     */\n    public addFinishedHandler(callback: () => void): void {\n        this.finishedHandlers.push(callback);\n    }\n}\n\n/**\n * Provides a new suspense provider to any child components.\n *\n * @param provider The provider to make available to child components.\n */\nexport function provideSuspense(provider: ISuspenseProvider): void {\n    provide(suspenseSymbol, provider);\n}\n\n/**\n * Uses the current suspense provider that was defined by any parent component.\n *\n * @returns The suspense provider if one was defined; otherwise undefined.\n */\nexport function useSuspense(): ISuspenseProvider | undefined {\n    return inject<ISuspenseProvider | undefined>(suspenseSymbol, undefined);\n}\n\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport { CurrencyInfoBag } from \"@Obsidian/ViewModels/Rest/Utilities/currencyInfoBag\";\n\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\n// Number.toLocaleString takes the same options as Intl.NumberFormat\n// Most of the options probably won't get used, so just add the ones you need to use to this when needed\ntype NumberFormatOptions = {\n    useGrouping?: boolean // MDN gives other possible values, but TS is complaining that it should only be boolean\n};\n\n/**\n * Get a formatted string.\n * Ex: 10001.2 => 10,001.2\n * @param num\n */\nexport function asFormattedString(num: number | null, digits?: number, options: NumberFormatOptions = {}): string {\n    if (num === null) {\n        return \"\";\n    }\n\n    return num.toLocaleString(\n        \"en-US\",\n        {\n            minimumFractionDigits: digits,\n            maximumFractionDigits: digits ?? 9,\n            ...options\n        }\n    );\n}\n\n/**\n * Get a number value from a formatted string. If the number cannot be parsed, then zero is returned by default.\n * Ex: $1,000.20 => 1000.2\n * @param str\n */\nexport function toNumber(str?: string | number | null): number {\n    return toNumberOrNull(str) || 0;\n}\n\n/**\n * Get a number value from a formatted string. If the number cannot be parsed, then null is returned by default.\n * Ex: $1,000.20 => 1000.2\n * @param str\n */\nexport function toNumberOrNull(str?: string | number | null): number | null {\n    if (str === null || str === undefined || str === \"\") {\n        return null;\n    }\n\n    if (typeof str === \"number\") {\n        return str;\n    }\n\n    const replaced = str.replace(/[$,]/g, \"\");\n    const num = Number(replaced);\n\n    return !isNaN(num) ? num : null;\n}\n\n/**\n * Get a currency value from a string or number. If the number cannot be parsed, then null is returned by default.\n * Ex: 1000.20 => $1,000.20\n * @param value The value to be converted to a currency.\n */\nexport function toCurrencyOrNull(value?: string | number | null, currencyInfo: CurrencyInfoBag | null = null): string | null {\n    if (typeof value === \"string\") {\n        value = toNumberOrNull(value);\n    }\n\n    if (value === null || value === undefined) {\n        return null;\n    }\n    const currencySymbol = currencyInfo?.symbol ?? \"$\";\n    const currencyDecimalPlaces = currencyInfo?.decimalPlaces ?? 2;\n    return `${currencySymbol}${asFormattedString(value, currencyDecimalPlaces)}`;\n}\n\n/**\n * Adds an ordinal suffix.\n * Ex: 1 => 1st\n * @param num\n */\nexport function toOrdinalSuffix(num?: number | null): string {\n    if (!num) {\n        return \"\";\n    }\n\n    const j = num % 10;\n    const k = num % 100;\n\n    if (j == 1 && k != 11) {\n        return num + \"st\";\n    }\n    if (j == 2 && k != 12) {\n        return num + \"nd\";\n    }\n    if (j == 3 && k != 13) {\n        return num + \"rd\";\n    }\n    return num + \"th\";\n}\n\n/**\n * Convert a number to an ordinal.\n * Ex: 1 => first, 10 => tenth\n *\n * Anything larger than 10 will be converted to the number with an ordinal suffix.\n * Ex: 123 => 123rd, 1000 => 1000th\n * @param num\n */\nexport function toOrdinal(num?: number | null): string {\n    if (!num) {\n        return \"\";\n    }\n\n    switch (num) {\n        case 1: return \"first\";\n        case 2: return \"second\";\n        case 3: return \"third\";\n        case 4: return \"fourth\";\n        case 5: return \"fifth\";\n        case 6: return \"sixth\";\n        case 7: return \"seventh\";\n        case 8: return \"eighth\";\n        case 9: return \"ninth\";\n        case 10: return \"tenth\";\n        default: return toOrdinalSuffix(num);\n    }\n}\n\n/**\n * Convert a number to a word.\n * Ex: 1 => \"one\", 10 => \"ten\"\n *\n * Anything larger than 10 will be returned as a number string instead of a word.\n * Ex: 123 => \"123\", 1000 => \"1000\"\n * @param num\n */\nexport function toWord(num?: number | null): string {\n    if (num === null || num === undefined) {\n        return \"\";\n    }\n\n    switch (num) {\n        case 1: return \"one\";\n        case 2: return \"two\";\n        case 3: return \"three\";\n        case 4: return \"four\";\n        case 5: return \"five\";\n        case 6: return \"six\";\n        case 7: return \"seven\";\n        case 8: return \"eight\";\n        case 9: return \"nine\";\n        case 10: return \"ten\";\n        default: return `${num}`;\n    }\n}\n\nexport function zeroPad(num: number, length: number): string {\n    let str = num.toString();\n\n    while (str.length < length) {\n        str = \"0\" + str;\n    }\n\n    return str;\n}\n\nexport function toDecimalPlaces(num: number, decimalPlaces: number): number {\n    decimalPlaces = Math.floor(decimalPlaces); // ensure it's an integer\n\n    return Math.round(num * 10 ** decimalPlaces) / 10 ** decimalPlaces;\n}\n\n/**\n * Returns the string representation of an integer.\n * Ex: 1 => \"1\", 123456 => \"one hundred twenty-three thousand four hundred fifty-six\"\n *\n * Not reliable for numbers in the quadrillions and greater.\n *\n * @example\n * numberToWord(1)      // one\n * numberToWord(2)      // two\n * numberToWord(123456) // one hundred twenty-three thousand four hundred fifty-six\n * @param numb The number for which to get the string representation.\n * @returns \"one\", \"two\", ..., \"one thousand\", ..., (up to the max number allowed for JS).\n */\nexport function toWordFull(numb: number): string {\n    const numberWords = {\n        0: \"zero\",\n        1: \"one\",\n        2: \"two\",\n        3: \"three\",\n        4: \"four\",\n        5: \"five\",\n        6: \"six\",\n        7: \"seven\",\n        8: \"eight\",\n        9: \"nine\",\n        10: \"ten\",\n        11: \"eleven\",\n        12: \"twelve\",\n        13: \"thirteen\",\n        14: \"fourteen\",\n        15: \"fifteen\",\n        16: \"sixteen\",\n        17: \"seventeen\",\n        18: \"eighteen\",\n        19: \"nineteen\",\n        20: \"twenty\",\n        30: \"thirty\",\n        40: \"forty\",\n        50: \"fifty\",\n        60: \"sixty\",\n        70: \"seventy\",\n        80: \"eighty\",\n        90: \"ninety\",\n        100: \"one hundred\",\n        1000: \"one thousand\",\n        1000000: \"one million\",\n        1000000000: \"one billion\",\n        1000000000000: \"one trillion\",\n        1000000000000000: \"one quadrillion\"\n    };\n\n    // Store constants for these since it is hard to distinguish between them at larger numbers.\n    const oneHundred = 100;\n    const oneThousand = 1000;\n    const oneMillion = 1000000;\n    const oneBillion = 1000000000;\n    const oneTrillion = 1000000000000;\n    const oneQuadrillion = 1000000000000000;\n\n    if (numberWords[numb]) {\n        return numberWords[numb];\n    }\n\n    function quadrillionsToWord(numb: number): string {\n        const trillions = trillionsToWord(numb);\n        if (numb >= oneQuadrillion) {\n            const quadrillions = hundredsToWord(Number(numb.toString().slice(-18, -15)));\n            if (trillions) {\n                return `${quadrillions} quadrillion ${trillions}`;\n            }\n            else {\n                return `${quadrillions} quadrillion`;\n            }\n        }\n        else {\n            return trillions;\n        }\n    }\n\n    function trillionsToWord(numb: number): string {\n        numb = Number(numb.toString().slice(-15));\n        const billions = billionsToWord(numb);\n        if (numb >= oneTrillion) {\n            const trillions = hundredsToWord(Number(numb.toString().slice(-15, -12)));\n            if (billions) {\n                return `${trillions} trillion ${billions}`;\n            }\n            else {\n                return `${trillions} trillion`;\n            }\n        }\n        else {\n            return billions;\n        }\n    }\n\n    function billionsToWord(numb: number): string {\n        numb = Number(numb.toString().slice(-12));\n        const millions = millionsToWord(numb);\n        if (numb >= oneBillion) {\n            const billions = hundredsToWord(Number(numb.toString().slice(-12, -9)));\n            if (millions) {\n                return `${billions} billion ${millions}`;\n            }\n            else {\n                return `${billions} billion`;\n            }\n        }\n        else {\n            return millions;\n        }\n    }\n\n    function millionsToWord(numb: number): string {\n        numb = Number(numb.toString().slice(-9));\n        const thousands = thousandsToWord(numb);\n        if (numb >= oneMillion) {\n            const millions = hundredsToWord(Number(numb.toString().slice(-9, -6)));\n            if (thousands) {\n                return `${millions} million ${thousands}`;\n            }\n            else {\n                return `${millions} million`;\n            }\n        }\n        else {\n            return thousands;\n        }\n    }\n\n    function thousandsToWord(numb: number): string {\n        numb = Number(numb.toString().slice(-6));\n        const hundreds = hundredsToWord(numb);\n        if (numb >= oneThousand) {\n            const thousands = hundredsToWord(Number(numb.toString().slice(-6, -3)));\n            if (hundreds) {\n                return `${thousands} thousand ${hundreds}`;\n            }\n            else {\n                return `${thousands} thousandths`;\n            }\n        }\n        else {\n            return hundreds;\n        }\n    }\n\n    function hundredsToWord(numb: number): string {\n        numb = Number(numb.toString().slice(-3));\n\n        if (numberWords[numb]) {\n            return numberWords[numb];\n        }\n\n        const tens = tensToWord(numb);\n\n        if (numb >= oneHundred) {\n            const hundreds = Number(numb.toString().slice(-3, -2));\n            if (tens) {\n                return `${numberWords[hundreds]} hundred ${tens}`;\n            }\n            else {\n                return `${numberWords[hundreds]} hundred`;\n            }\n        }\n        else {\n            return tens;\n        }\n    }\n\n    function tensToWord(numb: number): string {\n        numb = Number(numb.toString().slice(-2));\n\n        if (numberWords[numb]) {\n            return numberWords[numb];\n        }\n\n        const ones = onesToWord(numb);\n\n        if (numb >= 20) {\n            const tens = Number(numb.toString().slice(-2, -1));\n\n            if (ones) {\n                return `${numberWords[tens * 10]}-${ones}`;\n            }\n            else {\n                return numberWords[tens * 10];\n            }\n        }\n        else {\n            return ones;\n        }\n    }\n\n    function onesToWord(numb: number): string {\n        numb = Number(numb.toString().slice(-1));\n        return numberWords[numb];\n    }\n\n    return quadrillionsToWord(numb);\n}\n\nexport default {\n    toOrdinal,\n    toOrdinalSuffix,\n    toNumberOrNull,\n    asFormattedString\n};\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport { AsyncComponentLoader, Component, ComponentPublicInstance, defineAsyncComponent as vueDefineAsyncComponent, ExtractPropTypes, PropType, reactive, ref, Ref, VNode, watch, WatchOptions, render, isVNode, createVNode } from \"vue\";\nimport { deepEqual } from \"./util\";\nimport { useSuspense } from \"./suspense\";\nimport { newGuid } from \"./guid\";\nimport { ControlLazyMode } from \"@Obsidian/Enums/Controls/controlLazyMode\";\nimport { PickerDisplayStyle } from \"@Obsidian/Enums/Controls/pickerDisplayStyle\";\nimport { ExtendedRef, ExtendedRefContext } from \"@Obsidian/Types/Utility/component\";\nimport type { RulesPropType, ValidationRule } from \"@Obsidian/Types/validationRules\";\nimport { toNumberOrNull } from \"./numberUtils\";\n\ntype Prop = { [key: string]: unknown };\ntype PropKey<T extends Prop> = Extract<keyof T, string>;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype EmitFn<E extends `update:${string}`> = E extends Array<infer EE> ? (event: EE, ...args: any[]) => void : (event: E, ...args: any[]) => void;\n\n/**\n * Utility function for when you are using a component that takes a v-model\n * and uses that model as a v-model in that component's template. It creates\n * a new ref that keeps itself up-to-date with the given model and fires an\n * 'update:MODELNAME' event when it gets changed.\n *\n * Ensure the related `props` and `emits` are specified to ensure there are\n * no type issues.\n */\nexport function useVModelPassthrough<T extends Prop, K extends PropKey<T>, E extends `update:${K}`>(props: T, modelName: K, emit: EmitFn<E>, options?: WatchOptions): Ref<T[K]> {\n    const internalValue = ref(props[modelName]) as Ref<T[K]>;\n\n    watch(() => props[modelName], val => updateRefValue(internalValue, val), options);\n    watch(internalValue, val => {\n        if (val !== props[modelName]) {\n            emit(`update:${modelName}`, val);\n        }\n    }, options);\n\n    return internalValue;\n}\n\n/**\n * Utility function for when you are using a component that takes a v-model\n * and uses that model as a v-model in that component's template. It creates\n * a new ref that keeps itself up-to-date with the given model and fires an\n * 'update:MODELNAME' event when it gets changed. It also gives a means of watching\n * the model prop for any changes (verifies that the prop change is different than\n * the current value first)\n *\n * Ensure the related `props` and `emits` are specified to ensure there are\n * no type issues.\n */\nexport function useVModelPassthroughWithPropUpdateCheck<T extends Prop, K extends PropKey<T>, E extends `update:${K}`>(props: T, modelName: K, emit: EmitFn<E>, options?: WatchOptions): [Ref<T[K]>, (fn: () => unknown) => void] {\n    const internalValue = ref(props[modelName]) as Ref<T[K]>;\n    const listeners: (() => void)[] = [];\n\n    watch(() => props[modelName], val => {\n        if (updateRefValue(internalValue, val)) {\n            onPropUpdate();\n        }\n    }, options);\n    watch(internalValue, val => emit(`update:${modelName}`, val), options);\n\n    function onPropUpdate(): void {\n        listeners.forEach(fn => fn());\n    }\n\n    function addPropUpdateListener(fn: () => unknown): void {\n        listeners.push(fn);\n    }\n\n    return [internalValue, addPropUpdateListener];\n}\n\n/**\n * Updates the Ref value, but only if the new value is actually different than\n * the current value. A deep comparison is performed.\n *\n * @param target The target Ref object to be updated.\n * @param value The new value to be assigned to the target.\n *\n * @returns True if the target was updated, otherwise false.\n */\nexport function updateRefValue<T, TV extends T>(target: Ref<T>, value: TV): boolean {\n    if (deepEqual(target.value, value, true)) {\n        return false;\n    }\n\n    target.value = value;\n\n    return true;\n}\n\n/**\n * Defines a component that will be loaded asynchronously. This contains logic\n * to properly work with the RockSuspense control.\n *\n * @param source The function to call to load the component.\n *\n * @returns The component that was loaded.\n */\nexport function defineAsyncComponent<T extends Component = { new(): ComponentPublicInstance }>(source: AsyncComponentLoader<T>): T {\n    return vueDefineAsyncComponent(async () => {\n        const suspense = useSuspense();\n        const operationKey = newGuid();\n\n        suspense?.startAsyncOperation(operationKey);\n        const component = await source();\n        suspense?.completeAsyncOperation(operationKey);\n\n        return component;\n    });\n}\n\n// #region Standard Form Field\n\ntype StandardRockFormFieldProps = {\n    label: {\n        type: PropType<string>,\n        default: \"\"\n    },\n\n    disableLabel: {\n        type: PropType<boolean>,\n        default: false\n    },\n\n    help: {\n        type: PropType<string>,\n        default: \"\"\n    },\n\n    rules: RulesPropType,\n\n    formGroupClasses: {\n        type: PropType<string>,\n        default: \"\"\n    },\n\n    validationTitle: {\n        type: PropType<string>,\n        default: \"\"\n    },\n\n    isRequiredIndicatorHidden: {\n        type: PropType<boolean>,\n        default: false\n    }\n};\n\n/** The standard component props that should be included when using RockFormField. */\nexport const standardRockFormFieldProps: StandardRockFormFieldProps = {\n    label: {\n        type: String as PropType<string>,\n        default: \"\"\n    },\n\n    disableLabel: {\n        type: Boolean,\n        default: false\n    },\n\n    help: {\n        type: String as PropType<string>,\n        default: \"\"\n    },\n\n    rules: {\n        type: [Array, Object, String] as PropType<ValidationRule | ValidationRule[]>,\n        default: \"\"\n    },\n\n    formGroupClasses: {\n        type: String as PropType<string>,\n        default: \"\"\n    },\n\n    validationTitle: {\n        type: String as PropType<string>,\n        default: \"\"\n    },\n\n    isRequiredIndicatorHidden: {\n        type: Boolean as PropType<boolean>,\n        default: false\n    }\n};\n\n/**\n * Copies the known properties for the standard rock form field props from\n * the source object to the destination object.\n *\n * @param source The source object to copy the values from.\n * @param destination The destination object to copy the values to.\n */\nfunction copyStandardRockFormFieldProps(source: ExtractPropTypes<StandardRockFormFieldProps>, destination: ExtractPropTypes<StandardRockFormFieldProps>): void {\n    destination.formGroupClasses = source.formGroupClasses;\n    destination.help = source.help;\n    destination.label = source.label;\n    destination.rules = source.rules;\n    destination.validationTitle = source.validationTitle;\n}\n\n/**\n * Configures the basic properties that should be passed to the RockFormField\n * component. The value returned by this function should be used with v-bind on\n * the RockFormField in order to pass all the defined prop values to it.\n *\n * @param props The props of the component that will be using the RockFormField.\n *\n * @returns An object of prop values that can be used with v-bind.\n */\nexport function useStandardRockFormFieldProps(props: ExtractPropTypes<StandardRockFormFieldProps>): ExtractPropTypes<StandardRockFormFieldProps> {\n    const propValues = reactive<ExtractPropTypes<StandardRockFormFieldProps>>({\n        label: props.label,\n        disableLabel: props.disableLabel,\n        help: props.help,\n        rules: props.rules,\n        formGroupClasses: props.formGroupClasses,\n        validationTitle: props.validationTitle,\n        isRequiredIndicatorHidden: props.isRequiredIndicatorHidden\n    });\n\n    watch([() => props.formGroupClasses, () => props.help, () => props.label, () => props.rules, () => props.validationTitle], () => {\n        copyStandardRockFormFieldProps(props, propValues);\n    });\n\n    return propValues;\n}\n\n// #endregion\n\n// #region Standard Async Pickers\n\ntype StandardAsyncPickerProps = StandardRockFormFieldProps & {\n    /** Enhance the picker for dealing with long lists by providing a search mechanism. */\n    enhanceForLongLists: {\n        type: PropType<boolean>,\n        default: false\n    },\n\n    /** The method the picker should use to load data. */\n    lazyMode: {\n        type: PropType<ControlLazyMode>,\n        default: \"onDemand\"\n    },\n\n    /** True if the picker should allow multiple items to be selected. */\n    multiple: {\n        type: PropType<boolean>,\n        default: false\n    },\n\n    /** True if the picker should allow empty selections. */\n    showBlankItem: {\n        type: PropType<boolean>,\n        default: false\n    },\n\n    /** The optional value to show when `showBlankItem` is `true`. */\n    blankValue: {\n        type: PropType<string>,\n        default: \"\"\n    },\n\n    /** The visual style to use when displaying the picker. */\n    displayStyle: {\n        type: PropType<PickerDisplayStyle>,\n        default: \"auto\"\n    },\n\n    /** The number of columns to use when displaying the items in a list. */\n    columnCount: {\n        type: PropType<number>,\n        default: 0\n    }\n};\n\n/** The standard component props that should be included when using BaseAsyncPicker. */\nexport const standardAsyncPickerProps: StandardAsyncPickerProps = {\n    ...standardRockFormFieldProps,\n\n    enhanceForLongLists: {\n        type: Boolean as PropType<boolean>,\n        default: false\n    },\n\n    lazyMode: {\n        type: String as PropType<ControlLazyMode>,\n        default: ControlLazyMode.OnDemand\n    },\n\n    multiple: {\n        type: Boolean as PropType<boolean>,\n        default: false\n    },\n\n    showBlankItem: {\n        type: Boolean as PropType<boolean>,\n        default: false\n    },\n\n    blankValue: {\n        type: String as PropType<string>,\n        default: \"\"\n    },\n\n    displayStyle: {\n        type: String as PropType<PickerDisplayStyle>,\n        default: PickerDisplayStyle.Auto\n    },\n\n    columnCount: {\n        type: Number as PropType<number>,\n        default: 0\n    }\n};\n\n/**\n * Copies the known properties for the standard async picker props from\n * the source object to the destination object.\n *\n * @param source The source object to copy the values from.\n * @param destination The destination object to copy the values to.\n */\nfunction copyStandardAsyncPickerProps(source: ExtractPropTypes<StandardAsyncPickerProps>, destination: ExtractPropTypes<StandardAsyncPickerProps>): void {\n    copyStandardRockFormFieldProps(source, destination);\n\n    destination.enhanceForLongLists = source.enhanceForLongLists;\n    destination.lazyMode = source.lazyMode;\n    destination.multiple = source.multiple;\n    destination.showBlankItem = source.showBlankItem;\n    destination.blankValue = source.blankValue;\n    destination.displayStyle = source.displayStyle;\n    destination.columnCount = source.columnCount;\n}\n\n/**\n * Configures the basic properties that should be passed to the BaseAsyncPicker\n * component. The value returned by this function should be used with v-bind on\n * the BaseAsyncPicker in order to pass all the defined prop values to it.\n *\n * @param props The props of the component that will be using the BaseAsyncPicker.\n *\n * @returns An object of prop values that can be used with v-bind.\n */\nexport function useStandardAsyncPickerProps(props: ExtractPropTypes<StandardAsyncPickerProps>): ExtractPropTypes<StandardAsyncPickerProps> {\n    const standardFieldProps = useStandardRockFormFieldProps(props);\n\n    const propValues = reactive<ExtractPropTypes<StandardAsyncPickerProps>>({\n        ...standardFieldProps,\n        enhanceForLongLists: props.enhanceForLongLists,\n        lazyMode: props.lazyMode,\n        multiple: props.multiple,\n        showBlankItem: props.showBlankItem,\n        blankValue: props.blankValue,\n        displayStyle: props.displayStyle,\n        columnCount: props.columnCount\n    });\n\n    // Watch for changes in any of the standard props. Use deep for this so we\n    // don't need to know which prop keys it actually contains.\n    watch(() => standardFieldProps, () => {\n        copyStandardRockFormFieldProps(props, propValues);\n    }, {\n        deep: true\n    });\n\n    // Watch for changes in our known list of props that might change.\n    watch([() => props.enhanceForLongLists, () => props.lazyMode, () => props.multiple, () => props.showBlankItem, () => props.displayStyle, () => props.columnCount], () => {\n        copyStandardAsyncPickerProps(props, propValues);\n    });\n\n    return propValues;\n}\n\n// #endregion\n\n// #region Extended References\n\n/**\n * Creates a Ref that contains extended data to better identify this ref\n * when you have multiple refs to work with.\n *\n * @param value The initial value of the Ref.\n * @param extendedData The additional context data to put on the Ref.\n *\n * @returns An ExtendedRef object that can be used like a regular Ref object.\n */\nexport function extendedRef<T>(value: T, context: ExtendedRefContext): ExtendedRef<T> {\n    const refValue = ref(value) as ExtendedRef<T>;\n\n    refValue.context = context;\n\n    return refValue;\n}\n\n/**\n * Creates an extended Ref with the specified property name in the context.\n *\n * @param value The initial value of the Ref.\n * @param propertyName The property name to use for the context.\n *\n * @returns An ExtendedRef object that can be used like a regular Ref object.\n */\nexport function propertyRef<T>(value: T, propertyName: string): ExtendedRef<T> {\n    return extendedRef(value, {\n        propertyName\n    });\n}\n\n// #endregion Extended Refs\n\n// #region VNode Helpers\n\n/**\n * Retrieves a single prop value from a VNode object. If the prop is explicitly\n * specified in the DOM then it will be returned. Otherwise the component's\n * prop default values are checked. If there is a default value it will be\n * returned.\n *\n * @param node The node whose property value is being requested.\n * @param propName The name of the property whose value is being requested.\n *\n * @returns The value of the property or `undefined` if it was not set.\n */\nexport function getVNodeProp<T>(node: VNode, propName: string): T | undefined {\n    // Check if the prop was specified in the DOM declaration.\n    if (node.props && node.props[propName] !== undefined) {\n        return node.props[propName] as T;\n    }\n\n    // Now look to see if the backing component has defined a prop with that\n    // name and provided a default value.\n    if (typeof node.type === \"object\" && typeof node.type[\"props\"] === \"object\") {\n        const defaultProps = node.type[\"props\"] as Record<string, unknown>;\n        const defaultProp = defaultProps[propName];\n\n        if (defaultProp && typeof defaultProp === \"object\" && defaultProp[\"default\"] !== undefined) {\n            return defaultProp[\"default\"] as T;\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Retrieves all prop values from a VNode object. First all default values\n * from the component are retrieved. Then any specified on the DOM will be used\n * to override those default values.\n *\n * @param node The node whose property values are being requested.\n *\n * @returns An object that contains all props and values for the node.\n */\nexport function getVNodeProps(node: VNode): Record<string, unknown> {\n    const props: Record<string, unknown> = {};\n\n    // Get all default values from the backing component's defined props.\n    if (typeof node.type === \"object\" && typeof node.type[\"props\"] === \"object\") {\n        const defaultProps = node.type[\"props\"] as Record<string, unknown>;\n\n        for (const p in defaultProps) {\n            const defaultProp = defaultProps[p];\n\n            if (defaultProp && typeof defaultProp === \"object\" && defaultProp[\"default\"] !== undefined) {\n                props[p] = defaultProp[\"default\"];\n            }\n        }\n    }\n\n    // Override with any values specified on the DOM declaration.\n    if (node.props) {\n        for (const p in node.props) {\n            if (typeof node.type === \"object\" && typeof node.type[\"props\"] === \"object\") {\n                const propType = node.type[\"props\"][p]?.type;\n\n                if (propType === Boolean) {\n                    props[p] = node.props[p] === true || node.props[p] === \"\";\n                }\n                else if (propType === Number) {\n                    props[p] = toNumberOrNull(node.props[p]) ?? undefined;\n                }\n                else {\n                    props[p] = node.props[p];\n                }\n            }\n            else {\n                props[p] = node.props[p];\n            }\n        }\n    }\n\n    return props;\n}\n\n/**\n * Renders the node into an off-screen div and then extracts the text content\n * by way of the innerText property of the div.\n *\n * @param node The node or component to be rendered.\n * @param props The properties to be passed to the component when it is mounted.\n *\n * @returns The text content of the node after it has rendered.\n */\nexport function extractText(node: VNode | Component, props?: Record<string, unknown>): string {\n    const el = document.createElement(\"div\");\n\n    // Create a new virtual node with the specified properties.\n    const vnode = createVNode(node, props);\n\n    // Mount the node in our off-screen container.\n    render(vnode, el);\n\n    const text = el.innerText;\n\n    // Unmount it.\n    render(null, el);\n\n    return text.trim();\n}\n\n/**\n * Renders the node into an off-screen div and then extracts the HTML content\n * by way of the innerHTML property of the div.\n *\n * @param node The node or component to be rendered.\n * @param props The properties to be passed to the component when it is mounted.\n *\n * @returns The HTML content of the node after it has rendered.\n */\nexport function extractHtml(node: VNode | Component, props?: Record<string, unknown>): string {\n    const el = document.createElement(\"div\");\n\n    // Create a new virtual node with the specified properties.\n    const vnode = createVNode(node, props);\n\n    // Mount the node in our off-screen container.\n    render(vnode, el);\n\n    const html = el.innerHTML;\n\n    // Unmount it.\n    render(null, el);\n\n    return html;\n}\n\n// #endregion\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { toNumberOrNull, zeroPad } from \"./numberUtils\";\nconst dateKeyLength = \"YYYYMMDD\".length;\nconst dateKeyNoYearLength = \"MMDD\".length;\n\n/**\n * Gets the year value from the date key.\n * Ex: 20210228 => 2021\n * @param dateKey\n */\nexport function getYear(dateKey: string | null): number {\n    const defaultValue = 0;\n\n    if (!dateKey || dateKey.length !== dateKeyLength) {\n        return defaultValue;\n    }\n\n    const asString = dateKey.substring(0, 4);\n    const year = toNumberOrNull(asString) || defaultValue;\n    return year;\n}\n\n/**\n * Gets the month value from the date key.\n * Ex: 20210228 => 2\n * @param dateKey\n */\nexport function getMonth(dateKey: string | null): number {\n    const defaultValue = 0;\n\n    if (!dateKey) {\n        return defaultValue;\n    }\n\n    if (dateKey.length === dateKeyLength) {\n        const asString = dateKey.substring(4, 6);\n        return toNumberOrNull(asString) || defaultValue;\n    }\n\n    if (dateKey.length === dateKeyNoYearLength) {\n        const asString = dateKey.substring(0, 2);\n        return toNumberOrNull(asString) || defaultValue;\n    }\n\n    return defaultValue;\n}\n\n/**\n * Gets the day value from the date key.\n * Ex: 20210228 => 28\n * @param dateKey\n */\nexport function getDay(dateKey: string | null): number {\n    const defaultValue = 0;\n\n    if (!dateKey) {\n        return defaultValue;\n    }\n\n    if (dateKey.length === dateKeyLength) {\n        const asString = dateKey.substring(6, 8);\n        return toNumberOrNull(asString) || defaultValue;\n    }\n\n    if (dateKey.length === dateKeyNoYearLength) {\n        const asString = dateKey.substring(2, 4);\n        return toNumberOrNull(asString) || defaultValue;\n    }\n\n    return defaultValue;\n}\n\n/**\n * Gets the datekey constructed from the parts.\n * Ex: (2021, 2, 28) => '20210228'\n * @param year\n * @param month\n * @param day\n */\nexport function toDateKey(year: number | null, month: number | null, day: number | null): string {\n    if (!year || year > 9999 || year < 0) {\n        year = 0;\n    }\n\n    if (!month || month > 12 || month < 0) {\n        month = 0;\n    }\n\n    if (!day || day > 31 || day < 0) {\n        day = 0;\n    }\n\n    const yearStr = zeroPad(year, 4);\n    const monthStr = zeroPad(month, 2);\n    const dayStr = zeroPad(day, 2);\n\n    return `${yearStr}${monthStr}${dayStr}`;\n}\n\n/**\n * Gets the datekey constructed from the parts.\n * Ex: (2, 28) => '0228'\n * @param month\n * @param day\n */\nexport function toNoYearDateKey(month: number | null, day: number | null): string {\n    if (!month || month > 12 || month < 0) {\n        month = 0;\n    }\n\n    if (!day || day > 31 || day < 0) {\n        day = 0;\n    }\n\n    const monthStr = zeroPad(month, 2);\n    const dayStr = zeroPad(day, 2);\n\n    return `${monthStr}${dayStr}`;\n}\n\nexport default {\n    getYear,\n    getMonth,\n    getDay,\n    toDateKey,\n    toNoYearDateKey\n};\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Guid } from \"@Obsidian/Types\";\nimport { CurrentPersonBag } from \"@Obsidian/ViewModels/Crm/currentPersonBag\";\n\nexport type PageConfig = {\n    executionStartTime: number;\n    pageId: number;\n    pageGuid: Guid;\n    pageParameters: Record<string, string>;\n    interactionGuid: Guid;\n    currentPerson: CurrentPersonBag | null;\n    isAnonymousVisitor: boolean;\n    loginUrlWithReturnUrl: string;\n};\n\nexport function smoothScrollToTop(): void {\n    window.scrollTo({ top: 0, behavior: \"smooth\" });\n}\n\nexport default {\n    smoothScrollToTop\n};\n\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any\ndeclare const Obsidian: any;\n\n\n/*\n * Code to handle working with modals.\n */\nlet currentModalCount = 0;\n\n/**\n * Track a modal being opened or closed. This is used to adjust the page in response\n * to any modals being visible.\n *\n * @param state true if the modal is now open, false if it is now closed.\n */\nexport function trackModalState(state: boolean): void {\n    const body = document.body;\n    const cssClasses = [\"modal-open\"];\n\n    if (state) {\n        currentModalCount++;\n    }\n    else {\n        currentModalCount = currentModalCount > 0 ? currentModalCount - 1 : 0;\n    }\n\n    if (currentModalCount > 0) {\n        for (const cssClass of cssClasses) {\n            body.classList.add(cssClass);\n        }\n    }\n    else {\n        for (const cssClass of cssClasses) {\n            body.classList.remove(cssClass);\n        }\n    }\n}\n\n/**\n * Loads a JavaScript file asynchronously into the document and returns a\n * Promise that can be used to determine when the script has loaded. The\n * promise will return true if the script loaded successfully or false if it\n * failed to load.\n *\n * The function passed in isScriptLoaded will be called before the script is\n * inserted into the DOM as well as after to make sure it actually loaded.\n *\n * @param source The source URL of the script to be loaded.\n * @param isScriptLoaded An optional function to call to determine if the script is loaded.\n * @param attributes An optional set of attributes to apply to the script tag.\n * @param fingerprint If set to false, then a fingerprint will not be added to the source URL. Default is true.\n *\n * @returns A Promise that indicates if the script was loaded or not.\n */\nexport async function loadJavaScriptAsync(source: string, isScriptLoaded?: () => boolean, attributes?: Record<string, string>, fingerprint?: boolean): Promise<boolean> {\n    let src = source;\n\n    // Add the cache busting fingerprint if we have one.\n    if (fingerprint !== false && typeof Obsidian !== \"undefined\" && Obsidian?.options?.fingerprint) {\n        if (src.indexOf(\"?\") === -1) {\n            src += `?${Obsidian.options.fingerprint}`;\n        }\n        else {\n            src += `&${Obsidian.options.fingerprint}`;\n        }\n    }\n\n    // Check if the script is already loaded. First see if we have a custom\n    // function that will do the check. Otherwise fall back to looking for any\n    // script tags that have the same source.\n    if (isScriptLoaded) {\n        if (isScriptLoaded()) {\n            return true;\n        }\n    }\n\n    // Make sure the script wasn't already added in some other way.\n    const scripts = Array.from(document.getElementsByTagName(\"script\"));\n    const thisScript = scripts.filter(s => s.src === src);\n\n    if (thisScript.length > 0) {\n        const promise = scriptLoadedPromise(thisScript[0]);\n        return promise;\n    }\n\n    // Build the script tag that will be dynamically loaded.\n    const script = document.createElement(\"script\");\n    script.type = \"text/javascript\";\n    script.src = src;\n    if (attributes) {\n        for (const key in attributes) {\n            script.setAttribute(key, attributes[key]);\n        }\n    }\n\n    // Load the script.\n    const promise = scriptLoadedPromise(script);\n    document.getElementsByTagName(\"head\")[0].appendChild(script);\n\n    return promise;\n\n    async function scriptLoadedPromise(scriptElement: HTMLScriptElement): Promise<boolean> {\n        try {\n            await new Promise<void>((resolve, reject) => {\n                scriptElement.addEventListener(\"load\", () => resolve());\n                scriptElement.addEventListener(\"error\", () => {\n                    reject();\n                });\n            });\n\n            // If we have a custom function, call it to see if the script loaded correctly.\n            if (isScriptLoaded) {\n                return isScriptLoaded();\n            }\n\n            return true;\n        }\n        catch {\n            return false;\n        }\n    }\n}\n\n/**\n * Adds a new link to the quick return action menu. The URL in the address bar\n * will be used as the destination.\n *\n * @param title The title of the quick link that identifies the current page.\n * @param section The section title to place this link into.\n * @param sectionOrder The priority order to give the section if it doesn't already exist.\n */\nexport function addQuickReturn(title: string, section: string, sectionOrder?: number): void {\n    interface IRock {\n        personalLinks: {\n            addQuickReturn: (type: string, typeOrder: number, itemName: string) => void\n        }\n    }\n\n    const rock = window[\"Rock\"] as IRock;\n    if (rock && rock.personalLinks) {\n        rock.personalLinks.addQuickReturn(section, sectionOrder ?? 0, title);\n    }\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Guid } from \"@Obsidian/Types\";\nimport { ICancellationToken } from \"./cancellation\";\nimport { trackModalState } from \"./page\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/naming-convention\ndeclare const Rock: any;\n\n/** The options that describe the dialog. */\nexport type DialogOptions = {\n    /** The text to display inside the dialog. */\n    message: string;\n\n    /** A list of buttons to display, rendered left to right. */\n    buttons: ButtonOptions[];\n\n    /**\n     * An optional container element for the dialog. If not specified then one\n     * will be chosen automatically.\n     */\n    container?: string | Element;\n\n    /**\n     * An optional cancellation token that will dismiss the dialog automatically\n     * and return `cancel` as the button clicked.\n     */\n    cancellationToken?: ICancellationToken;\n};\n\n/** The options that describe a single button in the dialog. */\nexport type ButtonOptions = {\n    /** The key that uniquely identifies this button. */\n    key: string;\n\n    /** The text to display in the button. */\n    label: string;\n\n    /** The CSS classes to assign to the button, such as `btn btn-primary`. */\n    className: string;\n    autoFocus?: boolean;\n};\n\n/**\n * Creates a dialog to display a message.\n *\n * @param body The body content to put in the dialog.\n * @param footer The footer content to put in the dialog.\n *\n * @returns An element that should be added to the body.\n */\nfunction createDialog(body: HTMLElement | HTMLElement[], footer: HTMLElement | HTMLElement[] | undefined): HTMLElement {\n    // Create the scrollable container that will act as a backdrop for the dialog.\n    const scrollable = document.createElement(\"div\");\n    scrollable.classList.add(\"modal-scrollable\");\n    scrollable.style.zIndex = \"1060\";\n\n    // Create the modal that will act as a container for the outer content.\n    const modal = document.createElement(\"div\");\n    scrollable.appendChild(modal);\n    modal.classList.add(\"modal\", \"fade\");\n    modal.tabIndex = -1;\n    modal.setAttribute(\"role\", \"dialog\");\n    modal.setAttribute(\"aria-hidden\", \"false\");\n    modal.style.display = \"block\";\n\n    // Create the inner dialog of the modal.\n    const modalDialog = document.createElement(\"div\");\n    modal.appendChild(modalDialog);\n    modalDialog.classList.add(\"modal-dialog\");\n\n    // Create the container for the inner content.\n    const modalContent = document.createElement(\"div\");\n    modalDialog.appendChild(modalContent);\n    modalContent.classList.add(\"modal-content\");\n\n    // Create the container for the body content.\n    const modalBody = document.createElement(\"div\");\n    modalContent.appendChild(modalBody);\n    modalBody.classList.add(\"modal-body\");\n\n    // Add all the body elements to the body.\n    if (Array.isArray(body)) {\n        for (const el of body) {\n            modalBody.appendChild(el);\n        }\n    }\n    else {\n        modalBody.appendChild(body);\n    }\n\n    // If we have any footer content then create a footer.\n    if (footer && (!Array.isArray(footer) || footer.length > 0)) {\n        const modalFooter = document.createElement(\"div\");\n        modalContent.appendChild(modalFooter);\n        modalFooter.classList.add(\"modal-footer\");\n\n        // Add all the footer elements to the footer.\n        if (Array.isArray(footer)) {\n            for (const el of footer) {\n                modalFooter.appendChild(el);\n            }\n        }\n        else {\n            modalFooter.appendChild(footer);\n        }\n    }\n\n    // Add a click handler to the background so the user gets feedback\n    // that they can't just click away from the dialog.\n    scrollable.addEventListener(\"click\", () => {\n        modal.classList.remove(\"animated\", \"shake\");\n        setTimeout(() => {\n            modal.classList.add(\"animated\", \"shake\");\n        }, 0);\n    });\n\n    return scrollable;\n}\n\n/**\n * Construct a standard close button to be placed in the dialog.\n *\n * @returns A button element.\n */\nfunction createCloseButton(): HTMLButtonElement {\n    const closeButton = document.createElement(\"button\");\n    closeButton.classList.add(\"close\");\n    closeButton.type = \"button\";\n    closeButton.style.marginTop = \"-10px\";\n    closeButton.innerHTML = \"&times;\";\n\n    return closeButton;\n}\n\n/**\n * Creates a standard backdrop element to be placed in the window.\n *\n * @returns An element to show that the background is not active.\n */\nfunction createBackdrop(): HTMLElement {\n    const backdrop = document.createElement(\"div\");\n    backdrop.classList.add(\"modal-backdrop\");\n    backdrop.style.zIndex = \"1050\";\n\n    return backdrop;\n}\n\n/**\n * Shows a dialog modal. This is meant to look and behave like the standard\n * Rock.dialog.* functions, but this handles fullscreen mode whereas the old\n * methods do not.\n *\n * @param options The options that describe the dialog to be shown.\n *\n * @returns The key of the button that was clicked, or \"cancel\" if the cancel button was clicked.\n */\nexport function showDialog(options: DialogOptions): Promise<string> {\n    return new Promise<string>(resolve => {\n        let timer: NodeJS.Timeout | null = null;\n        const container = document.fullscreenElement || document.body;\n        const body = document.createElement(\"div\");\n        let autoFocus: null | HTMLElement = null;\n        body.innerText = options.message;\n\n        const buttons: HTMLElement[] = [];\n\n        /**\n         * Internal function to handle clearing the dialog and resolving the\n         * promise.\n         *\n         * @param result The result to return in the promise.\n         */\n        function clearDialog(result: string): void {\n            // This acts as a way to ensure only a single clear request happens.\n            if (timer !== null) {\n                return;\n            }\n\n            // The timout is used as a fallback in case we don't get the\n            // transition end event.\n            timer = setTimeout(() => {\n                backdrop.remove();\n                dialog.remove();\n                trackModalState(false);\n\n                resolve(result);\n            }, 1000);\n\n            modal.addEventListener(\"transitionend\", () => {\n                if (timer) {\n                    clearTimeout(timer);\n                }\n\n                backdrop.remove();\n                dialog.remove();\n                trackModalState(false);\n\n                resolve(result);\n            });\n\n            modal.classList.remove(\"in\");\n            backdrop.classList.remove(\"in\");\n        }\n\n        // Add in all the buttons specified.\n        for (const button of options.buttons) {\n            const btn = document.createElement(\"button\");\n            btn.classList.value = button.className;\n            btn.type = \"button\";\n            btn.innerText = button.label;\n            btn.addEventListener(\"click\", () => {\n                clearDialog(button.key);\n            });\n            if (button.autoFocus) {\n                autoFocus = btn;\n            }\n            buttons.push(btn);\n        }\n\n        // Construct the close (cancel) button.\n        const closeButton = createCloseButton();\n        closeButton.addEventListener(\"click\", () => {\n            clearDialog(\"cancel\");\n        });\n\n        const dialog = createDialog([closeButton, body], buttons);\n        const backdrop = createBackdrop();\n\n        const modal = dialog.querySelector(\".modal\") as HTMLElement;\n\n        // Do final adjustments to the elements and add to the body.\n        trackModalState(true);\n        container.appendChild(dialog);\n        container.appendChild(backdrop);\n        modal.style.marginTop = `-${modal.offsetHeight / 2.0}px`;\n\n        if (autoFocus) {\n            autoFocus.focus();\n        }\n\n        // Show the backdrop and the modal.\n        backdrop.classList.add(\"in\");\n        modal.classList.add(\"in\");\n\n        // Handle dismissal of the dialog by cancellation token.\n        options.cancellationToken?.onCancellationRequested(() => {\n            clearDialog(\"cancel\");\n        });\n    });\n}\n\n/**\n * Shows an alert message that requires the user to acknowledge.\n *\n * @param message The message text to be displayed.\n *\n * @returns A promise that indicates when the dialog has been dismissed.\n */\nexport async function alert(message: string): Promise<void> {\n    await showDialog({\n        message,\n        buttons: [\n            {\n                key: \"ok\",\n                label: \"OK\",\n                className: \"btn btn-primary\"\n            }\n        ]\n    });\n}\n\n/**\n * Shows a confirmation dialog that consists of OK and Cancel buttons. The\n * user will be required to click one of these two buttons.\n *\n * @param message The message to be displayed inside the dialog.\n *\n * @returns A promise that indicates when the dialog has been dismissed. The\n * value will be true if the OK button was clicked or false otherwise.\n */\nexport async function confirm(message: string): Promise<boolean> {\n    const result = await showDialog({\n        message,\n        buttons: [\n            {\n                key: \"ok\",\n                label: \"OK\",\n                className: \"btn btn-primary\",\n                autoFocus: true\n            },\n            {\n                key: \"cancel\",\n                label: \"Cancel\",\n                className: \"btn btn-default\"\n            }\n        ]\n    });\n\n    return result === \"ok\";\n}\n\n/**\n * Shows a delete confirmation dialog that consists of OK and Cancel buttons.\n * The user will be required to click one of these two buttons. The message\n * is standardized.\n *\n * @param nameText The name of type that will be deleted.\n *\n * @returns A promise that indicates when the dialog has been dismissed. The\n * value will be true if the OK button was clicked or false otherwise.\n */\nexport function confirmDelete(typeName: string, additionalMessage?: string): Promise<boolean> {\n    let message = `Are you sure you want to delete this ${typeName}?`;\n\n    if (additionalMessage) {\n        message += ` ${additionalMessage}`;\n    }\n\n    return confirm(message);\n}\n\n/**\n * Shows the security dialog for the given entity.\n *\n * @param entityTypeIdKey The identifier of the entity's type.\n * @param entityIdKey The identifier of the entity to secure.\n * @param entityTitle The title of the entity. This is used to construct the modal title.\n */\nexport function showSecurity(entityTypeIdKey: Guid | string | number, entityIdKey: Guid | string | number, entityTitle: string = \"Item\"): void {\n    Rock.controls.modal.show(undefined, `/Secure/${entityTypeIdKey}/${entityIdKey}?t=Secure ${entityTitle}&pb=&sb=Done`);\n}\n\n/**\n * Shows the child pages for the given page.\n * @param pageId The page identifier\n */\nexport function showChildPages(pageId: Guid | string | number): void {\n    Rock.controls.modal.show(undefined, `/pages/${pageId}?t=Child Pages&pb=&sb=Done`);\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n/**\n * Get a unique CSS selector for any DOM element.\n */\nexport function getUniqueCssSelector(el: Element): string {\n    const path: string[] = [];\n    let parent: Element | null = el.parentNode as Element;\n\n    while (parent) {\n        path.unshift(`${el.tagName}:nth-child(${([] as Element[]).indexOf.call(parent.children, el) + 1})`);\n        el = parent;\n        parent = el.parentNode as Element;\n    }\n    return `${path.join(\" > \")}`.toLowerCase();\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n/**\n * Is the value a valid email address?\n * @param val\n */\nexport function isEmail(val: unknown): boolean {\n    if (typeof val === \"string\") {\n        const re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n        return re.test(val.toLowerCase());\n    }\n\n    return false;\n}\n","import { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\n\n/**\n * A function to convert the enums to array of ListItemBag in the frontend.\n *\n * @param description The enum to be converted to an array of listItemBag as a dictionary of value to enum description\n *\n * @returns An array of ListItemBag.\n */\nexport function enumToListItemBag (description: Record<number, string>): ListItemBag[] {\n    const listItemBagList: ListItemBag[] = [];\n    for(const property in description) {\n        listItemBagList.push({\n            text: description[property].toString(),\n            value: property.toString()\n        });\n    }\n    return listItemBagList;\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Guid } from \"@Obsidian/Types\";\nimport { isValidGuid, normalize } from \"./guid\";\nimport { IFieldType } from \"@Obsidian/Types/fieldType\";\nimport { Ref, inject, provide, ref } from \"vue\";\n\nconst fieldTypeTable: Record<Guid, IFieldType> = {};\nconst fieldTypeAttributeGuidSymbol = Symbol();\n\n\n/** Determines how the field type component is being used so it can adapt to different */\nexport type DataEntryMode = \"defaultValue\" | undefined;\n\n/**\n * Register a new field type in the system. This must be called for all field\n * types a plugin registers.\n *\n * @param fieldTypeGuid The unique identifier of the field type.\n * @param fieldType The class instance that will handle the field type.\n */\nexport function registerFieldType(fieldTypeGuid: Guid, fieldType: IFieldType): void {\n    const normalizedGuid = normalize(fieldTypeGuid);\n\n    if (!isValidGuid(fieldTypeGuid) || normalizedGuid === null) {\n        throw \"Invalid guid specified when registering field type.\";\n    }\n\n    if (fieldTypeTable[normalizedGuid] !== undefined) {\n        throw \"Invalid attempt to replace existing field type.\";\n    }\n\n    fieldTypeTable[normalizedGuid] = fieldType;\n}\n\n/**\n * Get the field type handler for a given unique identifier.\n *\n * @param fieldTypeGuid The unique identifier of the field type.\n *\n * @returns The field type instance or null if not found.\n */\nexport function getFieldType(fieldTypeGuid: Guid): IFieldType | null {\n    const normalizedGuid = normalize(fieldTypeGuid);\n\n    if (normalizedGuid !== null) {\n        const field = fieldTypeTable[normalizedGuid];\n\n        if (field) {\n            return field;\n        }\n    }\n\n    console.warn(`Field type \"${fieldTypeGuid}\" was not found`);\n    return null;\n}\n\n/**\n * Provides the attribute guid for a field type component to use.\n *\n * @param guid A reference to the attribute guid value.\n */\nexport function provideFieldTypeAttributeGuid(guid: Ref<Guid | undefined | null>): void {\n    provide(fieldTypeAttributeGuidSymbol, guid);\n}\n\n/**\n * Gets a reference to the attribute guid value for this field. The value may be\n * undefined or null.\n *\n * @returns A function that will cause the block component to be reloaded.\n */\nexport function useFieldTypeAttributeGuid(): Ref<Guid | undefined | null> {\n    return inject<Ref<Guid | undefined | null>>(fieldTypeAttributeGuidSymbol, ref());\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { useHttp } from \"./http\";\nimport Cache from \"./cache\";\n\n/**\n * Triggers an automatic download of the data so it can be saved to the\n * filesystem.\n *\n * @param data The data to be downloaded by the browser.\n * @param filename The name of the filename to suggest to the browser.\n */\nexport async function downloadFile(data: Blob, filename: string): Promise<void> {\n    // Create the URL that contains the file data.\n    const url = URL.createObjectURL(data);\n\n    // Create a fake hyperlink to simulate an attempt to download a file.\n    const element = document.createElement(\"a\");\n    element.innerText = \"Download\";\n    element.style.position = \"absolute\";\n    element.style.top = \"-100px\";\n    element.style.left = \"0\";\n    element.href = url;\n    element.download = filename;\n    document.body.appendChild(element);\n    element.click();\n    document.body.removeChild(element);\n\n    setTimeout(() => URL.revokeObjectURL(url), 100);\n}\n\n/**\n * Fetch the global attribute configuration for image file extensions from the server as an array of\n * file extension strings.\n */\nasync function fetchImageFileExtensions(): Promise<string[] | null> {\n    const http = useHttp();\n    const result = await http.post<string>(\"/api/v2/Utilities/GetImageFileExtensions\");\n\n    if (result.isSuccess && result.data) {\n        return result.data.split(\",\");\n    }\n\n    return null;\n}\n\n/**\n * Fetch the global attribute configuration for image file extensions from the server as an array of\n * file extension strings.\n *\n * Cacheable version of fetchImageFileExtensions\n */\nexport const getImageFileExtensions = Cache.cachePromiseFactory(\"imageFileExtensions\", fetchImageFileExtensions);\n\n/**\n * Determine, based on the file's extension and the list of image file extensions (from the\n * server's configuration), whether the file is an image.\n */\nexport async function isImage(filename: string): Promise<boolean> {\n    const imageExtensions = await getImageFileExtensions();\n    const extension = filename.split(\".\").pop();\n    return !!extension && (imageExtensions?.includes(extension.toLowerCase()) ?? false);\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { inject, provide } from \"vue\";\n\n/** The unique symbol used when injecting the form state. */\nconst formStateSymbol = Symbol();\n\n/**\n * Holds the state of a single form on the page along with any callback methods\n * that can be used to interact with the form.\n */\nexport type FormState = {\n    /** The number of submissions the form has had. */\n    submitCount: number;\n\n    /** Sets the current error for the given field name. A blank error means no error. */\n    setError: (id: string, name: string, error: string) => void;\n};\n\n/**\n * Contains the internal form error passed between RockForm and RockValidation.\n *\n * This is an internal type and subject to change at any time.\n */\nexport type FormError = {\n    /** The name of the field. */\n    name: string;\n\n    /** The current error text. */\n    text: string;\n};\n\n/**\n * Provides the form state for any child components that need access to it.\n * \n * @param state The state that will be provided to child components.\n */\nexport function provideFormState(state: FormState): void {\n    provide(formStateSymbol, state);\n}\n\n/**\n * Makes use of the FormState that was previously provided by a parent component.\n *\n * @returns The form state or undefined if it was not available.\n */\nexport function useFormState(): FormState | undefined {\n    return inject<FormState | undefined>(formStateSymbol, undefined);\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n// Define the browser-specific versions of these functions that older browsers\n// implemented before using the standard API.\ndeclare global {\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    interface Document {\n        mozCancelFullScreen?: () => Promise<void>;\n        webkitExitFullscreen?: () => Promise<void>;\n        mozFullScreenElement?: Element;\n        webkitFullscreenElement?: Element;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    interface HTMLElement {\n        mozRequestFullscreen?: () => Promise<void>;\n        webkitRequestFullscreen?: () => Promise<void>;\n    }\n}\n\n/**\n * Request that the window enter true fullscreen mode for the given element.\n *\n * @param element The element that will be the root of the fullscreen view.\n * @param exitCallback The function to call when leaving fullscreen mode.\n *\n * @returns A promise that indicates when the operation has completed.\n */\nexport async function enterFullscreen(element: HTMLElement, exitCallback?: (() => void)): Promise<boolean> {\n    try {\n        if (element.requestFullscreen) {\n            await element.requestFullscreen();\n        }\n        else if (element.mozRequestFullscreen) {\n            await element.mozRequestFullscreen();\n        }\n        else if (element.webkitRequestFullscreen) {\n            await element.webkitRequestFullscreen();\n        }\n        else {\n            return false;\n        }\n\n        element.classList.add(\"is-fullscreen\");\n\n        const onFullscreenChange = (): void => {\n            element.classList.remove(\"is-fullscreen\");\n\n            document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n            document.removeEventListener(\"mozfullscreenchange\", onFullscreenChange);\n            document.removeEventListener(\"webkitfullscreenchange\", onFullscreenChange);\n\n            if (exitCallback) {\n                exitCallback();\n            }\n        };\n\n        document.addEventListener(\"fullscreenchange\", onFullscreenChange);\n        document.addEventListener(\"mozfullscreenchange\", onFullscreenChange);\n        document.addEventListener(\"webkitfullscreenchange\", onFullscreenChange);\n\n        return true;\n    }\n    catch (ex) {\n        console.error(ex);\n        return false;\n    }\n}\n\n/**\n * Checks if any element is currently in fullscreen mode.\n *\n * @returns True if an element is currently in fullscreen mode in the window; otherwise false.\n */\nexport function isFullscreen(): boolean {\n    return !!getFullscreenElement();\n}\n\n/**\n * Gets the element that is currently the root of fullscreen mode.\n */\nexport function getFullscreenElement(): Element | undefined {\n    return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n}\n\n/**\n * Manually exits fullscreen mode.\n *\n * @returns True if fullscreen mode was exited; otherwise false.\n */\nexport async function exitFullscreen(): Promise<boolean> {\n    try {\n        if (document.exitFullscreen) {\n            await document.exitFullscreen();\n        }\n        else if (document.mozCancelFullScreen) {\n            await document.mozCancelFullScreen();\n        }\n        else if (document.webkitExitFullscreen) {\n            document.webkitExitFullscreen();\n        }\n        else {\n            return false;\n        }\n\n        return true;\n    }\n    catch (ex) {\n        console.error(ex);\n        return false;\n    }\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n/* global google */\n\nimport { DrawingMode, Coordinate, ILatLng, ILatLngLiteral } from \"@Obsidian/Types/Controls/geo\";\nimport { GeoPickerSettingsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerSettingsBag\";\nimport { GeoPickerGetSettingsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerGetSettingsOptionsBag\";\nimport { GeoPickerGoogleMapSettingsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerGoogleMapSettingsBag\";\nimport { emptyGuid } from \"./guid\";\nimport { post } from \"./http\";\nimport { loadJavaScriptAsync } from \"./page\";\n\n/**\n * Converts a LatLng object, \"lat,lng\" coordinate string, or WellKnown \"lng lat\" coordinate string to a Coordinate array\n * @param coord Either a string in \"lat,lng\" format or a LatLng object from Google Maps\n * @param isWellKnown True if is \"lng lat\" format, false if it is \"lat, lng\"\n *\n * @returns Coordinate: Tuple with a Latitude number and Longitude number as the elements\n */\nexport function toCoordinate(coord: string | ILatLng, isWellKnown: boolean = false): Coordinate {\n    if (typeof coord == \"string\") {\n        // WellKnown string format\n        if (isWellKnown) {\n            return coord.split(\" \").reverse().map(val => parseFloat(val)) as Coordinate;\n        }\n        // Google Maps URL string format\n        else {\n            return coord.split(\",\").map(val => parseFloat(val)) as Coordinate;\n        }\n    }\n    else {\n        return [coord.lat(), coord.lng()];\n    }\n}\n\n/**\n * Takes a Well Known Text value and converts it into a Coordinate array\n */\nexport function wellKnownToCoordinates(wellKnownText: string, type: DrawingMode): Coordinate[] {\n    if (wellKnownText == \"\") {\n        return [];\n    }\n    if (type == \"Point\") {\n        // From this format: POINT (-112.130946 33.600114)\n        return [toCoordinate(wellKnownText.replace(/(POINT *\\( *)|( *\\) *)/ig, \"\"), true)];\n    }\n    else {\n        // From this format: POLYGON ((-112.157058 33.598563, -112.092341 33.595132, -112.117061 33.608715, -112.124957 33.609286, -112.157058 33.598563))\n        return wellKnownText.replace(/(POLYGON *\\(+ *)|( *\\)+ *)/ig, \"\").split(/ *, */).map((coord) => toCoordinate(coord, true));\n    }\n}\n\n/**\n * Takes a Well Known Text value and converts it into a Coordinate array\n */\nexport function coordinatesToWellKnown(coordinates: Coordinate[], type: DrawingMode): string {\n    if (coordinates.length == 0) {\n        return \"\";\n    }\n    else if (type == \"Point\") {\n        return `POINT(${coordinates[0].reverse().join(\" \")})`;\n    }\n    else {\n        // DB doesn't work well with the points of a polygon specified in clockwise order for some reason\n        if (isClockwisePolygon(coordinates)) {\n            coordinates.reverse();\n        }\n\n        const coordinateString = coordinates.map(coords => coords.reverse().join(\" \")).join(\", \");\n        return `POLYGON((${coordinateString}))`;\n    }\n}\n\n/**\n * Takes a Coordinate and uses Geocoding to get nearest address\n */\nexport function nearAddressForCoordinate(coordinate: Coordinate): Promise<string> {\n    return new Promise(resolve => {\n        // only try if google is loaded\n        if (window.google) {\n            const geocoder = new google.maps.Geocoder();\n            geocoder.geocode({ location: new google.maps.LatLng(...coordinate) }, function (results, status) {\n                if (status == google.maps.GeocoderStatus.OK && results?.[0]) {\n                    resolve(\"near \" + results[0].formatted_address);\n                }\n                else {\n                    console.log(\"Geocoder failed due to: \" + status);\n                    resolve(\"\");\n                }\n            });\n        }\n        else {\n            resolve(\"\");\n        }\n    });\n}\n\n/**\n * Takes a Coordinate array and uses Geocoding to get nearest address for the first point\n */\nexport function nearAddressForCoordinates(coordinates: Coordinate[]): Promise<string> {\n    if (!coordinates || coordinates.length == 0) {\n        return Promise.resolve(\"\");\n    }\n    return nearAddressForCoordinate(coordinates[0]);\n}\n\n/**\n * Determine whether the polygon's coordinates are drawn in clockwise order\n * Thank you dominoc!\n * http://dominoc925.blogspot.com/2012/03/c-code-to-determine-if-polygon-vertices.html\n */\nexport function isClockwisePolygon(polygon: number[][]): boolean {\n    let sum = 0;\n\n    for (let i = 0; i < polygon.length - 1; i++) {\n        sum += (Math.abs(polygon[i + 1][0]) - Math.abs(polygon[i][0])) * (Math.abs(polygon[i + 1][1]) + Math.abs(polygon[i][1]));\n    }\n\n    return sum > 0;\n}\n\n/**\n * Download the necessary resources to run the maps and return the map settings from the API\n *\n * @param options Options for which data to get from the API\n *\n * @return Promise with the map settings retrieved from the API\n */\nexport async function loadMapResources(options: GeoPickerGetSettingsOptionsBag = { mapStyleValueGuid: emptyGuid }): Promise<GeoPickerSettingsBag> {\n    const response = await post<GeoPickerGoogleMapSettingsBag>(\"/api/v2/Controls/GeoPickerGetGoogleMapSettings\", undefined, options);\n    const googleMapSettings = response.data ?? {};\n\n    let keyParam = \"\";\n\n    if (googleMapSettings.googleApiKey) {\n        keyParam = `key=${googleMapSettings.googleApiKey}&`;\n    }\n\n    await loadJavaScriptAsync(`https://maps.googleapis.com/maps/api/js?${keyParam}libraries=drawing,visualization,geometry,marker`, () => typeof (google) != \"undefined\" && typeof (google.maps) != \"undefined\", {}, false);\n\n    return googleMapSettings;\n}\n\n/**\n * Creates a ILatLng object\n */\nexport function createLatLng(latOrLatLngOrLatLngLiteral: number | ILatLngLiteral | ILatLng, lngOrNoClampNoWrap?: number | boolean | null, noClampNoWrap?: boolean): ILatLng {\n    return new google.maps.LatLng(latOrLatLngOrLatLngLiteral as number, lngOrNoClampNoWrap, noClampNoWrap);\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { DayOfWeek, RockDateTime } from \"./rockDateTime\";\nimport { newGuid } from \"./guid\";\nimport { toNumberOrNull } from \"./numberUtils\";\nimport { pluralConditional } from \"./stringUtils\";\n\ntype Frequency = \"DAILY\" | \"WEEKLY\" | \"MONTHLY\";\n\n/**\n * The day of the week and an interval number for that particular day.\n */\nexport type WeekdayNumber = {\n    /** The interval number for this day. */\n    value: number;\n\n    /** The day of the week. */\n    day: DayOfWeek;\n};\n\n// Abbreviate nth lookup table.\nconst nthNamesAbbreviated: [number, string][] = [\n    [1, \"1st\"],\n    [2, \"2nd\"],\n    [3, \"3rd\"],\n    [4, \"4th\"],\n    [-1, \"last\"]\n];\n\n// #region Internal Functions\n\n/**\n * Converts the number to a string and pads the left with zeros to make up\n * the minimum required length.\n *\n * @param value The value to be converted to a string.\n * @param length The minimum required length of the final string.\n *\n * @returns A string that represents the value.\n */\nfunction padZeroLeft(value: number, length: number): string {\n    const str = value.toString();\n\n    return \"0\".repeat(length - str.length) + str;\n}\n\n/**\n * Get a date-only string that can be used in the iCal format.\n *\n * @param date The date object to be converted to a string.\n *\n * @returns A string that represents only the date portion of the parameter.\n */\nfunction getDateString(date: RockDateTime): string {\n    const year = date.year;\n    const month = date.month;\n    const day = date.day;\n\n    return `${year}${padZeroLeft(month, 2)}${padZeroLeft(day, 2)}`;\n}\n\n/**\n * Gets a time-only string that can be used in the iCal format.\n *\n * @param date The date object to be converted to a string.\n *\n * @returns A string that represents only the time portion of the parameter.\n */\nfunction getTimeString(date: RockDateTime): string {\n    const hour = date.hour;\n    const minute = date.minute;\n    const second = date.second;\n\n    return `${padZeroLeft(hour, 2)}${padZeroLeft(minute, 2)}${padZeroLeft(second, 2)}`;\n}\n\n/**\n * Gets a date and time string that can be used in the iCal format.\n *\n * @param date The date object to be converted to a string.\n *\n * @returns A string that represents only the date and time of the parameter.\n */\nfunction getDateTimeString(date: RockDateTime): string {\n    return `${getDateString(date)}T${getTimeString(date)}`;\n}\n\n/**\n * Gets all the date objects from a range or period string value. This converts\n * from an iCal format into a set of date objects.\n *\n * @param value The string value in iCal format.\n *\n * @returns An array of date objects that represents the range or period value.\n */\nfunction getDatesFromRangeOrPeriod(value: string): RockDateTime[] {\n    const segments = value.split(\"/\");\n\n    if (segments.length === 0) {\n        return [];\n    }\n\n    const startDate = getDateFromString(segments[0]);\n    if (!startDate) {\n        return [];\n    }\n\n    if (segments.length !== 2) {\n        return [startDate];\n    }\n\n    const dates: RockDateTime[] = [];\n\n    if (segments[1].startsWith(\"P\")) {\n        // Value is a period so we have a start date and then a period marker\n        // to tell us how long that date extends.\n        const days = getPeriodDurationInDays(segments[1]);\n\n        for (let day = 0; day < days; day++) {\n            const date = startDate.addDays(day);\n            if (date) {\n                dates.push(date);\n            }\n        }\n    }\n    else {\n        // Value is a date range so we have a start date and then an end date\n        // and we need to fill in the dates in between.\n        const endDate = getDateFromString(segments[1]);\n\n        if (endDate !== null) {\n            let date = startDate;\n\n            while (date <= endDate) {\n                dates.push(date);\n                date = date.addDays(1);\n            }\n        }\n    }\n\n    return dates;\n}\n\n/**\n * Get a date object that only has the date portion filled in from the iCal\n * date string. The time will be set to midnight.\n *\n * @param value An iCal date value.\n *\n * @returns A date object that represents the iCal date value.\n */\nfunction getDateFromString(value: string): RockDateTime | null {\n    if (value.length < 8) {\n        return null;\n    }\n\n    const year = parseInt(value.substring(0, 4));\n    const month = parseInt(value.substring(4, 6));\n    const day = parseInt(value.substring(6, 8));\n\n    return RockDateTime.fromParts(year, month, day);\n}\n\n/**\n * Get a date object that has both the date and time filled in from the iCal\n * date string.\n *\n * @param value An iCal date value.\n *\n * @returns A date object that represents the iCal date value.\n */\nfunction getDateTimeFromString(value: string): RockDateTime | null {\n    if (value.length < 15 || value[8] !== \"T\") {\n        return null;\n    }\n\n    const year = parseInt(value.substring(0, 4));\n    const month = parseInt(value.substring(4, 6));\n    const day = parseInt(value.substring(6, 8));\n    const hour = parseInt(value.substring(9, 11));\n    const minute = parseInt(value.substring(11, 13));\n    const second = parseInt(value.substring(13, 15));\n\n    return RockDateTime.fromParts(year, month, day, hour, minute, second);\n}\n\n/**\n * Gets an iCal period duration in the number of days.\n *\n * @param period The iCal period definition.\n *\n * @returns The number of days found in the definition.\n */\nfunction getPeriodDurationInDays(period: string): number {\n    // These are in a format like P1D, P2W, etc.\n    if (!period.startsWith(\"P\")) {\n        return 0;\n    }\n\n    if (period.endsWith(\"D\")) {\n        return parseInt(period.substring(1, period.length - 1));\n    }\n    else if (period.endsWith(\"W\")) {\n        return parseInt(period.substring(1, period.length - 1)) * 7;\n    }\n\n    return 0;\n}\n\n/**\n * Gets the specific recurrence dates from a RDATE iCal value string.\n *\n * @param attributes The attributes that were defined on the RDATE property.\n * @param value The value of the RDATE property.\n *\n * @returns An array of date objects found in the RDATE value.\n */\nfunction getRecurrenceDates(attributes: Record<string, string>, value: string): RockDateTime[] {\n    const recurrenceDates: RockDateTime[] = [];\n    const valueParts = value.split(\",\");\n    let valueType = attributes[\"VALUE\"];\n\n    for (const valuePart of valueParts) {\n        if(!valueType) {\n            // The value type is unspecified and it could be a PERIOD, DATE-TIME or a DATE.\n            // Determine it based on the length and the contents of the valuePart string.\n\n            const length = valuePart.length;\n\n            if (length === 8) { // Eg: 20240117\n                valueType = \"DATE\";\n            }\n            else if ((length === 15 || length === 16) && valuePart[8] === \"T\") { // Eg: 19980119T020000, 19970714T173000Z\n                valueType = \"DATE-TIME\";\n            }\n            else { // Eg: 20240201/20240202, 20240118/P1D\n                valueType = \"PERIOD\";\n            }\n        }\n\n\n        if (valueType === \"PERIOD\") {\n            // Values are stored in period format, such as \"20221005/P1D\".\n            recurrenceDates.push(...getDatesFromRangeOrPeriod(valuePart));\n        }\n        else if (valueType === \"DATE\") {\n            // Values are date-only values.\n            const date = getDateFromString(valuePart);\n            if (date) {\n                recurrenceDates.push(date);\n            }\n        }\n        else if (valueType === \"DATE-TIME\")  {\n            // Values are date and time values.\n            const date = getDateTimeFromString(valuePart);\n            if (date) {\n                recurrenceDates.push(date);\n            }\n        }\n    }\n\n    return recurrenceDates;\n}\n\n/**\n * Gets the name of the weekday from the iCal abbreviation.\n *\n * @param day The iCal day abbreviation.\n *\n * @returns A string that represents the day name.\n */\nfunction getWeekdayName(day: DayOfWeek): \"Sunday\" | \"Monday\" | \"Tuesday\" | \"Wednesday\" | \"Thursday\" | \"Friday\" | \"Saturday\" | \"Unknown\" {\n    if (day === DayOfWeek.Sunday) {\n        return \"Sunday\";\n    }\n    else if (day === DayOfWeek.Monday) {\n        return \"Monday\";\n    }\n    else if (day === DayOfWeek.Tuesday) {\n        return \"Tuesday\";\n    }\n    else if (day === DayOfWeek.Wednesday) {\n        return \"Wednesday\";\n    }\n    else if (day === DayOfWeek.Thursday) {\n        return \"Thursday\";\n    }\n    else if (day === DayOfWeek.Friday) {\n        return \"Friday\";\n    }\n    else if (day === DayOfWeek.Saturday) {\n        return \"Saturday\";\n    }\n    else {\n        return \"Unknown\";\n    }\n}\n\n/**\n * Checks if the date matches one of the weekday options.\n *\n * @param rockDate The date that must match one of the weekday options.\n * @param days The array of weekdays that the date must match.\n *\n * @returns True if the date matches; otherwise false.\n */\nfunction dateMatchesDays(rockDate: RockDateTime, days: DayOfWeek[]): boolean {\n    for (const day of days) {\n        if (rockDate.dayOfWeek === day) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/**\n * Checks if the date matches the specifie day of week and also the offset into\n * the month for that day.\n *\n * @param rockDate The date object to be checked.\n * @param dayOfWeek The day of week the date must be on.\n * @param offsets The offset in week, such as 2 meaning the second 'dayOfWeek' or -1 meaning the last 'dayOfWeek'.\n *\n * @returns True if the date matches the options; otherwise false.\n */\nfunction dateMatchesOffsetDayOfWeeks(rockDate: RockDateTime, dayOfWeek: DayOfWeek, offsets: number[]): boolean {\n    if (!dateMatchesDays(rockDate, [dayOfWeek])) {\n        return false;\n    }\n\n    const dayOfMonth = rockDate.day;\n\n    for (const offset of offsets) {\n        if (offset === 1 && dayOfMonth >= 1 && dayOfMonth <= 7) {\n            return true;\n        }\n        else if (offset === 2 && dayOfMonth >= 8 && dayOfMonth <= 14) {\n            return true;\n        }\n        else if (offset === 3 && dayOfMonth >= 15 && dayOfMonth <= 21) {\n            return true;\n        }\n        else if (offset === 4 && dayOfMonth >= 22 && dayOfMonth <= 28) {\n            return true;\n        }\n        else if (offset === -1) {\n            const lastDayOfMonth = rockDate.addDays(-(rockDate.day - 1)).addMonths(1).addDays(-1).day;\n\n            if (dayOfMonth >= (lastDayOfMonth - 7) && dayOfMonth <= lastDayOfMonth) {\n                return true;\n            }\n        }\n    }\n\n    return false;\n}\n\n/**\n * Gets the DayOfWeek value that corresponds to the iCal formatted weekday.\n *\n * @param day The day of the week to be parsed.\n *\n * @returns A DayOfWeek value that represents the day.\n */\nfunction getDayOfWeekFromIcalDay(day: \"SU\" | \"MO\" | \"TU\" | \"WE\" | \"TH\" | \"FR\" | \"SA\"): DayOfWeek {\n    switch (day) {\n        case \"SU\":\n            return DayOfWeek.Sunday;\n\n        case \"MO\":\n            return DayOfWeek.Monday;\n        case \"TU\":\n            return DayOfWeek.Tuesday;\n\n        case \"WE\":\n            return DayOfWeek.Wednesday;\n\n        case \"TH\":\n            return DayOfWeek.Thursday;\n\n        case \"FR\":\n            return DayOfWeek.Friday;\n\n        case \"SA\":\n            return DayOfWeek.Saturday;\n    }\n}\n\n/**\n * Gets the iCal abbreviation for the day of the week.\n *\n * @param day The day of the week to be converted to iCal format.\n *\n * @returns An iCal representation of the day of week.\n */\nfunction getiCalDay(day: DayOfWeek): \"SU\" | \"MO\" | \"TU\" | \"WE\" | \"TH\" | \"FR\" | \"SA\" {\n    switch (day) {\n        case DayOfWeek.Sunday:\n            return \"SU\";\n\n        case DayOfWeek.Monday:\n            return \"MO\";\n\n        case DayOfWeek.Tuesday:\n            return \"TU\";\n\n        case DayOfWeek.Wednesday:\n            return \"WE\";\n\n        case DayOfWeek.Thursday:\n            return \"TH\";\n\n        case DayOfWeek.Friday:\n            return \"FR\";\n\n        case DayOfWeek.Saturday:\n            return \"SA\";\n    }\n}\n\n/**\n * Normalizes line length so that none of the individual lines exceed the\n * maximum length of 75 charactes from the RFC.\n *\n * @param lines The array of lines to be normalized.\n *\n * @returns A new array with the lines normalized for length.\n */\nfunction normalizeLineLength(lines: string[]): string[] {\n    const newLines: string[] = [...lines];\n\n    for (let lineNumber = 0; lineNumber < newLines.length; lineNumber++) {\n        // Spec does not allow lines longer than 75 characters.\n        if (newLines[lineNumber].length > 75) {\n            const currentLine = newLines[lineNumber].substring(0, 75);\n            const newLine = \" \" + newLines[lineNumber].substring(75);\n\n            newLines.splice(lineNumber, 1, currentLine, newLine);\n        }\n    }\n\n    return newLines;\n}\n\n/**\n * Denormalizes line length so that any continuation lines are appending\n * to the previous line for proper parsing.\n *\n * @param lines The array of lines to be denormalized.\n *\n * @returns A new array with the lines denormalized.\n */\nfunction denormalizeLineLength(lines: string[]): string[] {\n    const newLines: string[] = [...lines];\n\n    for (let lineNumber = 1; lineNumber < newLines.length;) {\n        if (newLines[lineNumber][0] === \" \") {\n            newLines[lineNumber - 1] += newLines[lineNumber].substring(1);\n            newLines.splice(lineNumber, 1);\n        }\n        else {\n            lineNumber++;\n        }\n    }\n\n    return newLines;\n}\n\n// #endregion\n\n/**\n * Helper utility to feed lines into ICS parsers.\n */\nclass LineFeeder {\n    // #region Properties\n\n    /**\n     * The denormalzied lines that represent the ICS data.\n     */\n    private lines: string[];\n\n    // #endregion\n\n    // #region Constructors\n\n    /**\n     * Creates a new LineFeeder with the given content.\n     *\n     * @param content A string that represents raw ICS data.\n     */\n    constructor(content: string) {\n        const lines = content.split(/\\r\\n|\\n|\\r/);\n\n        this.lines = denormalizeLineLength(lines);\n    }\n\n    // #endregion\n\n    // #region Functions\n\n    /**\n     * Peek at the next line to be read from the feeder.\n     *\n     * @returns The next line to be read or null if no more lines remain.\n     */\n    public peek(): string | null {\n        if (this.lines.length === 0) {\n            return null;\n        }\n\n        return this.lines[0];\n    }\n\n    /**\n     * Pops the next line from the feeder, removing it.\n     *\n     * @returns The line that was removed from the feeder or null if no lines remain.\n     */\n    public pop(): string | null {\n        if (this.lines.length === 0) {\n            return null;\n        }\n\n        return this.lines.splice(0, 1)[0];\n    }\n\n    // #endregion\n}\n\n/**\n * Logic and structure for a rule that defines when an even recurs on\n * different dates.\n */\nexport class RecurrenceRule {\n    // #region Properties\n\n    /**\n     * The frequency of this recurrence. Only Daily, Weekly and Monthly\n     * are supported.\n     */\n    public frequency?: Frequency;\n\n    /**\n     * The date at which no more event dates will be generated. This is\n     * an exclusive date, meaning if an event date lands on this date\n     * then it will not be included in the list of dates.\n     */\n    public endDate?: RockDateTime;\n\n    /**\n     * The maximum number of dates, including the original date, that\n     * should be generated.\n     */\n    public count?: number;\n\n    /**\n     * The interval between dates based on the frequency. If this value is\n     * 2 and frequency is Weekly, then you are asking for \"every other week\".\n     */\n    public interval: number = 1;\n\n    /**\n     * The days of the month the event should recur on. Only a single value\n     * is supported currently.\n     */\n    public byMonthDay: number[] = [];\n\n    /**\n     * The days of the week the event shoudl recur on.\n     */\n    public byDay: WeekdayNumber[] = [];\n\n    // #endregion\n\n    // #region Constructors\n\n    /**\n     * Creates a new recurrence rule that can be used to define or adjust the\n     * recurrence pattern of an event.\n     *\n     * @param rule An existing RRULE string from an iCal file.\n     *\n     * @returns A new instance that can be used to adjust or define the rule.\n     */\n    public constructor(rule: string | undefined = undefined) {\n        if (!rule) {\n            return;\n        }\n\n        // Rule has a format like \"FREQ=DAILY;COUNT=5\" so we split by semicolon\n        // first and then sub-split by equals character and then stuff everything\n        // into this values object.\n        const values: Record<string, string> = {};\n\n        for (const attr of rule.split(\";\")) {\n            const attrParts = attr.split(\"=\");\n            if (attrParts.length === 2) {\n                values[attrParts[0]] = attrParts[1];\n            }\n        }\n\n        // Make sure the values we have are valid.\n        if (values[\"UNTIL\"] !== undefined && values[\"COUNT\"] !== undefined) {\n            throw new Error(`Recurrence rule '${rule}' cannot specify both UNTIL and COUNT.`);\n        }\n\n        if (values[\"FREQ\"] !== \"DAILY\" && values[\"FREQ\"] !== \"WEEKLY\" && values[\"FREQ\"] !== \"MONTHLY\") {\n            throw new Error(`Invalid frequence for recurrence rule '${rule}'.`);\n        }\n\n        this.frequency = values[\"FREQ\"];\n\n        if (values[\"UNTIL\"]?.length === 8) {\n            this.endDate = getDateFromString(values[\"UNTIL\"]) ?? undefined;\n        }\n        else if (values[\"UNTIL\"]?.length >= 15) {\n            this.endDate = getDateTimeFromString(values[\"UNTIL\"]) ?? undefined;\n        }\n\n        if (values[\"COUNT\"] !== undefined) {\n            this.count = toNumberOrNull(values[\"COUNT\"]) ?? undefined;\n        }\n\n        if (values[\"INTERVAL\"] !== undefined) {\n            this.interval = toNumberOrNull(values[\"INTERVAL\"]) ?? 1;\n        }\n\n        if (values[\"BYMONTHDAY\"] !== undefined && values[\"BYMONTHDAY\"].length > 0) {\n            this.byMonthDay = [];\n\n            for (const v of values[\"BYMONTHDAY\"].split(\",\")) {\n                const num = toNumberOrNull(v);\n                if (num !== null) {\n                    this.byMonthDay.push(num);\n                }\n            }\n        }\n\n        if (values[\"BYDAY\"] !== undefined && values[\"BYDAY\"].length > 0) {\n            this.byDay = [];\n\n            for (const v of values[\"BYDAY\"].split(\",\")) {\n                if (v.length < 2) {\n                    continue;\n                }\n\n                const num = v.length > 2 ? toNumberOrNull(v.substring(0, v.length - 2)) : 1;\n                const day = v.substring(v.length - 2);\n\n                if (num === null) {\n                    continue;\n                }\n\n                if (day === \"SU\" || day === \"MO\" || day === \"TU\" || day == \"WE\" || day == \"TH\" || day == \"FR\" || day == \"SA\") {\n                    this.byDay.push({\n                        value: num,\n                        day: getDayOfWeekFromIcalDay(day)\n                    });\n                }\n            }\n        }\n    }\n\n    // #endregion\n\n    // #region Functions\n\n    /**\n     * Builds and returns the RRULE value for an iCal file export.\n     *\n     * @returns A RRULE value that represents the recurrence rule.\n     */\n    public build(): string {\n        const attributes: string[] = [];\n\n        attributes.push(`FREQ=${this.frequency}`);\n\n        if (this.count !== undefined) {\n            attributes.push(`COUNT=${this.count}`);\n        }\n        else if (this.endDate) {\n            attributes.push(`UNTIL=${getDateTimeString(this.endDate)}`);\n        }\n\n        if (this.interval > 1) {\n            attributes.push(`INTERVAL=${this.interval}`);\n        }\n\n        if (this.byMonthDay.length > 0) {\n            const monthDayValues = this.byMonthDay.map(md => md.toString()).join(\",\");\n            attributes.push(`BYMONTHDAY=${monthDayValues}`);\n        }\n\n        if (this.frequency === \"MONTHLY\" && this.byDay.length > 0) {\n            const dayValues = this.byDay.map(d => `${d.value}${getiCalDay(d.day)}`);\n            attributes.push(`BYDAY=${dayValues}`);\n        }\n        else if (this.byDay.length > 0) {\n            const dayValues = this.byDay.map(d => d.value !== 1 ? `${d.value}${getiCalDay(d.day)}` : getiCalDay(d.day));\n            attributes.push(`BYDAY=${dayValues}`);\n        }\n\n        return attributes.join(\";\");\n    }\n\n    /**\n     * Gets all the dates within the range that match the recurrence rule. A\n     * maximum of 100,000 dates will be returned by this function.\n     *\n     * @param eventStartDateTime The start date and time of the primary event this rule is for.\n     * @param startDateTime The inclusive starting date and time that events should be returned for.\n     * @param endDateTime The exclusive ending date and time that events should be returned for.\n     *\n     * @returns An array of date objects that represent the additional dates and times for the event.\n     */\n    public getDates(eventStartDateTime: RockDateTime, startDateTime: RockDateTime, endDateTime: RockDateTime): RockDateTime[] {\n        const dates: RockDateTime[] = [];\n        let rockDate = eventStartDateTime;\n        let dateCount = 0;\n\n        if (!rockDate) {\n            return [];\n        }\n\n        if (this.endDate && this.endDate < endDateTime) {\n            endDateTime = this.endDate;\n        }\n\n        while (rockDate < endDateTime && dateCount < 100_000) {\n            if (this.count && dateCount >= this.count) {\n                break;\n            }\n\n            dateCount++;\n\n            if (rockDate >= startDateTime) {\n                dates.push(rockDate);\n            }\n\n            const nextDate = this.nextDateAfter(rockDate);\n\n            if (nextDate === null) {\n                break;\n            }\n            else {\n                rockDate = nextDate;\n            }\n        }\n\n        return dates;\n    }\n\n    /**\n     * Gets the next valid date after the specified date based on our recurrence\n     * rules.\n     *\n     * @param rockDate The reference date that should be used when calculation the next date.\n     *\n     * @returns The next date after the reference date or null if one cannot be determined.\n     */\n    private nextDateAfter(rockDate: RockDateTime): RockDateTime | null {\n        if (this.frequency === \"DAILY\") {\n            return rockDate.addDays(this.interval);\n        }\n        else if (this.frequency === \"WEEKLY\" && this.byDay.length > 0) {\n            let nextDate = rockDate;\n\n            if (nextDate.dayOfWeek === DayOfWeek.Saturday) {\n                // On saturday process any skip intervals to move past the next n weeks.\n                nextDate = nextDate.addDays(1 + ((this.interval - 1) * 7));\n            }\n            else {\n                nextDate = nextDate.addDays(1);\n            }\n\n            while (!dateMatchesDays(nextDate, this.byDay.map(d => d.day))) {\n                if (nextDate.dayOfWeek === DayOfWeek.Saturday) {\n                    // On saturday process any skip intervals to move past the next n weeks.\n                    nextDate = nextDate.addDays(1 + ((this.interval - 1) * 7));\n                }\n                else {\n                    nextDate = nextDate.addDays(1);\n                }\n            }\n\n            return nextDate;\n        }\n        else if (this.frequency === \"MONTHLY\") {\n            if (this.byMonthDay.length > 0) {\n                let nextDate = rockDate.addDays(-(rockDate.day - 1));\n\n                if (rockDate.day >= this.byMonthDay[0]) {\n                    nextDate = nextDate.addMonths(this.interval);\n                }\n\n                let lastDayOfMonth = nextDate.addMonths(1).addDays(-1).day;\n                let loopCount = 0;\n\n                // Skip any months that don't have this day number.\n                while (lastDayOfMonth < this.byMonthDay[0]) {\n                    nextDate = nextDate.addMonths(this.interval);\n\n                    lastDayOfMonth = nextDate.addMonths(1).addDays(-1).day;\n\n                    // Fail-safe check so we don't get stuck looping forever\n                    // if the rule is one that can't be determined. Such as a\n                    // rule for the 30th day of the month every 12 months\n                    // starting in February.\n                    if (loopCount++ >= 100) {\n                        return null;\n                    }\n                }\n\n                nextDate = nextDate.addDays(this.byMonthDay[0] - 1);\n\n                return nextDate;\n            }\n            else if (this.byDay.length > 0) {\n                const dayOfWeek = this.byDay[0].day;\n                const offsets = this.byDay.map(d => d.value);\n\n                let nextDate = rockDate.addDays(1);\n\n                while (!dateMatchesOffsetDayOfWeeks(nextDate, dayOfWeek, offsets)) {\n                    nextDate = nextDate.addDays(1);\n                }\n\n                return nextDate;\n            }\n        }\n\n        return null;\n    }\n\n    // #endregion\n}\n\n/**\n * A single event inside a calendar.\n */\nexport class Event {\n    // #region Properties\n\n    /**\n     * The unique identifier for this schedule used in the scheduled event.\n     */\n    public uid?: string;\n\n    /**\n     * The first date and time that the event occurs on. This must be provided\n     * before the schedule can be built.\n     */\n    public startDateTime?: RockDateTime;\n\n    /**\n     * The end date and time for the event. This must be provided before\n     * this schedule can be built.\n     */\n    public endDateTime?: RockDateTime;\n\n    /**\n     * An array of dates to be excluded from the recurrence rules.\n     */\n    public excludedDates: RockDateTime[] = [];\n\n    /**\n     * An array of specific dates that this schedule will recur on. This is\n     * only valid if recurrenceRules contains no rules.\n     */\n    public recurrenceDates: RockDateTime[] = [];\n\n    /**\n     * The rules that define when this schedule recurs on for additional dates.\n     * Only the first rule is currently supported.\n     */\n    public recurrenceRules: RecurrenceRule[] = [];\n\n    // #endregion\n\n    // #region Constructors\n\n    /**\n     * Creates a new internet calendar event.\n     *\n     * @param icsContent The content from the ICS file that represents this single event.\n     *\n     * @returns A new Event instance.\n     */\n    public constructor(icsContent: string | LineFeeder | undefined = undefined) {\n        if (icsContent === undefined) {\n            this.uid = newGuid();\n            return;\n        }\n\n        let feeder: LineFeeder;\n\n        if (typeof icsContent === \"string\") {\n            feeder = new LineFeeder(icsContent);\n        }\n        else {\n            feeder = icsContent;\n        }\n\n        this.parse(feeder);\n    }\n\n    // #endregion\n\n    // #region Functions\n\n    /**\n     * Build the event as a list of individual lines that make up the event in\n     * the ICS file format.\n     *\n     * @returns An array of lines to be inserted into an ICS file.\n     */\n    public buildLines(): string[] {\n        if (!this.startDateTime || !this.endDateTime) {\n            return [];\n        }\n\n        const lines: string[] = [];\n\n        lines.push(\"BEGIN:VEVENT\");\n        lines.push(`DTEND:${getDateTimeString(this.endDateTime)}`);\n        lines.push(`DTSTAMP:${getDateTimeString(RockDateTime.now())}`);\n        lines.push(`DTSTART:${getDateTimeString(this.startDateTime)}`);\n\n        if (this.excludedDates.length > 0) {\n            lines.push(`EXDATE:${this.excludedDates.map(d => getDateString(d) + \"/P1D\").join(\",\")}`);\n        }\n\n        if (this.recurrenceDates.length > 0) {\n            const recurrenceDates: string[] = [];\n            for (const date of this.recurrenceDates) {\n                const rDate = RockDateTime.fromParts(date.year, date.month, date.day, this.startDateTime.hour, this.startDateTime.minute, this.startDateTime.second);\n                if (rDate) {\n                    recurrenceDates.push(getDateTimeString(rDate));\n                }\n            }\n\n            lines.push(`RDATE:${recurrenceDates.join(\",\")}`);\n        }\n        else if (this.recurrenceRules.length > 0) {\n            for (const rrule of this.recurrenceRules) {\n                lines.push(`RRULE:${rrule.build()}`);\n            }\n        }\n\n        lines.push(\"SEQUENCE:0\");\n        lines.push(`UID:${this.uid}`);\n        lines.push(\"END:VEVENT\");\n\n        return lines;\n    }\n\n    /**\n     * Builds the event into a string that conforms to ICS format.\n     *\n     * @returns An ICS formatted string that represents the event data.\n     */\n     public build(): string | null {\n        const lines = this.buildLines();\n\n        if (lines.length === 0) {\n            return null;\n        }\n\n        return normalizeLineLength(lines).join(\"\\r\\n\");\n    }\n\n    /**\n     * Parse data from an existing event and store it on this instance.\n     *\n     * @param feeder The feeder that will provide the line data for parsing.\n     */\n    private parse(feeder: LineFeeder): void {\n        let duration: string | null = null;\n        let line: string | null;\n\n        // Verify this is an event.\n        if (feeder.peek() !== \"BEGIN:VEVENT\") {\n            throw new Error(\"Invalid event.\");\n        }\n\n        feeder.pop();\n\n        // Parse the line until we run out of lines or see an END line.\n        while ((line = feeder.pop()) !== null) {\n            if (line === \"END:VEVENT\") {\n                break;\n            }\n\n            const splitAt = line.indexOf(\":\");\n            if (splitAt < 0) {\n                continue;\n            }\n\n            let key = line.substring(0, splitAt);\n            const value = line.substring(splitAt + 1);\n\n            const keyAttributes: Record<string, string> = {};\n            const keySegments = key.split(\";\");\n            if (keySegments.length > 1) {\n                key = keySegments[0];\n                keySegments.splice(0, 1);\n\n                for (const attr of keySegments) {\n                    const attrSegments = attr.split(\"=\");\n                    if (attr.length === 2) {\n                        keyAttributes[attrSegments[0]] = attrSegments[1];\n                    }\n                }\n            }\n\n            if (key === \"DTSTART\") {\n                this.startDateTime = getDateTimeFromString(value) ?? undefined;\n            }\n            else if (key === \"DTEND\") {\n                this.endDateTime = getDateTimeFromString(value) ?? undefined;\n            }\n            else if (key === \"RRULE\") {\n                this.recurrenceRules.push(new RecurrenceRule(value));\n            }\n            else if (key === \"RDATE\") {\n                this.recurrenceDates = getRecurrenceDates(keyAttributes, value);\n            }\n            else if (key === \"UID\") {\n                this.uid = value;\n            }\n            else if (key === \"DURATION\") {\n                duration = value;\n            }\n            else if (key === \"EXDATE\") {\n                const dateValues = value.split(\",\");\n                for (const dateValue of dateValues) {\n                    const dates = getDatesFromRangeOrPeriod(dateValue);\n                    this.excludedDates.push(...dates);\n                }\n            }\n        }\n\n        if (duration !== null) {\n            // TODO: Calculate number of seconds and add to startDate.\n        }\n    }\n\n    /**\n     * Determines if the date is listed in one of the excluded dates. This\n     * currently only checks the excludedDates but in the future might also\n     * check the excluded rules.\n     *\n     * @param rockDate The date to be checked to see if it is excluded.\n     *\n     * @returns True if the date is excluded; otherwise false.\n     */\n    private isDateExcluded(rockDate: RockDateTime): boolean {\n        const rockDateOnly = rockDate.date;\n\n        for (const excludedDate of this.excludedDates) {\n            if (excludedDate.date.isEqualTo(rockDateOnly)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Get all the dates for this event that fall within the specified date range.\n     *\n     * @param startDateTime The inclusive starting date to use when filtering event dates.\n     * @param endDateTime The exclusive endign date to use when filtering event dates.\n     *\n     * @returns An array of dates that fall between startDateTime and endDateTime.\n     */\n    public getDates(startDateTime: RockDateTime, endDateTime: RockDateTime): RockDateTime[] {\n        if (!this.startDateTime) {\n            return [];\n        }\n\n        // If the schedule has a startDateTime that is later than the requested\n        // startDateTime then use ours instead.\n        if (this.startDateTime > startDateTime) {\n            startDateTime = this.startDateTime;\n        }\n\n        if (this.recurrenceDates.length > 0) {\n            const dates: RockDateTime[] = [];\n            const recurrenceDates: RockDateTime[] = [this.startDateTime, ...this.recurrenceDates];\n\n            for (const date of recurrenceDates) {\n                if (date >= startDateTime && date < endDateTime) {\n                    dates.push(date);\n                }\n            }\n\n            return dates;\n        }\n        else if (this.recurrenceRules.length > 0) {\n            const rrule = this.recurrenceRules[0];\n\n            return rrule.getDates(this.startDateTime, startDateTime, endDateTime)\n                .filter(d => !this.isDateExcluded(d));\n        }\n        else {\n            if (this.startDateTime >= startDateTime && this.startDateTime < endDateTime) {\n                return [this.startDateTime];\n            }\n\n            return [];\n        }\n    }\n\n    /**\n     * Get the friendly text string that represents this event. This will be a\n     * plain text string with no formatting applied.\n     *\n     * @returns A string that represents the event in a human friendly manner.\n     */\n    public toFriendlyText(): string {\n        return this.toFriendlyString(false);\n    }\n\n    /**\n     * Get the friendly HTML string that represents this event. This will be\n     * formatted with HTML to make the information easier to read.\n     *\n     * @returns A string that represents the event in a human friendly manner.\n     */\n    public toFriendlyHtml(): string {\n        return this.toFriendlyString(true);\n    }\n\n    /**\n     * Get the friendly string that can be easily understood by a human.\n     *\n     * @param html If true then the string can contain HTML content to make things easier to read.\n     *\n     * @returns A string that represents the event in a human friendly manner.\n     */\n    private toFriendlyString(html: boolean): string {\n        if (!this.startDateTime) {\n            return \"\";\n        }\n\n        const startTimeText = this.startDateTime.toLocaleString({ hour: \"numeric\", minute: \"2-digit\", hour12: true });\n\n        if (this.recurrenceRules.length > 0) {\n            const rrule = this.recurrenceRules[0];\n\n            if (rrule.frequency === \"DAILY\") {\n                let result = \"Daily\";\n\n                if (rrule.interval > 1) {\n                    result += ` every ${rrule.interval} ${pluralConditional(rrule.interval, \"day\", \"days\")}`;\n                }\n\n                result += ` at ${startTimeText}`;\n\n                return result;\n            }\n            else if (rrule.frequency === \"WEEKLY\") {\n                if (rrule.byDay.length === 0) {\n                    return \"No Scheduled Days\";\n                }\n\n                let result = rrule.byDay.map(d => getWeekdayName(d.day) + \"s\").join(\",\");\n\n                if (rrule.interval > 1) {\n                    result = `Every ${rrule.interval} weeks: ${result}`;\n                }\n                else {\n                    result = `Weekly: ${result}`;\n                }\n\n                return `${result} at ${startTimeText}`;\n            }\n            else if (rrule.frequency === \"MONTHLY\") {\n                if (rrule.byMonthDay.length > 0) {\n                    let result = `Day ${rrule.byMonthDay[0]} of every `;\n\n                    if (rrule.interval > 1) {\n                        result += `${rrule.interval} months`;\n                    }\n                    else {\n                        result += \"month\";\n                    }\n\n                    return `${result} at ${startTimeText}`;\n                }\n                else if (rrule.byDay.length > 0) {\n                    const byDay = rrule.byDay[0];\n                    const offsetNames = nthNamesAbbreviated.filter(n => rrule.byDay.some(d => d.value == n[0])).map(n => n[1]);\n                    let result = \"\";\n\n                    if (offsetNames.length > 0) {\n                        let nameText: string;\n\n                        if (offsetNames.length > 2) {\n                            nameText = `${offsetNames.slice(0, offsetNames.length - 1).join(\", \")} and ${offsetNames[offsetNames.length - 1]}`;\n                        }\n                        else {\n                            nameText = offsetNames.join(\" and \");\n                        }\n                        result = `The ${nameText} ${getWeekdayName(byDay.day)} of every month`;\n                    }\n                    else {\n                        return \"\";\n                    }\n\n                    return `${result} at ${startTimeText}`;\n                }\n                else {\n                    return \"\";\n                }\n            }\n            else {\n                return \"\";\n            }\n        }\n        else {\n            const dates: RockDateTime[] = [this.startDateTime, ...this.recurrenceDates];\n\n            if (dates.length === 1) {\n                return `Once at ${this.startDateTime.toASPString(\"g\")}`;\n            }\n            else if (!html || dates.length > 99) {\n                const firstDate = dates[0];\n                const lastDate = dates[dates.length - 1];\n\n                if (firstDate && lastDate) {\n                    return `Multiple dates between ${firstDate.toASPString(\"g\")} and ${lastDate.toASPString(\"g\")}`;\n                }\n                else {\n                    return \"\";\n                }\n            }\n            else if (dates.length > 1) {\n                let listHtml = `<ul class=\"list-unstyled\">`;\n\n                for (const date of dates) {\n                    listHtml += `<li>${date.toASPString(\"g\")}</li>`;\n                }\n\n                listHtml += \"</li>\";\n\n                return listHtml;\n            }\n            else {\n                return \"No Schedule\";\n            }\n        }\n    }\n\n    // #endregion\n}\n\n/**\n * A recurring schedule allows schedules to be built and customized from the iCal\n * format used in ics files.\n */\nexport class Calendar {\n    // #region Properties\n\n    /**\n     * The events that exist for this calendar.\n     */\n    public events: Event[] = [];\n\n    // #endregion\n\n    // #region Constructors\n\n    /**\n     * Creates a new Calendar instance.\n     *\n     * @param icsContent The content from an ICS file to initialize the calendar with.\n     *\n     * @returns A new Calendar instance.\n     */\n    public constructor(icsContent: string | undefined = undefined) {\n        if (icsContent === undefined) {\n            return;\n        }\n\n        const feeder = new LineFeeder(icsContent);\n\n        this.parse(feeder);\n    }\n\n    // #endregion\n\n    // #region Functions\n\n    /**\n     * Builds the calendar into a string that conforms to ICS format.\n     *\n     * @returns An ICS formatted string that represents the calendar data.\n     */\n    public build(): string | null {\n        const lines: string[] = [];\n\n        lines.push(\"BEGIN:VCALENDAR\");\n        lines.push(\"PRODID:-//github.com/SparkDevNetwork/Rock//NONSGML Rock//EN\");\n        lines.push(\"VERSION:2.0\");\n\n        for (const event of this.events) {\n            lines.push(...event.buildLines());\n        }\n\n        lines.push(\"END:VCALENDAR\");\n\n        return denormalizeLineLength(lines).join(\"\\r\\n\");\n    }\n\n    /**\n     * Parses the ICS data from a line feeder and constructs the calendar\n     * from that data.\n     *\n     * @param feeder The feeder that provides the individual lines.\n     */\n    private parse(feeder: LineFeeder): void {\n        let line: string | null;\n\n        // Parse the line data.\n        while ((line = feeder.peek()) !== null) {\n            if (line === \"BEGIN:VEVENT\") {\n                const event = new Event(feeder);\n\n                this.events.push(event);\n            }\n            else {\n                feeder.pop();\n            }\n        }\n    }\n\n    // #endregion\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Liquid } from \"@Obsidian/Libs/liquidjs\";\n\nconst engine = new Liquid({\n    cache: true\n});\n\nconst hasLavaCommandFieldsRegex: RegExp = /\\{%.+%\\}/;\nconst hasLavaShortcodeFieldsRegex: RegExp = /\\{\\[.+\\]\\}/;\n\nexport function resolveMergeFields(template: string, mergeFields: Record<string, unknown>): string {\n    const tpl = engine.parse(template);\n\n    return engine.renderSync(tpl, mergeFields);\n}\n\n/** Determines whether the string potentially has lava command {% %} fields in it. */\nexport function hasLavaCommandFields(template: string): boolean {\n    return hasLavaCommandFieldsRegex.test(template);\n}\n\n/** Determines whether the string potentially has lava shortcode {[ ]} fields in it. */\nexport function hasLavaShortcodeFields(template: string): boolean {\n    return hasLavaShortcodeFieldsRegex.test(template);\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\n\nexport function asListItemBagOrNull(bagJson: string): ListItemBag | null {\n    try {\n        const val = JSON.parse(bagJson);\n\n        if (\"value\" in val || \"text\" in val) {\n            return val;\n        }\n\n        return null;\n    }\n    catch (e) {\n        return null;\n    }\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { MergeFieldPickerFormatSelectedValueOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeFieldPickerFormatSelectedValueOptionsBag\";\nimport { useHttp } from \"./http\";\n\n/**\n * Take a given mergeFieldPicker value and format it for Lava\n *\n * @param value The merge field to be formatted\n *\n * @returns The formatted string in a Promise\n */\nexport async function formatValue(value: string): Promise<string> {\n    const http = useHttp();\n\n    const options: MergeFieldPickerFormatSelectedValueOptionsBag = {\n        selectedValue: value\n    };\n\n    const response = await http.post<string>(\"/api/v2/Controls/MergeFieldPickerFormatSelectedValue\", {}, options);\n\n    if (response.isSuccess && response.data) {\n        return response.data;\n    }\n    else {\n        console.error(\"Error\", response.errorMessage || `Error formatting '${value}'.`);\n        return \"\";\n    }\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\n\nexport function fromEntries(entries: Iterable<[PropertyKey, string]>): Record<string, unknown> {\n    const res = {};\n    for (const entry of entries) {\n        res[entry[0]] = entry[1];\n    }\n    return res;\n}\n\n/**\n * Clone an object/array. Only works with values that can be converted to JSON, which means no\n * functions, self-/circular references, etc.\n */\nexport function clone<T>(obj:T) : T {\n    return JSON.parse(JSON.stringify(obj));\n}\n\n/**\n * Take an object and convert it to a list of ListItemBag objects.\n * Each property is a ListItemBag where the key becomes the text property\n * and the value becomes the value property.\n *\n * @param obj The object to convert. Each property value should be able to be converted to a string.\n *\n * @return A list of ListItemBags.\n */\nexport function toListItemBagList (obj: Record<string, unknown>): ListItemBag[] {\n    return Object.entries(obj).map(([key, value]) => {\n        return {\n            text: key,\n            value: `${value}`,\n        } as ListItemBag;\n    });\n}\n\n/**\n * Gets the value at the specified path within the object.\n *\n * @example\n * const object = {\n *     person: {\n *          name: \"Ted Decker\"\n *     }\n * };\n *\n * const value = getValueFromPath(object, \"person.name\"); // returns \"Ted Decker\"\n *\n * @param object The object containing the desired value.\n * @param path The dot-separated path name to the desired value.\n * @returns The value at the specified path within the object, or `undefined`\n * if no such path exists.\n */\nexport function getValueFromPath(object: Record<string, unknown>, path: string): unknown {\n    if (!object || !path) {\n        return;\n    }\n\n    const pathNames = path.split(\".\");\n\n    for (let i = 0; i < pathNames.length; i++) {\n        const pathName = pathNames[i].trim();\n\n        // If the object doesn't have the specified path name as its own\n        // property, return `undefined`.\n        if (!pathName || !Object.prototype.hasOwnProperty.call(object, pathName)) {\n            return;\n        }\n\n        const value = object[pathName];\n\n        // If this is the last path name specified, return the current value.\n        if (i === pathNames.length - 1) {\n            return value;\n        }\n\n        // If the current value is not an object, but there are still\n        // more path names to traverse, return `undefined`.\n        if (typeof value !== \"object\") {\n            return;\n        }\n\n        // Reassign `object` to the current value. This type assertion might\n        // be incorrect, but will be caught on the next iteration if so,\n        // in which case `undefined` will be returned.\n        object = value as Record<string, unknown>;\n    }\n\n    // If we somehow got here, return `undefined`.\n    return;\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport Cache from \"./cache\";\nimport { useHttp } from \"./http\";\nimport { PhoneNumberBoxGetConfigurationResultsBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberBoxGetConfigurationResultsBag\";\nimport { PhoneNumberCountryCodeRulesConfigurationBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberCountryCodeRulesConfigurationBag\";\nimport { PhoneNumberBoxGetConfigurationOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberBoxGetConfigurationOptionsBag\";\n\n/**\n * Fetch the configuration for phone numbers and their possible formats for different countries\n */\nasync function fetchPhoneNumberConfiguration(): Promise<PhoneNumberBoxGetConfigurationResultsBag> {\n    const http = useHttp();\n    const result = await http.post<PhoneNumberBoxGetConfigurationResultsBag>(\"/api/v2/Controls/PhoneNumberBoxGetConfiguration\", undefined, null);\n\n    if (result.isSuccess && result.data) {\n        return result.data;\n    }\n\n    throw new Error(result.errorMessage ?? \"Error fetching phone number configuration\");\n}\n\n/**\n * Fetch the configuration for phone numbers, SMS option, and possible phone number formats for different countries\n */\nasync function fetchPhoneNumberAndSmsConfiguration(): Promise<PhoneNumberBoxGetConfigurationResultsBag> {\n    const http = useHttp();\n    const options: PhoneNumberBoxGetConfigurationOptionsBag = {\n        showSmsOptIn: true\n    };\n    const result = await http.post<PhoneNumberBoxGetConfigurationResultsBag>(\"/api/v2/Controls/PhoneNumberBoxGetConfiguration\", undefined, options);\n\n    if (result.isSuccess && result.data) {\n        return result.data;\n    }\n\n    throw new Error(result.errorMessage ?? \"Error fetching phone number configuration\");\n}\n\n/**\n * Fetch the configuration for phone numbers and their possible formats for different countries.\n * Cacheable version of fetchPhoneNumberConfiguration cacheable\n */\nexport const getPhoneNumberConfiguration = Cache.cachePromiseFactory(\"phoneNumberConfiguration\", fetchPhoneNumberConfiguration);\n\nexport const getPhoneNumberAndSmsConfiguration = Cache.cachePromiseFactory(\"phoneNumberAndSmsConfiguration\", fetchPhoneNumberAndSmsConfiguration);\n\nconst defaultRulesConfig = [\n    {\n        \"match\": \"^(\\\\d{3})(\\\\d{4})$\",\n        \"format\": \"$1-$2\"\n    },\n    {\n        \"match\": \"^(\\\\d{3})(\\\\d{3})(\\\\d{4})$\",\n        \"format\": \"($1) $2-$3\"\n    },\n    {\n        \"match\": \"^1(\\\\d{3})(\\\\d{3})(\\\\d{4})$\",\n        \"format\": \"($1) $2-$3\"\n    }\n];\n\n/**\n * Format a phone number according to a given configuration\n *\n * e.g. from the default configuration:\n * 3214567 => 321-4567\n * 3214567890 => (321) 456-7890\n */\nexport function formatPhoneNumber(value: string, rules: PhoneNumberCountryCodeRulesConfigurationBag[] = defaultRulesConfig): string {\n    value = stripPhoneNumber(value);\n\n    if (!value || rules.length == 0) {\n        return value;\n    }\n\n    for (const rule of rules) {\n        const regex = new RegExp(rule.match ?? \"\");\n\n        if (regex.test(value)) {\n            return value.replace(regex, rule.format ?? \"\") || value;\n        }\n    }\n\n    return value;\n}\n\n/**\n * Strips special characters from the phone number.\n * (321) 456-7890 => 3214567890\n * @param str\n */\nexport function stripPhoneNumber(str: string): string {\n    if (!str) {\n        return \"\";\n    }\n\n    return str.replace(/\\D/g, \"\");\n}\n\nexport default {\n    getPhoneNumberConfiguration,\n    formatPhoneNumber,\n    stripPhoneNumber\n};\n\n/* eslint-disable */\n// @ts-ignore\nwindow.formatPhoneNumber = formatPhoneNumber;","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n\n// NOTE: Do not make this public yet. This is essentially temporary and\n// will likely move to a different place and be merged with the tooltip\n// concept code as well.\ntype PopoverOptions = {\n    /** Allow HTML content in the popover. */\n    html?: boolean;\n\n    /** Enables santization of HTML content. */\n    sanitize?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ndeclare const $: any;\n\n/**\n * Configure a popover for the specified node or nodes to show on hover. This\n * currently uses Bootstrap popovers but may be changed to use a different\n * method later.\n * \n * @param node The node or nodes to have popovers configured on.\n * @param options The options that describe how the popovers should behave.\n */\nexport function popover(node: Element | Element[], options?: PopoverOptions): void {\n    // If we got an array of elements then activate each one.\n    if (Array.isArray(node)) {\n        for (const n of node) {\n            popover(n, options);\n        }\n\n        return;\n    }\n\n    $(node).popover({\n        html: options?.html,\n        sanitize: options?.sanitize ?? true\n    });\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n/**\n * Returns a promise that completes after the specified number of milliseconds\n * have ellapsed.\n * \n * @param ms The number of milliseconds to wait.\n * \n * @returns A promise that completes after the interval has ellapsed.\n */\nexport function sleep(ms: number): Promise<void> {\n    return new Promise<void>(resolve => {\n        setTimeout(resolve, ms);\n    });\n}\n\n/**\n * Checks if the value is a promise to return a value. This is used to check\n * if a function that could have returned either a value or a promise for a\n * value returned a promise.\n * \n * @param obj The object to be tested if it is a promise.\n *\n * @returns True if the object is a promise.\n */\nexport function isPromise<T>(obj: PromiseLike<T> | T): obj is PromiseLike<T> {\n    return !!obj && (typeof obj === \"object\" || typeof obj === \"function\") && typeof (obj as Record<string, unknown>).then === \"function\";\n}\n\n/**\n * A class that provides a way to defer execution via await until some\n * external trigger happens.\n */\nexport class PromiseCompletionSource<T = void> {\n    private internalPromise: Promise<T>;\n\n    private internalResolve: (T) => void = () => { /* Intentionally blank. */ };\n\n    private internalReject: (reason?: unknown) => void = () => { /* Intentionally blank. */ };\n\n    constructor() {\n        this.internalPromise = new Promise<T>((resolve, reject) => {\n            this.internalResolve = resolve;\n            this.internalReject = reject;\n        });\n    }\n\n    /** The promise that can be awaited. */\n    public get promise(): Promise<T> {\n        return this.internalPromise;\n    }\n\n    /**\n     * Resolves the promise with the given value.\n     * \n     * @param value The value to be returned by the await call.\n     */\n    public resolve(value: T): void {\n        this.internalResolve(value);\n    }\n\n    /**\n     * Rejects the promise and throws the reason as an error.\n     * \n     * @param reason The reason to be thrown by the await call.\n     */\n    public reject(reason?: unknown): void {\n        this.internalReject(reason);\n    }\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { loadJavaScriptAsync } from \"./page\";\n\n// Disable certain checks as they are needed to interface with existing JS file.\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** A generic set a server functions with no type checking. */\nexport type GenericServerFunctions = {\n    [name: string]: (...args: unknown[]) => unknown;\n};\n\n/** A set of specific server functions that conform to an interface. */\nexport type ServerFunctions<T> = {\n    [K in keyof T]: T[K] extends Function ? T[K] : never;\n};\n\n/**\n * An object that allows RealTime communication between the browser and the Rock\n * server over a specific topic.\n */\nexport interface ITopic<TServer extends ServerFunctions<TServer> = GenericServerFunctions> {\n    /**\n     * Allows messages to be sent to the server. Any property access is treated\n     * like a message function whose property name is the message name.\n     */\n    server: TServer;\n\n    /**\n     * Gets the connection identifier for this topic. This will be the same for\n     * all topics, but that should not be relied on staying that way in the future.\n     */\n    get connectionId(): string | null;\n\n    /**\n     * Gets a value that indicates if the topic is currently reconnecting.\n     */\n    get isReconnecting(): boolean;\n\n    /**\n     * Gets a value that indicates if the topic is disconnected and will no\n     * longer try to connect to the server.\n     */\n    get isDisconnected(): boolean;\n\n    /**\n     * Registers a handler to be called when a message with the given name\n     * is received.\n     *\n     * @param messageName The message name that will trigger the handler.\n     * @param handler The handler to be called when a message is received.\n     */\n    on(messageName: string, handler: ((...args: any[]) => void)): void;\n\n    /**\n     * Registers a handler to be called when any message is received.\n     *\n     * @param handler The handler to be called when a message is received.\n     */\n    onMessage(handler: ((messageName: string, args: unknown[]) => void)): void;\n\n    /**\n     * Registers a callback to be called when the connection has been\n     * temporarily lost. An automatic reconnection is in progress. The topic\n     * is now in a state where it can not send any messages.\n     *\n     * @param callback The callback to be called.\n     */\n    onReconnecting(callback: (() => void)): void;\n\n    /**\n     * Registers a callback to be called when the connection has been\n     * reconnected. The topic can now send messages again.\n     *\n     * @param callback The callback to be called.\n     */\n    onReconnected(callback: (() => void)): void;\n\n    /**\n     * Registers a callback to be called when the connection has been lost\n     * and will no longer try to reconnect.\n     *\n     * @param callback The callback to be called.\n     */\n    onDisconnected(callback: (() => void)): void;\n}\n\ninterface IRockRealTimeStatic {\n    getTopic<TServer extends ServerFunctions<TServer>>(identifier: string): Promise<ITopic<TServer>>;\n}\n\nlet libraryObject: IRockRealTimeStatic | null = null;\nlet libraryPromise: Promise<boolean> | null = null;\n\n/**\n * Gets the real time object from window.Rock.RealTime. If it is not available\n * then an exception will be thrown.\n *\n * @returns An instance of IRockRealTimeStatic.\n */\nasync function getRealTimeObject(): Promise<IRockRealTimeStatic> {\n    if (libraryObject) {\n        return libraryObject;\n    }\n\n    if (!libraryPromise) {\n        libraryPromise = loadJavaScriptAsync(\"/Scripts/Rock/realtime.js\", () => !!window[\"Rock\"]?.[\"RealTime\"]);\n    }\n\n    if (!await libraryPromise) {\n        throw new Error(\"Unable to load RealTime library.\");\n    }\n\n    libraryObject = window[\"Rock\"]?.[\"RealTime\"] as IRockRealTimeStatic;\n\n    return libraryObject;\n}\n\n/**\n * Connects to a specific topic in the Rock RealTime system and returns an\n * instance to a proxy that handles sending to and receiving messages from\n * that specific topic.\n *\n * @param identifier The identifier of the topic to be connected to.\n *\n * @returns A proxy to handle communication with the topic.\n */\nexport async function getTopic<TServer extends ServerFunctions<TServer>>(identifier: string): Promise<ITopic<TServer>> {\n    const realTime = await getRealTimeObject();\n\n    return realTime.getTopic(identifier);\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\n/**\n * Regex patterns used for validation purposes\n */\nexport const regexPatterns = {\n    // This regular expression pattern matches parentheses, curly braces, square brackets, and double quotes.\n    specialCharacterPattern: /[({[\\]})\"]/,\n\n    // Regular expression to match emojis and special Unicode characters.\n    emojiPattern: /[\\u{1F000}-\\u{1F6FF}\\u{1F900}-\\u{1F9FF}\\u{2600}-\\u{26FF}\\u{2700}-\\u{27BF}\\u{1F300}-\\u{1F5FF}\\u{1F680}-\\u{1F6FF}\\u{1F1E0}-\\u{1F1FF}]/u,\n\n    // Regular expression to match special font characters.\n    specialFontPattern: /[\\u{1D400}-\\u{1D7FF}\\u{1F100}-\\u{1F1FF}]/u\n};\n\n/**\n * Returns a regular expression pattern for matching special characters.\n * This pattern can be used to identify or validate strings containing parentheses, curly braces, square brackets, and double quotes.\n * @returns {RegExp} A regular expression object for matching special characters.\n */\nexport const getSpecialCharacterPattern = (): RegExp => regexPatterns.specialCharacterPattern;\n\n/**\n * Returns a regular expression pattern for matching emoji characters.\n * This pattern can be used to identify or validate strings containing emojis.\n * @returns {RegExp} A regular expression object for matching emoji characters.\n */\nexport const getEmojiPattern = (): RegExp => regexPatterns.emojiPattern;\n\n/**\n * Returns a regular expression pattern for matching special font characters.\n * This pattern can be used to identify or validate strings containing characters from special fonts,\n * such as mathematical alphanumeric symbols or enclosed alphanumerics.\n * @returns {RegExp} A regular expression object for matching special font characters.\n */\nexport const getSpecialFontPattern = (): RegExp => regexPatterns.specialFontPattern;","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport Big from \"@Obsidian/Libs/big\";\nimport { CurrencyInfoBag } from \"@Obsidian/ViewModels/Rest/Utilities/currencyInfoBag\";\nimport { toCurrencyOrNull } from \"./numberUtils\";\n\ntype RockCurrencyValue = number | string | RockCurrency;\n\ntype RockCurrencyFormatOptions = {\n    excludeGroupingSeparators: boolean;\n};\n\nexport class RockCurrency {\n    private readonly big: Big;\n\n    get isZero(): boolean {\n        return this.big.eq(0);\n    }\n\n    get number(): number {\n        return this.big.toNumber();\n    }\n\n    get isNegative(): boolean {\n        return this.big.lt(0);\n    }\n\n    get units(): number {\n        return this.big.times(new Big(10).pow(this.currencyInfo.decimalPlaces)).toNumber();\n    }\n\n    /**\n     * Creates a new RockCurrency instance.\n     *\n     * Keep private so the constructor can hide reference to the underlying Big library usage.\n     */\n    private constructor(value: RockCurrencyValue | Big.Big, readonly currencyInfo: CurrencyInfoBag) {\n        if (value instanceof RockCurrency) {\n            // Always truncate the currency value decimal places (with Big.roundDown).\n            this.big = new Big(value.big).round(this.currencyInfo.decimalPlaces, Big.roundDown);\n        }\n        else {\n            // Always truncate the currency value decimal places (with Big.roundDown).\n            // Default to 0 if the value is nullish.\n            this.big = new Big(value ?? 0).round(this.currencyInfo.decimalPlaces, Big.roundDown);\n        }\n    }\n\n    /**\n     * Creates a new instance of the RockCurrency class.\n     *\n     * @param value The currency value.\n     * @param currencyInfo The currency info.\n     * @returns A new RockCurrency instance.\n     */\n    static create(value: RockCurrencyValue, currencyInfo: CurrencyInfoBag): RockCurrency {\n        return new RockCurrency(value, currencyInfo);\n    }\n\n    asRockCurrency(value: RockCurrencyValue): RockCurrency {\n        return value instanceof RockCurrency ? value : new RockCurrency(value, this.currencyInfo);\n    }\n\n    /**\n     * Adds an amount to this RockCurrency.\n     *\n     * @param value The amount to add to this currency. Fractional amounts that exceed this currency's precision will be truncated; e.g., if this currency has a precision of two ($31.45), and the amount being added has a precision of three ($2.289), the \"9\" will be truncated to $2.28.\n     * @returns A createCurrency instance containing the sum of the two currencies.\n     * @example\n     * createCurrency(2.61).add(3.999);               // returns createCurrency(6.60)\n     * createCurrency(2.61).add(createCurrency(3.999)); // returns createCurrency(6.60)\n     */\n    add(value: RockCurrencyValue): RockCurrency {\n        const currency = this.asRockCurrency(value);\n\n        return new RockCurrency(this.big.plus(currency.big), this.currencyInfo);\n    }\n\n    /**\n     * Gets the negation of this RockCurrency.\n     *\n     * @returns A createCurrency instance containing the negation of this RockCurrency.\n     * @example\n     * createCurrency(2.61).negate(); // returns createCurrency(-2.61)\n     */\n    negate(): RockCurrency {\n        return new RockCurrency(this.big.neg(), this.currencyInfo);\n    }\n\n    /**\n     * Divides this currency by a number.\n     *\n     * @param divisor The number by which to divide this currency. Must be a number as a currency cannot be divided by another currency.\n     * @returns The quotient and remainder of the division as separate RockCurrency instances.\n     * @example\n     * createCurrency(3.50).divide(3); // returns { quotient: createCurrency(1.16), remainder: createCurrency(0.02) }\n     */\n    divide(divisor: number): { quotient: RockCurrency, remainder: RockCurrency } {\n        // Always truncate the currency value decimal places (with Big.roundDown).\n        const quotient = this.big.div(divisor).round(this.currencyInfo.decimalPlaces, Big.roundDown);\n        const remainder = this.big.minus(quotient.times(divisor));\n\n        return {\n            quotient: new RockCurrency(quotient, this.currencyInfo),\n            remainder: new RockCurrency(remainder, this.currencyInfo),\n        };\n    }\n\n    /**\n     * Subtracts an amount from this currency.\n     *\n     * @param currency The amount to subtract from this currency. Fractional amounts that exceed this currency's precision will be truncated; e.g., if this currency has a precision of two ($31.45), and the amount being subtracted has a precision of three ($2.289), the \"9\" will be truncated to $2.28.\n     * @returns A createCurrency instance containing the difference of the two currencies.\n     * @example\n     * createCurrency(2.61).subtract(3.999);               // returns createCurrency(-1.38)\n     * createCurrency(2.61).subtract(createCurrency(3.999)); // returns createCurrency(-1.38)\n     */\n    subtract(value: RockCurrencyValue): RockCurrency {\n        const currency = this.asRockCurrency(value);\n\n        return new RockCurrency(this.big.minus(currency.big), this.currencyInfo);\n    }\n\n    /**\n     * Determines if this currency is equal another currency.\n     *\n     * @param value The currency to which to compare.\n     * @returns `true` if the currencies are equal; otherwise, `false` is returned.\n     */\n    isEqualTo(value: RockCurrencyValue): boolean {\n        const currency = this.asRockCurrency(value);\n        return this.big.eq(currency.big);\n    }\n\n    /**\n     * Determines if this currency is not equal to another currency.\n     *\n     * @param value The currency to which to compare.\n     * @returns `true` if the currencies are not equal; otherwise, `false` is returned.\n     */\n    isNotEqualTo(value: RockCurrencyValue): boolean {\n        const currency = this.asRockCurrency(value);\n        return !this.big.eq(currency.big);\n    }\n\n    /**\n     * Determines if this currency is less than another currency.\n     *\n     * @param value The currency to which to compare.\n     * @returns `true` if this currency is less than the provided currency; otherwise, `false` is returned.\n     */\n    isLessThan(value: RockCurrencyValue): boolean {\n        const currency = this.asRockCurrency(value);\n        return this.big.lt(currency.big);\n    }\n\n    /**\n     * Determines if this currency is less than or equal to another currency.\n     *\n     * @param value The currency to which to compare.\n     * @returns `true` if this currency is less than or equal to the provided currency; otherwise, `false` is returned.\n     */\n    isLessThanOrEqualTo(value: RockCurrencyValue): boolean {\n        const currency = this.asRockCurrency(value);\n        return this.big.lte(currency.big);\n    }\n\n    /**\n     * Returns this currency limited by the provided value.\n     *\n     * @param value The currency to which to compare.\n     * @returns `this` currency if it is equal to or greater than the limit; otherwise, `value` is returned.\n     */\n    noLessThan(value: RockCurrencyValue): RockCurrency {\n        const currency = this.asRockCurrency(value);\n        if (this.big.lt(currency.big)) {\n            return new RockCurrency(currency.big, this.currencyInfo);\n        }\n        else {\n            return this;\n        }\n    }\n\n    /**\n     * Determines if this currency is greater than another currency.\n     *\n     * @param value The currency to which to compare.\n     * @returns `true` if this currency is greater than the provided currency; otherwise, `false` is returned.\n     */\n    isGreaterThan(value: RockCurrencyValue): boolean {\n        const limit = this.asRockCurrency(value);\n        return this.big.gt(limit.big);\n    }\n\n    /**\n     * Returns this currency limited by the provided value.\n     *\n     * @param value The currency to which to compare.\n     * @returns `this` currency if it is equal to or less than the limit; otherwise, `limit` is returned.\n     */\n    noGreaterThan(value: RockCurrencyValue): RockCurrency {\n        const currency = this.asRockCurrency(value);\n        if (this.big.gt(currency.big)) {\n            return currency;\n        }\n        else {\n            return this;\n        }\n    }\n\n    /** Gets the absolute value of this currency. */\n    abs(): RockCurrency {\n        return new RockCurrency(this.big.abs(), this.currencyInfo);\n    }\n\n    /**\n     * Returns the remainder after dividing this currency by a number.\n     */\n    mod(divisor: number): RockCurrency {\n        const { remainder } = this.divide(divisor);\n        return remainder;\n    }\n\n    format(options: RockCurrencyFormatOptions | null = null): string {\n        if (options?.excludeGroupingSeparators) {\n            const valueString = this.big.toFixed(this.currencyInfo.decimalPlaces, Big.roundDown);\n            return `${this.currencyInfo.symbol}${valueString}`;\n        }\n        return this.toString();\n    }\n\n    /**\n     * Gets the formatted string value of this currency.\n     */\n    toString(): string {\n        // Always truncate the currency value decimal places (with Big.roundDown).\n        const valueString = this.big.toFixed(this.currencyInfo.decimalPlaces, Big.roundDown);\n\n        return toCurrencyOrNull(valueString, this.currencyInfo) ?? `${this.currencyInfo.symbol}${valueString}`;\n    }\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport {nextTick, onMounted, onUnmounted, Ref, ref} from \"vue\";\n\nexport function useScreenSize(mobileThreshold: number = 480): { isMobile: Ref<boolean>, screenSize: Ref<number> } {\n    const isMobile = ref(false);\n    const screenSize = ref(screen.width);\n\n    function onResize(): void {\n        screenSize.value = screen.width;\n        if (screen.width <= mobileThreshold) {\n            isMobile.value = true;\n        }\n        else {\n            isMobile.value = false;\n        }\n    }\n\n    onMounted(() => {\n        // Bit of a wait to make sure everything is fully initialized first.\n        nextTick(() => {\n            onResize();\n        });\n\n        window.addEventListener(\"resize\", onResize);\n    });\n\n    onUnmounted(() => {\n        window.removeEventListener(\"resize\", onResize);\n    });\n\n    return {\n        isMobile,\n        screenSize\n    };\n}\n\nexport function useViewportWidth(mobileThreshold: number = 480): { isMobile: Ref<boolean>, viewportWidth: Ref<number> } {\n    const isMobile = ref(false);\n    const viewportWidth = ref(window.innerWidth);\n\n    function onResize(): void {\n        viewportWidth.value = window.innerWidth;\n        isMobile.value = viewportWidth.value <= mobileThreshold;\n    }\n\n    onMounted(() => {\n        // Bit of a wait to make sure everything is fully initialized first.\n        nextTick(() => {\n            onResize();\n        });\n\n        window.addEventListener(\"resize\", onResize);\n    });\n\n    onUnmounted(() => {\n        window.removeEventListener(\"resize\", onResize);\n    });\n\n    return {\n        isMobile,\n        viewportWidth: viewportWidth\n    };\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\nimport { toNumber, toNumberOrNull } from \"./numberUtils\";\nimport { SlidingDateRangeType as RangeType, SlidingDateRangeType } from \"@Obsidian/Enums/Controls/slidingDateRangeType\";\nimport { TimeUnitType as TimeUnit } from \"@Obsidian/Enums/Controls/timeUnitType\";\nimport { DayOfWeek, RockDateTime } from \"./rockDateTime\";\n\n// This file contains helper functions and tooling required to work with sliding\n// date ranges. A sliding date range is one that, generally, is anchored to whatever\n// the current date and time is when the check is made. For example, \"within the next\n// 5 days\" would be the english equivalent of a sliding date range.\n\n/**\n * The enums have been moved to separate files in order to share with the back end. We import them\n * above (with the names used by the definitions that used to exist in this file) so they can be\n * used below and we export them here so that any files previously importing them from here\n * do not break.\n */\nexport { SlidingDateRangeType as RangeType } from \"@Obsidian/Enums/Controls/slidingDateRangeType\";\nexport { TimeUnitType as TimeUnit } from \"@Obsidian/Enums/Controls/timeUnitType\";\n\n/**\n * Specifies the information required to track a sliding date range.\n */\nexport type SlidingDateRange = {\n    /** The type of sliding date range represented by this instance. */\n    rangeType: RangeType;\n\n    /** The unit of time represented by the timeValue property. */\n    timeUnit?: TimeUnit;\n\n    /** The number of time units used when calculating the date range. */\n    timeValue?: number;\n\n    /** The lower value of a specific date range. */\n    lowerDate?: string;\n\n    /** The upper value of a specific date range. */\n    upperDate?: string;\n};\n\n/**\n * The sliding date range types represented as an array of ListItemBag objects.\n * These are ordered correctly and can be used in pickers.\n */\nexport const rangeTypeOptions: ListItemBag[] = [\n    {\n        value: RangeType.Current.toString(),\n        text: \"Current\"\n    },\n    {\n        value: RangeType.Previous.toString(),\n        text: \"Previous\"\n    },\n    {\n        value: RangeType.Last.toString(),\n        text: \"Last\"\n    },\n    {\n        value: RangeType.Next.toString(),\n        text: \"Next\"\n    },\n    {\n        value: RangeType.Upcoming.toString(),\n        text: \"Upcoming\"\n    },\n    {\n        value: RangeType.DateRange.toString(),\n        text: \"Date Range\"\n    }\n];\n\n/**\n * The sliding date range time units represented as an array of ListItemBag objects.\n * These are ordered correctly and can be used in pickers.\n */\nexport const timeUnitOptions: ListItemBag[] = [\n    {\n        value: TimeUnit.Hour.toString(),\n        text: \"Hour\"\n    },\n    {\n        value: TimeUnit.Day.toString(),\n        text: \"Day\"\n    },\n    {\n        value: TimeUnit.Week.toString(),\n        text: \"Week\"\n    },\n    {\n        value: TimeUnit.Month.toString(),\n        text: \"Month\"\n    },\n    {\n        value: TimeUnit.Year.toString(),\n        text: \"Year\"\n    },\n];\n\n/**\n * Helper function to get the text from a ListItemBag that matches the value.\n *\n * @param value The value to be searched for.\n * @param options The ListItemBag options to be searched.\n *\n * @returns The text value of the ListItemBag or an empty string if not found.\n */\nfunction getTextForValue(value: string, options: ListItemBag[]): string {\n    const matches = options.filter(v => v.value === value);\n\n    return matches.length > 0 ? matches[0].text ?? \"\" : \"\";\n}\n\n/**\n * Gets the user friendly text that represents the RangeType value.\n *\n * @param rangeType The RangeType value to be represented.\n *\n * @returns A human readable string that represents the RangeType value.\n */\nexport function getRangeTypeText(rangeType: RangeType): string {\n    const rangeTypes = rangeTypeOptions.filter(o => o.value === rangeType.toString());\n\n    return rangeTypes.length > 0 ? rangeTypes[0].text ?? \"\" : \"\";\n}\n\n/**\n * Gets the user friendly text that represents the TimeUnit value.\n *\n * @param timeUnit The TimeUnit value to be represented.\n *\n * @returns A human readable string that represents the TimeUnit value.\n */\nexport function getTimeUnitText(timeUnit: TimeUnit): string {\n    const timeUnits = timeUnitOptions.filter(o => o.value === timeUnit.toString());\n\n    return timeUnits.length > 0 ? timeUnits[0].text ?? \"\" : \"\";\n}\n\n/**\n * Parses a pipe delimited string into a SlidingDateRange native object. The\n * delimited string is a format used by attribute values and other places.\n *\n * @param value The pipe delimited string that should be parsed.\n *\n * @returns A SlidingDaterange object or null if the string could not be parsed.\n */\nexport function parseSlidingDateRangeString(value: string): SlidingDateRange | null {\n    const segments = value.split(\"|\");\n\n    if (segments.length < 3) {\n        return null;\n    }\n\n    // Find the matching range types and time units (should be 0 or 1) that\n    // match the values in the string.\n    const rangeTypes = rangeTypeOptions.filter(o => (o.text ?? \"\").replace(\" \", \"\").toLowerCase() === segments[0].toLowerCase() || o.value === segments[0]);\n    const timeUnits = timeUnitOptions.filter(o => (o.text ?? \"\").toLowerCase() === segments[2].toLowerCase() || o.value === segments[2]);\n\n    if (rangeTypes.length === 0) {\n        return null;\n    }\n\n    const range: SlidingDateRange = {\n        rangeType: toNumber(rangeTypes[0].value)\n    };\n\n    // If the range type is one that has time units then parse the time units.\n    if (([RangeType.Current, RangeType.Last, RangeType.Next, RangeType.Previous, RangeType.Upcoming] as number[]).includes(range.rangeType)) {\n        range.timeUnit = timeUnits.length > 0 ? toNumber(timeUnits[0].value) as TimeUnit : TimeUnit.Hour;\n\n        // If the range type is one that has time values then parse the time value.\n        if (([RangeType.Last, RangeType.Next, RangeType.Previous, RangeType.Upcoming] as number[]).includes(range.rangeType)) {\n            range.timeValue = toNumberOrNull(segments[1]) ?? 1;\n        }\n    }\n\n    // Parse the lower and upper dates if our range type is a DateRange.\n    if (range.rangeType === RangeType.DateRange) {\n        if (segments.length > 3) {\n            range.lowerDate = segments[3];\n        }\n\n        if (segments.length > 4) {\n            range.upperDate = segments[4];\n        }\n    }\n\n    return range;\n}\n\n/**\n * Formats the pipe delimited string.\n *\n * @param value The pipe delimited string that should be formatted.\n *\n * @returns A string that formats the sliding date range.\n */\nexport function slidingDateRangeToString(value: SlidingDateRange): string {\n\n    switch (value.rangeType) {\n        case RangeType.Current:\n            return `Current||${getTextForValue(value.timeUnit?.toString() ?? \"\", timeUnitOptions)}||`;\n\n        case RangeType.DateRange:\n            return `DateRange|||${value.lowerDate ?? \"\"}|${value.upperDate ?? \"\"}`;\n\n        default:\n            return `${getTextForValue(value.rangeType.toString(), rangeTypeOptions)}|${value.timeValue ?? \"\"}|${getTextForValue(value.timeUnit?.toString() ?? \"\", timeUnitOptions)}||`;\n    }\n}\n\n/**\n * Calculates the start and end dates in a sliding date range.\n *\n * @param value The sliding date range to use when calculating dates.\n * @param currentDateTime The date and time to use in any \"now\" calculations.\n *\n * @returns An object that contains the start and end dates and times.\n */\nexport function calculateSlidingDateRange(value: SlidingDateRange, currentDateTime: RockDateTime | null | undefined = undefined): { start: RockDateTime | null, end: RockDateTime | null } {\n    const result: { start: RockDateTime | null, end: RockDateTime | null } = {\n        start: null,\n        end: null\n    };\n\n    if (!currentDateTime) {\n        currentDateTime = RockDateTime.now();\n    }\n\n    if (value.rangeType === RangeType.Current) {\n        if (value.timeUnit === TimeUnit.Hour) {\n            result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0);\n            result.end = result.start?.addHours(1) ?? null;\n        }\n        else if (value.timeUnit === TimeUnit.Day) {\n            result.start = currentDateTime.date;\n            result.end = result.start.addDays(1);\n        }\n        else if (value.timeUnit === TimeUnit.Week) {\n            // TODO: This needs to be updated to get the FirstDayOfWeek from server.\n            let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\n\n            if (diff < 0) {\n                diff += 7;\n            }\n\n            result.start = currentDateTime.addDays(-1 * diff).date;\n            result.end = result.start.addDays(7);\n        }\n        else if (value.timeUnit === TimeUnit.Month) {\n            result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1);\n            result.end = result.start?.addMonths(1) ?? null;\n        }\n        else if (value.timeUnit === TimeUnit.Year) {\n            result.start = RockDateTime.fromParts(currentDateTime.year, 1, 1);\n            result.end = RockDateTime.fromParts(currentDateTime.year + 1, 1, 1);\n        }\n    }\n    else if (value.rangeType === RangeType.Last || value.rangeType === RangeType.Previous) {\n        // The number of time units to adjust by.\n        const count = value.timeValue ?? 1;\n\n        // If we are getting \"Last\" then round up to include the\n        // current day/week/month/year.\n        const roundUpCount = value.rangeType === RangeType.Last ? 1 : 0;\n\n        if (value.timeUnit === TimeUnit.Hour) {\n            result.end = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0)\n                ?.addHours(roundUpCount) ?? null;\n            result.start = result.end?.addHours(-count) ?? null;\n        }\n        else if (value.timeUnit === TimeUnit.Day) {\n            result.end = currentDateTime.date.addDays(roundUpCount);\n            result.start = result.end?.addDays(-count) ?? null;\n        }\n        else if (value.timeUnit === TimeUnit.Week) {\n            // TODO: This needs to be updated to get the FirstDayOfWeek from server.\n            let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\n\n            if (diff < 0) {\n                diff += 7;\n            }\n\n            result.end = currentDateTime.addDays(-1 * diff).date.addDays(7 * roundUpCount);\n            result.start = result.end.addDays(-count * 7);\n        }\n        else if (value.timeUnit === TimeUnit.Month) {\n            result.end = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1)?.addMonths(roundUpCount) ?? null;\n            result.start = result.end?.addMonths(-count) ?? null;\n        }\n        else if (value.timeUnit === TimeUnit.Year) {\n            result.end = RockDateTime.fromParts(currentDateTime.year, 1, 1)?.addYears(roundUpCount) ?? null;\n            result.start = result.end?.addYears(-count) ?? null;\n        }\n\n        // don't let Last,Previous have any future dates\n        const cutoffDate = currentDateTime.date.addDays(1);\n        if (result.end && result.end.date > cutoffDate) {\n            result.end = cutoffDate;\n        }\n    }\n    else if (value.rangeType === RangeType.Next || value.rangeType === RangeType.Upcoming) {\n        // The number of time units to adjust by.\n        const count = value.timeValue ?? 1;\n\n        // If we are getting \"Upcoming\" then round up to include the\n        // current day/week/month/year.\n        const roundUpCount = value.rangeType === RangeType.Upcoming ? 1 : 0;\n\n        if (value.timeUnit === TimeUnit.Hour) {\n            result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0)\n                ?.addHours(roundUpCount) ?? null;\n            result.end = result.start?.addHours(count) ?? null;\n        }\n        else if (value.timeUnit === TimeUnit.Day) {\n            result.start = currentDateTime.date.addDays(roundUpCount);\n            result.end = result.start.addDays(count);\n        }\n        else if (value.timeUnit === TimeUnit.Week) {\n            // TODO: This needs to be updated to get the FirstDayOfWeek from server.\n            let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\n\n            if (diff < 0) {\n                diff += 7;\n            }\n\n            result.start = currentDateTime.addDays(-1 * diff)\n                .date.addDays(7 * roundUpCount);\n            result.end = result.start.addDays(count * 7);\n        }\n        else if (value.timeUnit === TimeUnit.Month) {\n            result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1)\n                ?.addMonths(roundUpCount) ?? null;\n            result.end = result.start?.addMonths(count) ?? null;\n        }\n        else if (value.timeUnit === TimeUnit.Year) {\n            result.start = RockDateTime.fromParts(currentDateTime.year, 1, 1)\n                ?.addYears(roundUpCount) ?? null;\n            result.end = result.start?.addYears(count) ?? null;\n        }\n\n        // don't let Next,Upcoming have any past dates\n        if (result.start && result.start.date < currentDateTime.date) {\n            result.start = currentDateTime.date;\n        }\n    }\n    else if (value.rangeType === RangeType.DateRange) {\n        result.start = RockDateTime.parseISO(value.lowerDate ?? \"\");\n        result.end = RockDateTime.parseISO(value.upperDate ?? \"\");\n\n        // Sliding date range does not use ISO dates (though might be changed\n        // in the future). So if we can't parse as an ISO date then try a\n        // natural parse.\n        if (!result.start && value.lowerDate) {\n            result.start = RockDateTime.fromJSDate(new Date(value.lowerDate));\n        }\n\n        if (!result.end && value.upperDate) {\n            result.end = RockDateTime.fromJSDate(new Date(value.upperDate));\n        }\n\n        if (result.end) {\n            // Add a day to the end so that we get the entire day when comparing.\n            result.end = result.end.addDays(1);\n        }\n    }\n\n    // To avoid confusion about the day or hour of the end of the date range,\n    // subtract a millisecond off our 'less than' end date. For example, if our\n    // end date is 2019-11-7, we actually want all the data less than 2019-11-8,\n    // but if a developer does EndDate.DayOfWeek, they would want 2019-11-7 and\n    // not 2019-11-8 So, to make sure we include all the data for 2019-11-7, but\n    // avoid the confusion about what DayOfWeek of the end, we'll compromise by\n    // subtracting a millisecond from the end date\n    if (result.end && value.timeUnit != TimeUnit.Hour) {\n        result.end = result.end.addMilliseconds(-1);\n    }\n\n    return result;\n}\n","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport { useHttp } from \"./http\";\nimport { StructuredContentEditorConfigurationBag } from \"@Obsidian/ViewModels/Rest/Controls/structuredContentEditorConfigurationBag\";\nimport { StructuredContentBag } from \"@Obsidian/ViewModels/Rest/Controls/StructuredContentBag\";\nimport { StructuredContentEditorGetConfigurationOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/structuredContentEditorGetConfigurationOptionsBag\";\n\nconst http = useHttp();\n\n/** Fetches the configuration for the structured content editor. */\nexport async function getStructuredContentEditorConfiguration(options: StructuredContentEditorGetConfigurationOptionsBag): Promise<StructuredContentEditorConfigurationBag> {\n    const result = await http.post<StructuredContentEditorConfigurationBag>(\"/api/v2/Controls/StructuredContentEditorGetConfiguration\", undefined, options);\n\n    if (result.isSuccess && result.data) {\n        return result.data;\n    }\n\n    throw new Error(result.errorMessage || \"Error fetching structured content editor configuration\");\n}\n\n/** Fetches structured content as html. */\nexport async function getStructuredContentAsHtml(structuredContent: StructuredContentBag): Promise<string> {\n    try {\n        const result = await http.post<string>(\"/api/v2/Controls/StructuredContentAsHtml\", undefined, {...structuredContent});\n\n        if (result.isSuccess && result.data) {\n            return result.data;\n        }\n    }\n    catch (error)  {\n        /* Error intentionally ignored */\n    }\n    return \"\";\n}\n\n\nexport default {\n    getStructuredContentAsHtml,\n    getStructuredContentEditorConfiguration\n};","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { onBeforeUnmount } from \"vue\";\nimport { getUniqueCssSelector } from \"./dom\";\nimport { getFullscreenElement, isFullscreen } from \"./fullscreen\";\n\n// NOTE: Do not make this public yet. This is essentially temporary and\n// will likely move to a different place and be merged with the popover\n// concept code as well.\ntype TooltipOptions = {\n    /** The container element to place the tooltip in. */\n    container?: string;\n\n    /** Allow HTML content in the tooltip. */\n    html?: boolean;\n\n    /** Enables santization of HTML content. */\n    sanitize?: boolean;\n\n    /** The delay before showing/hiding the tooltip. */\n    delay?: number | {\n        /** The delay before showing the tooltip. */\n        show?: number;\n\n        /** The delay before hiding the tooltip. */\n        hide?: number;\n    };\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ndeclare const $: any;\n\n/**\n * Configure a tooltip for the specified node or nodes to show on hover. This\n * currently uses Bootstrap tooltips but may be changed to use a different\n * method later.\n *\n * @param node The node or nodes to have tooltips configured on.\n * @param options The options that describe how the tooltips should behave.\n */\nexport function tooltip(node: Element | Element[], options?: TooltipOptions): void {\n    // If we got an array of elements then activate each one.\n    if (Array.isArray(node)) {\n        for (const n of node) {\n            tooltip(n, options);\n        }\n\n        return;\n    }\n\n    if (typeof $ !== \"function\") {\n        return;\n    }\n\n    const $node = $(node);\n    let appliedContainer: string | undefined = undefined;\n    let fsElement: HTMLElement | undefined = undefined;\n\n    const getContainer = (): string | undefined => {\n        if (!isFullscreen() && fsElement) {\n            // No long in fullscreen mode, so reset everything.\n            fsElement.style.position = \"\";\n            fsElement = undefined;\n\n            return options?.container ?? \"body\";\n        }\n\n        const newFsElement = getFullscreenElement();\n\n        if (newFsElement && newFsElement === fsElement) {\n            // No change\n            return undefined;\n        }\n\n        if (newFsElement && newFsElement.contains(node)) {\n            // Newly in fullscreen mode, use the fullscreen element\n            fsElement = newFsElement as HTMLElement;\n            const fsElementPosition = getComputedStyle(fsElement).position;\n\n            if (fsElementPosition === \"static\") {\n                fsElement.style.position = \"relative\";\n            }\n\n            return getUniqueCssSelector(fsElement);\n        }\n\n        return options?.container ?? \"body\";\n    };\n\n    const applyTooltip = (container: string | undefined): void => {\n        // Already applied to this container, or no container provided so don't do anything.\n        if (appliedContainer === container || container === undefined) {\n            return;\n        }\n\n        if (appliedContainer) {\n            $node?.tooltip(\"destroy\");\n\n            setTimeout(() => {\n                $node?.tooltip({\n                    container: container,\n                    html: options?.html,\n                    sanitize: options?.sanitize ?? true,\n                    delay: options?.delay\n                });\n\n            }, 151);\n        }\n        else {\n            $node?.tooltip({\n                container: container,\n                html: options?.html,\n                sanitize: options?.sanitize ?? true,\n                delay: options?.delay\n            });\n        }\n\n        appliedContainer = container;\n    };\n\n    // When we attach to the body/html element, we need to change the container when we're in fullscreen mode.\n    if (!options?.container || options.container === \"body\" || options.container === \"html\") {\n        document.addEventListener(\"fullscreenchange\", () => applyTooltip(getContainer()));\n    }\n\n    applyTooltip(getContainer());\n\n    $node?.on(\"mouseleave\", function () {\n        $node?.tooltip(\"hide\");\n    });\n}\n\n/**\n * Manually show a previously-configured tooltip for the specified node.\n *\n * @param node The node for which to show a tooltip\n */\nexport function showTooltip(node: Element): void {\n    if (typeof $ === \"function\") {\n        $(node).tooltip(\"show\");\n    }\n}\n\n/**\n * Manually destroy a previously-configured tooltip for the specified node.\n *\n * @param node The node for which to destroy a tooltip.\n */\nexport function destroyTooltip(node: Element): void {\n    if (typeof $ === \"function\") {\n        $(node).tooltip(\"destroy\");\n    }\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Guid } from \"@Obsidian/Types\";\nimport { emptyGuid, toGuidOrNull } from \"./guid\";\nimport { post } from \"./http\";\nimport { SiteType } from \"@Obsidian/Enums/Cms/siteType\";\nimport { TreeItemBag } from \"@Obsidian/ViewModels/Utility/treeItemBag\";\nimport { CategoryPickerChildTreeItemsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/categoryPickerChildTreeItemsOptionsBag\";\nimport { LocationItemPickerGetActiveChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/locationItemPickerGetActiveChildrenOptionsBag\";\nimport { DataViewPickerGetDataViewsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/dataViewPickerGetDataViewsOptionsBag\";\nimport { WorkflowTypePickerGetWorkflowTypesOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/workflowTypePickerGetWorkflowTypesOptionsBag\";\nimport { PagePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/pagePickerGetChildrenOptionsBag\";\nimport { PagePickerGetSelectedPageHierarchyOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/pagePickerGetSelectedPageHierarchyOptionsBag\";\nimport { ConnectionRequestPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/connectionRequestPickerGetChildrenOptionsBag\";\nimport { GroupPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/groupPickerGetChildrenOptionsBag\";\nimport { MergeTemplatePickerGetMergeTemplatesOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeTemplatePickerGetMergeTemplatesOptionsBag\";\nimport { MergeTemplateOwnership } from \"@Obsidian/Enums/Controls/mergeTemplateOwnership\";\nimport { MetricCategoryPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/metricCategoryPickerGetChildrenOptionsBag\";\nimport { MetricItemPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/metricItemPickerGetChildrenOptionsBag\";\nimport { RegistrationTemplatePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/registrationTemplatePickerGetChildrenOptionsBag\";\nimport { ReportPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/reportPickerGetChildrenOptionsBag\";\nimport { SchedulePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/schedulePickerGetChildrenOptionsBag\";\nimport { WorkflowActionTypePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/workflowActionTypePickerGetChildrenOptionsBag\";\nimport { MergeFieldPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeFieldPickerGetChildrenOptionsBag\";\nimport { AssetManagerGetRootFoldersOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/assetManagerGetRootFoldersOptionsBag\";\nimport { AssetManagerBaseOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/assetManagerBaseOptionsBag\";\nimport { flatten } from \"./arrayUtils\";\nimport { toNumberOrNull } from \"./numberUtils\";\n\n/**\n * The methods that must be implemented by tree item providers. These methods\n * provide the TreeItem objects to be displayed when lazy loading is being used.\n */\nexport interface ITreeItemProvider {\n    /**\n     * Get the root items to be displayed in the tree list.\n     *\n     * @param expandToValues The values that should be auto-expanded to. This will contain\n     * the nodes that should be visible when the data is returned, they should not be\n     * expanded themselves, only any ancestor nodes.\n     *\n     * @returns A collection of TreeItem objects, optionally wrapped in a Promise\n     * if the loading is being performed asynchronously.\n     */\n    getRootItems(expandToValues: string[]): Promise<TreeItemBag[]> | TreeItemBag[];\n\n    /**\n     * Get the child items of the given tree item.\n     *\n     * @param item The parent item whose children should be loaded.\n     *\n     * @returns A collection of TreeItem objects, optionally wrapped in a Promise\n     * if the loading is being performed asynchronously.\n     */\n    getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> | TreeItemBag[];\n\n    /**\n     * Checks if the item can be selected by the individual. This function\n     * is optional.\n     *\n     * @param item The item that is about to be selected.\n     * @param isSelectable True if the tree view considers the item selectable.\n     *\n     * @returns A boolean that determines the final selectable state of the item.\n     */\n    canSelectItem?(item: TreeItemBag, isSelectable: boolean): boolean;\n}\n\n/**\n * Tree Item Provider for retrieving categories from the server and displaying\n * them inside a tree list.\n */\nexport class CategoryTreeItemProvider implements ITreeItemProvider {\n    /**\n     * The root category to start pulling categories from. Set to undefined to\n     * begin with any category that does not have a parent.\n     */\n    public rootCategoryGuid?: Guid;\n\n    /**\n     * The entity type unique identifier to restrict results to. Set to undefined\n     * to include all categories, regardless of entity type.\n     */\n    public entityTypeGuid?: Guid;\n\n    /**\n     * The value that must match in the category EntityTypeQualifierColumn\n     * property. Set to undefined or an empty string to ignore.\n     */\n    public entityTypeQualifierColumn?: string;\n\n    /**\n     * The value that must match in the category EntityTypeQualifierValue\n     * property.\n     */\n    public entityTypeQualifierValue?: string;\n\n    /**\n     * The security grant token that will be used to request additional access\n     * to the category list.\n     */\n    public securityGrantToken?: string | null;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid?: Guid | null): Promise<TreeItemBag[]> {\n        const options: CategoryPickerChildTreeItemsOptionsBag = {\n            parentGuid: parentGuid,\n            entityTypeGuid: this.entityTypeGuid,\n            entityTypeQualifierColumn: this.entityTypeQualifierColumn,\n            entityTypeQualifierValue: this.entityTypeQualifierValue,\n            lazyLoad: false,\n            securityGrantToken: this.securityGrantToken,\n\n            getCategorizedItems: false,\n            includeCategoriesWithoutChildren: true,\n            includeInactiveItems: false,\n            includeUnnamedEntityItems: false,\n        };\n\n        const response = await post<TreeItemBag[]>(\"/api/v2/Controls/CategoryPickerChildTreeItems\", {}, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(this.rootCategoryGuid);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n/**\n * Tree Item Provider for retrieving locations from the server and displaying\n * them inside a tree list.\n */\nexport class LocationTreeItemProvider implements ITreeItemProvider {\n    /**\n     * The security grant token that will be used to request additional access\n     * to the category list.\n     */\n    public securityGrantToken?: string | null;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid?: Guid | null): Promise<TreeItemBag[]> {\n        const options: LocationItemPickerGetActiveChildrenOptionsBag = {\n            guid: toGuidOrNull(parentGuid) ?? emptyGuid,\n            rootLocationGuid: emptyGuid,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/LocationItemPickerGetActiveChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n/**\n * Tree Item Provider for retrieving data views from the server and displaying\n * them inside a tree list.\n */\nexport class DataViewTreeItemProvider implements ITreeItemProvider {\n    /**\n     * The entity type unique identifier to restrict results to. Set to undefined\n     * to include all categories, regardless of entity type.\n     */\n    public entityTypeGuid?: Guid;\n\n    /**\n     * The security grant token that will be used to request additional access\n     * to the category list.\n     */\n    public securityGrantToken?: string | null;\n\n    /**\n     * The flag sets whether only persisted data view should be shown by the picker\n     */\n    public displayPersistedOnly: boolean = false;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid?: Guid | null): Promise<TreeItemBag[]> {\n        const options: DataViewPickerGetDataViewsOptionsBag = {\n            parentGuid,\n            getCategorizedItems: true,\n            includeCategoriesWithoutChildren: false,\n            entityTypeGuidFilter: this.entityTypeGuid,\n            lazyLoad: false,\n            securityGrantToken: this.securityGrantToken,\n            displayPersistedOnly: this.displayPersistedOnly,\n            includeUnnamedEntityItems: false,\n        };\n\n        const response = await post<TreeItemBag[]>(\"/api/v2/Controls/DataViewPickerGetDataViews\", {}, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n/**\n * Tree Item Provider for retrieving categories from the server and displaying\n * them inside a tree list.\n */\nexport class WorkflowTypeTreeItemProvider implements ITreeItemProvider {\n    /**\n     * The entity type unique identifier to restrict results to. Set to undefined\n     * to include all categories, regardless of entity type.\n     */\n    public includeInactiveItems?: boolean;\n\n    /**\n     * The security grant token that will be used to request additional access\n     * to the category list.\n     */\n    public securityGrantToken?: string | null;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid?: Guid | null): Promise<TreeItemBag[]> {\n        const options: WorkflowTypePickerGetWorkflowTypesOptionsBag = {\n            parentGuid,\n            includeInactiveItems: this.includeInactiveItems ?? false,\n            securityGrantToken: this.securityGrantToken,\n\n            getCategorizedItems: false,\n            includeCategoriesWithoutChildren: false,\n            includeUnnamedEntityItems: false,\n            lazyLoad: false,\n        };\n\n        const response = await post<TreeItemBag[]>(\"/api/v2/Controls/WorkflowTypePickerGetWorkflowTypes\", {}, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving pages from the server and displaying\n * them inside a tree list.\n */\nexport class PageTreeItemProvider implements ITreeItemProvider {\n    /**\n     * The security grant token that will be used to request additional access\n     * to the category list.\n     */\n    public securityGrantToken?: string | null;\n\n    /**\n     * List of GUIDs or pages to exclude from the list.\n     */\n    public hidePageGuids?: Guid[] | null;\n\n    /**\n     * Currently selected page\n     */\n    public selectedPageGuids?: Guid[] | null;\n\n    /**\n     * The site type to limit the results.\n     */\n    public siteType?: SiteType | null;\n\n    /**\n     * Gets the child items of the given parent (or root if no parent given) from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid?: Guid | null): Promise<TreeItemBag[]> {\n        let result: TreeItemBag[];\n\n        const options: PagePickerGetChildrenOptionsBag = {\n            guid: toGuidOrNull(parentGuid) ?? emptyGuid,\n            rootPageGuid: null,\n            hidePageGuids: this.hidePageGuids ?? [],\n            securityGrantToken: this.securityGrantToken,\n            siteType: this.siteType\n        };\n        const url = \"/api/v2/Controls/PagePickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            result = response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n\n        // If we're getting child nodes or if there is no selected page\n        if (parentGuid || !this.selectedPageGuids) {\n            return result;\n        }\n\n        // If we're getting the root elements and we have a selected page, we also want to grab\n        // all the parent pages so we can pre-load the entire hierarchy to the selected page\n        return this.getHierarchyToSelectedPage(result);\n    }\n\n    /**\n     * Get the hierarchical list of parent pages of the selectedPageGuid\n     *\n     * @returns A list of GUIDs of the parent pages\n     */\n    private async getParentList(): Promise<Guid[]> {\n        const options: PagePickerGetSelectedPageHierarchyOptionsBag = {\n            selectedPageGuids: this.selectedPageGuids,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/PagePickerGetSelectedPageHierarchy\";\n        const response = await post<Guid[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * Fill in pages to the depth of the selected page\n     *\n     * @param rootLayer The bottom layer of pages that we'll build depth upon\n     *\n     * @return The augmented `rootLayer` with the child pages\n     */\n    private async getHierarchyToSelectedPage(rootLayer: TreeItemBag[]): Promise<TreeItemBag[]> {\n        const parents = await this.getParentList();\n\n        if (!parents || parents.length == 0) {\n            // Selected page has no parents, so we're done.\n            return rootLayer;\n        }\n\n        const childLists = await Promise.all(parents.map(guid => this.getItems(guid)));\n        const allPages = rootLayer.concat(flatten(childLists));\n\n        parents.forEach((parentGuid, i) => {\n            const parentPage: TreeItemBag | undefined = allPages.find(page => page.value == parentGuid);\n            if (parentPage) {\n                parentPage.children = childLists[i];\n            }\n        });\n\n        return rootLayer;\n    }\n\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving connection requests from the server and displaying\n * them inside a tree list.\n */\nexport class ConnectionRequestTreeItemProvider implements ITreeItemProvider {\n    /**\n     * The security grant token that will be used to request additional access\n     * to the category list.\n     */\n    public securityGrantToken?: string | null;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid?: Guid | null): Promise<TreeItemBag[]> {\n        const options: ConnectionRequestPickerGetChildrenOptionsBag = {\n            parentGuid,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/ConnectionRequestPickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving groups from the server and displaying\n * them inside a tree list.\n */\nexport class GroupTreeItemProvider implements ITreeItemProvider {\n    /** The security grant token that will be used to request additional access to the group list. */\n    public securityGrantToken: string | null = null;\n\n    /** GUID of the group you want to use as the root. */\n    public rootGroupGuid: Guid | null = null;\n\n    /** List of group types GUIDs to limit to groups of those types. */\n    public includedGroupTypeGuids: Guid[] = [];\n\n    /** Whether to include inactive groups or not. */\n    public includeInactiveGroups: boolean = false;\n\n    /** Whether to limit to only groups that have scheduling enabled. */\n    public limitToSchedulingEnabled: boolean = false;\n\n    /** Whether to limit to only groups that have RSVPs enabled. */\n    public limitToRSVPEnabled: boolean = false;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid: Guid | null = null): Promise<TreeItemBag[]> {\n        const options: GroupPickerGetChildrenOptionsBag = {\n            guid: parentGuid,\n            rootGroupGuid: this.rootGroupGuid,\n            includedGroupTypeGuids: this.includedGroupTypeGuids,\n            includeInactiveGroups: this.includeInactiveGroups,\n            limitToSchedulingEnabled: this.limitToSchedulingEnabled,\n            limitToRSVPEnabled: this.limitToRSVPEnabled,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/GroupPickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving merge templates from the server and displaying\n * them inside a tree list.\n */\nexport class MergeTemplateTreeItemProvider implements ITreeItemProvider {\n    /** The security grant token that will be used to request additional access to the group list. */\n    public securityGrantToken: string | null = null;\n\n    /** Filter for which merge templates to include in results: Global, Public, or Both */\n    public mergeTemplateOwnership: MergeTemplateOwnership = MergeTemplateOwnership.Global;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid: Guid | null = null): Promise<TreeItemBag[]> {\n        const options: MergeTemplatePickerGetMergeTemplatesOptionsBag = {\n            parentGuid,\n            mergeTemplateOwnership: (toNumberOrNull(this.mergeTemplateOwnership) ?? 0) as MergeTemplateOwnership,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/MergeTemplatePickerGetMergeTemplates\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving merge templates from the server and displaying\n * them inside a tree list.\n */\nexport class MetricCategoryTreeItemProvider implements ITreeItemProvider {\n    /** The security grant token that will be used to request additional access to the group list. */\n    public securityGrantToken: string | null = null;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid: Guid | null = null): Promise<TreeItemBag[]> {\n        const options: MetricCategoryPickerGetChildrenOptionsBag = {\n            parentGuid,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/MetricCategoryPickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n/**\n * Tree Item Provider for retrieving merge templates from the server and displaying\n * them inside a tree list.\n */\nexport class MetricItemTreeItemProvider implements ITreeItemProvider {\n    /** The security grant token that will be used to request additional access to the group list. */\n    public securityGrantToken: string | null = null;\n\n    /** A list of category GUIDs to filter the results */\n    public includeCategoryGuids: Guid[] | null = null;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid: Guid | null = null): Promise<TreeItemBag[]> {\n        const options: MetricItemPickerGetChildrenOptionsBag = {\n            parentGuid,\n            includeCategoryGuids: this.includeCategoryGuids,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/MetricItemPickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving registration templates from the server and displaying\n * them inside a tree list.\n */\nexport class RegistrationTemplateTreeItemProvider implements ITreeItemProvider {\n    /** The security grant token that will be used to request additional access to the group list. */\n    public securityGrantToken: string | null = null;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid: Guid | null = null): Promise<TreeItemBag[]> {\n        const options: RegistrationTemplatePickerGetChildrenOptionsBag = {\n            parentGuid,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/RegistrationTemplatePickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving reports from the server and displaying\n * them inside a tree list.\n */\nexport class ReportTreeItemProvider implements ITreeItemProvider {\n    /** The security grant token that will be used to request additional access to the group list. */\n    public securityGrantToken: string | null = null;\n\n    /** A list of category GUIDs to filter the results. */\n    public includeCategoryGuids: Guid[] | null = null;\n\n    /** Guid of an Entity Type to filter results by the reports that relate to this entity type. */\n    public entityTypeGuid: Guid | null = null;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid: Guid | null = null): Promise<TreeItemBag[]> {\n        const options: ReportPickerGetChildrenOptionsBag = {\n            parentGuid,\n            includeCategoryGuids: this.includeCategoryGuids,\n            entityTypeGuid: this.entityTypeGuid,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/ReportPickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving reports from the server and displaying\n * them inside a tree list.\n */\nexport class ScheduleTreeItemProvider implements ITreeItemProvider {\n    /** The security grant token that will be used to request additional access to the group list. */\n    public securityGrantToken: string | null = null;\n\n    /** Whether to include inactive schedules in the results. */\n    public includeInactive: boolean = false;\n\n    /** Whether to exclude private schedules in the results. */\n    public includePublicOnly: boolean = false;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentGuid: Guid | null = null): Promise<TreeItemBag[]> {\n        const options: SchedulePickerGetChildrenOptionsBag = {\n            parentGuid,\n            includeInactiveItems: this.includeInactive,\n            includePublicItemsOnly: this.includePublicOnly,\n            securityGrantToken: this.securityGrantToken,\n        };\n        const url = \"/api/v2/Controls/SchedulePickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for retrieving reports from the server and displaying\n * them inside a tree list.\n */\nexport class WorkflowActionTypeTreeItemProvider implements ITreeItemProvider {\n    /** The security grant token that will be used to request additional access to the group list. */\n    public securityGrantToken: string | null = null;\n\n    /** Whether to include inactive schedules in the results. */\n    public includeInactive: boolean = false;\n\n    /**\n     * Gets the child items from the server.\n     *\n     * @param parentGuid The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentId: string | null = null): Promise<TreeItemBag[]> {\n        const options: WorkflowActionTypePickerGetChildrenOptionsBag = {\n            parentId: toNumberOrNull(parentId) ?? 0,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/WorkflowActionTypePickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems(null);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n/**\n     * Tree Item Provider for retrieving merge fields from the server and displaying\n     * them inside a tree list.\n     */\nexport class MergeFieldTreeItemProvider implements ITreeItemProvider {\n    /**\n     * The security grant token that will be used to request additional access\n     * to the category list.\n     */\n    public securityGrantToken?: string | null;\n\n    /**\n     * Currently selected page\n     */\n    public selectedIds?: string[] | string | null;\n\n    /**\n     * Root Level Merge Fields\n     */\n    public additionalFields: string = \"\";\n\n    /**\n     * Gets the child items of the given parent (or root if no parent given) from the server.\n     *\n     * @param parentId The parent item whose children are retrieved.\n     *\n     * @returns A collection of TreeItem objects as an asynchronous operation.\n     */\n    private async getItems(parentId?: string | null): Promise<TreeItemBag[]> {\n        let result: TreeItemBag[];\n\n        const options: MergeFieldPickerGetChildrenOptionsBag = {\n            id: parentId || \"0\",\n            additionalFields: this.additionalFields\n        };\n        const url = \"/api/v2/Controls/MergeFieldPickerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            result = response.data;\n        }\n        else {\n            console.log(\"Error\", response.errorMessage);\n            return [];\n        }\n\n        // If we're getting child nodes or if there is no selected page\n        if (parentId || !this.selectedIds || this.selectedIds.length == 0) {\n            return result;\n        }\n\n        // If we're getting the root elements and we have a selected page, we also want to grab\n        // all the parent pages so we can pre-load the entire hierarchy to the selected page\n        return this.getHierarchyToSelectedMergeField(result);\n    }\n\n    /**\n     * Fill in pages to the depth of the selected page\n     *\n     * @param rootLayer The bottom layer of pages that we'll build depth upon\n     *\n     * @return The augmented `rootLayer` with the child pages\n     */\n    private async getHierarchyToSelectedMergeField(rootLayer: TreeItemBag[]): Promise<TreeItemBag[]> {\n        const parents = this.getParentList();\n\n        if (!parents || parents.length == 0) {\n            // Selected page has no parents, so we're done.\n            return rootLayer;\n        }\n\n        const childLists = await Promise.all(parents.map(id => this.getItems(id)));\n        const allMergeFields = rootLayer.concat(flatten(childLists));\n\n        parents.forEach((parentGuid, i) => {\n            const parentMergeField: TreeItemBag | undefined = allMergeFields.find(page => page.value == parentGuid);\n            if (parentMergeField) {\n                parentMergeField.children = childLists[i];\n            }\n        });\n\n        return rootLayer;\n    }\n\n    /**\n     * Get the hierarchical list of parent merge fields of the selected merge fields\n     *\n     * @returns A list of IDs of the parent merge fields\n     */\n    private getParentList(): string[] | null {\n        if (!this.selectedIds || this.selectedIds.length == 0) {\n            return null;\n        }\n\n        // If it's a single selection, grab the parents by splitting on \"|\",\n        // e.g. \"Grand|Parent|Child\" will give [\"Grand\", \"Parent\"] as the parents\n        if (typeof this.selectedIds == \"string\") {\n            return this.splitSelectionIntoParents(this.selectedIds);\n        }\n\n        // Not null/empty nor a single selection, so must be an array of selections\n        return flatten(this.selectedIds.map(sel => this.splitSelectionIntoParents(sel)));\n    }\n\n    /**\n     * Split the given selected ID up and get a list of the parent IDs\n     *\n     * @param selection a string denoted one of the selected values\n     */\n    private splitSelectionIntoParents(selection: string): string[] {\n        const parentIds: string[] = [];\n\n        // grab the parents by splitting on \"|\",\n        // e.g. \"Grand|Parent|Child\" will give [\"Grand\", \"Parent\"] as the parents\n        const splitList = selection.split(\"|\");\n        splitList.pop();\n\n        // Now we need to make sure each item further in the list contains it's parents' names\n        // e.g. [\"Grand\", \"Parent\"] => [\"Grand\", \"Grand|Parent\"]\n        while (splitList.length >= 1) {\n            parentIds.unshift(splitList.join(\"|\"));\n            splitList.pop();\n        }\n\n        return parentIds;\n    }\n\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        return await this.getItems();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        return this.getItems(item.value);\n    }\n}\n\n\n/**\n * Tree Item Provider for Asset Storage Provider folders from the server and displaying\n * them inside a tree list.\n */\nexport class AssetManagerTreeItemProvider implements ITreeItemProvider {\n\n    /** List of folders that are currently expanded in the tree list. */\n    public openFolders: Set<string> = new Set();\n    public selectedFolder: string | null = \"\";\n    public enableAssetManager = false;\n    public enableFileManager = false;\n    public encryptedRootFolder = \"\";\n    public securityGrantToken = \"\";\n    public userSpecificRoot = false;\n\n    /**\n     * @inheritdoc\n     */\n    async getRootItems(): Promise<TreeItemBag[]> {\n        const options: AssetManagerGetRootFoldersOptionsBag = {\n            expandedFolders: this.openFolders.size > 0 ? Array.from(this.openFolders) : null,\n            selectedFolder: this.selectedFolder,\n            enableAssetManager: this.enableAssetManager,\n            enableFileManager: this.enableFileManager,\n            rootFolder: this.encryptedRootFolder,\n            securityGrantToken: this.securityGrantToken,\n            userSpecificRoot: this.userSpecificRoot\n        };\n        const url = \"/api/v2/Controls/AssetManagerGetRootFolders\";\n        const response = await post<{tree:TreeItemBag[], updatedExpandedFolders: string[]}>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            this.openFolders = new Set(response.data.updatedExpandedFolders);\n            return response.data.tree;\n        }\n        else {\n            console.error(\"Error Fetching Root Asset Manager Items\", response.errorMessage);\n            return [];\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    async getChildItems(item: TreeItemBag): Promise<TreeItemBag[]> {\n        const options: AssetManagerBaseOptionsBag = {\n            assetFolderId: item.value,\n            securityGrantToken: this.securityGrantToken\n        };\n        const url = \"/api/v2/Controls/AssetManagerGetChildren\";\n        const response = await post<TreeItemBag[]>(url, undefined, options);\n\n        if (response.isSuccess && response.data) {\n            return response.data;\n        }\n        else {\n            console.error(\"Error Fetching Asset Manager Children\", response.errorMessage);\n            return [];\n        }\n    }\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Ref, watch } from \"vue\";\n\n/**\n * Is the value a valid URL?\n * @param val\n */\nexport function isUrl(val: unknown): boolean {\n    if (typeof val === \"string\") {\n        // https://www.regextester.com/1965\n        // Modified from link above to support urls like \"http://localhost:6229/Person/1/Edit\" (Url does not have a period)\n        const re = /^(http[s]?:\\/\\/)?[^\\s([\"<,>]*\\.?[^\\s[\",><]*$/;\n        return re.test(val);\n    }\n\n    return false;\n}\n\n/**\n * Make the URL safe to use for redirects. Basically, this strips off any\n * protocol and hostname from the URL and ensures it's not a javascript:\n * url or anything like that.\n *\n * @param url The URL to be made safe to use with a redirect.\n *\n * @returns A string that is safe to assign to window.location.href.\n */\nexport function makeUrlRedirectSafe(url: string): string {\n    try {\n        // If this can't be parsed as a url, such as \"/page/123\" it will throw\n        // an error which will be handled by the next section.\n        const u = new URL(url);\n\n        // If the protocol isn't an HTTP or HTTPS, then it is most likely\n        // a dangerous URL.\n        if (u.protocol !== \"http:\" && u.protocol !== \"https:\") {\n            return \"/\";\n        }\n\n        // Try again incase they did something like \"http:javascript:alert('hi')\".\n        return makeUrlRedirectSafe(`${u.pathname}${u.search}`);\n    }\n    catch {\n        // If the URL contains a : but could not be parsed as a URL then it\n        // is not valid, so return \"/\" so they get redirected to home page.\n        if (url.indexOf(\":\") !== -1) {\n            return \"/\";\n        }\n\n        // Otherwise consider it safe to use.\n        return url;\n    }\n}\n\n/**\n * Keep a list of named Refs synchronized with URL query parameters in the address of the same names.\n * If there are already query parameters in the URL with those names, the Refs will be assigned those\n * values. This will also watch those Refs for changes and update the query parameters to reflect\n * those changes.\n *\n * @param refs An object where the keys represent the query parameters keys to keep synchronized with\n * and the values are the Refs those query parameters are synched with.\n */\nexport function syncRefsWithQueryParams(refs: Record<string, Ref>): void {\n    // Get current query parameters\n    const params = new URLSearchParams(window.location.search);\n\n    Object.entries(refs).forEach(([key, ref]: [string, Ref]) => {\n        let param = null;\n\n        // try to get the decoded parameter value\n        try {\n            param = JSON.parse(decodeURI(params.get(key) ?? \"\"));\n        }\n        catch (e) { /* just leave the param as null */ }\n\n        // If we found a value, set the Ref to it\n        if (param != null) {\n            ref.value = param;\n        }\n\n        // keep URL params up-to-date with changes to this Ref\n        watch(ref, updater(key));\n    });\n\n    //\n    function updater(key) {\n        return (value) => {\n            params.set(key, encodeURI(JSON.stringify(value)));\n\n            history.replaceState(null, \"\", \"?\" + params.toString());\n        };\n    }\n}\n\n/**\n * Removes query parameters from the current URL and replaces the state in history.\n *\n * @param queryParamKeys The string array of query parameter keys to remove from the current URL.\n */\nexport function removeCurrentUrlQueryParams(...queryParamKeys: string[]): (string | null)[] {\n    return removeUrlQueryParams(window.location.href, ...queryParamKeys);\n}\n\n/**\n * Removes query parameters from the current URL and replaces the state in history.\n *\n * @param url The URL from which to remove the query parameters.\n * @param queryParamKeys The string array of query parameter keys to remove from the current URL.\n */\nexport function removeUrlQueryParams(url: string | URL, ...queryParamKeys: string[]): (string | null)[] {\n    if (!queryParamKeys || !queryParamKeys.length) {\n        return [];\n    }\n\n    if (typeof url === \"string\") {\n        url = new URL(url);\n    }\n\n    const queryParams = url.searchParams;\n\n    const removedQueryParams: (string | null)[] = [];\n\n    for (let i = 0; i < queryParamKeys.length; i++) {\n        const queryParamKey = queryParamKeys[i];\n        removedQueryParams.push(queryParams.get(queryParamKey));\n        queryParams.delete(queryParamKey);\n    }\n\n    window.history.replaceState(null, \"\", url);\n\n    return removedQueryParams;\n}","// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n\nimport type { RulesPropType, ValidationResult, ValidationRule, ValidationRuleFunction, ValidationRuleReference } from \"@Obsidian/Types/validationRules\";\nimport type { PropType } from \"vue\";\n\n/** The currently defined rules by name. */\nconst definedRules: Record<string, ValidationRuleFunction | undefined> = {};\n\n/** Defines the property type for a component's rules. */\nexport const rulesPropType: RulesPropType = {\n    type: [Array, Object, String] as PropType<ValidationRule | ValidationRule[]>,\n    default: \"\"\n};\n\n/**\n * Parse a string into a valid rule reference. Basically this does the heavy\n * lifting to take a string and spit out the rule name and parameters. This\n * assumes the rule has already been normalized and does not contain multiple\n * rules separated by a | character.\n *\n * @param rule The rule to be parsed.\n *\n * @returns The rule reference that contains the name and parameters.\n */\nexport function parseRule(rule: string): ValidationRuleReference {\n    let name = \"\";\n    let params: unknown[] = [];\n\n    const colonIndex = rule.indexOf(\":\");\n    if (colonIndex === -1) {\n        name = rule;\n    }\n    else {\n        name = rule.substring(0, colonIndex);\n        params = rule.substring(colonIndex + 1).split(\",\");\n    }\n\n    return {\n        name,\n        params\n    };\n}\n\n/**\n * Normalize a single rule or array of rules into a flat array of rules. This\n * handles strings that contain multiple rules and splits them out into individual\n * rule strings.\n *\n * @param rules The rules to be normalized.\n *\n * @returns A flattened array that contains all the individual rules.\n */\nexport function normalizeRules(rules: ValidationRule | ValidationRule[]): ValidationRule[] {\n    if (typeof rules === \"string\") {\n        if (rules.indexOf(\"|\") !== -1) {\n            return rules.split(\"|\").filter(r => r.trim() !== \"\");\n        }\n        else if (rules.trim() !== \"\") {\n            return [rules.trim()];\n        }\n    }\n    else if (Array.isArray(rules)) {\n        // Normalize the rule, since it may contain a string like \"required|notzero\"\n        // which needs to be further normalized.\n        const normalizedRules: ValidationRule[] = [];\n\n        for (const r of rules) {\n            normalizedRules.push(...normalizeRules(r));\n        }\n\n        return normalizedRules;\n    }\n    else if (typeof rules === \"function\") {\n        return [rules];\n    }\n    else if (typeof rules === \"object\") {\n        return [rules];\n    }\n\n    return [];\n}\n\n/**\n * Checks if any of the specified rules indicates a rule that requires the value\n * to be filled in.\n *\n * @param rules The rules to be checked.\n *\n * @returns True if any of the rules is considered a required rule; otherwise false.\n */\nexport function containsRequiredRule(rules: ValidationRule | ValidationRule[]): boolean {\n    return normalizeRules(rules).some(r => r === \"required\");\n}\n\n/**\n * Normalizes rules to callable functions. This is used to translate string\n * and reference rules to their final function that will be called.\n *\n * @param rules The rules to be normalized to functions.\n *\n * @returns An array of rule functions that will perform validation checks.\n */\nfunction normalizeRulesToFunctions(rules: ValidationRule[]): ValidationRuleFunction[] {\n    const ruleFunctions: ValidationRuleFunction[] = [];\n\n    for (const rule of rules) {\n        if (typeof rule === \"string\") {\n            const ruleRef = parseRule(rule);\n            const fn = definedRules[ruleRef.name];\n\n            if (fn) {\n                ruleFunctions.push((value) => fn(value, ruleRef.params));\n            }\n            else {\n                console.warn(`Attempt to validate with unknown rule ${rule}.`);\n            }\n        }\n        else if (typeof rule === \"function\") {\n            ruleFunctions.push(rule);\n        }\n        else if (typeof rule === \"object\") {\n            const fn = definedRules[rule.name];\n\n            if (fn) {\n                ruleFunctions.push((value) => fn(value, rule.params));\n            }\n            else {\n                console.warn(`Attempt to validate with unknown rule ${rule.name}.`);\n            }\n        }\n    }\n\n    return ruleFunctions;\n}\n\n/**\n * Normalize a validation result into a useful text message that can be\n * displayed to the user.\n *\n * @param result The validation error message or a blank string if validation passed.\n */\nfunction normalizeRuleResult(result: ValidationResult): string {\n    if (typeof result === \"string\") {\n        return result;\n    }\n    else if (result === true) {\n        return \"\";\n    }\n    else {\n        return \"failed validation\";\n    }\n}\n\n/**\n * Runs validation on the value for all the rules provided.\n *\n * @param value The value to be checked.\n * @param rule The array of rules that will be used during validation.\n *\n * @returns An array of error messages, or empty if value passed.\n */\nexport function validateValue(value: unknown, rule: ValidationRule | ValidationRule[]): string[] {\n    const fns = normalizeRulesToFunctions(normalizeRules(rule));\n\n    const results: string[] = [];\n\n    for (const fn of fns) {\n        const result = normalizeRuleResult(fn(value));\n\n        if (result !== \"\") {\n            results.push(result);\n        }\n    }\n\n    return results;\n}\n\n/**\n * Define a new rule by name and provide the validation function.\n *\n * @param ruleName The name of the rule to be registered.\n * @param validator The validation function.\n */\nexport function defineRule(ruleName: string, validator: ValidationRuleFunction): void {\n    if (definedRules[ruleName] !== undefined) {\n        console.warn(`Attempt to redefine validation rule ${ruleName}.`);\n    }\n    else {\n        definedRules[ruleName] = validator;\n    }\n}\n"],"names":["doApiCallRaw","_x","_x2","_x3","_x4","_doApiCallRaw","apply","arguments","_asyncToGenerator","method","url","params","data","axios","doApiCall","_x5","_x6","_doApiCall","length","undefined","result","isError","isSuccess","statusCode","status","errorMessage","e","isAxiosError","_e$response","_e$response2","_e$response$status","_e$response4","response","Message","message","_e$response$data$Mess","_e$response3","get","_x7","_get","post","_x8","_post","httpFunctionsSymbol","Symbol","provideHttp","functions","provide","useHttp","http","getCurrentInstance","inject","createApiCaller","options","fetchFunction","toLowerCase","isLoading","ref","hasError","run","_arguments","value","_len","args","Array","_key","onComplete","_result$errorMessage","Error","uploadFile","_x9","_x10","_x11","_uploadFile","progress","headers","onUploadProgress","event","total","loaded","Math","floor","uploadContentFile","_x12","_x13","_x14","_x15","_uploadContentFile","file","encryptedRootFolder","folderPath","_options$baseUrl","concat","baseUrl","encodeURIComponent","formData","FormData","append","text","FileName","uploadAssetProviderFile","_x16","_x17","_x18","_x19","_uploadAssetProviderFile","assetStorageId","_options$baseUrl2","uploadBinaryFile","_x20","_x21","_x22","_uploadBinaryFile","binaryFileTypeGuid","_options$baseUrl3","isTemporary","parentEntityTypeId","parentEntityId","Guid","getDefaultAddressControlModel","state","country","validateAddress","address","getAddressString","flatten","arr","depth","forEach","flatDeep","call","val","isArray","push","forceToArray","multiple","moreThanOneElement","noElementsFound","valueComparer","keySelector","descending","a","b","valueA","valueB","List","constructor","elements","fromArrayNoCopy","list","any","predicate","filter","first","firstOrUndefined","single","singleOrUndefined","orderBy","comparer","OrderedList","orderByDescending","where","toArray","baseComparer","sort","thenBy","thenByDescending","emptyGuid","newGuid","replace","c","r","random","v","toString","normalize","isValidGuid","guid","test","toGuidOrNull","areEqual","isEmpty","isWhiteSpace","trim","isNullOrWhiteSpace","splitCase","asCommaAnd","strs","andStr","last","pop","join","toTitleCase","str","word","charAt","toUpperCase","substring","upperCaseFirstCharacter","pluralize","count","Pluralize","pluralConditional","num","singular","plural","padLeft","padCharacter","padRight","truncate","limit","trimmable","reg","RegExp","words","split","ellipsis","visibleWords","escapeHtmlRegExp","escapeHtmlMap","escapeHtml","ch","defaultControlCompareValue","itemValue","guidValue","guidItemValue","containsHtmlTag","createHash","hash","i","chr","charCodeAt","LocaleDateFormatter","jsDateFormatString","fromCurrent","date","Date","localeDateString","toLocaleDateString","year","month","day","defaultFormatString","localeFormatString","includes","aspDateFormat","aspDateFormatString","datePickerFormat","datePickerFormatString","blankIfZero","parseInt","get12HourValue","hour","englishDayNames","englishMonthNames","dateFormatters","substr","dayOfWeek","millisecond","minute","second","offset","offsetHour","abs","offsetMinute",":","/","dateFormatterKeys","Object","keys","k","currentLocaleDateFormatter","standardDateFormats","formatAspDate","universalDateTime","formatAspCustomDate","format","matchFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","err","f","formatAspStandardDate","DateTimeFormat","DateFull","DateMedium","DateShort","TimeShort","TimeWithSeconds","DateTimeShort","DateTimeShortWithSeconds","DateTimeMedium","DateTimeMediumWithSeconds","DateTimeFull","DateTimeFullWithSeconds","RockDateTime","dateTime","fromParts","zone","luxonZone","FixedOffsetZone","instance","DateTime","fromObject","isValid","fromMilliseconds","milliseconds","fromMillis","fromJSDate","parseISO","dateString","fromISO","setZone","parseHTTP","fromHTTP","now","utcNow","toUTC","rawDate","weekday","DayOfWeek","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","dayOfYear","ordinal","localDateTime","toLocal","organizationDateTime","addDays","days","plus","endOfMonth","endOf","addHours","hours","addMilliseconds","addMinutes","minutes","addMonths","months","addSeconds","seconds","addYears","years","toMilliseconds","toMillis","toOffset","toASPString","toISOString","toISO","toLocaleString","toElapsedString","currentDateTime","msPerSecond","msPerMinute","msPerHour","hoursPerDay","daysPerYear","start","end","direction","totalMs","totalSeconds","totalMinutes","totalHours","totalDays","totalMonths","round","totalYears","toHTTPString","toHTTP","valueOf","isEqualTo","otherDateTime","isLaterThan","isEarlierThan","humanizeElapsed","_otherDateTime","shortcutCancelledEvent","listener","window","setTimeout","isCancellationToken","thing","CancellationTokenNone","CancellationTokenCancelled","MutableToken","isCancellationRequested","onCancellationRequested","freeze","_defineProperty","cancel","isCancelled","emitter","emit","mitt","on","CancellationTokenSource","parent","token","internalToken","deepEqual","strict","isNaN","aEntries","entries","bEntries","aEntry","bEntry","debounce","fn","delay","eager","timeout","clearTimeout","debounceAsync","_options$delay","_options$eager","source","isEagerExecutionInProgress","_ref","parentCancellationToken","_source","console","error","cts","PageMessages","QueryStringChanged","BlockMessages","BeginEdit","EndEdit","useBrowserBus","BrowserBus","customDomEventName","_objectSpread","eventListener","onEvent","document","addEventListener","CustomEvent","detail","name","timestamp","onMessage","handlers","_i","_handlers","handler","blockType","block","callback","dispose","removeEventListener","splice","publish","messageName","publishMessage","dispatchEvent","subscribe","messageNameOrCallback","subscribeToBlockType","messageNameOrBlockType","blockTypeOrCallback","subscribeToBlock","messageNameOrBlock","blockOrCallback","blockReloadSymbol","configurationValuesChangedSymbol","staticContentSymbol","blockBrowserBusSymbol","useConfigurationValues","useInvokeBlockAction","useBlockActionUrl","createInvokeBlockAction","pageGuid","blockGuid","pageParameters","interactionGuid","invokeBlockAction","_invokeBlockAction","actionName","actionContext","context","__context","provideReloadBlock","useReloadBlock","provideConfigurationValuesChanged","callbacks","invoke","_callbacks","reset","onConfigurationValuesChanged","provideStaticContent","content","useStaticContent","provideBlockBrowserBus","bus","useBlockBrowserBus","setCustomSettingsBoxValue","box","propertyName","settings","validProperties","setPropertiesBoxValue","bag","some","p","dispatchBlockEvent","eventName","eventData","ev","cancelable","isBlockEvent","entityTypeNameSymbol","entityTypeGuidSymbol","useEntityDetailBlock","securityGrant","getSecurityGrant","blockConfig","securityGrantToken","provideSecurityGrant","entityTypeName","provideEntityTypeName","entityTypeGuid","provideEntityTypeGuid","entity","refreshAttributesDebounce","refreshEntityDetailAttributes","onPropertyChanged","qualifiedAttributeProperties","useEntityTypeName","useEntityTypeGuid","securityGrantSymbol","tokenRef","renewalTimeout","renewToken","scheduleRenewal","_tokenRef$value","segments","expiresDateTime","renewTimeout","updateToken","newToken","grant","useSecurityGrantToken","watchPropertyChanges","propertyRefs","_loop","propRef","watch","_refreshEntityDetailAttributes","_result$data$bag","_result$data$bag2","newBox","attributes","attributeValues","refreshDetailAttributes","_refreshDetailAttributes","isEditable","_result$data$entity","_result$data$entity2","newBag","blockGuidSymbol","blockTypeGuidSymbol","provideBlockGuid","useBlockGuid","provideBlockTypeGuid","blockTypeGuid","useBlockTypeGuid","blockPreferenceProviderSymbol","emptyPreferences","getValue","setValue","getKeys","containsKey","save","Promise","resolve","withPrefix","off","emptyPreferenceProvider","blockPreferences","getGlobalPreferences","getEntityPreferences","providePersonPreferences","provider","usePersonPreferences","_inject","asBooleanOrNull","asString","indexOf","asBoolean","asYesNoOrNull","boolOrNull","asTrueFalseOrNull","asTrueOrFalseString","keyPrefix","set","key","ttl","warn","expiration","cache","cacheJson","JSON","stringify","sessionStorage","setItem","getItem","parse","promiseCache","cachePromiseFactory","_promiseCache$key","cachedResult","then","catch","suspenseSymbol","BasicSuspenseProvider","parentProvider","operationKey","pendingOperations","finishedHandlers","allOperationsComplete","nextTick","completeAsyncOperation","addOperation","operation","startAsyncOperation","index","hasPendingOperations","addFinishedHandler","provideSuspense","useSuspense","asFormattedString","digits","minimumFractionDigits","maximumFractionDigits","toNumber","toNumberOrNull","replaced","Number","toCurrencyOrNull","_currencyInfo$symbol","_currencyInfo$decimal","currencyInfo","currencySymbol","symbol","currencyDecimalPlaces","decimalPlaces","toOrdinalSuffix","j","toOrdinal","toWord","zeroPad","toDecimalPlaces","pow","toWordFull","numb","numberWords","oneHundred","oneThousand","oneMillion","oneBillion","oneTrillion","oneQuadrillion","quadrillionsToWord","trillions","trillionsToWord","quadrillions","hundredsToWord","slice","billions","billionsToWord","millions","millionsToWord","thousands","thousandsToWord","hundreds","tens","tensToWord","ones","onesToWord","useVModelPassthrough","props","modelName","internalValue","updateRefValue","useVModelPassthroughWithPropUpdateCheck","listeners","onPropUpdate","addPropUpdateListener","target","defineAsyncComponent","vueDefineAsyncComponent","suspense","component","standardRockFormFieldProps","label","type","String","default","disableLabel","Boolean","help","rules","formGroupClasses","validationTitle","isRequiredIndicatorHidden","copyStandardRockFormFieldProps","destination","useStandardRockFormFieldProps","propValues","reactive","standardAsyncPickerProps","enhanceForLongLists","lazyMode","ControlLazyMode","OnDemand","showBlankItem","blankValue","displayStyle","PickerDisplayStyle","Auto","columnCount","copyStandardAsyncPickerProps","useStandardAsyncPickerProps","standardFieldProps","deep","extendedRef","refValue","propertyRef","getVNodeProp","node","propName","defaultProps","defaultProp","getVNodeProps","_node$type$props$_p","propType","_toNumberOrNull","extractText","el","createElement","vnode","createVNode","render","innerText","extractHtml","html","innerHTML","dateKeyLength","dateKeyNoYearLength","getYear","dateKey","defaultValue","getMonth","getDay","toDateKey","yearStr","monthStr","dayStr","toNoYearDateKey","smoothScrollToTop","scrollTo","top","behavior","currentModalCount","trackModalState","body","cssClasses","cssClass","classList","add","_iterator2","_step2","remove","loadJavaScriptAsync","_loadJavaScriptAsync","isScriptLoaded","fingerprint","_Obsidian","src","Obsidian","scripts","from","getElementsByTagName","thisScript","promise","scriptLoadedPromise","script","setAttribute","appendChild","_scriptLoadedPromise","scriptElement","reject","_unused","addQuickReturn","title","section","sectionOrder","rock","personalLinks","createDialog","footer","scrollable","style","zIndex","modal","tabIndex","display","modalDialog","modalContent","modalBody","modalFooter","createCloseButton","closeButton","marginTop","createBackdrop","backdrop","showDialog","_options$cancellation","timer","container","fullscreenElement","autoFocus","buttons","clearDialog","dialog","_iterator3","_step3","button","btn","className","querySelector","offsetHeight","focus","cancellationToken","alert","_alert","confirm","_confirm","confirmDelete","typeName","additionalMessage","showSecurity","entityTypeIdKey","entityIdKey","entityTitle","Rock","controls","show","showChildPages","pageId","getUniqueCssSelector","path","parentNode","unshift","tagName","children","isEmail","re","enumToListItemBag","description","listItemBagList","property","fieldTypeTable","fieldTypeAttributeGuidSymbol","registerFieldType","fieldTypeGuid","fieldType","normalizedGuid","getFieldType","field","provideFieldTypeAttributeGuid","useFieldTypeAttributeGuid","downloadFile","_downloadFile","filename","URL","createObjectURL","element","position","left","href","download","click","removeChild","revokeObjectURL","fetchImageFileExtensions","_fetchImageFileExtensions","getImageFileExtensions","Cache","isImage","_isImage","_imageExtensions$incl","imageExtensions","extension","formStateSymbol","provideFormState","useFormState","enterFullscreen","_enterFullscreen","exitCallback","requestFullscreen","mozRequestFullscreen","webkitRequestFullscreen","onFullscreenChange","ex","isFullscreen","getFullscreenElement","mozFullScreenElement","webkitFullscreenElement","exitFullscreen","_exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","toCoordinate","coord","isWellKnown","reverse","map","parseFloat","lat","lng","wellKnownToCoordinates","wellKnownText","coordinatesToWellKnown","coordinates","isClockwisePolygon","coordinateString","coords","nearAddressForCoordinate","coordinate","google","geocoder","maps","Geocoder","geocode","location","LatLng","results","GeocoderStatus","OK","formatted_address","log","nearAddressForCoordinates","polygon","sum","loadMapResources","_loadMapResources","_response$data","mapStyleValueGuid","googleMapSettings","keyParam","googleApiKey","createLatLng","latOrLatLngOrLatLngLiteral","lngOrNoClampNoWrap","noClampNoWrap","nthNamesAbbreviated","padZeroLeft","repeat","getDateString","getTimeString","getDateTimeString","getDatesFromRangeOrPeriod","startDate","getDateFromString","dates","startsWith","getPeriodDurationInDays","endDate","getDateTimeFromString","period","endsWith","getRecurrenceDates","recurrenceDates","valueParts","valueType","valuePart","getWeekdayName","dateMatchesDays","rockDate","dateMatchesOffsetDayOfWeeks","offsets","dayOfMonth","lastDayOfMonth","getDayOfWeekFromIcalDay","getiCalDay","normalizeLineLength","lines","newLines","lineNumber","currentLine","newLine","denormalizeLineLength","LineFeeder","peek","RecurrenceRule","_values$UNTIL","_values$UNTIL2","rule","values","_iterator4","_step4","attr","attrParts","frequency","_getDateFromString","_getDateTimeFromStrin","_toNumberOrNull2","interval","byMonthDay","_iterator5","_step5","byDay","_iterator6","_step6","build","monthDayValues","md","dayValues","d","getDates","eventStartDateTime","startDateTime","endDateTime","dateCount","nextDate","nextDateAfter","loopCount","Event","icsContent","uid","feeder","buildLines","excludedDates","_iterator7","_step7","rDate","recurrenceRules","_iterator8","_step8","rrule","line","splitAt","keyAttributes","keySegments","_iterator9","_step9","attrSegments","_getDateTimeFromStrin2","_getDateTimeFromStrin3","dateValues","_iterator10","_step10","dateValue","isDateExcluded","rockDateOnly","_iterator11","_step11","excludedDate","_recurrenceDates","toFriendlyText","toFriendlyString","toFriendlyHtml","startTimeText","hour12","offsetNames","nameText","firstDate","lastDate","listHtml","_iterator12","_step12","Calendar","_iterator13","events","_step13","engine","Liquid","hasLavaCommandFieldsRegex","hasLavaShortcodeFieldsRegex","resolveMergeFields","template","mergeFields","tpl","renderSync","hasLavaCommandFields","hasLavaShortcodeFields","asListItemBagOrNull","bagJson","formatValue","_formatValue","selectedValue","fromEntries","res","entry","clone","obj","toListItemBagList","_ref2","_slicedToArray","getValueFromPath","object","pathNames","pathName","prototype","hasOwnProperty","fetchPhoneNumberConfiguration","_fetchPhoneNumberConfiguration","fetchPhoneNumberAndSmsConfiguration","_fetchPhoneNumberAndSmsConfiguration","_result$errorMessage2","showSmsOptIn","getPhoneNumberConfiguration","getPhoneNumberAndSmsConfiguration","defaultRulesConfig","formatPhoneNumber","stripPhoneNumber","_rule$match","regex","match","_rule$format","popover","_options$sanitize","$","sanitize","sleep","ms","isPromise","PromiseCompletionSource","internalPromise","internalResolve","internalReject","reason","libraryObject","libraryPromise","getRealTimeObject","_getRealTimeObject","_window$Rock2","_window$Rock","getTopic","_getTopic","identifier","realTime","regexPatterns","specialCharacterPattern","emojiPattern","specialFontPattern","getSpecialCharacterPattern","getEmojiPattern","getSpecialFontPattern","RockCurrency","isZero","big","eq","number","isNegative","lt","units","times","Big","roundDown","create","asRockCurrency","currency","negate","neg","divide","divisor","quotient","div","remainder","minus","subtract","isNotEqualTo","isLessThan","isLessThanOrEqualTo","lte","noLessThan","isGreaterThan","gt","noGreaterThan","mod","_this$divide","excludeGroupingSeparators","valueString","toFixed","_toCurrencyOrNull","useScreenSize","mobileThreshold","isMobile","screenSize","screen","width","onResize","onMounted","onUnmounted","useViewportWidth","viewportWidth","innerWidth","rangeTypeOptions","RangeType","Current","Previous","Last","Next","Upcoming","DateRange","timeUnitOptions","TimeUnit","Hour","Day","Week","Month","Year","getTextForValue","_matches$0$text","matches","getRangeTypeText","rangeType","_rangeTypes$0$text","rangeTypes","o","getTimeUnitText","timeUnit","_timeUnits$0$text","timeUnits","parseSlidingDateRangeString","_o$text","_o$text2","range","timeValue","lowerDate","upperDate","slidingDateRangeToString","_value$timeUnit$toStr","_value$timeUnit","_value$lowerDate","_value$upperDate","_value$timeValue","_value$timeUnit$toStr2","_value$timeUnit2","calculateSlidingDateRange","_result$start$addHour","_result$start","diff","_result$start$addMont","_result$start2","_value$timeValue2","roundUpCount","_RockDateTime$fromPar","_RockDateTime$fromPar2","_result$end$addHours","_result$end","_result$end$addDays","_result$end2","_RockDateTime$fromPar3","_RockDateTime$fromPar4","_result$end$addMonths","_result$end3","_RockDateTime$fromPar5","_RockDateTime$fromPar6","_result$end$addYears","_result$end4","cutoffDate","_value$timeValue3","_RockDateTime$fromPar7","_RockDateTime$fromPar8","_result$start$addHour2","_result$start3","_RockDateTime$fromPar9","_RockDateTime$fromPar10","_result$start$addMont2","_result$start4","_RockDateTime$fromPar11","_RockDateTime$fromPar12","_result$start$addYear","_result$start5","_value$lowerDate2","_value$upperDate2","getStructuredContentEditorConfiguration","_getStructuredContentEditorConfiguration","getStructuredContentAsHtml","_getStructuredContentAsHtml","structuredContent","tooltip","$node","appliedContainer","fsElement","getContainer","_options$container2","_options$container","newFsElement","contains","fsElementPosition","getComputedStyle","applyTooltip","_options$sanitize2","showTooltip","destroyTooltip","CategoryTreeItemProvider","getItems","parentGuid","_this","entityTypeQualifierColumn","entityTypeQualifierValue","lazyLoad","getCategorizedItems","includeCategoriesWithoutChildren","includeInactiveItems","includeUnnamedEntityItems","getRootItems","_this2","rootCategoryGuid","getChildItems","item","_this3","LocationTreeItemProvider","_this4","_toGuidOrNull","rootLocationGuid","_this5","_this6","DataViewTreeItemProvider","_this7","entityTypeGuidFilter","displayPersistedOnly","_this8","_this9","WorkflowTypeTreeItemProvider","_this10","_this10$includeInacti","_this11","_this12","PageTreeItemProvider","_this13","_toGuidOrNull2","_this13$hidePageGuids","rootPageGuid","hidePageGuids","siteType","selectedPageGuids","getHierarchyToSelectedPage","getParentList","_this14","rootLayer","_this15","parents","childLists","all","allPages","parentPage","find","page","_this16","_this17","ConnectionRequestTreeItemProvider","_this18","_this19","_this20","GroupTreeItemProvider","_this21","rootGroupGuid","includedGroupTypeGuids","includeInactiveGroups","limitToSchedulingEnabled","limitToRSVPEnabled","_this22","_this23","MergeTemplateTreeItemProvider","MergeTemplateOwnership","Global","_arguments2","_this24","mergeTemplateOwnership","_this25","_this26","MetricCategoryTreeItemProvider","_arguments3","_this27","_this28","_this29","MetricItemTreeItemProvider","_arguments4","_this30","includeCategoryGuids","_this31","_this32","RegistrationTemplateTreeItemProvider","_arguments5","_this33","_this34","_this35","ReportTreeItemProvider","_arguments6","_this36","_this37","_this38","ScheduleTreeItemProvider","_arguments7","_this39","includeInactive","includePublicItemsOnly","includePublicOnly","_this40","_this41","WorkflowActionTypeTreeItemProvider","_arguments8","_this42","parentId","_this43","_this44","MergeFieldTreeItemProvider","_this45","id","additionalFields","selectedIds","getHierarchyToSelectedMergeField","_this46","allMergeFields","parentMergeField","splitSelectionIntoParents","sel","selection","parentIds","splitList","_this47","_this48","AssetManagerTreeItemProvider","Set","_this49","expandedFolders","openFolders","size","selectedFolder","enableAssetManager","enableFileManager","rootFolder","userSpecificRoot","updatedExpandedFolders","tree","_this50","assetFolderId","isUrl","makeUrlRedirectSafe","u","protocol","pathname","search","syncRefsWithQueryParams","refs","URLSearchParams","param","_params$get","decodeURI","updater","encodeURI","history","replaceState","removeCurrentUrlQueryParams","queryParamKeys","removeUrlQueryParams","_len2","_key2","queryParams","searchParams","removedQueryParams","queryParamKey","delete","definedRules","rulesPropType","parseRule","colonIndex","normalizeRules","normalizedRules","containsRequiredRule","normalizeRulesToFunctions","ruleFunctions","ruleRef","normalizeRuleResult","validateValue","fns","defineRule","ruleName","validator"],"mappings":"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"}