{"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/dom.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/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":["// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport axios, { AxiosError, AxiosProgressEvent, AxiosResponse, GenericAbortSignal } from \"axios\";\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { HttpBodyData, HttpMethod, HttpFunctions, HttpResult, HttpUrlParams } from \"@Obsidian/Types/Utility/http\";\r\nimport { inject, provide, getCurrentInstance, ref, type Ref } from \"vue\";\r\nimport { ICancellationToken } from \"./cancellation\";\r\n\r\n\r\n// #region HTTP Requests\r\n\r\n/**\r\n * Make an API call. This is only place Axios (or AJAX library) should be referenced to allow tools like performance metrics to provide\r\n * better insights.\r\n * @param method\r\n * @param url\r\n * @param params\r\n * @param data\r\n */\r\nasync function doApiCallRaw(method: HttpMethod, url: string, params: HttpUrlParams, data: HttpBodyData, cancellationToken?: ICancellationToken): Promise> {\r\n return await axios({\r\n method,\r\n url,\r\n params,\r\n data,\r\n signal: getSignal(cancellationToken)\r\n });\r\n}\r\n\r\nfunction getSignal(cancellationToken?: ICancellationToken): GenericAbortSignal | undefined {\r\n if (cancellationToken) {\r\n const controller = new AbortController();\r\n\r\n cancellationToken.onCancellationRequested(() => {\r\n if (controller && controller.signal && !controller.signal.aborted) {\r\n controller.abort();\r\n }\r\n });\r\n\r\n return controller.signal;\r\n }\r\n}\r\n\r\n/**\r\n * Make an API call. This is a special use function that should not\r\n * normally be used. Instead call useHttp() to get the HTTP functions that\r\n * can be used.\r\n *\r\n * @param {string} method The HTTP method, such as GET\r\n * @param {string} url The endpoint to access, such as /api/campuses/\r\n * @param {object} params Query parameter object. Will be converted to ?key1=value1&key2=value2 as part of the URL.\r\n * @param {any} data This will be the body of the request\r\n */\r\nexport async function doApiCall(method: HttpMethod, url: string, params: HttpUrlParams = undefined, data: HttpBodyData = undefined, cancellationToken?: ICancellationToken): Promise> {\r\n try {\r\n const result = await doApiCallRaw(method, url, params, data, cancellationToken);\r\n\r\n return {\r\n data: result.data as T,\r\n isError: false,\r\n isSuccess: true,\r\n statusCode: result.status,\r\n errorMessage: null\r\n } as HttpResult;\r\n }\r\n catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response?.data?.Message || e?.response?.data?.message) {\r\n return {\r\n data: null,\r\n isError: true,\r\n isSuccess: false,\r\n statusCode: e.response.status,\r\n errorMessage: e?.response?.data?.Message ?? e.response.data.message\r\n } as HttpResult;\r\n }\r\n\r\n return {\r\n data: null,\r\n isError: true,\r\n isSuccess: false,\r\n statusCode: e.response?.status ?? 0,\r\n errorMessage: null\r\n } as HttpResult;\r\n }\r\n else {\r\n return {\r\n data: null,\r\n isError: true,\r\n isSuccess: false,\r\n statusCode: 0,\r\n errorMessage: null\r\n } as HttpResult;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Make a GET HTTP request. This is a special use function that should not\r\n * normally be used. Instead call useHttp() to get the HTTP functions that\r\n * can be used.\r\n *\r\n * @param {string} url The endpoint to access, such as /api/campuses/\r\n * @param {object} params Query parameter object. Will be converted to ?key1=value1&key2=value2 as part of the URL.\r\n */\r\nexport async function get(url: string, params: HttpUrlParams = undefined): Promise> {\r\n return await doApiCall(\"GET\", url, params, undefined);\r\n}\r\n\r\n/**\r\n * Make a POST HTTP request. This is a special use function that should not\r\n * normally be used. Instead call useHttp() to get the HTTP functions that\r\n * can be used.\r\n *\r\n * @param {string} url The endpoint to access, such as /api/campuses/\r\n * @param {object} params Query parameter object. Will be converted to ?key1=value1&key2=value2 as part of the URL.\r\n * @param {any} data This will be the body of the request\r\n */\r\nexport async function post(url: string, params: HttpUrlParams = undefined, data: HttpBodyData = undefined, cancellationToken?: ICancellationToken): Promise> {\r\n return await doApiCall(\"POST\", url, params, data, cancellationToken);\r\n}\r\n\r\nconst httpFunctionsSymbol = Symbol(\"http-functions\");\r\n\r\n/**\r\n * Provides the HTTP functions that child components will use. This is an\r\n * internal API and should not be used by third party components.\r\n *\r\n * @param functions The functions that will be made available to child components.\r\n */\r\nexport function provideHttp(functions: HttpFunctions): void {\r\n provide(httpFunctionsSymbol, functions);\r\n}\r\n\r\n/**\r\n * Gets the HTTP functions that can be used by the component. This is the\r\n * standard way to make HTTP requests.\r\n *\r\n * @returns An object that contains the functions which can be called.\r\n */\r\nexport function useHttp(): HttpFunctions {\r\n let http: HttpFunctions | undefined;\r\n\r\n // Check if we are inside a setup instance. This prevents warnings\r\n // from being displayed if being called outside a setup() function.\r\n if (getCurrentInstance()) {\r\n http = inject(httpFunctionsSymbol);\r\n }\r\n\r\n return http || {\r\n doApiCall: doApiCall,\r\n get: get,\r\n post: post\r\n };\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntype ApiCallerOptions = {\r\n url: string;\r\n params?: HttpUrlParams | ((...args: Args) => HttpUrlParams);\r\n data?: HttpBodyData | ((...args: Args) => HttpBodyData);\r\n onComplete?: ((data: ReturnType, ...args: Args) => void) | null | undefined;\r\n method?: \"get\" | \"post\" | \"GET\" | \"POST\" | undefined;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntype ApiCallerReturnType = {\r\n run: (...args: Args) => Promise;\r\n readonly isLoading: Ref;\r\n readonly hasError: Ref;\r\n readonly errorMessage: Ref;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function createApiCaller (options: ApiCallerOptions): ApiCallerReturnType {\r\n const fetchFunction = useHttp()[(options.method || \"post\").toLowerCase()];\r\n const isLoading = ref(false);\r\n const hasError = ref(false);\r\n const errorMessage = ref();\r\n\r\n return {\r\n isLoading,\r\n hasError,\r\n errorMessage,\r\n async run (...args) {\r\n isLoading.value = true;\r\n hasError.value = false;\r\n errorMessage.value = undefined;\r\n\r\n const params = typeof options.params === \"function\" ? options.params(...args) : options.params;\r\n const data = typeof options.data === \"function\" ? options.data(...args) : options.data;\r\n\r\n try {\r\n const result = (await fetchFunction(options.url, params, data)) as HttpResult;\r\n\r\n if (result.isSuccess) {\r\n if (typeof options.onComplete === \"function\") {\r\n options.onComplete(result.data as ReturnType, ...args);\r\n }\r\n\r\n return result.data as ReturnType;\r\n }\r\n else {\r\n hasError.value = true;\r\n errorMessage.value = result.errorMessage ?? undefined;\r\n }\r\n }\r\n catch (e: unknown) {\r\n hasError.value = true;\r\n\r\n if (e instanceof Error) {\r\n errorMessage.value = e.message;\r\n }\r\n else if (typeof e === \"string\") {\r\n errorMessage.value = e;\r\n }\r\n else {\r\n errorMessage.value = \"An unknown error occurred.\";\r\n }\r\n }\r\n finally {\r\n isLoading.value = false;\r\n }\r\n }\r\n };\r\n\r\n}\r\n\r\n// #endregion\r\n\r\n// #region File Upload\r\n\r\ntype FileUploadResponse = {\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n Guid: Guid;\r\n FileName: string;\r\n /* eslint-enable */\r\n};\r\n\r\n/**\r\n * Progress reporting callback used when uploading a file into Rock.\r\n */\r\nexport type UploadProgressCallback = (progress: number, total: number, percent: number) => void;\r\n\r\n/**\r\n * Options used when uploading a file into Rock to change the default behavior.\r\n */\r\nexport type UploadOptions = {\r\n /**\r\n * The base URL to use when uploading the file, must accept the same parameters\r\n * and as the standard FileUploader.ashx handler.\r\n */\r\n baseUrl?: string;\r\n\r\n /** True if the file should be uploaded as temporary, only applies to binary files. */\r\n isTemporary?: boolean;\r\n\r\n /** A function to call to report the ongoing progress of the upload. */\r\n progress: UploadProgressCallback;\r\n\r\n /** The parent entity type identifier */\r\n parentEntityTypeId?: number;\r\n\r\n /** The parent entity identifier */\r\n parentEntityId?: number;\r\n};\r\n\r\n/**\r\n * Uploads a file in the form data into Rock. This is an internal function and\r\n * should not be exported.\r\n *\r\n * @param url The URL to use for the POST request.\r\n * @param data The form data to send in the request body.\r\n * @param progress The optional callback to use to report progress.\r\n *\r\n * @returns The response from the upload handler.\r\n */\r\nasync function uploadFile(url: string, data: FormData, progress: UploadProgressCallback | undefined): Promise {\r\n let result: AxiosResponse | undefined;\r\n try {\r\n result = await axios.post(url, data, {\r\n headers: {\r\n \"Content-Type\": \"multipart/form-data\"\r\n },\r\n onUploadProgress: (event: AxiosProgressEvent) => {\r\n if (progress && event.total !== undefined) {\r\n progress(event.loaded, event.total, Math.floor(event.loaded * 100 / event.total));\r\n }\r\n }\r\n });\r\n }\r\n catch (e) {\r\n result = (e as AxiosError).response;\r\n }\r\n\r\n if (!result) {\r\n throw new Error(\"Upload failed.\");\r\n }\r\n\r\n // Check for a \"everything went perfectly fine\" response.\r\n if (result.status === 200 && typeof result.data === \"object\") {\r\n return result.data;\r\n }\r\n\r\n if (result.status === 406) {\r\n throw new Error(\"File type is not allowed.\");\r\n }\r\n\r\n if (typeof result.data === \"string\") {\r\n throw new Error(result.data);\r\n }\r\n\r\n throw new Error(\"Upload failed.\");\r\n}\r\n\r\n/**\r\n * Uploads a file to the Rock file system, usually inside the ~/Content directory.\r\n *\r\n * @param file The file to be uploaded to the server.\r\n * @param encryptedRootFolder The encrypted root folder specified by the server,\r\n * this specifies the jail the upload operation is limited to.\r\n * @param folderPath The additional sub-folder path to use inside the root folder.\r\n * @param options The options to use when uploading the file.\r\n *\r\n * @returns A ListItemBag that contains the scrubbed filename that was uploaded.\r\n */\r\nexport async function uploadContentFile(file: File, encryptedRootFolder: string, folderPath: string, options?: UploadOptions): Promise {\r\n const url = `${options?.baseUrl ?? \"/FileUploader.ashx\"}?rootFolder=${encodeURIComponent(encryptedRootFolder)}`;\r\n const formData = new FormData();\r\n\r\n formData.append(\"file\", file);\r\n\r\n if (folderPath) {\r\n formData.append(\"folderPath\", folderPath);\r\n }\r\n\r\n const result = await uploadFile(url, formData, options?.progress);\r\n\r\n return {\r\n value: \"\",\r\n text: result.FileName\r\n };\r\n}\r\n\r\n/**\r\n * Uploads a file to an asset storage provider.\r\n *\r\n * @param file The file to be uploaded to the server.\r\n * @param folderPath The additional sub-folder path to use inside the root folder.\r\n * @param assetStorageId The ID of the asset storage provider that the file is being uploaded to\r\n * @param options The options to use when uploading the file.\r\n *\r\n * @returns A ListItemBag that contains the scrubbed filename that was uploaded.\r\n */\r\nexport async function uploadAssetProviderFile(file: File, folderPath: string, assetStorageId: string, options?: UploadOptions): Promise {\r\n const url = `${options?.baseUrl ?? \"/FileUploader.ashx\"}?rootFolder=`;\r\n const formData = new FormData();\r\n\r\n if (!assetStorageId) {\r\n throw \"Asset Storage Id and Key are required.\";\r\n }\r\n\r\n formData.append(\"file\", file);\r\n formData.append(\"StorageId\", assetStorageId);\r\n formData.append(\"Key\", folderPath);\r\n formData.append(\"IsAssetStorageProviderAsset\", \"true\");\r\n\r\n const result = await uploadFile(url, formData, options?.progress);\r\n\r\n return {\r\n value: \"\",\r\n text: result.FileName\r\n };\r\n}\r\n\r\n/**\r\n * Uploads a BinaryFile into Rock. The specific storage location is defined by\r\n * the file type.\r\n *\r\n * @param file The file to be uploaded into Rock.\r\n * @param binaryFileTypeGuid The unique identifier of the BinaryFileType to handle the upload.\r\n * @param options The options ot use when uploading the file.\r\n *\r\n * @returns A ListItemBag whose value contains the new file Guid and text specifies the filename.\r\n */\r\nexport async function uploadBinaryFile(file: File, binaryFileTypeGuid: Guid, options?: UploadOptions): Promise {\r\n let url = `${options?.baseUrl ?? \"/FileUploader.ashx\"}?isBinaryFile=True&fileTypeGuid=${binaryFileTypeGuid}`;\r\n\r\n // Assume file is temporary unless specified otherwise so that files\r\n // that don't end up getting used will get cleaned up.\r\n if (options?.isTemporary === false) {\r\n url += \"&isTemporary=False\";\r\n }\r\n else {\r\n url += \"&isTemporary=True\";\r\n }\r\n\r\n if (options?.parentEntityTypeId) {\r\n url += \"&ParentEntityTypeId=\" + options.parentEntityTypeId;\r\n }\r\n\r\n if (options?.parentEntityId) {\r\n url += \"&ParentEntityId=\" + options.parentEntityId;\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n\r\n const result = await uploadFile(url, formData, options?.progress);\r\n\r\n return {\r\n value: result.Guid,\r\n text: result.FileName\r\n };\r\n}\r\n\r\n// #endregion\r\n\r\nexport default {\r\n doApiCall,\r\n post,\r\n get\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { HttpResult } from \"@Obsidian/Types/Utility/http\";\r\nimport { AddressControlBag } from \"@Obsidian/ViewModels/Controls/addressControlBag\";\r\nimport { AddressControlValidateAddressOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/AddressControlValidateAddressOptionsBag\";\r\nimport { AddressControlValidateAddressResultsBag } from \"@Obsidian/ViewModels/Rest/Controls/AddressControlValidateAddressResultsBag\";\r\nimport { useHttp } from \"./http\";\r\n\r\nexport function getDefaultAddressControlModel(): AddressControlBag {\r\n return {\r\n state: \"AZ\",\r\n country: \"US\"\r\n };\r\n}\r\n\r\nexport function validateAddress(address: AddressControlValidateAddressOptionsBag): Promise> {\r\n const post = useHttp().post;\r\n return post(\"/api/v2/Controls/AddressControlValidateAddress\", undefined, address);\r\n}\r\n\r\nexport function getAddressString(address: AddressControlBag): Promise> {\r\n const post = useHttp().post;\r\n return post(\"/api/v2/Controls/AddressControlGetStreetAddressString\", undefined, address);\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Flatten a nested array down by the given number of levels.\r\n * Meant to be a replacement for the official Array.prototype.flat, which isn't supported by all browsers we support.\r\n * Adapted from Polyfill: https://github.com/behnammodi/polyfill/blob/master/array.polyfill.js#L591\r\n *\r\n * @param arr (potentially) nested array to be flattened\r\n * @param depth The depth level specifying how deep a nested array structure should be flattened. Defaults to 1.\r\n *\r\n * @returns A new array with the sub-array elements concatenated into it.\r\n */\r\nexport function flatten(arr: T[][], depth: number = 1): T[] {\r\n const result: T[] = [];\r\n const forEach = result.forEach;\r\n\r\n const flatDeep = function (arr, depth): void {\r\n forEach.call(arr, function (val) {\r\n if (depth > 0 && Array.isArray(val)) {\r\n flatDeep(val, depth - 1);\r\n }\r\n else {\r\n result.push(val);\r\n }\r\n });\r\n };\r\n\r\n flatDeep(arr, depth);\r\n return result;\r\n}\r\n\r\n/**\r\n * Convert a single item to an array of one item. If the value is already an\r\n * array then it is just returned as is.\r\n *\r\n * @param value The value from the parent component.\r\n *\r\n * @returns The value trimmed down to just the actual selection value.\r\n */\r\nexport function forceToArray(value: T | T[] | undefined | null, multiple: boolean): T[] {\r\n if (value === undefined || value === null) {\r\n return [];\r\n }\r\n else if (Array.isArray(value)) {\r\n if (!multiple && value.length > 1) {\r\n return [value[0]];\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n else {\r\n return [value];\r\n }\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * A function that will select a value from the object.\r\n */\r\ntype ValueSelector = (value: T) => string | number | boolean | null | undefined;\r\n\r\n/**\r\n * A function that will perform testing on a value to see if it meets\r\n * a certain condition and return true or false.\r\n */\r\ntype PredicateFn = (value: T, index: number) => boolean;\r\n\r\n/**\r\n * A function that will compare two values to see which one should\r\n * be ordered first.\r\n */\r\ntype ValueComparer = (a: T, b: T) => number;\r\n\r\nconst moreThanOneElement = \"More than one element was found in collection.\";\r\n\r\nconst noElementsFound = \"No element was found in collection.\";\r\n\r\n/**\r\n * Compares the values of two objects given the selector function.\r\n *\r\n * For the purposes of a compare, null and undefined are always a lower\r\n * value - unless both values are null or undefined in which case they\r\n * are considered equal.\r\n *\r\n * @param keySelector The function that will select the value.\r\n * @param descending True if this comparison should be in descending order.\r\n */\r\nfunction valueComparer(keySelector: ValueSelector, descending: boolean): ValueComparer {\r\n return (a: T, b: T): number => {\r\n const valueA = keySelector(a);\r\n const valueB = keySelector(b);\r\n\r\n // If valueA is null or undefined then it will either be considered\r\n // lower than or equal to valueB.\r\n if (valueA === undefined || valueA === null) {\r\n // If valueB is also null or undefined then they are considered equal.\r\n if (valueB === undefined || valueB === null) {\r\n return 0;\r\n }\r\n\r\n return !descending ? -1 : 1;\r\n }\r\n\r\n // If valueB is undefined or null (but valueA is not) then it is considered\r\n // a lower value than valueA.\r\n if (valueB === undefined || valueB === null) {\r\n return !descending ? 1 : -1;\r\n }\r\n\r\n // Perform a normal comparison.\r\n if (valueA > valueB) {\r\n return !descending ? 1 : -1;\r\n }\r\n else if (valueA < valueB) {\r\n return !descending ? -1 : 1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n };\r\n}\r\n\r\n\r\n/**\r\n * Provides LINQ style access to an array of elements.\r\n */\r\nexport class List {\r\n /** The elements being tracked by this list. */\r\n protected elements: T[];\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new list with the given elements.\r\n *\r\n * @param elements The elements to be made available to LINQ queries.\r\n */\r\n constructor(elements?: T[]) {\r\n if (elements === undefined) {\r\n this.elements = [];\r\n }\r\n else {\r\n // Copy the array so if the caller makes changes it won't be reflected by us.\r\n this.elements = [...elements];\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new List from the elements without copying to a new array.\r\n *\r\n * @param elements The elements to initialize the list with.\r\n * @returns A new list of elements.\r\n */\r\n public static fromArrayNoCopy(elements: T[]): List {\r\n const list = new List();\r\n\r\n list.elements = elements;\r\n\r\n return list;\r\n }\r\n\r\n // #endregion\r\n\r\n /**\r\n * Returns a boolean that determines if the collection contains any elements.\r\n *\r\n * @returns true if the collection contains any elements; otherwise false.\r\n */\r\n public any(): boolean;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns a boolean that determines\r\n * if the filtered collection contains any elements.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns true if the collection contains any elements; otherwise false.\r\n */\r\n public any(predicate: PredicateFn): boolean;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns a boolean that determines\r\n * if the filtered collection contains any elements.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns true if the collection contains any elements; otherwise false.\r\n */\r\n public any(predicate?: PredicateFn): boolean {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n return elements.length > 0;\r\n }\r\n\r\n /**\r\n * Returns the first element from the collection if there are any elements.\r\n * Otherwise will throw an exception.\r\n *\r\n * @returns The first element in the collection.\r\n */\r\n public first(): T;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the first element\r\n * in the collection if any remain. Otherwise throws an exception.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The first element in the collection.\r\n */\r\n public first(predicate: PredicateFn): T;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the first element\r\n * in the collection if any remain. Otherwise throws an exception.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The first element in the collection.\r\n */\r\n public first(predicate?: PredicateFn): T {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length >= 1) {\r\n return elements[0];\r\n }\r\n else {\r\n throw noElementsFound;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the first element found in the collection or undefined if the\r\n * collection contains no elements.\r\n *\r\n * @returns The first element in the collection or undefined.\r\n */\r\n public firstOrUndefined(): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the first element\r\n * found in the collection. If no elements remain then undefined is\r\n * returned instead.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The first element in the filtered collection or undefined.\r\n */\r\n public firstOrUndefined(predicate: PredicateFn): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the first element\r\n * found in the collection. If no elements remain then undefined is\r\n * returned instead.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The first element in the filtered collection or undefined.\r\n */\r\n public firstOrUndefined(predicate?: PredicateFn): T | undefined {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length === 1) {\r\n return elements[0];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the last element found in the collection or undefined if the\r\n * collection contains no elements.\r\n *\r\n * @returns The last element in the collection or undefined.\r\n */\r\n public lastOrUndefined(): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the last element\r\n * found in the collection. If no elements remain then undefined is\r\n * returned instead.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The last element in the filtered collection or undefined.\r\n */\r\n public lastOrUndefined(predicate: PredicateFn): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the last element\r\n * found in the collection. If no elements remain then undefined is\r\n * returned instead.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The last element in the filtered collection or undefined.\r\n */\r\n public lastOrUndefined(predicate?: PredicateFn): T | undefined {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length) {\r\n return elements[elements.length - 1];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a single element from the collection if there is a single\r\n * element. Otherwise will throw an exception.\r\n *\r\n * @returns An element.\r\n */\r\n public single(): T;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the single remaining\r\n * element from the collection. If more than one element remains then an\r\n * exception will be thrown.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns An element.\r\n */\r\n public single(predicate: PredicateFn): T;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the single remaining\r\n * element from the collection. If more than one element remains then an\r\n * exception will be thrown.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns An element.\r\n */\r\n public single(predicate?: PredicateFn): T {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length === 1) {\r\n return elements[0];\r\n }\r\n else {\r\n throw moreThanOneElement;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a single element from the collection if there is a single\r\n * element. If no elements are found then undefined is returned. More\r\n * than a single element will throw an exception.\r\n *\r\n * @returns An element or undefined.\r\n */\r\n public singleOrUndefined(): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the single element\r\n * from the collection if there is only one remaining. If no elements\r\n * remain then undefined is returned. More than a single element will throw\r\n * an exception.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns An element or undefined.\r\n */\r\n public singleOrUndefined(predicate: PredicateFn): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the single element\r\n * from the collection if there is only one remaining. If no elements\r\n * remain then undefined is returned. More than a single element will throw\r\n * an exception.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns An element or undefined.\r\n */\r\n public singleOrUndefined(predicate?: PredicateFn): T | undefined {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length === 0) {\r\n return undefined;\r\n }\r\n else if (elements.length === 1) {\r\n return elements[0];\r\n }\r\n else {\r\n throw moreThanOneElement;\r\n }\r\n }\r\n\r\n /**\r\n * Orders the elements of the array and returns a new list of items\r\n * in that order.\r\n *\r\n * @param keySelector The selector for the key to be ordered by.\r\n * @returns A new ordered list of elements.\r\n */\r\n public orderBy(keySelector: ValueSelector): OrderedList {\r\n const comparer = valueComparer(keySelector, false);\r\n\r\n return new OrderedList(this.elements, comparer);\r\n }\r\n\r\n /**\r\n * Orders the elements of the array in descending order and returns a\r\n * new list of items in that order.\r\n *\r\n * @param keySelector The selector for the key to be ordered by.\r\n * @returns A new ordered list of elements.\r\n */\r\n public orderByDescending(keySelector: ValueSelector): OrderedList {\r\n const comparer = valueComparer(keySelector, true);\r\n\r\n return new OrderedList(this.elements, comparer);\r\n }\r\n\r\n /**\r\n * Filters the results and returns a new list containing only the elements\r\n * that match the predicate.\r\n *\r\n * @param predicate The predicate to filter elements with.\r\n *\r\n * @returns A new collection of elements that match the predicate.\r\n */\r\n public where(predicate: PredicateFn): List {\r\n return new List(this.elements.filter(predicate));\r\n }\r\n\r\n /**\r\n * Get the elements of this list as a native array of items.\r\n *\r\n * @returns An array of items with all filters applied.\r\n */\r\n public toArray(): T[] {\r\n return [...this.elements];\r\n }\r\n}\r\n\r\n/**\r\n * A list of items that has ordering already applied.\r\n */\r\nclass OrderedList extends List {\r\n /** The base comparer to use when ordering. */\r\n private baseComparer!: ValueComparer;\r\n\r\n // #region Constructors\r\n\r\n constructor(elements: T[], baseComparer: ValueComparer) {\r\n super(elements);\r\n\r\n this.baseComparer = baseComparer;\r\n this.elements.sort(this.baseComparer);\r\n }\r\n\r\n // #endregion\r\n\r\n /**\r\n * Orders the elements of the array and returns a new list of items\r\n * in that order.\r\n *\r\n * @param keySelector The selector for the key to be ordered by.\r\n * @returns A new ordered list of elements.\r\n */\r\n public thenBy(keySelector: ValueSelector): OrderedList {\r\n const comparer = valueComparer(keySelector, false);\r\n\r\n return new OrderedList(this.elements, (a: T, b: T) => this.baseComparer(a, b) || comparer(a, b));\r\n }\r\n\r\n /**\r\n * Orders the elements of the array in descending order and returns a\r\n * new list of items in that order.\r\n *\r\n * @param keySelector The selector for the key to be ordered by.\r\n * @returns A new ordered list of elements.\r\n */\r\n public thenByDescending(keySelector: ValueSelector): OrderedList {\r\n const comparer = valueComparer(keySelector, true);\r\n\r\n return new OrderedList(this.elements, (a: T, b: T) => this.baseComparer(a, b) || comparer(a, b));\r\n }\r\n}\r\n\r\n/**\r\n * A utility class for working with iterables in a LINQ-like manner.\r\n */\r\nexport class Enumerable {\r\n protected iterableFactory: () => Iterable;\r\n\r\n /**\r\n * Creates an instance of Enumerable using a factory for the iterable.\r\n * @param iterableFactory - A factory function that produces an iterable.\r\n */\r\n constructor(iterableFactory: () => Iterable) {\r\n this.iterableFactory = iterableFactory;\r\n }\r\n\r\n /**\r\n * Creates an Enumerable from a regular iterable (e.g., Array, Set).\r\n * @param iterable - An iterable to create the Enumerable from.\r\n * @returns A new Enumerable instance.\r\n */\r\n static from(iterable: Iterable): Enumerable;\r\n\r\n /**\r\n * Creates an Enumerable from a generator function.\r\n * @param generator - A function that produces an IterableIterator.\r\n * @returns A new Enumerable instance.\r\n */\r\n static from(generator: () => IterableIterator): Enumerable;\r\n\r\n /**\r\n * Creates an Enumerable from a regular iterable (e.g., Array, Set) or a generator function.\r\n * @param source - Either an iterable or a generator function.\r\n * @returns A new Enumerable instance.\r\n */\r\n static from(source: Iterable | (() => IterableIterator)): Enumerable {\r\n if (typeof source === \"function\") {\r\n return new Enumerable(source); // Handle generator factory\r\n }\r\n else {\r\n return new Enumerable(() => source); // Handle regular iterable\r\n }\r\n }\r\n\r\n /**\r\n * Returns an iterator for the current Enumerable.\r\n * @returns An iterator for the iterable.\r\n */\r\n *[Symbol.iterator](): Iterator {\r\n // Regenerate the iterable.\r\n yield* this.iterableFactory();\r\n }\r\n\r\n /**\r\n * Filters the sequence to include only elements that satisfy the predicate.\r\n * @param predicate - A function to test each element for a condition.\r\n * @returns A new Enumerable containing the filtered elements.\r\n */\r\n where(predicate: (item: T) => boolean): Enumerable {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n return new Enumerable(function* (): Generator {\r\n for (const item of self) {\r\n if (predicate(item)) {\r\n yield item;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Projects each element of the sequence into a new form.\r\n * @param selector - A function to project each element into a new form.\r\n * @returns A new Enumerable with the projected elements.\r\n */\r\n select(selector: (item: T) => U): Enumerable {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n return new Enumerable(function* (): Generator {\r\n for (const item of self) {\r\n yield selector(item);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Returns a new Enumerable that skips the first `count` elements of the sequence.\r\n * @param count - The number of elements to skip.\r\n * @returns A new Enumerable that skips the specified number of elements.\r\n */\r\n skip(count: number): Enumerable {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n return new Enumerable(function* () {\r\n let skipped = 0;\r\n for (const item of self) {\r\n if (skipped++ >= count) {\r\n yield item;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Returns a new Enumerable that contains the first `count` elements of the sequence.\r\n * @param count - The number of elements to take.\r\n * @returns A new Enumerable containing the taken elements.\r\n */\r\n take(count: number): Enumerable {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n return new Enumerable(function* () {\r\n let i = 0;\r\n for (const item of self) {\r\n if (i++ < count) {\r\n yield item;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Returns the first element of the sequence or a default value if the sequence is empty.\r\n * @param defaultValue - The default value to return if the sequence is empty.\r\n * @returns The first element of the sequence or the default value.\r\n */\r\n firstOrDefault(defaultValue?: T): T | undefined {\r\n for (const item of this) {\r\n return item;\r\n }\r\n\r\n return defaultValue;\r\n }\r\n\r\n /**\r\n * Returns the last element of the sequence, or a default value if the sequence is empty.\r\n * @param defaultValue - The default value to return if the sequence is empty.\r\n * @returns The last element of the sequence, or the provided default value.\r\n *\r\n * @example\r\n * const numbers = Enumerable.from([1, 2, 3]);\r\n * console.log(numbers.lastOrDefault()); // Outputs: 3\r\n *\r\n * @example\r\n * const empty = Enumerable.from([]);\r\n * console.log(empty.lastOrDefault(0)); // Outputs: 0\r\n */\r\n lastOrDefault(defaultValue?: T): T | undefined {\r\n let last: T | undefined = defaultValue;\r\n\r\n for (const item of this) {\r\n // Update `last` for each element.\r\n last = item;\r\n }\r\n\r\n return last;\r\n }\r\n\r\n /**\r\n * Aggregates the elements of the sequence using a specified accumulator function and seed value.\r\n * @param accumulator - A function that accumulates each element.\r\n * @param seed - The initial value for the accumulation.\r\n * @returns The aggregated value.\r\n */\r\n aggregate(accumulator: (acc: U, item: T, index: number) => U, seed: U): U {\r\n let result = seed;\r\n let index = 0;\r\n for (const item of this) {\r\n result = accumulator(result, item, index++);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Determines whether any elements in the sequence satisfy a condition or if the sequence contains any elements.\r\n * @param predicate - An optional function to test each element for a condition.\r\n * @returns `true` if any elements satisfy the condition; otherwise, `false`.\r\n */\r\n any(predicate?: (item: T) => boolean): boolean {\r\n for (const item of this) {\r\n if (!predicate || predicate(item)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Determines whether all elements in the sequence satisfy a condition or if the sequence contains any elements.\r\n * @param predicate - An optional function to test each element for a condition.\r\n * @returns `true` if all elements satisfy the condition; otherwise, `false`.\r\n */\r\n all(predicate: (item: T) => boolean): boolean {\r\n for (const item of this) {\r\n if (!predicate(item)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Executes a specified action for each element in the sequence.\r\n * @param action - A function to execute for each element.\r\n */\r\n forEach(action: (item: T) => void): void {\r\n for (const item of this) {\r\n action(item);\r\n }\r\n }\r\n\r\n /**\r\n * Converts the sequence into an array.\r\n * @returns An array containing all elements in the sequence.\r\n */\r\n toArray(): T[] {\r\n return Array.from(this);\r\n }\r\n\r\n /**\r\n * Converts the sequence into a List.\r\n * @returns An List containing all elements in the sequence.\r\n */\r\n toList(): List {\r\n return new List(this.toArray());\r\n }\r\n\r\n /**\r\n * Sorts the elements of the sequence in ascending order.\r\n * @param keySelector - Function to extract the key for comparison.\r\n * @param comparer - Optional comparison function for the keys.\r\n * @returns An OrderedEnumerable sorted in ascending order.\r\n */\r\n orderBy(\r\n keySelector: (item: T) => U,\r\n comparer: (a: U, b: U) => number = (a, b) => (a > b ? 1 : a < b ? -1 : 0)\r\n ): OrderedEnumerable {\r\n return new OrderedEnumerable(\r\n this.iterableFactory,\r\n (a, b) => comparer(keySelector(a), keySelector(b))\r\n );\r\n }\r\n\r\n /**\r\n * Sorts the elements of the sequence in descending order.\r\n * @param keySelector - Function to extract the key for comparison.\r\n * @param comparer - Optional comparison function for the keys.\r\n * @returns An OrderedEnumerable sorted in descending order.\r\n */\r\n orderByDescending(\r\n keySelector: (item: T) => U,\r\n comparer: (a: U, b: U) => number = (a, b) => (a > b ? 1 : a < b ? -1 : 0)\r\n ): OrderedEnumerable {\r\n const descendingComparer = (a: U, b: U): number => -comparer(a, b);\r\n return this.orderBy(keySelector, descendingComparer);\r\n }\r\n\r\n /**\r\n * Returns a generator that yields each element of the sequence paired with its index.\r\n *\r\n * @generator\r\n * @yields {[T, number]} A tuple containing the element and its zero-based index.\r\n *\r\n * @example\r\n * // Example usage with a for...of loop:\r\n * const elements = Enumerable.from(['a', 'b', 'c']);\r\n * for (const [item, index] of elements.withIndex()) {\r\n * console.log(`Index: ${index}, Item: ${item}`);\r\n * }\r\n * // Output:\r\n * // Index: 0, Item: a\r\n * // Index: 1, Item: b\r\n * // Index: 2, Item: c\r\n *\r\n * @example\r\n * // Example usage with chaining:\r\n * const indexed = Enumerable.from(['x', 'y', 'z'])\r\n * .withIndex()\r\n * .where(([item, index]) => index % 2 === 0)\r\n * .toArray();\r\n * console.log(indexed);\r\n * // Output: [['x', 0], ['z', 2]]\r\n */\r\n *withIndex(): IterableIterator<[T, number]> {\r\n let index = 0;\r\n for (const item of this) {\r\n yield [item, index++];\r\n }\r\n }\r\n\r\n /**\r\n * Filters the sequence and returns only elements of the specified type.\r\n * @template U The target type to filter by.\r\n * @param typeCheck - A runtime check function to validate the type of each element.\r\n * @returns A new Enumerable containing elements of type `U`.\r\n *\r\n * @example\r\n * const mixed: Enumerable = Enumerable.from([1, \"hello\", true, 42]);\r\n * const numbers = mixed.ofType(item => typeof item === \"number\");\r\n * console.log(numbers.toArray()); // Outputs: [1, 42]\r\n *\r\n * @example\r\n * class Animal {}\r\n * class Dog extends Animal {}\r\n * const animals: Enumerable = Enumerable.from([new Animal(), new Dog()]);\r\n * const dogs = animals.ofType(item => item instanceof Dog);\r\n * console.log(dogs.toArray()); // Outputs: [Dog instance]\r\n */\r\n ofType(typeCheck: (item: T) => item is U): Enumerable {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n return new Enumerable(function* () {\r\n for (const item of self) {\r\n if (typeCheck(item)) {\r\n yield item;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nclass OrderedEnumerable extends Enumerable {\r\n private readonly sortComparers: ((a: T, b: T) => number)[];\r\n\r\n constructor(\r\n iterableFactory: () => Iterable,\r\n initialComparer: (a: T, b: T) => number\r\n ) {\r\n super(iterableFactory);\r\n this.sortComparers = [initialComparer];\r\n }\r\n\r\n /**\r\n * Adds a secondary ascending order comparison to the current sort.\r\n * @param keySelector - Function to extract the key for comparison.\r\n * @param comparer - Optional comparison function for the keys.\r\n * @returns A new OrderedEnumerable with the additional ordering.\r\n */\r\n thenOrderBy(\r\n keySelector: (item: T) => U,\r\n comparer: (a: U, b: U) => number = (a, b) => (a > b ? 1 : a < b ? -1 : 0)\r\n ): OrderedEnumerable {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n return new OrderedEnumerable(\r\n this.iterableFactory,\r\n (a, b) => {\r\n for (const cmp of self.sortComparers) {\r\n const result = cmp(a, b);\r\n if (result !== 0) return result;\r\n }\r\n return comparer(keySelector(a), keySelector(b));\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Adds a secondary descending order comparison to the current sort.\r\n * @param keySelector - Function to extract the key for comparison.\r\n * @param comparer - Optional comparison function for the keys.\r\n * @returns A new OrderedEnumerable with the additional ordering.\r\n */\r\n thenOrderByDescending(\r\n keySelector: (item: T) => U,\r\n comparer: (a: U, b: U) => number = (a, b) => (a > b ? 1 : a < b ? -1 : 0)\r\n ): OrderedEnumerable {\r\n const descendingComparer = (a: U, b: U): number => -comparer(a, b);\r\n return this.thenOrderBy(keySelector, descendingComparer);\r\n }\r\n\r\n override toArray(): T[] {\r\n return Array.from(this);\r\n }\r\n\r\n /**\r\n * Sorts the sequence based on the defined comparers.\r\n * @returns A new Iterable with elements sorted.\r\n */\r\n override *[Symbol.iterator](): Iterator {\r\n const array = Array.from(this.iterableFactory());\r\n array.sort((a, b) => {\r\n for (const comparer of this.sortComparers) {\r\n const result = comparer(a, b);\r\n if (result !== 0) return result;\r\n }\r\n return 0;\r\n });\r\n yield* array;\r\n }\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\n\r\n/** An empty unique identifier. */\r\nexport const emptyGuid = \"00000000-0000-0000-0000-000000000000\";\r\n\r\n/**\r\n* Generates a new Guid\r\n*/\r\nexport function newGuid (): Guid {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === \"x\" ? r : r & 0x3 | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\n\r\n/**\r\n * Returns a normalized Guid that can be compared with string equality (===)\r\n * @param a\r\n */\r\nexport function normalize (a: Guid | null | undefined): Guid | null {\r\n if (!a) {\r\n return null;\r\n }\r\n\r\n return a.toLowerCase();\r\n}\r\n\r\n/**\r\n * Checks if the given string is a valid Guid. To be considered valid it must\r\n * be a bare guid with hyphens. Bare means not enclosed in '{' and '}'.\r\n * \r\n * @param guid The Guid to be checked.\r\n * @returns True if the guid is valid, otherwise false.\r\n */\r\nexport function isValidGuid(guid: Guid | string): boolean {\r\n return /^[0-9A-Fa-f]{8}-(?:[0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$/.test(guid);\r\n}\r\n\r\n/**\r\n * Converts the string value to a Guid.\r\n * \r\n * @param value The value to be converted.\r\n * @returns A Guid value or null is the string could not be parsed as a Guid.\r\n */\r\nexport function toGuidOrNull(value: string | null | undefined): Guid | null {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (!isValidGuid(value)) {\r\n return null;\r\n }\r\n\r\n return value as Guid;\r\n}\r\n\r\n/**\r\n * Are the guids equal?\r\n * @param a\r\n * @param b\r\n */\r\nexport function areEqual (a: Guid | null | undefined, b: Guid | null | undefined): boolean {\r\n return normalize(a) === normalize(b);\r\n}\r\n\r\nexport default {\r\n newGuid,\r\n normalize,\r\n areEqual\r\n};\r\n\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { areEqual, toGuidOrNull } from \"./guid\";\r\nimport { Pluralize } from \"@Obsidian/Libs/pluralize\";\r\n\r\n/**\r\n * Is the value an empty string?\r\n * @param val\r\n */\r\nexport function isEmpty(val: unknown): boolean {\r\n if (typeof val === \"string\") {\r\n return val.length === 0;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Is the value an empty string?\r\n * @param val\r\n */\r\nexport function isWhiteSpace(val: unknown): boolean {\r\n if (typeof val === \"string\") {\r\n return val.trim().length === 0;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Is the value null, undefined or whitespace?\r\n * @param val\r\n */\r\nexport function isNullOrWhiteSpace(val: unknown): boolean {\r\n return isWhiteSpace(val) || val === undefined || val === null;\r\n}\r\n\r\n/**\r\n * Turns camelCase or PascalCase strings into separate strings - \"MyCamelCaseString\" turns into \"My Camel Case String\"\r\n * @param val\r\n */\r\nexport function splitCase(val: string): string {\r\n // First, insert a space before sequences of capital letters followed by a lowercase letter (e.g., \"RESTKey\" -> \"REST Key\")\r\n val = val.replace(/([A-Z]+)([A-Z][a-z])/g, \"$1 $2\");\r\n // Then, insert a space before sequences of a lowercase letter or number followed by a capital letter (e.g., \"myKey\" -> \"my Key\")\r\n return val.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\r\n}\r\n\r\n/**\r\n * Returns a string that has each item comma separated except for the last\r\n * which will use the word \"and\".\r\n *\r\n * @example\r\n * ['a', 'b', 'c'] => 'a, b and c'\r\n *\r\n * @param strs The strings to be joined.\r\n * @param andStr The custom string to use instead of the word \"and\".\r\n *\r\n * @returns A string that represents all the strings.\r\n */\r\nexport function asCommaAnd(strs: string[], andStr?: string): string {\r\n if (strs.length === 0) {\r\n return \"\";\r\n }\r\n\r\n if (strs.length === 1) {\r\n return strs[0];\r\n }\r\n\r\n if (!andStr) {\r\n andStr = \"and\";\r\n }\r\n\r\n if (strs.length === 2) {\r\n return `${strs[0]} ${andStr} ${strs[1]}`;\r\n }\r\n\r\n const last = strs.pop();\r\n return `${strs.join(\", \")} ${andStr} ${last}`;\r\n}\r\n\r\n/**\r\n * Convert the string to the title case.\r\n * hellO worlD => Hello World\r\n * @param str\r\n */\r\nexport function toTitleCase(str: string | null): string {\r\n if (!str) {\r\n return \"\";\r\n }\r\n\r\n return str.replace(/\\w\\S*/g, (word) => {\r\n return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\r\n });\r\n}\r\n\r\ntype KebabCaseOptions = {\r\n /** Keep intentional multiple dashes. */\r\n preserveMultipleDashes?: boolean;\r\n /** Allow a leading dashes. */\r\n allowLeadingDashes?: boolean;\r\n /** Allow a trailing dashes. */\r\n allowTrailingDashes?: boolean;\r\n /** Keep special characters (except spaces). */\r\n allowSpecialChars?: boolean;\r\n};\r\n\r\n/**\r\n * Converts the string to kebab-case.\r\n *\r\n * @example\r\n * toKebabCase(\"helloWorLd\") // \"hello-wor-ld\"\r\n *\r\n * @param str\r\n */\r\nexport function toKebabCase(str: string, options: KebabCaseOptions = {}): string {\r\n const {\r\n preserveMultipleDashes = false,\r\n allowLeadingDashes = false,\r\n allowTrailingDashes = false,\r\n allowSpecialChars = false,\r\n } = options;\r\n\r\n let result = str.trim();\r\n\r\n // Convert camelCase or PascalCase to kebab-case.\r\n result = result.replace(/([a-z])([A-Z])/g, \"$1-$2\");\r\n\r\n // Replace spaces with dashes.\r\n result = result.replace(/\\s+/g, \"-\");\r\n\r\n // Remove special characters (if not allowed).\r\n if (!allowSpecialChars) {\r\n result = result.replace(/[^a-zA-Z0-9-]/g, \"\");\r\n }\r\n\r\n // Collapse multiple dashes unless explicitly preserved.\r\n if (!preserveMultipleDashes) {\r\n result = result.replace(/-+/g, \"-\");\r\n }\r\n\r\n // Ensure lowercase.\r\n result = result.toLowerCase();\r\n\r\n // Handle leading/trailing dashes.\r\n if (!allowLeadingDashes) {\r\n result = result.replace(/^-+/, \"\");\r\n }\r\n if (!allowTrailingDashes) {\r\n result = result.replace(/-+$/, \"\");\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Capitalize the first character\r\n */\r\nexport function upperCaseFirstCharacter(str: string | null): string {\r\n if (!str) {\r\n return \"\";\r\n }\r\n\r\n return str.charAt(0).toUpperCase() + str.substring(1);\r\n}\r\n\r\n/**\r\n * Pluralizes the given word. If count is specified and is equal to 1 then\r\n * the singular form of the word is returned. This will also de-pluralize a\r\n * word if required.\r\n *\r\n * @param word The word to be pluralized or singularized.\r\n * @param count An optional count to indicate when the word should be singularized.\r\n *\r\n * @returns The word in plural or singular form depending on the options.\r\n */\r\nexport function pluralize(word: string, count?: number): string {\r\n return Pluralize(word, count);\r\n}\r\n\r\n/**\r\n * Returns a singular or plural phrase depending on if the number is 1.\r\n * (0, Cat, Cats) => Cats\r\n * (1, Cat, Cats) => Cat\r\n * (2, Cat, Cats) => Cats\r\n * @param num\r\n * @param singular\r\n * @param plural\r\n */\r\nexport function pluralConditional(num: number, singular: string, plural: string): string {\r\n return num === 1 ? singular : plural;\r\n}\r\n\r\n/**\r\n * Pad the left side of a string so it is at least length characters long.\r\n *\r\n * @param str The string to be padded.\r\n * @param length The minimum length to make the string.\r\n * @param padCharacter The character to use to pad the string.\r\n */\r\nexport function padLeft(str: string | undefined | null, length: number, padCharacter: string = \" \"): string {\r\n if (padCharacter == \"\") {\r\n padCharacter = \" \";\r\n }\r\n else if (padCharacter.length > 1) {\r\n padCharacter = padCharacter.substring(0, 1);\r\n }\r\n\r\n if (!str) {\r\n return Array(length + 1).join(padCharacter);\r\n }\r\n\r\n if (str.length >= length) {\r\n return str;\r\n }\r\n\r\n return Array(length - str.length + 1).join(padCharacter) + str;\r\n}\r\n\r\n/**\r\n * Pad the right side of a string so it is at least length characters long.\r\n *\r\n * @param str The string to be padded.\r\n * @param length The minimum length to make the string.\r\n * @param padCharacter The character to use to pad the string.\r\n */\r\nexport function padRight(str: string | undefined | null, length: number, padCharacter: string = \" \"): string {\r\n if (padCharacter == \"\") {\r\n padCharacter = \" \";\r\n }\r\n else if (padCharacter.length > 1) {\r\n padCharacter = padCharacter.substring(0, 1);\r\n }\r\n\r\n if (!str) {\r\n return Array(length).join(padCharacter);\r\n }\r\n\r\n if (str.length >= length) {\r\n return str;\r\n }\r\n\r\n return str + Array(length - str.length + 1).join(padCharacter);\r\n}\r\n\r\nexport type TruncateOptions = {\r\n ellipsis?: boolean;\r\n};\r\n\r\n/**\r\n * Ensure a string does not go over the character limit. Truncation happens\r\n * on word boundaries.\r\n *\r\n * @param str The string to be truncated.\r\n * @param limit The maximum length of the resulting string.\r\n * @param options Additional options that control how truncation will happen.\r\n *\r\n * @returns The truncated string.\r\n */\r\nexport function truncate(str: string, limit: number, options?: TruncateOptions): string {\r\n // Early out if the string is already under the limit.\r\n if (str.length <= limit) {\r\n return str;\r\n }\r\n\r\n // All the whitespace characters that we can split on.\r\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\";\r\n const reg = new RegExp(`(?=[${trimmable}])`);\r\n const words = str.split(reg);\r\n let count = 0;\r\n\r\n // If we are appending ellipsis, then shorten the limit size.\r\n if (options && options.ellipsis === true) {\r\n limit -= 3;\r\n }\r\n\r\n // Get a list of words that will fit within our length requirements.\r\n const visibleWords = words.filter(function (word) {\r\n count += word.length;\r\n return count <= limit;\r\n });\r\n\r\n return `${visibleWords.join(\"\")}...`;\r\n}\r\n\r\n/** The regular expression that contains the characters to be escaped. */\r\nconst escapeHtmlRegExp = /[\"'&<>]/g;\r\n\r\n/** The character map of the characters to be replaced and the strings to replace them with. */\r\nconst escapeHtmlMap: Record = {\r\n '\"': \""\",\r\n \"&\": \"&\",\r\n \"'\": \"'\",\r\n \"<\": \"<\",\r\n \">\": \">\"\r\n};\r\n\r\n/**\r\n * Escapes a string so it can be used in HTML. This turns things like the <\r\n * character into the < sequence so it will still render as \"<\".\r\n *\r\n * @param str The string to be escaped.\r\n * @returns A string that has all HTML entities escaped.\r\n */\r\nexport function escapeHtml(str: string): string {\r\n return str.replace(escapeHtmlRegExp, (ch) => {\r\n return escapeHtmlMap[ch];\r\n });\r\n}\r\n\r\n/**\r\n * The default compare value function for UI controls. This checks if both values\r\n * are GUIDs and if so does a case-insensitive compare, otherwise it does a\r\n * case-sensitive compare of the two values.\r\n *\r\n * @param value The value selected in the UI.\r\n * @param itemValue The item value to be compared against.\r\n *\r\n * @returns true if the two values are considered equal; otherwise false.\r\n */\r\nexport function defaultControlCompareValue(value: string, itemValue: string): boolean {\r\n const guidValue = toGuidOrNull(value);\r\n const guidItemValue = toGuidOrNull(itemValue);\r\n\r\n if (guidValue !== null && guidItemValue !== null) {\r\n return areEqual(guidValue, guidItemValue);\r\n }\r\n\r\n return value === itemValue;\r\n}\r\n\r\n/**\r\n * Determins whether or not a given string contains any HTML tags in.\r\n *\r\n * @param value The string potentially containing HTML\r\n *\r\n * @returns true if it contains HTML, otherwise false\r\n */\r\nexport function containsHtmlTag(value: string): boolean {\r\n return /<[/0-9a-zA-Z]/.test(value);\r\n}\r\n\r\n\r\n/**\r\n * Create a 32-bit integer hash representation of a string.\r\n *\r\n * @param str The string to be hashed\r\n *\r\n * @returns The 32-bit integer hash representation of the string.\r\n */\r\nexport function createHash(str: string): number {\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n const chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n\r\n return hash;\r\n}\r\n\r\n/**\r\n * Replaces all instances of `search` in `str` with `replace`.\r\n * @param str The source string.\r\n * @param search The string to search for.\r\n * @param replace The string to replace with.\r\n */\r\nexport function replaceAll(str: string, search: string, replace: string): string {\r\n return str.replace(new RegExp(search, \"g\"), replace);\r\n}\r\n\r\n/**\r\n * Attempts to parse the JSON and returns undefined if it could not be parsed.\r\n *\r\n * @param value The JSON value to parse.\r\n *\r\n * @returns The object that represents the JSON or undefined.\r\n */\r\nexport function safeParseJson(value: string | null | undefined): T | undefined {\r\n if (!value) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n return JSON.parse(value);\r\n }\r\n catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default {\r\n asCommaAnd,\r\n containsHtmlTag,\r\n escapeHtml,\r\n splitCase,\r\n isNullOrWhiteSpace,\r\n isWhiteSpace,\r\n isEmpty,\r\n toKebabCase,\r\n toTitleCase,\r\n upperCaseFirstCharacter,\r\n pluralize,\r\n pluralConditional,\r\n padLeft,\r\n padRight,\r\n truncate,\r\n createHash,\r\n replaceAll,\r\n safeParseJson,\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * A helper object that provides equivalent format strings for a given locale,\r\n * for the various date libraries used throughout Rock.\r\n *\r\n * This API is internal to Rock, and is not subject to the same compatibility\r\n * standards as public APIs. It may be changed or removed without notice in any\r\n * release. You should not use this API directly in any plug-ins. Doing so can\r\n * result in application failures when updating to a new Rock release.\r\n */\r\nexport class LocaleDateFormatter {\r\n /**\r\n * The internal JavaScript date format string for the locale represented\r\n * by this formatter instance.\r\n */\r\n private jsDateFormatString: string;\r\n\r\n /**\r\n * The internal ASP C# date format string for the locale represented by this\r\n * formatter instance.\r\n */\r\n private aspDateFormatString: string | undefined;\r\n\r\n /**\r\n * The internal date picker format string for the locale represented by this\r\n * formatter instance.\r\n */\r\n private datePickerFormatString: string | undefined;\r\n\r\n /**\r\n * Creates a new instance of LocaleDateFormatter.\r\n *\r\n * @param jsDateFormatString The JavaScript date format string for the\r\n * locale represented by this formatter instance.\r\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format\r\n */\r\n private constructor(jsDateFormatString: string) {\r\n this.jsDateFormatString = jsDateFormatString;\r\n }\r\n\r\n /**\r\n * Creates a new instance of LocaleDateFormatter from the current locale. If\r\n * the current locale cannot be determined, a default \"en-US\" locale\r\n * formatter instance will be returned.\r\n *\r\n * @returns A LocaleDateFormatter instance representing the current locale.\r\n */\r\n public static fromCurrent(): LocaleDateFormatter {\r\n // Create an arbitrary date with recognizable numeric parts; format the\r\n // date using the current locale settings and then replace the numeric\r\n // parts with date format placeholders to get the locale date format\r\n // string. Note that month is specified as an index in the Date\r\n // constructor, so \"2\" represents month \"3\".\r\n const date = new Date(2222, 2, 4);\r\n const localeDateString = date.toLocaleDateString(undefined, {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\"\r\n });\r\n\r\n // Fall back to a default, en-US format string if any step of the\r\n // parsing fails.\r\n const defaultFormatString = \"MM/DD/YYYY\";\r\n\r\n let localeFormatString = localeDateString;\r\n\r\n // Replace the known year date part with a 2 or 4 digit format string.\r\n if (localeDateString.includes(\"2222\")) {\r\n localeFormatString = localeDateString\r\n .replace(\"2222\", \"YYYY\");\r\n }\r\n else if (localeDateString.includes(\"22\")) {\r\n localeFormatString = localeDateString\r\n .replace(\"22\", \"YY\");\r\n }\r\n else {\r\n return new LocaleDateFormatter(defaultFormatString);\r\n }\r\n\r\n // Replace the known month date part with a 1 or 2 digit format string.\r\n if (localeFormatString.includes(\"03\")) {\r\n localeFormatString = localeFormatString.replace(\"03\", \"MM\");\r\n }\r\n else if (localeFormatString.includes(\"3\")) {\r\n localeFormatString = localeFormatString.replace(\"3\", \"M\");\r\n }\r\n else {\r\n return new LocaleDateFormatter(defaultFormatString);\r\n }\r\n\r\n // Replace the known day date part with a 1 or 2 digit format string.\r\n if (localeFormatString.includes(\"04\")) {\r\n localeFormatString = localeFormatString.replace(\"04\", \"DD\");\r\n }\r\n else if (localeFormatString.includes(\"4\")) {\r\n localeFormatString = localeFormatString.replace(\"4\", \"D\");\r\n }\r\n else {\r\n return new LocaleDateFormatter(defaultFormatString);\r\n }\r\n\r\n return new LocaleDateFormatter(localeFormatString);\r\n }\r\n\r\n /**\r\n * The ASP C# date format string for the locale represented by this\r\n * formatter instance.\r\n */\r\n public get aspDateFormat(): string {\r\n if (!this.aspDateFormatString) {\r\n // Transform the standard JavaScript format string to follow C# date\r\n // formatting rules.\r\n // https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\r\n this.aspDateFormatString = this.jsDateFormatString\r\n .replace(/D/g, \"d\")\r\n .replace(/Y/g, \"y\");\r\n }\r\n\r\n return this.aspDateFormatString;\r\n }\r\n\r\n /**\r\n * The date picker format string for the locale represented by this\r\n * formatter instance.\r\n */\r\n public get datePickerFormat(): string {\r\n if (!this.datePickerFormatString) {\r\n // Transform the standard JavaScript format string to follow the\r\n // bootstrap-datepicker library's formatting rules.\r\n // https://bootstrap-datepicker.readthedocs.io/en/stable/options.html#format\r\n this.datePickerFormatString = this.jsDateFormatString\r\n .replace(/D/g, \"d\")\r\n .replace(/M/g, \"m\")\r\n .replace(/Y/g, \"y\");\r\n }\r\n\r\n return this.datePickerFormatString;\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { List } from \"./linq\";\r\nimport { padLeft, padRight } from \"./stringUtils\";\r\nimport { RockDateTime } from \"./rockDateTime\";\r\nimport { LocaleDateFormatter } from \"./localeDateFormatter\";\r\n\r\n/**\r\n * Returns a blank string if the string value is 0.\r\n *\r\n * @param value The value to check and return.\r\n * @returns The value passed in or an empty string if it equates to zero.\r\n */\r\nfunction blankIfZero(value: string): string {\r\n return parseInt(value) === 0 ? \"\" : value;\r\n}\r\n\r\n/**\r\n * Gets the 12 hour value of the given 24-hour number.\r\n *\r\n * @param hour The hour in a 24-hour format.\r\n * @returns The hour in a 12-hour format.\r\n */\r\nfunction get12HourValue(hour: number): number {\r\n if (hour == 0) {\r\n return 12;\r\n }\r\n else if (hour < 13) {\r\n return hour;\r\n }\r\n else {\r\n return hour - 12;\r\n }\r\n}\r\ntype DateFormatterCommand = (date: RockDateTime) => string;\r\n\r\nconst englishDayNames = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\r\nconst englishMonthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n\r\nconst dateFormatters: Record = {\r\n \"yyyyy\": date => padLeft(date.year.toString(), 5, \"0\"),\r\n \"yyyy\": date => padLeft(date.year.toString(), 4, \"0\"),\r\n \"yyy\": date => padLeft(date.year.toString(), 3, \"0\"),\r\n \"yy\": date => padLeft((date.year % 100).toString(), 2, \"0\"),\r\n \"y\": date => (date.year % 100).toString(),\r\n\r\n \"MMMM\": date => englishMonthNames[date.month - 1],\r\n \"MMM\": date => englishMonthNames[date.month - 1].substr(0, 3),\r\n \"MM\": date => padLeft(date.month.toString(), 2, \"0\"),\r\n \"M\": date => date.month.toString(),\r\n\r\n \"dddd\": date => englishDayNames[date.dayOfWeek],\r\n \"ddd\": date => englishDayNames[date.dayOfWeek].substr(0, 3),\r\n \"dd\": date => padLeft(date.day.toString(), 2, \"0\"),\r\n \"d\": date => date.day.toString(),\r\n\r\n \"fffffff\": date => padRight((date.millisecond * 10000).toString(), 7, \"0\"),\r\n \"ffffff\": date => padRight((date.millisecond * 1000).toString(), 6, \"0\"),\r\n \"fffff\": date => padRight((date.millisecond * 100).toString(), 5, \"0\"),\r\n \"ffff\": date => padRight((date.millisecond * 10).toString(), 4, \"0\"),\r\n \"fff\": date => padRight(date.millisecond.toString(), 3, \"0\"),\r\n \"ff\": date => padRight(Math.floor(date.millisecond / 10).toString(), 2, \"0\"),\r\n \"f\": date => padRight(Math.floor(date.millisecond / 100).toString(), 1, \"0\"),\r\n\r\n \"FFFFFFF\": date => blankIfZero(padRight((date.millisecond * 10000).toString(), 7, \"0\")),\r\n \"FFFFFF\": date => blankIfZero(padRight((date.millisecond * 1000).toString(), 6, \"0\")),\r\n \"FFFFF\": date => blankIfZero(padRight((date.millisecond * 100).toString(), 5, \"0\")),\r\n \"FFFF\": date => blankIfZero(padRight((date.millisecond * 10).toString(), 4, \"0\")),\r\n \"FFF\": date => blankIfZero(padRight(date.millisecond.toString(), 3, \"0\")),\r\n \"FF\": date => blankIfZero(padRight(Math.floor(date.millisecond / 10).toString(), 2, \"0\")),\r\n \"F\": date => blankIfZero(padRight(Math.floor(date.millisecond / 100).toString(), 1, \"0\")),\r\n\r\n \"g\": date => date.year < 0 ? \"B.C.\" : \"A.D.\",\r\n \"gg\": date => date.year < 0 ? \"B.C.\" : \"A.D.\",\r\n\r\n \"hh\": date => padLeft(get12HourValue(date.hour).toString(), 2, \"0\"),\r\n \"h\": date => get12HourValue(date.hour).toString(),\r\n\r\n \"HH\": date => padLeft(date.hour.toString(), 2, \"0\"),\r\n \"H\": date => date.hour.toString(),\r\n\r\n \"mm\": date => padLeft(date.minute.toString(), 2, \"0\"),\r\n \"m\": date => date.minute.toString(),\r\n\r\n \"ss\": date => padLeft(date.second.toString(), 2, \"0\"),\r\n \"s\": date => date.second.toString(),\r\n\r\n \"K\": date => {\r\n const offset = date.offset;\r\n const offsetHour = Math.abs(Math.floor(offset / 60));\r\n const offsetMinute = Math.abs(offset % 60);\r\n return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}:${padLeft(offsetMinute.toString(), 2, \"0\")}`;\r\n },\r\n\r\n \"tt\": date => date.hour >= 12 ? \"PM\" : \"AM\",\r\n \"t\": date => date.hour >= 12 ? \"P\" : \"A\",\r\n\r\n \"zzz\": date => {\r\n const offset = date.offset;\r\n const offsetHour = Math.abs(Math.floor(offset / 60));\r\n const offsetMinute = Math.abs(offset % 60);\r\n return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}:${padLeft(offsetMinute.toString(), 2, \"0\")}`;\r\n },\r\n \"zz\": date => {\r\n const offset = date.offset;\r\n const offsetHour = Math.abs(Math.floor(offset / 60));\r\n return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}`;\r\n },\r\n \"z\": date => {\r\n const offset = date.offset;\r\n const offsetHour = Math.abs(Math.floor(offset / 60));\r\n return `${offset >= 0 ? \"+\" : \"-\"}${offsetHour}`;\r\n },\r\n\r\n \":\": () => \":\",\r\n \"/\": () => \"/\"\r\n};\r\n\r\nconst dateFormatterKeys = new List(Object.keys(dateFormatters))\r\n .orderByDescending(k => k.length)\r\n .toArray();\r\n\r\nconst currentLocaleDateFormatter = LocaleDateFormatter.fromCurrent();\r\n\r\nconst standardDateFormats: Record = {\r\n \"d\": date => formatAspDate(date, currentLocaleDateFormatter.aspDateFormat),\r\n \"D\": date => formatAspDate(date, \"dddd, MMMM dd, yyyy\"),\r\n \"t\": date => formatAspDate(date, \"h:mm tt\"),\r\n \"T\": date => formatAspDate(date, \"h:mm:ss tt\"),\r\n \"M\": date => formatAspDate(date, \"MMMM dd\"),\r\n \"m\": date => formatAspDate(date, \"MMMM dd\"),\r\n \"Y\": date => formatAspDate(date, \"yyyy MMMM\"),\r\n \"y\": date => formatAspDate(date, \"yyyy MMMM\"),\r\n \"f\": date => `${formatAspDate(date, \"D\")} ${formatAspDate(date, \"t\")}`,\r\n \"F\": date => `${formatAspDate(date, \"D\")} ${formatAspDate(date, \"T\")}`,\r\n \"g\": date => `${formatAspDate(date, \"d\")} ${formatAspDate(date, \"t\")}`,\r\n \"G\": date => `${formatAspDate(date, \"d\")} ${formatAspDate(date, \"T\")}`,\r\n \"o\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz`),\r\n \"O\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz`),\r\n \"r\": date => formatAspDate(date, `ddd, dd MMM yyyy HH':'mm':'ss 'GMT'`),\r\n \"R\": date => formatAspDate(date, `ddd, dd MMM yyyy HH':'mm':'ss 'GMT'`),\r\n \"s\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss`),\r\n \"u\": date => formatAspDate(date, `yyyy'-'MM'-'dd HH':'mm':'ss'Z'`),\r\n \"U\": date => {\r\n return formatAspDate(date.universalDateTime, `F`);\r\n },\r\n};\r\n\r\n/**\r\n * Formats the Date object using custom format specifiers.\r\n *\r\n * @param date The date object to be formatted.\r\n * @param format The custom format string.\r\n * @returns A string that represents the date in the specified format.\r\n */\r\nfunction formatAspCustomDate(date: RockDateTime, format: string): string {\r\n let result = \"\";\r\n\r\n for (let i = 0; i < format.length;) {\r\n let matchFound = false;\r\n\r\n for (const k of dateFormatterKeys) {\r\n if (format.substr(i, k.length) === k) {\r\n result += dateFormatters[k](date);\r\n matchFound = true;\r\n i += k.length;\r\n break;\r\n }\r\n }\r\n\r\n if (matchFound) {\r\n continue;\r\n }\r\n\r\n if (format[i] === \"\\\\\") {\r\n i++;\r\n if (i < format.length) {\r\n result += format[i++];\r\n }\r\n }\r\n else if (format[i] === \"'\") {\r\n i++;\r\n for (; i < format.length && format[i] !== \"'\"; i++) {\r\n result += format[i];\r\n }\r\n i++;\r\n }\r\n else if (format[i] === '\"') {\r\n i++;\r\n for (; i < format.length && format[i] !== '\"'; i++) {\r\n result += format[i];\r\n }\r\n i++;\r\n }\r\n else {\r\n result += format[i++];\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Formats the Date object using a standard format string.\r\n *\r\n * @param date The date object to be formatted.\r\n * @param format The standard format specifier.\r\n * @returns A string that represents the date in the specified format.\r\n */\r\nfunction formatAspStandardDate(date: RockDateTime, format: string): string {\r\n if (standardDateFormats[format] !== undefined) {\r\n return standardDateFormats[format](date);\r\n }\r\n\r\n return format;\r\n}\r\n\r\n/**\r\n * Formats the given Date object using nearly the same rules as the ASP C#\r\n * format methods.\r\n *\r\n * @param date The date object to be formatted.\r\n * @param format The format string to use.\r\n */\r\nexport function formatAspDate(date: RockDateTime, format: string): string {\r\n if (format.length === 1) {\r\n return formatAspStandardDate(date, format);\r\n }\r\n else if (format.length === 2 && format[0] === \"%\") {\r\n return formatAspCustomDate(date, format[1]);\r\n }\r\n else {\r\n return formatAspCustomDate(date, format);\r\n }\r\n}\r\n","import { DateTime, FixedOffsetZone, Zone } from \"luxon\";\r\nimport { formatAspDate } from \"./aspDateFormat\";\r\nimport { DayOfWeek } from \"@Obsidian/Enums/Controls/dayOfWeek\";\r\n\r\n/**\r\n * The days of the week that are used by RockDateTime.\r\n */\r\nexport { DayOfWeek } from \"@Obsidian/Enums/Controls/dayOfWeek\";\r\n\r\n/**\r\n * The various date and time formats supported by the formatting methods.\r\n */\r\nexport const DateTimeFormat: Record = {\r\n DateFull: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\"\r\n },\r\n\r\n DateMedium: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\"\r\n },\r\n\r\n DateShort: {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\"\r\n },\r\n\r\n TimeShort: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n },\r\n\r\n TimeWithSeconds: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\"\r\n },\r\n\r\n DateTimeShort: {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n\r\n DateTimeShortWithSeconds: {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\"\r\n },\r\n\r\n DateTimeMedium: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n\r\n DateTimeMediumWithSeconds: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\"\r\n },\r\n\r\n DateTimeFull: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n\r\n DateTimeFullWithSeconds: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\"\r\n }\r\n};\r\n\r\n/**\r\n * A date and time object that handles time zones and formatting. This class is\r\n * immutable and cannot be modified. All modifications are performed by returning\r\n * a new RockDateTime instance.\r\n */\r\nexport class RockDateTime {\r\n /** The internal DateTime object that holds our date information. */\r\n private dateTime: DateTime;\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new instance of RockDateTime.\r\n *\r\n * @param dateTime The Luxon DateTime object that is used to track the internal state.\r\n */\r\n private constructor(dateTime: DateTime) {\r\n this.dateTime = dateTime;\r\n }\r\n\r\n /**\r\n * Creates a new instance of RockDateTime from the given date and time parts.\r\n *\r\n * @param year The year of the new date.\r\n * @param month The month of the new date (1-12).\r\n * @param day The day of month of the new date.\r\n * @param hour The hour of the day.\r\n * @param minute The minute of the hour.\r\n * @param second The second of the minute.\r\n * @param millisecond The millisecond of the second.\r\n * @param zone The time zone offset to construct the date in.\r\n *\r\n * @returns A RockDateTime instance or null if the requested date was not valid.\r\n */\r\n public static fromParts(year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number, zone?: number | string): RockDateTime | null {\r\n let luxonZone: Zone | string | undefined;\r\n\r\n if (zone !== undefined) {\r\n if (typeof zone === \"number\") {\r\n luxonZone = FixedOffsetZone.instance(zone);\r\n }\r\n else {\r\n luxonZone = zone;\r\n }\r\n }\r\n\r\n const dateTime = DateTime.fromObject({\r\n year,\r\n month,\r\n day,\r\n hour,\r\n minute,\r\n second,\r\n millisecond\r\n }, {\r\n zone: luxonZone\r\n });\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new instance of RockDateTime that represents the time specified\r\n * as the Javascript milliseconds value. The time zone is set to the browser\r\n * time zone.\r\n *\r\n * @param milliseconds The time in milliseconds since the epoch.\r\n *\r\n * @returns A new RockDateTime instance or null if the specified date was not valid.\r\n */\r\n public static fromMilliseconds(milliseconds: number): RockDateTime | null {\r\n const dateTime = DateTime.fromMillis(milliseconds);\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Construct a new RockDateTime instance from a Javascript Date object.\r\n *\r\n * @param date The Javascript date object that contains the date information.\r\n *\r\n * @returns A RockDateTime instance or null if the date was not valid.\r\n */\r\n public static fromJSDate(date: Date): RockDateTime | null {\r\n const dateTime = DateTime.fromJSDate(date);\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Constructs a new RockDateTime instance by parsing the given string from\r\n * ISO 8601 format.\r\n *\r\n * @param dateString The string that contains the ISO 8601 formatted text.\r\n *\r\n * @returns A new RockDateTime instance or null if the date was not valid.\r\n */\r\n public static parseISO(dateString: string): RockDateTime | null {\r\n const dateTime = DateTime.fromISO(dateString, { setZone: true });\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Constructs a new RockDateTime instance by parsing the given string from\r\n * RFC 1123 format. This is common in HTTP headers.\r\n *\r\n * @param dateString The string that contains the RFC 1123 formatted text.\r\n *\r\n * @returns A new RockDateTime instance or null if the date was not valid.\r\n */\r\n public static parseHTTP(dateString: string): RockDateTime | null {\r\n const dateTime = DateTime.fromHTTP(dateString, { setZone: true });\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the current date and time.\r\n *\r\n * @returns A RockDateTime instance.\r\n */\r\n public static now(): RockDateTime {\r\n return new RockDateTime(DateTime.now());\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the current time in UTC.\r\n *\r\n * @returns A new RockDateTime instance in the UTC time zone.\r\n */\r\n public static utcNow(): RockDateTime {\r\n return new RockDateTime(DateTime.now().toUTC());\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Properties\r\n\r\n /**\r\n * The Date portion of this RockDateTime instance. All time properties of\r\n * the returned instance will be set to 0.\r\n */\r\n public get date(): RockDateTime {\r\n const date = RockDateTime.fromParts(this.year, this.month, this.day, 0, 0, 0, 0, this.offset);\r\n\r\n if (date === null) {\r\n throw \"Could not convert to date instance.\";\r\n }\r\n\r\n return date;\r\n }\r\n\r\n /**\r\n * The raw date with no offset applied to it. Use this method when you only\r\n * care about comparing explicit dates without the time zone, as we do within\r\n * the grid's date column filter.\r\n *\r\n * This API is internal to Rock, and is not subject to the same compatibility\r\n * standards as public APIs. It may be changed or removed without notice in any\r\n * release. You should not use this API directly in any plug-ins. Doing so can\r\n * result in application failures when updating to a new Rock release.\r\n */\r\n public get rawDate(): RockDateTime {\r\n const date = RockDateTime.fromParts(this.year, this.month, this.day, 0, 0, 0, 0);\r\n\r\n if (date === null) {\r\n throw \"Could not convert to date instance.\";\r\n }\r\n\r\n return date;\r\n }\r\n\r\n /**\r\n * The day of the month represented by this instance.\r\n */\r\n public get day(): number {\r\n return this.dateTime.day;\r\n }\r\n\r\n /**\r\n * The day of the week represented by this instance.\r\n */\r\n public get dayOfWeek(): DayOfWeek {\r\n switch (this.dateTime.weekday) {\r\n case 1:\r\n return DayOfWeek.Monday;\r\n\r\n case 2:\r\n return DayOfWeek.Tuesday;\r\n\r\n case 3:\r\n return DayOfWeek.Wednesday;\r\n\r\n case 4:\r\n return DayOfWeek.Thursday;\r\n\r\n case 5:\r\n return DayOfWeek.Friday;\r\n\r\n case 6:\r\n return DayOfWeek.Saturday;\r\n\r\n case 7:\r\n return DayOfWeek.Sunday;\r\n }\r\n\r\n throw \"Could not determine day of week.\";\r\n }\r\n\r\n /**\r\n * The day of the year represented by this instance.\r\n */\r\n public get dayOfYear(): number {\r\n return this.dateTime.ordinal;\r\n }\r\n\r\n /**\r\n * The hour of the day represented by this instance.\r\n */\r\n public get hour(): number {\r\n return this.dateTime.hour;\r\n }\r\n\r\n /**\r\n * The millisecond of the second represented by this instance.\r\n */\r\n public get millisecond(): number {\r\n return this.dateTime.millisecond;\r\n }\r\n\r\n /**\r\n * The minute of the hour represented by this instance.\r\n */\r\n public get minute(): number {\r\n return this.dateTime.minute;\r\n }\r\n\r\n /**\r\n * The month of the year represented by this instance (1-12).\r\n */\r\n public get month(): number {\r\n return this.dateTime.month;\r\n }\r\n\r\n /**\r\n * The offset from UTC represented by this instance. If the timezone of this\r\n * instance is UTC-7 then the value returned is -420.\r\n */\r\n public get offset(): number {\r\n return this.dateTime.offset;\r\n }\r\n\r\n /**\r\n * The second of the minute represented by this instance.\r\n */\r\n public get second(): number {\r\n return this.dateTime.second;\r\n }\r\n\r\n /**\r\n * The year represented by this instance.\r\n */\r\n public get year(): number {\r\n return this.dateTime.year;\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the same point in\r\n * time represented in the local browser time zone.\r\n */\r\n public get localDateTime(): RockDateTime {\r\n return new RockDateTime(this.dateTime.toLocal());\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the same point in\r\n * time represented in the organization time zone.\r\n */\r\n public get organizationDateTime(): RockDateTime {\r\n throw \"Not Implemented\";\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the same point in\r\n * time represented in UTC.\r\n */\r\n public get universalDateTime(): RockDateTime {\r\n return new RockDateTime(this.dateTime.toUTC());\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Methods\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of days to this instance.\r\n *\r\n * @param days The number of days to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addDays(days: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ days: days });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the last millisecond\r\n * of the end of the month for this instance.\r\n *\r\n * @example\r\n * RockDateTime.fromJSDate(new Date(2014, 3, 3)).endOfMonth().toISOString(); //=> '2014-03-31T23:59:59.999-05:00'\r\n */\r\n public endOfMonth(): RockDateTime {\r\n const dateTime = this.dateTime.endOf(\"month\");\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of hours to this instance.\r\n *\r\n * @param days The number of hours to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addHours(hours: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ hours: hours });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of milliseconds to this instance.\r\n *\r\n * @param days The number of milliseconds to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addMilliseconds(milliseconds: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ milliseconds: milliseconds });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of minutes to this instance.\r\n *\r\n * @param days The number of minutes to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addMinutes(minutes: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ minutes: minutes });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of months to this instance.\r\n *\r\n * @param days The number of months to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addMonths(months: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ months: months });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of seconds to this instance.\r\n *\r\n * @param days The number of seconds to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addSeconds(seconds: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ seconds: seconds });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of years to this instance.\r\n *\r\n * @param days The number of years to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addYears(years: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ years: years });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Converts the date time representation into the number of milliseconds\r\n * that have elapsed since the epoch (1970-01-01T00:00:00Z).\r\n *\r\n * @returns The number of milliseconds since the epoch.\r\n */\r\n public toMilliseconds(): number {\r\n return this.dateTime.toMillis();\r\n }\r\n\r\n /**\r\n * Creates a new instance of RockDateTime that represents the same point\r\n * in time as represented by the specified time zone offset.\r\n *\r\n * @param zone The time zone offset as a number or string such as \"UTC+4\".\r\n *\r\n * @returns A new RockDateTime instance that represents the specified time zone.\r\n */\r\n public toOffset(zone: number | string): RockDateTime {\r\n let dateTime: DateTime;\r\n\r\n if (typeof zone === \"number\") {\r\n dateTime = this.dateTime.setZone(FixedOffsetZone.instance(zone));\r\n }\r\n else {\r\n dateTime = this.dateTime.setZone(zone);\r\n }\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Invalid time zone specified.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Formats this instance according to C# formatting rules.\r\n *\r\n * @param format The string that specifies the format to use.\r\n *\r\n * @returns A string representing this instance in the given format.\r\n */\r\n public toASPString(format: string): string {\r\n return formatAspDate(this, format);\r\n }\r\n\r\n /**\r\n * Creates a string representation of this instance in ISO8601 format.\r\n *\r\n * @returns An ISO8601 formatted string.\r\n */\r\n public toISOString(): string {\r\n // We never create an instance of RockDateTime if dateTime is not valid\r\n // and that is the only time toISO() would return null.\r\n return this.dateTime.toISO();\r\n }\r\n\r\n /**\r\n * Formats this instance using standard locale formatting rules to display\r\n * a date and time in the browsers specified locale.\r\n *\r\n * @param format The format to use when generating the string.\r\n *\r\n * @returns A string that represents the date and time in then specified format.\r\n */\r\n public toLocaleString(format: Intl.DateTimeFormatOptions): string {\r\n return this.dateTime.toLocaleString(format);\r\n }\r\n\r\n /**\r\n * Transforms the date into a human friendly elapsed time string.\r\n *\r\n * @example\r\n * // Returns \"21yrs\"\r\n * RockDateTime.fromParts(2000, 3, 4).toElapsedString();\r\n *\r\n * @returns A string that represents the amount of time that has elapsed.\r\n */\r\n public toElapsedString(currentDateTime?: RockDateTime): string {\r\n const msPerSecond = 1000;\r\n const msPerMinute = 1000 * 60;\r\n const msPerHour = 1000 * 60 * 60;\r\n const hoursPerDay = 24;\r\n const daysPerYear = 365;\r\n\r\n let start = new RockDateTime(this.dateTime);\r\n let end = currentDateTime ?? RockDateTime.now();\r\n let direction = \"Ago\";\r\n let totalMs = end.toMilliseconds() - start.toMilliseconds();\r\n\r\n if (totalMs < 0) {\r\n direction = \"From Now\";\r\n totalMs = Math.abs(totalMs);\r\n start = end;\r\n end = new RockDateTime(this.dateTime);\r\n }\r\n\r\n const totalSeconds = totalMs / msPerSecond;\r\n const totalMinutes = totalMs / msPerMinute;\r\n const totalHours = totalMs / msPerHour;\r\n const totalDays = totalHours / hoursPerDay;\r\n\r\n if (totalHours < 24) {\r\n if (totalSeconds < 2) {\r\n return `1 Second ${direction}`;\r\n }\r\n\r\n if (totalSeconds < 60) {\r\n return `${Math.floor(totalSeconds)} Seconds ${direction}`;\r\n }\r\n\r\n if (totalMinutes < 2) {\r\n return `1 Minute ${direction}`;\r\n }\r\n\r\n if (totalMinutes < 60) {\r\n return `${Math.floor(totalMinutes)} Minutes ${direction}`;\r\n }\r\n\r\n if (totalHours < 2) {\r\n return `1 Hour ${direction}`;\r\n }\r\n\r\n if (totalHours < 60) {\r\n return `${Math.floor(totalHours)} Hours ${direction}`;\r\n }\r\n }\r\n\r\n if (totalDays < 2) {\r\n return `1 Day ${direction}`;\r\n }\r\n\r\n if (totalDays < 31) {\r\n return `${Math.floor(totalDays)} Days ${direction}`;\r\n }\r\n\r\n const totalMonths = end.totalMonths(start);\r\n\r\n if (totalMonths <= 1) {\r\n return `1 Month ${direction}`;\r\n }\r\n\r\n if (totalMonths <= 18) {\r\n return `${Math.round(totalMonths)} Months ${direction}`;\r\n }\r\n\r\n const totalYears = Math.floor(totalDays / daysPerYear);\r\n\r\n if (totalYears <= 1) {\r\n return `1 Year ${direction}`;\r\n }\r\n\r\n return `${Math.round(totalYears)} Years ${direction}`;\r\n }\r\n\r\n /**\r\n * Formats this instance as a string that can be used in HTTP headers and\r\n * cookies.\r\n *\r\n * @returns A new string that conforms to RFC 1123\r\n */\r\n public toHTTPString(): string {\r\n // We never create an instance of RockDateTime if dateTime is not valid\r\n // and that is the only time toHTTP() would return null.\r\n return this.dateTime.toHTTP();\r\n }\r\n\r\n /**\r\n * Get the value of the date and time in a format that can be used in\r\n * comparisons.\r\n *\r\n * @returns A number that represents the date and time.\r\n */\r\n public valueOf(): number {\r\n return this.dateTime.valueOf();\r\n }\r\n\r\n /**\r\n * Creates a standard string representation of the date and time.\r\n *\r\n * @returns A string representation of the date and time.\r\n */\r\n public toString(): string {\r\n return this.toLocaleString(DateTimeFormat.DateTimeFull);\r\n }\r\n\r\n /**\r\n * Checks if this instance is equal to another RockDateTime instance. This\r\n * will return true if the two instances represent the same point in time,\r\n * even if they have been associated with different time zones. In other\r\n * words \"2021-09-08 12:00:00 Z\" == \"2021-09-08 14:00:00 UTC+2\".\r\n *\r\n * @param otherDateTime The other RockDateTime to be compared against.\r\n *\r\n * @returns True if the two instances represent the same point in time.\r\n */\r\n public isEqualTo(otherDateTime: RockDateTime): boolean {\r\n return this.dateTime.toMillis() === otherDateTime.dateTime.toMillis();\r\n }\r\n\r\n /**\r\n * Checks if this instance is later than another RockDateTime instance.\r\n *\r\n * @param otherDateTime The other RockDateTime to be compared against.\r\n *\r\n * @returns True if this instance represents a point in time that occurred after another point in time, regardless of time zone.\r\n */\r\n public isLaterThan(otherDateTime: RockDateTime): boolean {\r\n return this.dateTime.toMillis() > otherDateTime.dateTime.toMillis();\r\n }\r\n\r\n /**\r\n * Checks if this instance is earlier than another RockDateTime instance.\r\n *\r\n * @param otherDateTime The other RockDateTime to be compared against.\r\n *\r\n * @returns True if this instance represents a point in time that occurred before another point in time, regardless of time zone.\r\n */\r\n public isEarlierThan(otherDateTime: RockDateTime): boolean {\r\n return this.dateTime.toMillis() < otherDateTime.dateTime.toMillis();\r\n }\r\n\r\n /**\r\n * Obsolete. Use toElapsedString instead.\r\n * Calculates the elapsed time between this date and the reference date and\r\n * returns that difference in a human friendly way.\r\n *\r\n * @param otherDateTime The reference date and time. If not specified then 'now' is used.\r\n *\r\n * @returns A string that represents the elapsed time.\r\n */\r\n public humanizeElapsed(otherDateTime?: RockDateTime): string {\r\n otherDateTime = otherDateTime ?? RockDateTime.now();\r\n\r\n const totalSeconds = Math.floor((otherDateTime.dateTime.toMillis() - this.dateTime.toMillis()) / 1000);\r\n\r\n if (totalSeconds <= 1) {\r\n return \"right now\";\r\n }\r\n else if (totalSeconds < 60) { // less than 1 minute\r\n return `${totalSeconds} seconds ago`;\r\n }\r\n else if (totalSeconds >= 60 && totalSeconds <= 119) { // 1 minute ago\r\n return \"1 minute ago\";\r\n }\r\n else if (totalSeconds < 3600) { // 1 hour\r\n return `${Math.floor(totalSeconds / 60)} minutes ago`;\r\n }\r\n else if (totalSeconds < 86400) { // 1 day\r\n return `${Math.floor(totalSeconds / 3600)} hours ago`;\r\n }\r\n else if (totalSeconds < 31536000) { // 1 year\r\n return `${Math.floor(totalSeconds / 86400)} days ago`;\r\n }\r\n else {\r\n return `${Math.floor(totalSeconds / 31536000)} years ago`;\r\n }\r\n }\r\n\r\n /**\r\n * The total number of months between the two dates.\r\n * @param otherDateTime The reference date and time.\r\n * @returns An int that represents the number of months between the two dates.\r\n */\r\n public totalMonths(otherDateTime: RockDateTime): number {\r\n return ((this.year * 12) + this.month) - ((otherDateTime.year * 12) + otherDateTime.month);\r\n }\r\n\r\n // #endregion\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport mitt, { Emitter } from \"mitt\";\r\n\r\n// NOTE: Much of the logic for this was taken from VSCode's MIT licensed version:\r\n// https://github.com/microsoft/vscode/blob/342394d1e7d43d3324dc2ede1d634cffd52ba159/src/vs/base/common/cancellation.ts\r\n\r\n/**\r\n * A cancellation token can be used to instruct some operation to run but abort\r\n * if a certain condition is met.\r\n */\r\nexport interface ICancellationToken {\r\n /**\r\n * A flag signalling is cancellation has been requested.\r\n */\r\n readonly isCancellationRequested: boolean;\r\n\r\n /**\r\n * Registers a listener for when cancellation has been requested. This event\r\n * only ever fires `once` as cancellation can only happen once. Listeners\r\n * that are registered after cancellation will be called (next event loop run),\r\n * but also only once.\r\n *\r\n * @param listener The function to be called when the token has been cancelled.\r\n */\r\n onCancellationRequested(listener: () => void): void;\r\n}\r\n\r\nfunction shortcutCancelledEvent(listener: () => void): void {\r\n window.setTimeout(listener, 0);\r\n}\r\n\r\n/**\r\n * Determines if something is a cancellation token.\r\n *\r\n * @param thing The thing to be checked to see if it is a cancellation token.\r\n *\r\n * @returns true if the @{link thing} is a cancellation token, otherwise false.\r\n */\r\nexport function isCancellationToken(thing: unknown): thing is ICancellationToken {\r\n if (thing === CancellationTokenNone || thing === CancellationTokenCancelled) {\r\n return true;\r\n }\r\n if (thing instanceof MutableToken) {\r\n return true;\r\n }\r\n if (!thing || typeof thing !== \"object\") {\r\n return false;\r\n }\r\n return typeof (thing as ICancellationToken).isCancellationRequested === \"boolean\"\r\n && typeof (thing as ICancellationToken).onCancellationRequested === \"function\";\r\n}\r\n\r\n/**\r\n * A cancellation token that will never be in a cancelled state.\r\n */\r\nexport const CancellationTokenNone = Object.freeze({\r\n isCancellationRequested: false,\r\n onCancellationRequested() {\r\n // Intentionally blank.\r\n }\r\n});\r\n\r\n/**\r\n * A cancellation token that is already in a cancelled state.\r\n */\r\nexport const CancellationTokenCancelled = Object.freeze({\r\n isCancellationRequested: true,\r\n onCancellationRequested: shortcutCancelledEvent\r\n});\r\n\r\n/**\r\n * Internal implementation of a cancellation token that starts initially as\r\n * active but can later be switched to a cancelled state.\r\n */\r\nclass MutableToken implements ICancellationToken {\r\n private isCancelled: boolean = false;\r\n private emitter: Emitter> | null = null;\r\n\r\n /**\r\n * Cancels the token and fires any registered event listeners.\r\n */\r\n public cancel(): void {\r\n if (!this.isCancelled) {\r\n this.isCancelled = true;\r\n if (this.emitter) {\r\n this.emitter.emit(\"cancel\", undefined);\r\n this.emitter = null;\r\n }\r\n }\r\n }\r\n\r\n // #region ICancellationToken implementation\r\n\r\n get isCancellationRequested(): boolean {\r\n return this.isCancelled;\r\n }\r\n\r\n onCancellationRequested(listener: () => void): void {\r\n if (this.isCancelled) {\r\n return shortcutCancelledEvent(listener);\r\n }\r\n\r\n if (!this.emitter) {\r\n this.emitter = mitt();\r\n }\r\n\r\n this.emitter.on(\"cancel\", listener);\r\n }\r\n\r\n // #endregion\r\n}\r\n\r\n/**\r\n * Creates a source instance that can be used to trigger a cancellation\r\n * token into the cancelled state.\r\n */\r\nexport class CancellationTokenSource {\r\n /** The token that can be passed to functions. */\r\n private internalToken?: ICancellationToken = undefined;\r\n\r\n /**\r\n * Creates a new instance of {@link CancellationTokenSource}.\r\n *\r\n * @param parent The parent cancellation token that will also cancel this source.\r\n */\r\n constructor(parent?: ICancellationToken) {\r\n if (parent) {\r\n parent.onCancellationRequested(() => this.cancel());\r\n }\r\n }\r\n\r\n /**\r\n * The cancellation token that can be used to determine when the task\r\n * should be cancelled.\r\n */\r\n get token(): ICancellationToken {\r\n if (!this.internalToken) {\r\n // be lazy and create the token only when\r\n // actually needed\r\n this.internalToken = new MutableToken();\r\n }\r\n\r\n return this.internalToken;\r\n }\r\n\r\n /**\r\n * Moves the token into a cancelled state.\r\n */\r\n cancel(): void {\r\n if (!this.internalToken) {\r\n // Save an object creation by returning the default cancelled\r\n // token when cancellation happens before someone asks for the\r\n // token.\r\n this.internalToken = CancellationTokenCancelled;\r\n\r\n }\r\n else if (this.internalToken instanceof MutableToken) {\r\n // Actually cancel the existing token.\r\n this.internalToken.cancel();\r\n }\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Enumerable } from \"./linq\";\r\n\r\n/**\r\n * Get a unique CSS selector for any DOM element.\r\n */\r\nexport function getUniqueCssSelector(el: Element): string {\r\n const path: string[] = [];\r\n let parent: Element | null = el.parentNode as Element;\r\n\r\n while (parent) {\r\n path.unshift(`${el.tagName}:nth-child(${([] as Element[]).indexOf.call(parent.children, el) + 1})`);\r\n el = parent;\r\n parent = el.parentNode as Element;\r\n }\r\n return `${path.join(\" > \")}`.toLowerCase();\r\n}\r\n\r\nexport function* getAncestors(element: Element): IterableIterator {\r\n let parent = element.parentElement;\r\n\r\n while (parent) {\r\n yield parent;\r\n parent = parent.parentElement;\r\n }\r\n}\r\n\r\n/**\r\n * Scrolls the start of an element to the top of the window.\r\n *\r\n * This accounts for fixed elements.\r\n */\r\nexport function scrollElementStartToTop(element: Element): void {\r\n const isWithinScrolledContainer = Enumerable\r\n .from(getAncestors(element))\r\n .any(ancestorElement => {\r\n const { overflowY } = getComputedStyle(ancestorElement);\r\n const isScrollable = overflowY === \"scroll\" || overflowY === \"auto\";\r\n\r\n return isScrollable && ancestorElement.scrollHeight > ancestorElement.clientHeight;\r\n });\r\n\r\n if (isWithinScrolledContainer) {\r\n element.scrollIntoView({\r\n block: \"start\",\r\n behavior: \"smooth\"\r\n });\r\n }\r\n else {\r\n // Get the element's current position and size.\r\n const rect = element.getBoundingClientRect();\r\n\r\n const desiredLeft = rect.left < 0 ? 0 : rect.left;\r\n let desiredTop = 0;\r\n\r\n // Check if a fixed element is at the desired point.\r\n // If so, account for its size when calculating the scroll offset.\r\n const elementsAtDesiredLocation = document.elementsFromPoint(desiredLeft + 1, desiredTop + 1);\r\n const fixedElementAtDesiredLocation = elementsAtDesiredLocation.find(el => getComputedStyle(el).position === \"fixed\");\r\n\r\n if (fixedElementAtDesiredLocation) {\r\n // Adjust scroll to account for fixed element height.\r\n const { height: fixedHeight } = fixedElementAtDesiredLocation.getBoundingClientRect();\r\n desiredTop = fixedHeight;\r\n }\r\n\r\n window.scrollBy({\r\n top: rect.top - desiredTop,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Finds the direct child of `element` containing the `descendantElement`.\r\n * @param element The element to be searched.\r\n * @param descendantElement The descendant element to search for.\r\n */\r\nexport function findDirectChildContaining(element: HTMLElement, descendantElement: HTMLElement): HTMLElement | null {\r\n let current: Element | null = descendantElement;\r\n\r\n while (current && current !== element) {\r\n if (current.parentElement === element && isHTMLElement(current)) {\r\n // Found the direct child of element that contains descendantElement.\r\n return current;\r\n }\r\n\r\n // Move up the DOM tree.\r\n current = current.parentElement;\r\n }\r\n\r\n // No direct child was found.\r\n return null;\r\n}\r\n\r\n/**\r\n * Finds the nearest element to a specific coordinate in the y-direction.\r\n * @param iframe\r\n * @param x The X position (in pixels) to search.\r\n * @param y The Y position (in pixels) to search.\r\n * @param selector The CSS selector used to find the matching element.\r\n * @param xRange The horizontal distance (in pixels) left and right of the `xPosition` to search for an element.\r\n * @param yRange The vertical distance (in pixels) above and below the `yPosition` to search for an element.\r\n * @returns\r\n */\r\nexport function findNearestIFrameElementFromPoint(\r\n iframe: HTMLIFrameElement,\r\n x: number,\r\n y: number,\r\n selector: string,\r\n xRange: number = 10,\r\n yRange: number = 10\r\n): { element: HTMLElement | null, isAbove: boolean, isBelow: boolean, isLeft: boolean, isRight: boolean } {\r\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\r\n if (!iframeDoc) {\r\n console.error(\"Unable to access iframe content.\");\r\n return { element: null, isAbove: false, isBelow: false, isLeft: false, isRight: false };\r\n }\r\n\r\n const iframeRect = iframe.getBoundingClientRect();\r\n\r\n let closestElement: Element | null = null;\r\n let isAbove: boolean = false;\r\n let isBelow: boolean = false;\r\n let isLeft: boolean = false;\r\n let isRight: boolean = false;\r\n let smallestDistance = Infinity;\r\n\r\n // Search within the specified xRange and yRange.\r\n for (let dx = -xRange; dx <= xRange; dx += 1) {\r\n for (let dy = -yRange; dy <= yRange; dy += 1) {\r\n Enumerable.from(iframeDoc.elementsFromPoint(x + dx, y + dy))\r\n .where(element => element.matches(selector))\r\n .ofType(isHTMLElement)\r\n .forEach(element => {\r\n const rect = element.getBoundingClientRect();\r\n\r\n // Calculate the distance from the current position to the element.\r\n const elementX = rect.left - iframeRect.left;\r\n const elementY = rect.top - iframeRect.top;\r\n const distance = Math.sqrt(\r\n Math.pow(elementX - x, 2) + Math.pow(elementY - y, 2)\r\n );\r\n\r\n // Update the closest element if this one is nearer.\r\n if (distance < smallestDistance) {\r\n smallestDistance = distance;\r\n\r\n closestElement = element;\r\n isAbove = dy < 0;\r\n isBelow = dy > 0;\r\n isLeft = dx < 0;\r\n isRight = dx > 0;\r\n }\r\n });\r\n }\r\n }\r\n\r\n return {\r\n element: closestElement,\r\n isAbove,\r\n isBelow,\r\n isLeft,\r\n isRight\r\n };\r\n}\r\n\r\n/**\r\n * Gets the window associated with an element.\r\n */\r\nexport function getWindow(el: Element): (Window & typeof globalThis) | null {\r\n return el.ownerDocument.defaultView;\r\n}\r\n\r\n/**\r\n * Determines whether the argument is an Element.\r\n */\r\nexport function isElement(el: unknown): el is Element {\r\n // This handles context mismatch when checking iframe elements.\r\n const elWindow = el?.[\"ownerDocument\"]?.[\"defaultView\"] as (Window & typeof globalThis);\r\n\r\n return el instanceof Element || (!!elWindow && (el instanceof elWindow.Element));\r\n}\r\n\r\n/**\r\n * Determines whether the argument is an HTMLElement.\r\n */\r\nexport function isHTMLElement(el: unknown): el is HTMLElement {\r\n // This handles context mismatch when checking iframe elements.\r\n const elWindow = el?.[\"ownerDocument\"]?.[\"defaultView\"] as (Window & typeof globalThis);\r\n\r\n return el instanceof HTMLElement || (!!elWindow && (el instanceof elWindow.HTMLElement));\r\n}\r\n\r\n/**\r\n * Determines whether the argument is an HTMLAnchorElement.\r\n */\r\nexport function isHTMLAnchorElement(el: unknown): el is HTMLAnchorElement {\r\n // This handles context mismatch when checking iframe elements.\r\n const elWindow = el?.[\"ownerDocument\"]?.[\"defaultView\"] as (Window & typeof globalThis);\r\n\r\n return !!elWindow && el instanceof elWindow.HTMLAnchorElement;\r\n}\r\n\r\n/**\r\n * Determines whether the argument is a Document.\r\n */\r\nexport function isDocument(doc: unknown): doc is Document {\r\n // This handles context mismatch when checking iframe elements.\r\n const docWindow = doc?.[\"defaultView\"] as (Window & typeof globalThis);\r\n\r\n return !!docWindow && doc instanceof docWindow.Document;\r\n}\r\n\r\n/**\r\n * Determines whether the argument is a MouseEvent.\r\n * @param event\r\n * @returns\r\n */\r\nexport function isMouseEvent(event: unknown): event is MouseEvent {\r\n // This handles context mismatch when checking iframe elements.\r\n const eventWindow = event?.[\"view\"] as (Window & typeof globalThis);\r\n\r\n return !!eventWindow && event instanceof eventWindow.MouseEvent;\r\n}\r\n\r\n/**\r\n * Determines whether the argument is a TouchEvent.\r\n * @param event\r\n * @returns\r\n */\r\nexport function isTouchEvent(event: unknown): event is TouchEvent {\r\n // This handles context mismatch when checking iframe elements.\r\n const eventWindow = event?.[\"view\"] as (Window & typeof globalThis);\r\n\r\n // TouchEvent may not be supported in some browsers.\r\n return !!eventWindow?.TouchEvent && event instanceof eventWindow.TouchEvent;\r\n}\r\n\r\n/**\r\n * Removes white space content from an element.\r\n *\r\n * This is important for applying :empty styles.\r\n */\r\nexport function removeWhiteSpaceFromElement(element: Element, selector?: string): void {\r\n if ((!selector || element.matches(selector))\r\n && element.childNodes.length\r\n && Enumerable.from(element.childNodes).all(n => n.nodeType === Node.TEXT_NODE)\r\n && !element.textContent?.trim()\r\n ) {\r\n element.innerHTML = \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Removes white space content from an element and its children.\r\n *\r\n * This is important for applying :empty styles.\r\n */\r\nexport function removeWhiteSpaceFromElementAndChildElements(element: Element, selector?: string): void {\r\n removeWhiteSpaceFromChildElements(element, selector);\r\n removeWhiteSpaceFromElement(element, selector);\r\n}\r\n\r\n/**\r\n * Removes white space content from an element's children.\r\n *\r\n * This is important for applying :empty styles.\r\n */\r\nexport function removeWhiteSpaceFromChildElements(element: Document | Element, selector?: string): void {\r\n // Clear white space from elements matching the selector so :empty styles gets applied.\r\n if (selector) {\r\n element.querySelectorAll(selector)\r\n .forEach(el => {\r\n removeWhiteSpaceFromElement(el, selector);\r\n });\r\n }\r\n else {\r\n Enumerable.from(element.children)\r\n .forEach(el => {\r\n removeWhiteSpaceFromElement(el, selector);\r\n });\r\n }\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { CancellationTokenSource, ICancellationToken } from \"./cancellation\";\r\nimport { isHTMLElement } from \"./dom\";\r\n\r\n/**\r\n * Compares two values for equality by performing deep nested comparisons\r\n * if the values are objects or arrays.\r\n *\r\n * @param a The first value to compare.\r\n * @param b The second value to compare.\r\n * @param strict True if strict comparision is required (meaning 1 would not equal \"1\").\r\n *\r\n * @returns True if the two values are equal to each other.\r\n */\r\nexport function deepEqual(a: unknown, b: unknown, strict: boolean): boolean {\r\n // Catches everything but objects.\r\n if (strict && a === b) {\r\n return true;\r\n }\r\n else if (!strict && a == b) {\r\n return true;\r\n }\r\n\r\n // NaN never equals another NaN, but functionally they are the same.\r\n if (typeof a === \"number\" && typeof b === \"number\" && isNaN(a) && isNaN(b)) {\r\n return true;\r\n }\r\n\r\n // Remaining value types must both be of type object\r\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\r\n // Array status must match.\r\n if (Array.isArray(a) !== Array.isArray(b)) {\r\n return false;\r\n }\r\n\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n // Array lengths must match.\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n\r\n // Each element in the array must match.\r\n for (let i = 0; i < a.length; i++) {\r\n if (!deepEqual(a[i], b[i], strict)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n else {\r\n // NOTE: There are a few edge cases not accounted for here, but they\r\n // are rare and unusual:\r\n // Map, Set, ArrayBuffer, RegExp\r\n\r\n // The objects must be of the same \"object type\".\r\n if (a.constructor !== b.constructor) {\r\n return false;\r\n }\r\n\r\n // The objects must be the same instance if they are both HTML elements.\r\n if (isHTMLElement(a) && isHTMLElement(b)) {\r\n return a === b;\r\n }\r\n\r\n // Get all the key/value pairs of each object and sort them so they\r\n // are in the same order as each other.\r\n const aEntries = Object.entries(a).sort((a, b) => a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0));\r\n const bEntries = Object.entries(b).sort((a, b) => a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0));\r\n\r\n // Key/value count must be identical.\r\n if (aEntries.length !== bEntries.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < aEntries.length; i++) {\r\n const aEntry = aEntries[i];\r\n const bEntry = bEntries[i];\r\n\r\n // Ensure the keys are equal, must always be strict.\r\n if (!deepEqual(aEntry[0], bEntry[0], true)) {\r\n return false;\r\n }\r\n\r\n // Ensure the values are equal.\r\n if (!deepEqual(aEntry[1], bEntry[1], strict)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n\r\n/**\r\n * Debounces the function so it will only be called once during the specified\r\n * delay period. The returned function should be called to trigger the original\r\n * function that is to be debounced.\r\n *\r\n * @param fn The function to be called once per delay period.\r\n * @param delay The period in milliseconds. If the returned function is called\r\n * more than once during this period then fn will only be executed once for\r\n * the period. If not specified then it defaults to 250ms.\r\n * @param eager If true then the fn function will be called immediately and\r\n * then any subsequent calls will be debounced.\r\n *\r\n * @returns A function to be called when fn should be executed.\r\n */\r\nexport function debounce(fn: (() => void), delay: number = 250, eager: boolean = false): (() => void) {\r\n let timeout: NodeJS.Timeout | null = null;\r\n\r\n return (): void => {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n else if (eager) {\r\n // If there was no previous timeout and we are configured for\r\n // eager calls, then execute now.\r\n fn();\r\n\r\n // An eager call should not result in a final debounce call.\r\n timeout = setTimeout(() => timeout = null, delay);\r\n\r\n return;\r\n }\r\n\r\n // If we had a previous timeout or we are not set for eager calls\r\n // then set a timeout to initiate the function after the delay.\r\n timeout = setTimeout(() => {\r\n timeout = null;\r\n fn();\r\n }, delay);\r\n };\r\n}\r\n\r\n/**\r\n * Options for debounceAsync function\r\n */\r\ntype DebounceAsyncOptions = {\r\n /**\r\n * The period in milliseconds. If the returned function is called more than\r\n * once during this period, then `fn` will only be executed once for the\r\n * period.\r\n * @default 250\r\n */\r\n delay?: number;\r\n\r\n /**\r\n * If `true`, then the `fn` function will be called immediately on the first\r\n * call, and any subsequent calls will be debounced.\r\n * @default false\r\n */\r\n eager?: boolean;\r\n};\r\n\r\n/**\r\n * Debounces the function so it will only be called once during the specified\r\n * delay period. The returned function should be called to trigger the original\r\n * function that is to be debounced.\r\n *\r\n * **Note:** Due to the asynchronous nature of JavaScript and how promises work,\r\n * `fn` may be invoked multiple times before previous invocations have completed.\r\n * To ensure that only the latest invocation proceeds and to prevent stale data,\r\n * you should check `cancellationToken.isCancellationRequested` at appropriate\r\n * points within your `fn` implementation—ideally after you `await` data from the\r\n * server. If cancellation is requested, `fn` should promptly abort execution.\r\n *\r\n * @param fn The function to be called once per delay period.\r\n * @param options An optional object specifying debounce options.\r\n *\r\n * @returns A function to be called when `fn` should be executed. This function\r\n * accepts an optional `parentCancellationToken` that, when canceled, will also\r\n * cancel the execution of `fn`.\r\n */\r\nexport function debounceAsync(\r\n fn: ((cancellationToken: ICancellationToken) => PromiseLike),\r\n options?: DebounceAsyncOptions\r\n): ((parentCancellationToken?: ICancellationToken) => Promise) {\r\n const delay = options?.delay ?? 250;\r\n const eager = options?.eager ?? false;\r\n\r\n let timeout: NodeJS.Timeout | null = null;\r\n let source: CancellationTokenSource | null = null;\r\n let isEagerExecutionInProgress = false;\r\n let pendingPromise: PromiseLike | null = null;\r\n\r\n return async (parentCancellationToken?: ICancellationToken): Promise => {\r\n // Always cancel any ongoing execution of fn.\r\n source?.cancel();\r\n\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n else if (eager && !isEagerExecutionInProgress) {\r\n // Execute immediately on the first call.\r\n isEagerExecutionInProgress = true;\r\n source = new CancellationTokenSource(parentCancellationToken);\r\n\r\n // Set the timeout before awaiting fn.\r\n timeout = setTimeout(() => {\r\n timeout = null;\r\n isEagerExecutionInProgress = false;\r\n }, delay);\r\n\r\n try {\r\n pendingPromise = fn(source.token);\r\n return await pendingPromise;\r\n }\r\n catch (e) {\r\n console.error(e || \"Unknown error while debouncing async function call.\");\r\n throw e;\r\n }\r\n }\r\n\r\n // Schedule the function to run after the delay.\r\n source = new CancellationTokenSource(parentCancellationToken);\r\n const cts = source;\r\n\r\n return new Promise((resolve, reject) => {\r\n timeout = setTimeout(async () => {\r\n try {\r\n pendingPromise = fn(cts.token);\r\n resolve(await pendingPromise);\r\n }\r\n catch (e) {\r\n console.error(e || \"Unknown error while debouncing async function call.\");\r\n reject(e);\r\n }\r\n\r\n timeout = null;\r\n isEagerExecutionInProgress = false;\r\n }, delay);\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * Returns `true` if the value is `null` or `undefined` (nullish).\r\n */\r\nexport function isNullish(value: unknown): value is null | undefined {\r\n return (value ?? null) === null;\r\n}\r\n\r\n/**\r\n * Returns `true` if the value is not `null` or `undefined` (nullish).\r\n */\r\nexport function isNotNullish(item: T): item is NonNullable {\r\n return !isNullish(item);\r\n}","import { Guid } from \"@Obsidian/Types\";\r\nimport { BlockBeginEditData, BlockEndEditData, BrowserBusCallback, BrowserBusOptions, Message, QueryStringChangedData } from \"@Obsidian/Types/Utility/browserBus\";\r\nimport { areEqual } from \"./guid\";\r\n\r\n/*\r\n * READ THIS BEFORE MAKING ANY CHANGES TO THE BUS.\r\n *\r\n * OVERVIEW\r\n *\r\n * The browser bus is a basic pubsub interface within a single page. If you\r\n * publish a message to one instance of the bus it will be available to any\r\n * other instance on the same page. This uses document.addEventListener()\r\n * and document.dispatchEvent() with a single custom event name of `rockMessage`.\r\n *\r\n * The browser bus will not communicate with other browsers on the same page or\r\n * even other tabs within the same browser.\r\n *\r\n * For full documentation, see the gitbook developer documentation.\r\n *\r\n * FRAMEWORK MESSAGES\r\n *\r\n * All \"framework\" messages should have a type defined in\r\n * @Obsidian/Types/Utility/browserBus that specify the data type expected. If\r\n * no data type is expected than `void` can be used as the type. Message data\r\n * should always be an object rather than a primitive. This allows us to add\r\n * additional values without it being a breaking change to existing code.\r\n *\r\n * Additionally, all framework messages should have their name defined in either\r\n * the PageMessages object or BlockMessages object. This is for uniformity so it\r\n * is easier for core code and plugins to subscribe to these messages and know\r\n * they got the right message name.\r\n *\r\n * SUBSCRIBE OVERLOADS\r\n *\r\n * When adding new framework messages, be sure to add overloads to the\r\n * subscribe, subscribeToBlock and subscribeToBlockType functions for that\r\n * message name and data type. This compiles away to nothing but provides a\r\n * much better TypeScript experience.\r\n */\r\n\r\n\r\n/**\r\n * Framework messages that will be sent for pages.\r\n */\r\nexport const PageMessages = {\r\n /**\r\n * Sent when the query string is changed outside the context of a page load.\r\n */\r\n QueryStringChanged: \"page.core.queryStringChanged\"\r\n} as const;\r\n\r\n/**\r\n * Framework messages that will be sent for blocks.\r\n */\r\nexport const BlockMessages = {\r\n /**\r\n * Sent just before a block switches into edit mode.\r\n */\r\n BeginEdit: \"block.core.beginEdit\",\r\n\r\n /**\r\n * Sent just after a block switches out of edit mode.\r\n */\r\n EndEdit: \"block.core.endEdit\",\r\n} as const;\r\n\r\n/**\r\n * Gets an object that will provide access to the browser bus. This bus will\r\n * allow different code on the page to send and receive messages betwen each\r\n * other as well as plain JavaScript. This bus does not cross page boundaries.\r\n *\r\n * Meaning, if you publish a message in one tab it will not show up in another\r\n * tab in the same (or a different) browser. Neither will messages magically\r\n * persist across page loads.\r\n *\r\n * If you call this method you are responsible for calling the {@link BrowserBus.dispose}\r\n * function when you are done with the bus. If you do not then your component\r\n * will probably never be garbage collected and your subscribed event handlers\r\n * will continue to be called.\r\n *\r\n * @param options Custom options to construct the {@link BrowserBus} object with. This should normally not be needed.\r\n *\r\n * @returns The object that provides access to the browser bus.\r\n */\r\nexport function useBrowserBus(options?: BrowserBusOptions): BrowserBus {\r\n return new BrowserBus(options ?? {});\r\n}\r\n\r\n// #region Internal Types\r\n\r\n/**\r\n * Internal message handler state that includes the filters used to decide\r\n * if the callback is valid for the message.\r\n */\r\ntype MessageHandler = {\r\n /** If not nullish messages must match this message name. */\r\n name?: string;\r\n\r\n /** If not nullish then messages must be from this block type. */\r\n blockType?: Guid;\r\n\r\n /** If not nullish them messages must be from this block instance. */\r\n block?: Guid;\r\n\r\n /** The callback that will be called. */\r\n callback: BrowserBusCallback;\r\n};\r\n\r\n// #endregion\r\n\r\n// #region Internal Implementation\r\n\r\n/** This is the JavaScript event name we use with dispatchEvent(). */\r\nconst customDomEventName = \"rockMessage\";\r\n\r\n/**\r\n * The main browser bus implementation. This uses a shared method to publish\r\n * and subscribe to messages such that if you create two BrowserBus instances on\r\n * the same page they will still be able to talk to each other.\r\n *\r\n * However, they will not be able to talk to instances on other pages such as\r\n * in other browser tabs.\r\n */\r\nexport class BrowserBus {\r\n /** The registered handlers that will potentially be invoked. */\r\n private handlers: MessageHandler[] = [];\r\n\r\n /** The options we were created with. */\r\n private options: BrowserBusOptions;\r\n\r\n /** The event listener. Used so we can remove the listener later. */\r\n private eventListener: (e: Event) => void;\r\n\r\n /**\r\n * Creates a new instance of the bus and prepares it to receive messages.\r\n *\r\n * This should be considered an internal constructor and not used by plugins.\r\n *\r\n * @param options The options that describe how this instance should operate.\r\n */\r\n constructor(options: BrowserBusOptions) {\r\n this.options = { ...options };\r\n\r\n this.eventListener = e => this.onEvent(e);\r\n document.addEventListener(customDomEventName, this.eventListener);\r\n }\r\n\r\n // #region Private Functions\r\n\r\n /**\r\n * Called when an event is received from the document listener.\r\n *\r\n * @param event The low level JavaScript even that was received.\r\n */\r\n private onEvent(event: Event): void {\r\n if (!(event instanceof CustomEvent)) {\r\n return;\r\n }\r\n\r\n let message = event.detail as Message;\r\n\r\n // Discard the message if it is not valid.\r\n if (!message.name) {\r\n return;\r\n }\r\n\r\n // If we got a message without a timestamp, it probably came from\r\n // plain JavaScript, so set it to 0.\r\n if (typeof message.timestamp === \"undefined\") {\r\n message = { ...message, timestamp: 0 };\r\n }\r\n\r\n this.onMessage(message);\r\n }\r\n\r\n /**\r\n * Called when a browser bus message is received from the bus.\r\n *\r\n * @param message The message that was received.\r\n */\r\n private onMessage(message: Message): void {\r\n // Make a copy of the handlers in case our list of handlers if modified\r\n // inside a handler.\r\n const handlers = [...this.handlers];\r\n\r\n for (const handler of handlers) {\r\n try {\r\n // Perform all the filtering. We could do this all in one\r\n // line but this is easier to read and understand.\r\n if (handler.name && handler.name !== message.name) {\r\n continue;\r\n }\r\n\r\n if (handler.blockType && !areEqual(handler.blockType, message.blockType)) {\r\n continue;\r\n }\r\n\r\n if (handler.block && !areEqual(handler.block, message.block)) {\r\n continue;\r\n }\r\n\r\n // All filters passed, execute the callback.\r\n handler.callback(message);\r\n }\r\n catch (e) {\r\n // Catch the error and display it so other handlers will still\r\n // be checked and called.\r\n console.error(e);\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Public Functions\r\n\r\n /**\r\n * Frees up any resources used by this browser bus instance.\r\n */\r\n public dispose(): void {\r\n document.removeEventListener(customDomEventName, this.eventListener);\r\n this.handlers.splice(0, this.handlers.length);\r\n }\r\n\r\n /**\r\n * Publishes a named message without any data.\r\n *\r\n * @param messageName The name of the message to publish.\r\n */\r\n public publish(messageName: string): void;\r\n\r\n /**\r\n * Publishes a named message with some custom data.\r\n *\r\n * @param messageName The name of the message to publish.\r\n * @param data The custom data to include with the message.\r\n */\r\n public publish(messageName: string, data: unknown): void;\r\n\r\n /**\r\n * Publishes a named message with some custom data.\r\n *\r\n * @param messageName The name of the message to publish.\r\n * @param data The custom data to include with the message.\r\n */\r\n public publish(messageName: string, data?: unknown): void {\r\n this.publishMessage({\r\n name: messageName,\r\n timestamp: Date.now(),\r\n blockType: this.options.blockType,\r\n block: this.options.block,\r\n data\r\n });\r\n }\r\n\r\n /**\r\n * Publishes a message to the browser bus. No changes are made to the\r\n * message object.\r\n *\r\n * Do not use this message to publish a block message unless you have\r\n * manually filled in the {@link Message.blockType} and\r\n * {@link Message.block} properties.\r\n *\r\n * @param message The message to publish.\r\n */\r\n public publishMessage(message: Message): void {\r\n const event = new CustomEvent(customDomEventName, {\r\n detail: message\r\n });\r\n\r\n document.dispatchEvent(event);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region subscribe()\r\n\r\n /**\r\n * Subscribes to the named message from any source.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribe(messageName: string, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to the named message from any source.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribe(messageName: \"page.core.queryStringChanged\", callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to the named message from any source.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribe(messageName: \"block.core.beginEdit\", callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to the named message from any source.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribe(messageName: \"block.core.endEdit\", callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to any message that is sent.\r\n *\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribe(callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to messages from any source.\r\n *\r\n * @param messageNameOrCallback The name of the message to subscribe to or the callback.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public subscribe(messageNameOrCallback: string | BrowserBusCallback, callback?: BrowserBusCallback): void {\r\n let name: string | undefined;\r\n\r\n if (typeof messageNameOrCallback === \"string\") {\r\n name = messageNameOrCallback;\r\n }\r\n else {\r\n name = undefined;\r\n callback = messageNameOrCallback;\r\n }\r\n\r\n if (!callback) {\r\n return;\r\n }\r\n\r\n this.handlers.push({\r\n name,\r\n callback\r\n });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region subscribeToBlockType()\r\n\r\n /**\r\n * Subscribes to the named message from any block instance with a matching\r\n * block type identifier.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param blockType The identifier of the block type.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribeToBlockType(messageName: string, blockType: Guid, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to the named message from any block instance with a matching\r\n * block type identifier.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param blockType The identifier of the block type.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribeToBlockType(messageName: \"block.core.beginEdit\", blockType: Guid, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to the named message from any block instance with a matching\r\n * block type identifier.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param blockType The identifier of the block type.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribeToBlockType(messageName: \"block.core.endEdit\", blockType: Guid, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to any message that is sent from any block instance with a\r\n * matching block type identifier.\r\n *\r\n * @param blockType The identifier of the block type.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribeToBlockType(blockType: Guid, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to messages from any block instance with a matching block\r\n * type identifier.\r\n *\r\n * @param messageNameOrBlockType The name of the message to subscribe to or the block type.\r\n * @param blockTypeOrCallback The block type or the callback function.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public subscribeToBlockType(messageNameOrBlockType: string | Guid, blockTypeOrCallback: Guid | BrowserBusCallback, callback?: BrowserBusCallback): void {\r\n let name: string | undefined;\r\n let blockType: Guid;\r\n\r\n if (typeof blockTypeOrCallback === \"string\") {\r\n name = messageNameOrBlockType;\r\n blockType = blockTypeOrCallback;\r\n }\r\n else {\r\n blockType = messageNameOrBlockType;\r\n callback = blockTypeOrCallback;\r\n }\r\n\r\n if (!blockType || !callback) {\r\n return;\r\n }\r\n\r\n this.handlers.push({\r\n name,\r\n blockType,\r\n callback\r\n });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region subscribeToBlock()\r\n\r\n /**\r\n * Subscribes to the named message from a single block instance.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param block The identifier of the block.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribeToBlock(messageName: string, block: Guid, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to the named message from a single block instance.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param block The identifier of the block.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribeToBlock(messageName: \"block.core.beginEdit\", block: Guid, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to the named message from a single block instance.\r\n *\r\n * @param messageName The name of the message to subscribe to.\r\n * @param block The identifier of the block.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribeToBlock(messageName: \"block.core.endEdit\", block: Guid, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to any message that is sent from a single block instance.\r\n *\r\n * @param block The identifier of the block.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n public subscribeToBlock(block: Guid, callback: BrowserBusCallback): void;\r\n\r\n /**\r\n * Subscribes to messages from a single block instance.\r\n *\r\n * @param messageNameOrBlock The name of the message to subscribe to or the block.\r\n * @param blockOrCallback The block or the callback function.\r\n * @param callback The callback to invoke when the message is received.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public subscribeToBlock(messageNameOrBlock: string | Guid, blockOrCallback: Guid | BrowserBusCallback, callback?: BrowserBusCallback): void {\r\n let name: string | undefined;\r\n let block: Guid;\r\n\r\n if (typeof blockOrCallback === \"string\") {\r\n name = messageNameOrBlock;\r\n block = blockOrCallback;\r\n }\r\n else {\r\n block = messageNameOrBlock;\r\n callback = blockOrCallback;\r\n }\r\n\r\n if (!block || !callback) {\r\n return;\r\n }\r\n\r\n this.handlers.push({\r\n name,\r\n block,\r\n callback\r\n });\r\n }\r\n\r\n // #endregion\r\n}\r\n\r\n// #endregion\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { BlockEvent, InvokeBlockActionFunc, SecurityGrant } from \"@Obsidian/Types/Utility/block\";\r\nimport { IBlockPersonPreferencesProvider, IPersonPreferenceCollection } from \"@Obsidian/Types/Core/personPreferences\";\r\nimport { ExtendedRef } from \"@Obsidian/Types/Utility/component\";\r\nimport { DetailBlockBox } from \"@Obsidian/ViewModels/Blocks/detailBlockBox\";\r\nimport { inject, provide, Ref, ref, watch } from \"vue\";\r\nimport { RockDateTime } from \"./rockDateTime\";\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { HttpBodyData, HttpPostFunc, HttpResult } from \"@Obsidian/Types/Utility/http\";\r\nimport { BlockActionContextBag } from \"@Obsidian/ViewModels/Blocks/blockActionContextBag\";\r\nimport { ValidPropertiesBox } from \"@Obsidian/ViewModels/Utility/validPropertiesBox\";\r\nimport { IEntity } from \"@Obsidian/ViewModels/entity\";\r\nimport { debounce } from \"./util\";\r\nimport { BrowserBus, useBrowserBus } from \"./browserBus\";\r\nimport { ICancellationToken } from \"./cancellation\";\r\n\r\nconst blockReloadSymbol = Symbol();\r\nconst configurationValuesChangedSymbol = Symbol();\r\nconst staticContentSymbol = Symbol(\"static-content\");\r\nconst blockBrowserBusSymbol = Symbol(\"block-browser-bus\");\r\n\r\n// TODO: Change these to use symbols\r\n\r\n/**\r\n * Maps the block configuration values to the expected type.\r\n *\r\n * @returns The configuration values for the block.\r\n */\r\nexport function useConfigurationValues(): T {\r\n const result = inject>(\"configurationValues\");\r\n\r\n if (result === undefined) {\r\n throw \"Attempted to access block configuration outside of a RockBlock.\";\r\n }\r\n\r\n return result.value;\r\n}\r\n\r\n/**\r\n * Gets the function that will be used to invoke block actions.\r\n *\r\n * @returns An instance of @see {@link InvokeBlockActionFunc}.\r\n */\r\nexport function useInvokeBlockAction(): InvokeBlockActionFunc {\r\n const result = inject(\"invokeBlockAction\");\r\n\r\n if (result === undefined) {\r\n throw \"Attempted to access block action invocation outside of a RockBlock.\";\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Gets the function that will return the URL for a block action.\r\n *\r\n * @returns A function that can be called to determine the URL for a block action.\r\n */\r\nexport function useBlockActionUrl(): (actionName: string) => string {\r\n const result = inject<(actionName: string) => string>(\"blockActionUrl\");\r\n\r\n if (result === undefined) {\r\n throw \"Attempted to access block action URL outside of a RockBlock.\";\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Creates a function that can be provided to the block that allows calling\r\n * block actions.\r\n *\r\n * @private This should not be used by plugins.\r\n *\r\n * @param post The function to handle the post operation.\r\n * @param pageGuid The unique identifier of the page.\r\n * @param blockGuid The unique identifier of the block.\r\n * @param pageParameters The parameters to include with the block action calls.\r\n *\r\n * @returns A function that can be used to provide the invoke block action.\r\n */\r\nexport function createInvokeBlockAction(post: HttpPostFunc, pageGuid: Guid, blockGuid: Guid, pageParameters: Record, interactionGuid: Guid): InvokeBlockActionFunc {\r\n async function invokeBlockAction(actionName: string, data: HttpBodyData | undefined = undefined, actionContext: BlockActionContextBag | undefined = undefined, cancellationToken?: ICancellationToken): Promise> {\r\n let context: BlockActionContextBag = {};\r\n\r\n if (actionContext) {\r\n context = { ...actionContext };\r\n }\r\n\r\n context.pageParameters = pageParameters;\r\n context.interactionGuid = interactionGuid;\r\n\r\n return await post(\r\n `/api/v2/BlockActions/${pageGuid}/${blockGuid}/${actionName}`,\r\n undefined,\r\n {\r\n __context: context,\r\n ...data\r\n },\r\n cancellationToken);\r\n }\r\n\r\n return invokeBlockAction;\r\n}\r\n\r\n/**\r\n * Provides the reload block callback function for a block. This is an internal\r\n * method and should not be used by plugins.\r\n *\r\n * @param callback The callback that will be called when a block wants to reload itself.\r\n */\r\nexport function provideReloadBlock(callback: () => void): void {\r\n provide(blockReloadSymbol, callback);\r\n}\r\n\r\n/**\r\n * Gets a function that can be called when a block wants to reload itself.\r\n *\r\n * @returns A function that will cause the block component to be reloaded.\r\n */\r\nexport function useReloadBlock(): () => void {\r\n return inject<() => void>(blockReloadSymbol, () => {\r\n // Intentionally blank, do nothing by default.\r\n });\r\n}\r\n\r\n/**\r\n * Provides the data for a block to be notified when its configuration values\r\n * have changed. This is an internal method and should not be used by plugins.\r\n *\r\n * @returns An object with an invoke and reset function.\r\n */\r\nexport function provideConfigurationValuesChanged(): { invoke: () => void, reset: () => void } {\r\n const callbacks: (() => void)[] = [];\r\n\r\n provide(configurationValuesChangedSymbol, callbacks);\r\n\r\n return {\r\n invoke: (): void => {\r\n for (const c of callbacks) {\r\n c();\r\n }\r\n },\r\n\r\n reset: (): void => {\r\n callbacks.splice(0, callbacks.length);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Registered a function to be called when the block configuration values have\r\n * changed.\r\n *\r\n * @param callback The function to be called when the configuration values have changed.\r\n */\r\nexport function onConfigurationValuesChanged(callback: () => void): void {\r\n const callbacks = inject<(() => void)[]>(configurationValuesChangedSymbol);\r\n\r\n if (callbacks !== undefined) {\r\n callbacks.push(callback);\r\n }\r\n}\r\n\r\n/**\r\n * Provides the static content that the block provided on the server.\r\n *\r\n * @param content The static content from the server.\r\n */\r\nexport function provideStaticContent(content: Ref): void {\r\n provide(staticContentSymbol, content);\r\n}\r\n\r\n/**\r\n * Gets the static content that was provided by the block on the server.\r\n *\r\n * @returns A string of HTML content or undefined.\r\n */\r\nexport function useStaticContent(): Node[] {\r\n const content = inject>(staticContentSymbol);\r\n\r\n if (!content) {\r\n return [];\r\n }\r\n\r\n return content.value;\r\n}\r\n\r\n/**\r\n * Provides the browser bus configured to publish messages for the current\r\n * block.\r\n *\r\n * @param bus The browser bus.\r\n */\r\nexport function provideBlockBrowserBus(bus: BrowserBus): void {\r\n provide(blockBrowserBusSymbol, bus);\r\n}\r\n\r\n/**\r\n * Gets the browser bus configured for use by the current block. If available\r\n * this will be properly configured to publish messages with the correct block\r\n * and block type. If this is called outside the context of a block then a\r\n * generic use {@link BrowserBus} will be returned.\r\n *\r\n * @returns An instance of {@link BrowserBus}.\r\n */\r\nexport function useBlockBrowserBus(): BrowserBus {\r\n return inject(blockBrowserBusSymbol, () => useBrowserBus(), true);\r\n}\r\n\r\n\r\n/**\r\n * A type that returns the keys of a child property.\r\n */\r\ntype ChildKeys, PropertyName extends string> = keyof NonNullable & string;\r\n\r\n/**\r\n * A valid properties box that uses the specified name for the content bag.\r\n */\r\ntype ValidPropertiesSettingsBox = {\r\n validProperties?: string[] | null;\r\n} & {\r\n settings?: Record | null;\r\n};\r\n\r\n/**\r\n * Sets the a value for a custom settings box. This will set the value and then\r\n * add the property name to the list of valid properties.\r\n *\r\n * @param box The box whose custom setting value will be set.\r\n * @param propertyName The name of the custom setting property to set.\r\n * @param value The new value of the custom setting.\r\n */\r\nexport function setCustomSettingsBoxValue, K extends ChildKeys>(box: T, propertyName: K, value: S[K]): void {\r\n if (!box.settings) {\r\n box.settings = {} as Record;\r\n }\r\n\r\n box.settings[propertyName] = value;\r\n\r\n if (!box.validProperties) {\r\n box.validProperties = [];\r\n }\r\n\r\n if (!box.validProperties.includes(propertyName)) {\r\n box.validProperties.push(propertyName);\r\n }\r\n}\r\n\r\n/**\r\n * Sets the a value for a property box. This will set the value and then\r\n * add the property name to the list of valid properties.\r\n *\r\n * @param box The box whose property value will be set.\r\n * @param propertyName The name of the property on the bag to set.\r\n * @param value The new value of the property.\r\n */\r\nexport function setPropertiesBoxValue, K extends keyof T & string>(box: ValidPropertiesBox, propertyName: K, value: T[K]): void {\r\n if (!box.bag) {\r\n box.bag = {} as Record as T;\r\n }\r\n\r\n box.bag[propertyName] = value;\r\n\r\n if (!box.validProperties) {\r\n box.validProperties = [];\r\n }\r\n\r\n if (!box.validProperties.some(p => p.toLowerCase() === propertyName.toLowerCase())) {\r\n box.validProperties.push(propertyName);\r\n }\r\n}\r\n\r\n/**\r\n * Dispatches a block event to the document.\r\n *\r\n * @deprecated Do not use this function anymore, it will be removed in the future.\r\n * Use the BrowserBus instead.\r\n *\r\n * @param eventName The name of the event to be dispatched.\r\n * @param eventData The custom data to be attached to the event.\r\n *\r\n * @returns true if preventDefault() was called on the event, otherwise false.\r\n */\r\nexport function dispatchBlockEvent(eventName: string, blockGuid: Guid, eventData?: unknown): boolean {\r\n const ev = new CustomEvent(eventName, {\r\n cancelable: true,\r\n detail: {\r\n guid: blockGuid,\r\n data: eventData\r\n }\r\n });\r\n\r\n return document.dispatchEvent(ev);\r\n}\r\n\r\n/**\r\n * Tests if the given event is a custom block event. This does not ensure\r\n * that the event data is the correct type, only the event itself.\r\n *\r\n * @param event The event to be tested.\r\n *\r\n * @returns true if the event is a block event.\r\n */\r\nexport function isBlockEvent(event: Event): event is CustomEvent> {\r\n return event instanceof CustomEvent\r\n && typeof event.detail === \"object\"\r\n && \"guid\" in event.detail\r\n && \"data\" in event.detail;\r\n}\r\n\r\n// #region Entity Detail Blocks\r\n\r\nconst entityTypeNameSymbol = Symbol(\"EntityTypeName\");\r\nconst entityTypeGuidSymbol = Symbol(\"EntityTypeGuid\");\r\n\r\ntype UseEntityDetailBlockOptions = {\r\n /** The block configuration. */\r\n blockConfig: Record;\r\n\r\n /**\r\n * The entity that will be used by the block, this will cause the\r\n * onPropertyChanged logic to be generated.\r\n */\r\n entity?: Ref>;\r\n};\r\n\r\ntype UseEntityDetailBlockResult = {\r\n /** The onPropertyChanged handler for the edit panel. */\r\n onPropertyChanged?(propertyName: string): void;\r\n};\r\n\r\n/**\r\n * Performs any framework-level initialization of an entity detail block.\r\n *\r\n * @param options The options to use when initializing the detail block logic.\r\n *\r\n * @returns An object that contains information which can be used by the block.\r\n */\r\nexport function useEntityDetailBlock(options: UseEntityDetailBlockOptions): UseEntityDetailBlockResult {\r\n const securityGrant = getSecurityGrant(options.blockConfig.securityGrantToken as string);\r\n\r\n provideSecurityGrant(securityGrant);\r\n\r\n if (options.blockConfig.entityTypeName) {\r\n provideEntityTypeName(options.blockConfig.entityTypeName as string);\r\n }\r\n\r\n if (options.blockConfig.entityTypeGuid) {\r\n provideEntityTypeGuid(options.blockConfig.entityTypeGuid as Guid);\r\n }\r\n\r\n const entity = options.entity;\r\n\r\n const result: Record = {};\r\n\r\n if (entity) {\r\n const invokeBlockAction = useInvokeBlockAction();\r\n const refreshAttributesDebounce = debounce(() => refreshEntityDetailAttributes(entity, invokeBlockAction), undefined, true);\r\n\r\n result.onPropertyChanged = (propertyName: string): void => {\r\n // If we don't have any qualified attribute properties or this property\r\n // is not one of them then do nothing.\r\n if (!options.blockConfig.qualifiedAttributeProperties || !(options.blockConfig.qualifiedAttributeProperties as string[]).some(n => n.toLowerCase() === propertyName.toLowerCase())) {\r\n return;\r\n }\r\n\r\n refreshAttributesDebounce();\r\n };\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Provides the entity type name to child components.\r\n *\r\n * @param name The entity type name in PascalCase, such as `GroupMember`.\r\n */\r\nexport function provideEntityTypeName(name: string): void {\r\n provide(entityTypeNameSymbol, name);\r\n}\r\n\r\n/**\r\n * Gets the entity type name provided from a parent component.\r\n *\r\n * @returns The entity type name in PascalCase, such as `GroupMember` or undefined.\r\n */\r\nexport function useEntityTypeName(): string | undefined {\r\n return inject(entityTypeNameSymbol, undefined);\r\n}\r\n\r\n/**\r\n * Provides the entity type unique identifier to child components.\r\n *\r\n * @param guid The entity type unique identifier.\r\n */\r\nexport function provideEntityTypeGuid(guid: Guid): void {\r\n provide(entityTypeGuidSymbol, guid);\r\n}\r\n\r\n/**\r\n * Gets the entity type unique identifier provided from a parent component.\r\n *\r\n * @returns The entity type unique identifier or undefined.\r\n */\r\nexport function useEntityTypeGuid(): Guid | undefined {\r\n return inject(entityTypeGuidSymbol, undefined);\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Security Grants\r\n\r\nconst securityGrantSymbol = Symbol();\r\n\r\n/**\r\n * Use a security grant token value provided by the server. This returns a reference\r\n * to the actual value and will automatically handle renewing the token and updating\r\n * the value. This function is meant to be used by blocks. Controls should use the\r\n * useSecurityGrant() function instead.\r\n *\r\n * @param token The token provided by the server.\r\n *\r\n * @returns A reference to the security grant that will be updated automatically when it has been renewed.\r\n */\r\nexport function getSecurityGrant(token: string | null | undefined): SecurityGrant {\r\n // Use || so that an empty string gets converted to null.\r\n const tokenRef = ref(token || null);\r\n const invokeBlockAction = useInvokeBlockAction();\r\n let renewalTimeout: NodeJS.Timeout | null = null;\r\n\r\n // Internal function to renew the token and re-schedule renewal.\r\n const renewToken = async (): Promise => {\r\n const result = await invokeBlockAction(\"RenewSecurityGrantToken\");\r\n\r\n if (result.isSuccess && result.data) {\r\n tokenRef.value = result.data;\r\n\r\n scheduleRenewal();\r\n }\r\n };\r\n\r\n // Internal function to schedule renewal based on the expiration date in\r\n // the existing token. Renewal happens 15 minutes before expiration.\r\n const scheduleRenewal = (): void => {\r\n // Cancel any existing renewal timer.\r\n if (renewalTimeout !== null) {\r\n clearTimeout(renewalTimeout);\r\n renewalTimeout = null;\r\n }\r\n\r\n // No token, nothing to do.\r\n if (tokenRef.value === null) {\r\n return;\r\n }\r\n\r\n const segments = tokenRef.value?.split(\";\");\r\n\r\n // Token not in expected format.\r\n if (segments.length !== 3 || segments[0] !== \"1\") {\r\n return;\r\n }\r\n\r\n const expiresDateTime = RockDateTime.parseISO(segments[1]);\r\n\r\n // Could not parse expiration date and time.\r\n if (expiresDateTime === null) {\r\n return;\r\n }\r\n\r\n const renewTimeout = expiresDateTime.addMinutes(-15).toMilliseconds() - RockDateTime.now().toMilliseconds();\r\n\r\n // Renewal request would be in the past, ignore.\r\n if (renewTimeout < 0) {\r\n return;\r\n }\r\n\r\n // Schedule the renewal task to happen 15 minutes before expiration.\r\n renewalTimeout = setTimeout(renewToken, renewTimeout);\r\n };\r\n\r\n scheduleRenewal();\r\n\r\n return {\r\n token: tokenRef,\r\n updateToken(newToken) {\r\n tokenRef.value = newToken || null;\r\n scheduleRenewal();\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Provides the security grant to child components to use in their API calls.\r\n *\r\n * @param grant The grant to provide to child components.\r\n */\r\nexport function provideSecurityGrant(grant: SecurityGrant): void {\r\n provide(securityGrantSymbol, grant);\r\n}\r\n\r\n/**\r\n * Uses a previously provided security grant token by a parent component.\r\n * This function is meant to be used by controls that need to obtain a security\r\n * grant from a parent component.\r\n *\r\n * @returns A string reference that contains the security grant token.\r\n */\r\nexport function useSecurityGrantToken(): Ref {\r\n const grant = inject(securityGrantSymbol);\r\n\r\n return grant ? grant.token : ref(null);\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Extended References\r\n\r\n/** An emit object that conforms to having a propertyChanged event. */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type PropertyChangedEmitFn = E extends Array ? (event: EE, ...args: any[]) => void : (event: E, ...args: any[]) => void;\r\n\r\n/**\r\n * Watches for changes to the given Ref objects and emits a special event to\r\n * indicate that a given property has changed.\r\n *\r\n * @param propertyRefs The ExtendedRef objects to watch for changes.\r\n * @param emit The emit function for the component.\r\n */\r\nexport function watchPropertyChanges(propertyRefs: ExtendedRef[], emit: PropertyChangedEmitFn): void {\r\n for (const propRef of propertyRefs) {\r\n watch(propRef, () => {\r\n if (propRef.context.propertyName) {\r\n emit(\"propertyChanged\", propRef.context.propertyName);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Requests an updated attribute list from the server based on the\r\n * current UI selections made.\r\n *\r\n * @param box The valid properties box that will be used to determine current\r\n * property values and then updated with the new attributes and values.\r\n * @param invokeBlockAction The function to use when calling the block action.\r\n */\r\nasync function refreshEntityDetailAttributes(box: Ref>, invokeBlockAction: InvokeBlockActionFunc): Promise {\r\n const result = await invokeBlockAction>(\"RefreshAttributes\", {\r\n box: box.value\r\n });\r\n\r\n if (result.isSuccess) {\r\n if (result.statusCode === 200 && result.data && box.value) {\r\n const newBox: ValidPropertiesBox = {\r\n ...box.value,\r\n bag: {\r\n ...box.value.bag as TEntityBag,\r\n attributes: result.data.bag?.attributes,\r\n attributeValues: result.data.bag?.attributeValues\r\n }\r\n };\r\n\r\n box.value = newBox;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Requests an updated attribute list from the server based on the\r\n * current UI selections made.\r\n *\r\n * @param bag The entity bag that will be used to determine current property values\r\n * and then updated with the new attributes and values.\r\n * @param validProperties The properties that are considered valid on the bag when\r\n * the server will read the bag.\r\n * @param invokeBlockAction The function to use when calling the block action.\r\n */\r\nexport async function refreshDetailAttributes(bag: Ref, validProperties: string[], invokeBlockAction: InvokeBlockActionFunc): Promise {\r\n const data: DetailBlockBox = {\r\n entity: bag.value,\r\n isEditable: true,\r\n validProperties: validProperties\r\n };\r\n\r\n const result = await invokeBlockAction, unknown>>(\"RefreshAttributes\", {\r\n box: data\r\n });\r\n\r\n if (result.isSuccess) {\r\n if (result.statusCode === 200 && result.data && bag.value) {\r\n const newBag: TEntityBag = {\r\n ...bag.value,\r\n attributes: result.data.entity?.attributes,\r\n attributeValues: result.data.entity?.attributeValues\r\n };\r\n\r\n bag.value = newBag;\r\n }\r\n }\r\n}\r\n\r\n// #endregion Extended Refs\r\n\r\n// #region Block and BlockType Guid\r\n\r\nconst blockGuidSymbol = Symbol(\"block-guid\");\r\nconst blockTypeGuidSymbol = Symbol(\"block-type-guid\");\r\n\r\n/**\r\n * Provides the block unique identifier to all child components.\r\n * This is an internal method and should not be used by plugins.\r\n *\r\n * @param blockGuid The unique identifier of the block.\r\n */\r\nexport function provideBlockGuid(blockGuid: string): void {\r\n provide(blockGuidSymbol, blockGuid);\r\n}\r\n\r\n/**\r\n * Gets the unique identifier of the current block in this component chain.\r\n *\r\n * @returns The unique identifier of the block.\r\n */\r\nexport function useBlockGuid(): Guid | undefined {\r\n return inject(blockGuidSymbol);\r\n}\r\n\r\n/**\r\n * Provides the block type unique identifier to all child components.\r\n * This is an internal method and should not be used by plugins.\r\n *\r\n * @param blockTypeGuid The unique identifier of the block type.\r\n */\r\nexport function provideBlockTypeGuid(blockTypeGuid: string): void {\r\n provide(blockTypeGuidSymbol, blockTypeGuid);\r\n}\r\n\r\n/**\r\n * Gets the block type unique identifier of the current block in this component\r\n * chain.\r\n *\r\n * @returns The unique identifier of the block type.\r\n */\r\nexport function useBlockTypeGuid(): Guid | undefined {\r\n return inject(blockTypeGuidSymbol);\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Person Preferences\r\n\r\nconst blockPreferenceProviderSymbol = Symbol();\r\n\r\n/** An no-op implementation of {@link IPersonPreferenceCollection}. */\r\nconst emptyPreferences: IPersonPreferenceCollection = {\r\n getValue(): string {\r\n return \"\";\r\n },\r\n setValue(): void {\r\n // Intentionally empty.\r\n },\r\n getKeys(): string[] {\r\n return [];\r\n },\r\n containsKey(): boolean {\r\n return false;\r\n },\r\n save(): Promise {\r\n return Promise.resolve();\r\n },\r\n withPrefix(): IPersonPreferenceCollection {\r\n return emptyPreferences;\r\n },\r\n on(): void {\r\n // Intentionally empty.\r\n },\r\n off(): void {\r\n // Intentionally empty.\r\n }\r\n};\r\n\r\nconst emptyPreferenceProvider: IBlockPersonPreferencesProvider = {\r\n blockPreferences: emptyPreferences,\r\n getGlobalPreferences() {\r\n return Promise.resolve(emptyPreferences);\r\n },\r\n getEntityPreferences() {\r\n return Promise.resolve(emptyPreferences);\r\n }\r\n};\r\n\r\n/**\r\n * Provides the person preferences provider that will be used by components\r\n * to access the person preferences associated with their block.\r\n *\r\n * @private This is an internal method and should not be used by plugins.\r\n *\r\n * @param blockGuid The unique identifier of the block.\r\n */\r\nexport function providePersonPreferences(provider: IBlockPersonPreferencesProvider): void {\r\n provide(blockPreferenceProviderSymbol, provider);\r\n}\r\n\r\n/**\r\n * Gets the person preference provider that can be used to access block\r\n * preferences as well as other preferences.\r\n *\r\n * @returns An object that implements {@link IBlockPersonPreferencesProvider}.\r\n */\r\nexport function usePersonPreferences(): IBlockPersonPreferencesProvider {\r\n return inject(blockPreferenceProviderSymbol)\r\n ?? emptyPreferenceProvider;\r\n}\r\n\r\n// #endregion\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Transform the value into true, false, or null\r\n * @param val\r\n */\r\nexport function asBooleanOrNull(val: unknown): boolean | null {\r\n if (val === undefined || val === null) {\r\n return null;\r\n }\r\n\r\n if (typeof val === \"boolean\") {\r\n return val;\r\n }\r\n\r\n if (typeof val === \"string\") {\r\n const asString = (val || \"\").trim().toLowerCase();\r\n\r\n if (!asString) {\r\n return null;\r\n }\r\n\r\n return [\"true\", \"yes\", \"t\", \"y\", \"1\"].indexOf(asString) !== -1;\r\n }\r\n\r\n if (typeof val === \"number\") {\r\n return !!val;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Transform the value into true or false\r\n * @param val\r\n */\r\nexport function asBoolean(val: unknown): boolean {\r\n return !!asBooleanOrNull(val);\r\n}\r\n\r\n/** Transform the value into the strings \"Yes\", \"No\", or null */\r\nexport function asYesNoOrNull(val: unknown): \"Yes\" | \"No\" | null {\r\n const boolOrNull = asBooleanOrNull(val);\r\n\r\n if (boolOrNull === null) {\r\n return null;\r\n }\r\n\r\n return boolOrNull ? \"Yes\" : \"No\";\r\n}\r\n\r\n/** Transform the value into the strings \"True\", \"False\", or null */\r\nexport function asTrueFalseOrNull(val: unknown): \"True\" | \"False\" | null {\r\n const boolOrNull = asBooleanOrNull(val);\r\n\r\n if (boolOrNull === null) {\r\n return null;\r\n }\r\n\r\n return boolOrNull ? \"True\" : \"False\";\r\n}\r\n\r\n/** Transform the value into the strings \"True\" if truthy or \"False\" if falsey */\r\nexport function asTrueOrFalseString(val: unknown): \"True\" | \"False\" {\r\n const boolOrNull = asBooleanOrNull(val);\r\n\r\n return boolOrNull ? \"True\" : \"False\";\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport { RockDateTime } from \"./rockDateTime\";\r\n\r\n\r\ntype CacheEntry = {\r\n value: T;\r\n expiration: number;\r\n};\r\n\r\nconst keyPrefix = \"ObsidianCache_\";\r\n\r\n/**\r\n* Stores the value using the given key. The cache will expire at the expiration or in\r\n* 1 minute if none is provided\r\n* @param key Unique key to store the value under\r\n* @param value Value to store\r\n* @param ttl Time to live in seconds (how long the cached value is valid for). Defaults to 60 if not provided.\r\n*/\r\nfunction set(key: string, value: T, ttl: number = 60): void {\r\n // Can be removed in Rock v18\r\n if (typeof ttl !== \"number\") {\r\n ttl = 60;\r\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.\");\r\n }\r\n\r\n const expiration = RockDateTime.now().addSeconds(ttl).toMilliseconds();\r\n\r\n const cache: CacheEntry = { expiration, value };\r\n const cacheJson = JSON.stringify(cache);\r\n sessionStorage.setItem(keyPrefix + key, cacheJson);\r\n}\r\n\r\n/**\r\n * Gets a stored cache value if there is one that has not yet expired.\r\n * @param key\r\n */\r\nfunction get(key: string): T | null {\r\n const cacheJson = sessionStorage.getItem(keyPrefix + key);\r\n\r\n if (!cacheJson) {\r\n return null;\r\n }\r\n\r\n const cache = JSON.parse(cacheJson) as CacheEntry;\r\n\r\n if (!cache || !cache.expiration) {\r\n return null;\r\n }\r\n\r\n if (cache.expiration < RockDateTime.now().toMilliseconds()) {\r\n return null;\r\n }\r\n\r\n return cache.value;\r\n}\r\n\r\n// Stores promises that are in flight so that if a second fetch is fired before the first resolves\r\n// (before value gets cached), just return the promise that's already in flight to prevent duplicate calls\r\nconst promiseCache: Record | undefined> = {};\r\n\r\n/**\r\n * Since Promises can't be cached, we need to store them in memory until we get the result back. This wraps\r\n * a function in another function that returns a promise and...\r\n * - If there's a cached result, return it\r\n * - Otherwise if there's a cached Promise, return it\r\n * - Otherwise call the given function and cache it's promise and return it. Once the the Promise resolves, cache its result\r\n *\r\n * @param key Key for identifying the cached values\r\n * @param fn Function that returns a Promise that we want to cache the value of\r\n * @param ttl Time to live in seconds (how long the cached value is valid for)\r\n *\r\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.\r\n */\r\nfunction cachePromiseFactory(key: string, fn: () => Promise, ttl?: number): () => Promise {\r\n return async function (): Promise {\r\n // Can be removed in Rock v18\r\n if (typeof ttl !== \"number\" || ttl !== undefined) {\r\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.\");\r\n }\r\n\r\n // If it's cached, grab it\r\n const cachedResult = get(key);\r\n if (cachedResult) {\r\n return cachedResult;\r\n }\r\n\r\n // If it's not cached yet but we've already started fetching it\r\n // (it's not cached until we receive the results), return the existing Promise\r\n if (promiseCache[key]) {\r\n return promiseCache[key] as Promise;\r\n }\r\n\r\n // Not stored anywhere, so fetch it and save it on the stored Promise for the next call\r\n promiseCache[key] = fn();\r\n\r\n // Once it's resolved, cache the result\r\n promiseCache[key]?.then((result) => {\r\n set(key, result, ttl);\r\n delete promiseCache[key];\r\n return result;\r\n }).catch((e: Error) => {\r\n // Something's wrong, let's get rid of the stored promise, so we can try again.\r\n delete promiseCache[key];\r\n throw e;\r\n });\r\n\r\n return promiseCache[key] as Promise;\r\n };\r\n}\r\n\r\n\r\nexport default {\r\n set,\r\n get,\r\n cachePromiseFactory\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { newGuid } from \"./guid\";\r\nimport { inject, nextTick, provide } from \"vue\";\r\n\r\nconst suspenseSymbol = Symbol(\"RockSuspense\");\r\n\r\n/**\r\n * Defines the interface for a provider of suspense monitoring. These are used\r\n * to track asynchronous operations that components may be performing so the\r\n * watching component can perform an operation once all pending operations\r\n * have completed.\r\n */\r\nexport interface ISuspenseProvider {\r\n /**\r\n * Adds a new operation identified by the promise. When the promise\r\n * either resolves or fails the operation is considered completed.\r\n *\r\n * @param operation The promise that represents the operation.\r\n */\r\n addOperation(operation: Promise): void;\r\n\r\n /**\r\n * Notes that an asynchronous operation has started on a child component.\r\n *\r\n * @param key The key that identifies the operation.\r\n */\r\n startAsyncOperation(key: Guid): void;\r\n\r\n /**\r\n * Notes that an asynchrounous operation has completed on a child component.\r\n *\r\n * @param key The key that was previously passed to startAsyncOperation.\r\n */\r\n completeAsyncOperation(key: Guid): void;\r\n}\r\n\r\n/**\r\n * A basic provider that handles the guts of a suspense provider. This can be\r\n * used by components that need to know when child components have completed\r\n * their work.\r\n */\r\nexport class BasicSuspenseProvider implements ISuspenseProvider {\r\n private readonly operationKey: Guid;\r\n\r\n private readonly parentProvider: ISuspenseProvider | undefined;\r\n\r\n private readonly pendingOperations: Guid[];\r\n\r\n private finishedHandlers: (() => void)[];\r\n\r\n /**\r\n * Creates a new suspense provider.\r\n *\r\n * @param parentProvider The parent suspense provider that will be notified of pending operations.\r\n */\r\n constructor(parentProvider: ISuspenseProvider | undefined) {\r\n this.operationKey = newGuid();\r\n this.parentProvider = parentProvider;\r\n this.pendingOperations = [];\r\n this.finishedHandlers = [];\r\n }\r\n\r\n /**\r\n * Called when all pending operations are complete. Notifies all handlers\r\n * that the pending operations have completed as well as the parent provider.\r\n */\r\n private allOperationsComplete(): void {\r\n // Wait until the next Vue tick in case a new async operation started.\r\n // This can happen, for example, with defineAsyncComponent(). It will\r\n // complete its async operation (loading the JS file) and then the\r\n // component defined in the file might start an async operation. This\r\n // prevents us from completing too soon.\r\n nextTick(() => {\r\n // Verify nothing started a new asynchronous operation while we\r\n // we waiting for the next tick.\r\n if (this.pendingOperations.length !== 0) {\r\n return;\r\n }\r\n\r\n // Notify all pending handlers that all operations completed.\r\n for (const handler of this.finishedHandlers) {\r\n handler();\r\n }\r\n this.finishedHandlers = [];\r\n\r\n // Notify the parent that our own pending operation has completed.\r\n if (this.parentProvider) {\r\n this.parentProvider.completeAsyncOperation(this.operationKey);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adds a new operation identified by the promise. When the promise\r\n * either resolves or fails the operation is considered completed.\r\n *\r\n * @param operation The promise that represents the operation.\r\n */\r\n public addOperation(operation: Promise): void {\r\n const operationKey = newGuid();\r\n\r\n this.startAsyncOperation(operationKey);\r\n\r\n operation.then(() => this.completeAsyncOperation(operationKey))\r\n .catch(() => this.completeAsyncOperation(operationKey));\r\n }\r\n\r\n /**\r\n * Notes that an asynchronous operation has started on a child component.\r\n *\r\n * @param key The key that identifies the operation.\r\n */\r\n public startAsyncOperation(key: Guid): void {\r\n this.pendingOperations.push(key);\r\n\r\n // If this is the first operation we started, notify the parent provider.\r\n if (this.pendingOperations.length === 1 && this.parentProvider) {\r\n this.parentProvider.startAsyncOperation(this.operationKey);\r\n }\r\n }\r\n\r\n /**\r\n * Notes that an asynchrounous operation has completed on a child component.\r\n *\r\n * @param key The key that was previously passed to startAsyncOperation.\r\n */\r\n public completeAsyncOperation(key: Guid): void {\r\n const index = this.pendingOperations.indexOf(key);\r\n\r\n if (index !== -1) {\r\n this.pendingOperations.splice(index, 1);\r\n }\r\n\r\n // If this was the last operation then send notifications.\r\n if (this.pendingOperations.length === 0) {\r\n this.allOperationsComplete();\r\n }\r\n }\r\n\r\n /**\r\n * Checks if this provider has any asynchronous operations that are still\r\n * pending completion.\r\n *\r\n * @returns true if there are pending operations; otherwise false.\r\n */\r\n public hasPendingOperations(): boolean {\r\n return this.pendingOperations.length > 0;\r\n }\r\n\r\n /**\r\n * Adds a new handler that is called when all pending operations have been\r\n * completed. This is a fire-once, meaning the callback will only be called\r\n * when the current pending operations have completed. If new operations\r\n * begin after the callback is executed it will not be called again unless\r\n * it is added with this method again.\r\n *\r\n * @param callback The function to call when all pending operations have completed.\r\n */\r\n public addFinishedHandler(callback: () => void): void {\r\n this.finishedHandlers.push(callback);\r\n }\r\n}\r\n\r\n/**\r\n * Provides a new suspense provider to any child components.\r\n *\r\n * @param provider The provider to make available to child components.\r\n */\r\nexport function provideSuspense(provider: ISuspenseProvider): void {\r\n provide(suspenseSymbol, provider);\r\n}\r\n\r\n/**\r\n * Uses the current suspense provider that was defined by any parent component.\r\n *\r\n * @returns The suspense provider if one was defined; otherwise undefined.\r\n */\r\nexport function useSuspense(): ISuspenseProvider | undefined {\r\n return inject(suspenseSymbol, undefined);\r\n}\r\n\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport { CurrencyInfoBag } from \"@Obsidian/ViewModels/Rest/Utilities/currencyInfoBag\";\r\n\r\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\r\n// Number.toLocaleString takes the same options as Intl.NumberFormat\r\n// Most of the options probably won't get used, so just add the ones you need to use to this when needed\r\ntype NumberFormatOptions = {\r\n useGrouping?: boolean // MDN gives other possible values, but TS is complaining that it should only be boolean\r\n};\r\n\r\n/**\r\n * Get a formatted string.\r\n * Ex: 10001.2 => 10,001.2\r\n * @param num\r\n */\r\nexport function asFormattedString(num: number | null, digits?: number, options: NumberFormatOptions = {}): string {\r\n if (num === null) {\r\n return \"\";\r\n }\r\n\r\n return num.toLocaleString(\r\n \"en-US\",\r\n {\r\n minimumFractionDigits: digits,\r\n maximumFractionDigits: digits ?? 9,\r\n ...options\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * Get a number value from a formatted string. If the number cannot be parsed, then zero is returned by default.\r\n * Ex: $1,000.20 => 1000.2\r\n * @param str\r\n */\r\nexport function toNumber(str?: string | number | null): number {\r\n return toNumberOrNull(str) || 0;\r\n}\r\n\r\n/**\r\n * Get a number value from a formatted string. If the number cannot be parsed, then null is returned by default.\r\n * Ex: $1,000.20 => 1000.2\r\n * @param str\r\n */\r\nexport function toNumberOrNull(str?: string | number | null): number | null {\r\n if (str === null || str === undefined || str === \"\") {\r\n return null;\r\n }\r\n\r\n if (typeof str === \"number\") {\r\n return str;\r\n }\r\n\r\n const replaced = str.replace(/[$,]/g, \"\");\r\n const num = Number(replaced);\r\n\r\n return !isNaN(num) ? num : null;\r\n}\r\n\r\n/**\r\n * Get a currency value from a string or number. If the number cannot be parsed, then null is returned by default.\r\n * Ex: 1000.20 => $1,000.20\r\n * @param value The value to be converted to a currency.\r\n */\r\nexport function toCurrencyOrNull(value?: string | number | null, currencyInfo: CurrencyInfoBag | null = null): string | null {\r\n if (typeof value === \"string\") {\r\n value = toNumberOrNull(value);\r\n }\r\n\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n const currencySymbol = currencyInfo?.symbol ?? \"$\";\r\n const currencyDecimalPlaces = currencyInfo?.decimalPlaces ?? 2;\r\n return `${currencySymbol}${asFormattedString(value, currencyDecimalPlaces)}`;\r\n}\r\n\r\n/**\r\n * Adds an ordinal suffix.\r\n * Ex: 1 => 1st\r\n * @param num\r\n */\r\nexport function toOrdinalSuffix(num?: number | null): string {\r\n if (!num) {\r\n return \"\";\r\n }\r\n\r\n const j = num % 10;\r\n const k = num % 100;\r\n\r\n if (j == 1 && k != 11) {\r\n return num + \"st\";\r\n }\r\n if (j == 2 && k != 12) {\r\n return num + \"nd\";\r\n }\r\n if (j == 3 && k != 13) {\r\n return num + \"rd\";\r\n }\r\n return num + \"th\";\r\n}\r\n\r\n/**\r\n * Convert a number to an ordinal.\r\n * Ex: 1 => first, 10 => tenth\r\n *\r\n * Anything larger than 10 will be converted to the number with an ordinal suffix.\r\n * Ex: 123 => 123rd, 1000 => 1000th\r\n * @param num\r\n */\r\nexport function toOrdinal(num?: number | null): string {\r\n if (!num) {\r\n return \"\";\r\n }\r\n\r\n switch (num) {\r\n case 1: return \"first\";\r\n case 2: return \"second\";\r\n case 3: return \"third\";\r\n case 4: return \"fourth\";\r\n case 5: return \"fifth\";\r\n case 6: return \"sixth\";\r\n case 7: return \"seventh\";\r\n case 8: return \"eighth\";\r\n case 9: return \"ninth\";\r\n case 10: return \"tenth\";\r\n default: return toOrdinalSuffix(num);\r\n }\r\n}\r\n\r\n/**\r\n * Convert a number to a word.\r\n * Ex: 1 => \"one\", 10 => \"ten\"\r\n *\r\n * Anything larger than 10 will be returned as a number string instead of a word.\r\n * Ex: 123 => \"123\", 1000 => \"1000\"\r\n * @param num\r\n */\r\nexport function toWord(num?: number | null): string {\r\n if (num === null || num === undefined) {\r\n return \"\";\r\n }\r\n\r\n switch (num) {\r\n case 1: return \"one\";\r\n case 2: return \"two\";\r\n case 3: return \"three\";\r\n case 4: return \"four\";\r\n case 5: return \"five\";\r\n case 6: return \"six\";\r\n case 7: return \"seven\";\r\n case 8: return \"eight\";\r\n case 9: return \"nine\";\r\n case 10: return \"ten\";\r\n default: return `${num}`;\r\n }\r\n}\r\n\r\nexport function zeroPad(num: number, length: number): string {\r\n let str = num.toString();\r\n\r\n while (str.length < length) {\r\n str = \"0\" + str;\r\n }\r\n\r\n return str;\r\n}\r\n\r\nexport function toDecimalPlaces(num: number, decimalPlaces: number): number {\r\n decimalPlaces = Math.floor(decimalPlaces); // ensure it's an integer\r\n\r\n return Math.round(num * 10 ** decimalPlaces) / 10 ** decimalPlaces;\r\n}\r\n\r\n/**\r\n * Returns the string representation of an integer.\r\n * Ex: 1 => \"1\", 123456 => \"one hundred twenty-three thousand four hundred fifty-six\"\r\n *\r\n * Not reliable for numbers in the quadrillions and greater.\r\n *\r\n * @example\r\n * numberToWord(1) // one\r\n * numberToWord(2) // two\r\n * numberToWord(123456) // one hundred twenty-three thousand four hundred fifty-six\r\n * @param numb The number for which to get the string representation.\r\n * @returns \"one\", \"two\", ..., \"one thousand\", ..., (up to the max number allowed for JS).\r\n */\r\nexport function toWordFull(numb: number): string {\r\n const numberWords = {\r\n 0: \"zero\",\r\n 1: \"one\",\r\n 2: \"two\",\r\n 3: \"three\",\r\n 4: \"four\",\r\n 5: \"five\",\r\n 6: \"six\",\r\n 7: \"seven\",\r\n 8: \"eight\",\r\n 9: \"nine\",\r\n 10: \"ten\",\r\n 11: \"eleven\",\r\n 12: \"twelve\",\r\n 13: \"thirteen\",\r\n 14: \"fourteen\",\r\n 15: \"fifteen\",\r\n 16: \"sixteen\",\r\n 17: \"seventeen\",\r\n 18: \"eighteen\",\r\n 19: \"nineteen\",\r\n 20: \"twenty\",\r\n 30: \"thirty\",\r\n 40: \"forty\",\r\n 50: \"fifty\",\r\n 60: \"sixty\",\r\n 70: \"seventy\",\r\n 80: \"eighty\",\r\n 90: \"ninety\",\r\n 100: \"one hundred\",\r\n 1000: \"one thousand\",\r\n 1000000: \"one million\",\r\n 1000000000: \"one billion\",\r\n 1000000000000: \"one trillion\",\r\n 1000000000000000: \"one quadrillion\"\r\n };\r\n\r\n // Store constants for these since it is hard to distinguish between them at larger numbers.\r\n const oneHundred = 100;\r\n const oneThousand = 1000;\r\n const oneMillion = 1000000;\r\n const oneBillion = 1000000000;\r\n const oneTrillion = 1000000000000;\r\n const oneQuadrillion = 1000000000000000;\r\n\r\n if (numberWords[numb]) {\r\n return numberWords[numb];\r\n }\r\n\r\n function quadrillionsToWord(numb: number): string {\r\n const trillions = trillionsToWord(numb);\r\n if (numb >= oneQuadrillion) {\r\n const quadrillions = hundredsToWord(Number(numb.toString().slice(-18, -15)));\r\n if (trillions) {\r\n return `${quadrillions} quadrillion ${trillions}`;\r\n }\r\n else {\r\n return `${quadrillions} quadrillion`;\r\n }\r\n }\r\n else {\r\n return trillions;\r\n }\r\n }\r\n\r\n function trillionsToWord(numb: number): string {\r\n numb = Number(numb.toString().slice(-15));\r\n const billions = billionsToWord(numb);\r\n if (numb >= oneTrillion) {\r\n const trillions = hundredsToWord(Number(numb.toString().slice(-15, -12)));\r\n if (billions) {\r\n return `${trillions} trillion ${billions}`;\r\n }\r\n else {\r\n return `${trillions} trillion`;\r\n }\r\n }\r\n else {\r\n return billions;\r\n }\r\n }\r\n\r\n function billionsToWord(numb: number): string {\r\n numb = Number(numb.toString().slice(-12));\r\n const millions = millionsToWord(numb);\r\n if (numb >= oneBillion) {\r\n const billions = hundredsToWord(Number(numb.toString().slice(-12, -9)));\r\n if (millions) {\r\n return `${billions} billion ${millions}`;\r\n }\r\n else {\r\n return `${billions} billion`;\r\n }\r\n }\r\n else {\r\n return millions;\r\n }\r\n }\r\n\r\n function millionsToWord(numb: number): string {\r\n numb = Number(numb.toString().slice(-9));\r\n const thousands = thousandsToWord(numb);\r\n if (numb >= oneMillion) {\r\n const millions = hundredsToWord(Number(numb.toString().slice(-9, -6)));\r\n if (thousands) {\r\n return `${millions} million ${thousands}`;\r\n }\r\n else {\r\n return `${millions} million`;\r\n }\r\n }\r\n else {\r\n return thousands;\r\n }\r\n }\r\n\r\n function thousandsToWord(numb: number): string {\r\n numb = Number(numb.toString().slice(-6));\r\n const hundreds = hundredsToWord(numb);\r\n if (numb >= oneThousand) {\r\n const thousands = hundredsToWord(Number(numb.toString().slice(-6, -3)));\r\n if (hundreds) {\r\n return `${thousands} thousand ${hundreds}`;\r\n }\r\n else {\r\n return `${thousands} thousandths`;\r\n }\r\n }\r\n else {\r\n return hundreds;\r\n }\r\n }\r\n\r\n function hundredsToWord(numb: number): string {\r\n numb = Number(numb.toString().slice(-3));\r\n\r\n if (numberWords[numb]) {\r\n return numberWords[numb];\r\n }\r\n\r\n const tens = tensToWord(numb);\r\n\r\n if (numb >= oneHundred) {\r\n const hundreds = Number(numb.toString().slice(-3, -2));\r\n if (tens) {\r\n return `${numberWords[hundreds]} hundred ${tens}`;\r\n }\r\n else {\r\n return `${numberWords[hundreds]} hundred`;\r\n }\r\n }\r\n else {\r\n return tens;\r\n }\r\n }\r\n\r\n function tensToWord(numb: number): string {\r\n numb = Number(numb.toString().slice(-2));\r\n\r\n if (numberWords[numb]) {\r\n return numberWords[numb];\r\n }\r\n\r\n const ones = onesToWord(numb);\r\n\r\n if (numb >= 20) {\r\n const tens = Number(numb.toString().slice(-2, -1));\r\n\r\n if (ones) {\r\n return `${numberWords[tens * 10]}-${ones}`;\r\n }\r\n else {\r\n return numberWords[tens * 10];\r\n }\r\n }\r\n else {\r\n return ones;\r\n }\r\n }\r\n\r\n function onesToWord(numb: number): string {\r\n numb = Number(numb.toString().slice(-1));\r\n return numberWords[numb];\r\n }\r\n\r\n return quadrillionsToWord(numb);\r\n}\r\n\r\nexport default {\r\n toOrdinal,\r\n toOrdinalSuffix,\r\n toNumberOrNull,\r\n asFormattedString\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport { AsyncComponentLoader, Component, ComponentPublicInstance, defineAsyncComponent as vueDefineAsyncComponent, ExtractPropTypes, PropType, reactive, ref, Ref, VNode, watch, WatchOptions, render, createVNode } from \"vue\";\r\nimport { deepEqual } from \"./util\";\r\nimport { useSuspense } from \"./suspense\";\r\nimport { newGuid } from \"./guid\";\r\nimport { ControlLazyMode } from \"@Obsidian/Enums/Controls/controlLazyMode\";\r\nimport { PickerDisplayStyle } from \"@Obsidian/Enums/Controls/pickerDisplayStyle\";\r\nimport { FilterMode } from \"@Obsidian/Enums/Reporting/filterMode\";\r\nimport { ExtendedRef, ExtendedRefContext } from \"@Obsidian/Types/Utility/component\";\r\nimport type { RulesPropType, ValidationRule } from \"@Obsidian/Types/validationRules\";\r\nimport { toNumberOrNull } from \"./numberUtils\";\r\n\r\ntype Prop = { [key: string]: unknown };\r\ntype PropKey = Extract;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntype EmitFn = E extends Array ? (event: EE, ...args: any[]) => void : (event: E, ...args: any[]) => void;\r\n\r\n/**\r\n * Utility function for when you are using a component that takes a v-model\r\n * and uses that model as a v-model in that component's template. It creates\r\n * a new ref that keeps itself up-to-date with the given model and fires an\r\n * 'update:MODELNAME' event when it gets changed.\r\n *\r\n * Ensure the related `props` and `emits` are specified to ensure there are\r\n * no type issues.\r\n */\r\nexport function useVModelPassthrough, E extends `update:${K}`>(props: T, modelName: K, emit: EmitFn, options?: WatchOptions): Ref {\r\n const internalValue = ref(props[modelName]) as Ref;\r\n\r\n watch(() => props[modelName], val => updateRefValue(internalValue, val), options);\r\n watch(internalValue, val => {\r\n if (val !== props[modelName]) {\r\n emit(`update:${modelName}`, val);\r\n }\r\n }, options);\r\n\r\n return internalValue;\r\n}\r\n\r\n/**\r\n * Utility function for when you are using a component that takes a v-model\r\n * and uses that model as a v-model in that component's template. It creates\r\n * a new ref that keeps itself up-to-date with the given model and fires an\r\n * 'update:MODELNAME' event when it gets changed. It also gives a means of watching\r\n * the model prop for any changes (verifies that the prop change is different than\r\n * the current value first)\r\n *\r\n * Ensure the related `props` and `emits` are specified to ensure there are\r\n * no type issues.\r\n */\r\nexport function useVModelPassthroughWithPropUpdateCheck, E extends `update:${K}`>(props: T, modelName: K, emit: EmitFn, options?: WatchOptions): [Ref, (fn: () => unknown) => void] {\r\n const internalValue = ref(props[modelName]) as Ref;\r\n const listeners: (() => void)[] = [];\r\n\r\n watch(() => props[modelName], val => {\r\n if (updateRefValue(internalValue, val)) {\r\n onPropUpdate();\r\n }\r\n }, options);\r\n watch(internalValue, val => emit(`update:${modelName}`, val), options);\r\n\r\n function onPropUpdate(): void {\r\n listeners.forEach(fn => fn());\r\n }\r\n\r\n function addPropUpdateListener(fn: () => unknown): void {\r\n listeners.push(fn);\r\n }\r\n\r\n return [internalValue, addPropUpdateListener];\r\n}\r\n\r\n/**\r\n * Updates the Ref value, but only if the new value is actually different than\r\n * the current value. A deep comparison is performed.\r\n *\r\n * @param target The target Ref object to be updated.\r\n * @param value The new value to be assigned to the target.\r\n *\r\n * @returns True if the target was updated, otherwise false.\r\n */\r\nexport function updateRefValue(target: Ref, value: TV): boolean {\r\n if (deepEqual(target.value, value, true)) {\r\n return false;\r\n }\r\n\r\n target.value = value;\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Defines a component that will be loaded asynchronously. This contains logic\r\n * to properly work with the RockSuspense control.\r\n *\r\n * @param source The function to call to load the component.\r\n *\r\n * @returns The component that was loaded.\r\n */\r\nexport function defineAsyncComponent(source: AsyncComponentLoader): T {\r\n return vueDefineAsyncComponent(async () => {\r\n const suspense = useSuspense();\r\n const operationKey = newGuid();\r\n\r\n suspense?.startAsyncOperation(operationKey);\r\n const component = await source();\r\n suspense?.completeAsyncOperation(operationKey);\r\n\r\n return component;\r\n });\r\n}\r\n\r\n// #region Standard Form Field\r\n\r\ntype StandardRockFormFieldProps = {\r\n label: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n disableLabel: {\r\n type: PropType,\r\n default: false\r\n },\r\n\r\n help: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n rules: RulesPropType,\r\n\r\n formGroupClasses: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n validationTitle: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n isRequiredIndicatorHidden: {\r\n type: PropType,\r\n default: false\r\n }\r\n};\r\n\r\n/** The standard component props that should be included when using RockFormField. */\r\nexport const standardRockFormFieldProps: StandardRockFormFieldProps = {\r\n label: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n disableLabel: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n help: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n rules: {\r\n type: [Array, Object, String] as PropType,\r\n default: \"\"\r\n },\r\n\r\n formGroupClasses: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n validationTitle: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n isRequiredIndicatorHidden: {\r\n type: Boolean as PropType,\r\n default: false\r\n }\r\n};\r\n\r\n/**\r\n * Copies the known properties for the standard rock form field props from\r\n * the source object to the destination object.\r\n *\r\n * @param source The source object to copy the values from.\r\n * @param destination The destination object to copy the values to.\r\n */\r\nfunction copyStandardRockFormFieldProps(source: ExtractPropTypes, destination: ExtractPropTypes): void {\r\n destination.formGroupClasses = source.formGroupClasses;\r\n destination.help = source.help;\r\n destination.label = source.label;\r\n destination.rules = source.rules;\r\n destination.validationTitle = source.validationTitle;\r\n}\r\n\r\n/**\r\n * Configures the basic properties that should be passed to the RockFormField\r\n * component. The value returned by this function should be used with v-bind on\r\n * the RockFormField in order to pass all the defined prop values to it.\r\n *\r\n * @param props The props of the component that will be using the RockFormField.\r\n *\r\n * @returns An object of prop values that can be used with v-bind.\r\n */\r\nexport function useStandardRockFormFieldProps(props: ExtractPropTypes): ExtractPropTypes {\r\n const propValues = reactive>({\r\n label: props.label,\r\n disableLabel: props.disableLabel,\r\n help: props.help,\r\n rules: props.rules,\r\n formGroupClasses: props.formGroupClasses,\r\n validationTitle: props.validationTitle,\r\n isRequiredIndicatorHidden: props.isRequiredIndicatorHidden\r\n });\r\n\r\n watch([() => props.formGroupClasses, () => props.help, () => props.label, () => props.rules, () => props.validationTitle], () => {\r\n copyStandardRockFormFieldProps(props, propValues);\r\n });\r\n\r\n return propValues;\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Standard Async Pickers\r\n\r\ntype StandardAsyncPickerProps = StandardRockFormFieldProps & {\r\n /** Enhance the picker for dealing with long lists by providing a search mechanism. */\r\n enhanceForLongLists: {\r\n type: PropType,\r\n default: false\r\n },\r\n\r\n /** The method the picker should use to load data. */\r\n lazyMode: {\r\n type: PropType,\r\n default: \"onDemand\"\r\n },\r\n\r\n /** True if the picker should allow multiple items to be selected. */\r\n multiple: {\r\n type: PropType,\r\n default: false\r\n },\r\n\r\n /** True if the picker should allow empty selections. */\r\n showBlankItem: {\r\n type: PropType,\r\n default: false\r\n },\r\n\r\n /** The optional value to show when `showBlankItem` is `true`. */\r\n blankValue: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n /** The visual style to use when displaying the picker. */\r\n displayStyle: {\r\n type: PropType,\r\n default: \"auto\"\r\n },\r\n\r\n /** The number of columns to use when displaying the items in a list. */\r\n columnCount: {\r\n type: PropType,\r\n default: 0\r\n }\r\n};\r\n\r\n/** The standard component props that should be included when using BaseAsyncPicker. */\r\nexport const standardAsyncPickerProps: StandardAsyncPickerProps = {\r\n ...standardRockFormFieldProps,\r\n\r\n enhanceForLongLists: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n lazyMode: {\r\n type: String as PropType,\r\n default: ControlLazyMode.OnDemand\r\n },\r\n\r\n multiple: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n showBlankItem: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n blankValue: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n displayStyle: {\r\n type: String as PropType,\r\n default: PickerDisplayStyle.Auto\r\n },\r\n\r\n columnCount: {\r\n type: Number as PropType,\r\n default: 0\r\n }\r\n};\r\n\r\n/**\r\n * Copies the known properties for the standard async picker props from\r\n * the source object to the destination object.\r\n *\r\n * @param source The source object to copy the values from.\r\n * @param destination The destination object to copy the values to.\r\n */\r\nfunction copyStandardAsyncPickerProps(source: ExtractPropTypes, destination: ExtractPropTypes): void {\r\n copyStandardRockFormFieldProps(source, destination);\r\n\r\n destination.enhanceForLongLists = source.enhanceForLongLists;\r\n destination.lazyMode = source.lazyMode;\r\n destination.multiple = source.multiple;\r\n destination.showBlankItem = source.showBlankItem;\r\n destination.blankValue = source.blankValue;\r\n destination.displayStyle = source.displayStyle;\r\n destination.columnCount = source.columnCount;\r\n}\r\n\r\n/**\r\n * Configures the basic properties that should be passed to the BaseAsyncPicker\r\n * component. The value returned by this function should be used with v-bind on\r\n * the BaseAsyncPicker in order to pass all the defined prop values to it.\r\n *\r\n * @param props The props of the component that will be using the BaseAsyncPicker.\r\n *\r\n * @returns An object of prop values that can be used with v-bind.\r\n */\r\nexport function useStandardAsyncPickerProps(props: ExtractPropTypes): ExtractPropTypes {\r\n const standardFieldProps = useStandardRockFormFieldProps(props);\r\n\r\n const propValues = reactive>({\r\n ...standardFieldProps,\r\n enhanceForLongLists: props.enhanceForLongLists,\r\n lazyMode: props.lazyMode,\r\n multiple: props.multiple,\r\n showBlankItem: props.showBlankItem,\r\n blankValue: props.blankValue,\r\n displayStyle: props.displayStyle,\r\n columnCount: props.columnCount\r\n });\r\n\r\n // Watch for changes in any of the standard props. Use deep for this so we\r\n // don't need to know which prop keys it actually contains.\r\n watch(() => standardFieldProps, () => {\r\n copyStandardRockFormFieldProps(props, propValues);\r\n }, {\r\n deep: true\r\n });\r\n\r\n // Watch for changes in our known list of props that might change.\r\n watch([() => props.enhanceForLongLists, () => props.lazyMode, () => props.multiple, () => props.showBlankItem, () => props.displayStyle, () => props.columnCount], () => {\r\n copyStandardAsyncPickerProps(props, propValues);\r\n });\r\n\r\n return propValues;\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Data View Filters\r\n\r\ntype DataViewFilterProps = {\r\n /**\r\n * The component data value from the C# component class.\r\n */\r\n modelValue: {\r\n type: PropType>,\r\n required: true\r\n },\r\n\r\n /**\r\n * The mode this filter is operating in.\r\n */\r\n filterMode: {\r\n type: PropType,\r\n required: true\r\n }\r\n};\r\n\r\n/** The standard component props that will be passed to DataView Filter components. */\r\nexport const dataViewFilterProps: DataViewFilterProps = {\r\n modelValue: {\r\n type: Object as PropType>,\r\n required: true\r\n },\r\n\r\n filterMode: {\r\n type: Number as PropType,\r\n required: true\r\n }\r\n};\r\n\r\n// #endregion\r\n\r\n// #region Data View Selects\r\n\r\ntype DataViewSelectProps = {\r\n /**\r\n * The component data value from the C# component class.\r\n */\r\n modelValue: {\r\n type: PropType>,\r\n required: true\r\n }\r\n};\r\n\r\n/** The standard component props that will be passed to DataView Select components. */\r\nexport const dataViewSelectProps: DataViewSelectProps = {\r\n modelValue: {\r\n type: Object as PropType>,\r\n required: true\r\n }\r\n};\r\n\r\n// #endregion\r\n\r\n// #region Extended References\r\n\r\n/**\r\n * Creates a Ref that contains extended data to better identify this ref\r\n * when you have multiple refs to work with.\r\n *\r\n * @param value The initial value of the Ref.\r\n * @param extendedData The additional context data to put on the Ref.\r\n *\r\n * @returns An ExtendedRef object that can be used like a regular Ref object.\r\n */\r\nexport function extendedRef(value: T, context: ExtendedRefContext): ExtendedRef {\r\n const refValue = ref(value) as ExtendedRef;\r\n\r\n refValue.context = context;\r\n\r\n return refValue;\r\n}\r\n\r\n/**\r\n * Creates an extended Ref with the specified property name in the context.\r\n *\r\n * @param value The initial value of the Ref.\r\n * @param propertyName The property name to use for the context.\r\n *\r\n * @returns An ExtendedRef object that can be used like a regular Ref object.\r\n */\r\nexport function propertyRef(value: T, propertyName: string): ExtendedRef {\r\n return extendedRef(value, {\r\n propertyName\r\n });\r\n}\r\n\r\n// #endregion Extended Refs\r\n\r\n// #region VNode Helpers\r\n\r\n/**\r\n * Retrieves a single prop value from a VNode object. If the prop is explicitly\r\n * specified in the DOM then it will be returned. Otherwise the component's\r\n * prop default values are checked. If there is a default value it will be\r\n * returned.\r\n *\r\n * @param node The node whose property value is being requested.\r\n * @param propName The name of the property whose value is being requested.\r\n *\r\n * @returns The value of the property or `undefined` if it was not set.\r\n */\r\nexport function getVNodeProp(node: VNode, propName: string): T | undefined {\r\n // Check if the prop was specified in the DOM declaration.\r\n if (node.props && node.props[propName] !== undefined) {\r\n return node.props[propName] as T;\r\n }\r\n\r\n // Now look to see if the backing component has defined a prop with that\r\n // name and provided a default value.\r\n if (typeof node.type === \"object\" && typeof node.type[\"props\"] === \"object\") {\r\n const defaultProps = node.type[\"props\"] as Record;\r\n const defaultProp = defaultProps[propName];\r\n\r\n if (defaultProp && typeof defaultProp === \"object\" && defaultProp[\"default\"] !== undefined) {\r\n return defaultProp[\"default\"] as T;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Retrieves all prop values from a VNode object. First all default values\r\n * from the component are retrieved. Then any specified on the DOM will be used\r\n * to override those default values.\r\n *\r\n * @param node The node whose property values are being requested.\r\n *\r\n * @returns An object that contains all props and values for the node.\r\n */\r\nexport function getVNodeProps(node: VNode): Record {\r\n const props: Record = {};\r\n\r\n // Get all default values from the backing component's defined props.\r\n if (typeof node.type === \"object\" && typeof node.type[\"props\"] === \"object\") {\r\n const defaultProps = node.type[\"props\"] as Record;\r\n\r\n for (const p in defaultProps) {\r\n const defaultProp = defaultProps[p];\r\n\r\n if (defaultProp && typeof defaultProp === \"object\" && defaultProp[\"default\"] !== undefined) {\r\n props[p] = defaultProp[\"default\"];\r\n }\r\n }\r\n }\r\n\r\n // Override with any values specified on the DOM declaration.\r\n if (node.props) {\r\n for (const p in node.props) {\r\n if (typeof node.type === \"object\" && typeof node.type[\"props\"] === \"object\") {\r\n const propType = node.type[\"props\"][p]?.type;\r\n\r\n if (propType === Boolean) {\r\n props[p] = node.props[p] === true || node.props[p] === \"\";\r\n }\r\n else if (propType === Number) {\r\n props[p] = toNumberOrNull(node.props[p]) ?? undefined;\r\n }\r\n else {\r\n props[p] = node.props[p];\r\n }\r\n }\r\n else {\r\n props[p] = node.props[p];\r\n }\r\n }\r\n }\r\n\r\n return props;\r\n}\r\n\r\n/**\r\n * Renders the node into an off-screen div and then extracts the text content\r\n * by way of the innerText property of the div.\r\n *\r\n * @param node The node or component to be rendered.\r\n * @param props The properties to be passed to the component when it is mounted.\r\n *\r\n * @returns The text content of the node after it has rendered.\r\n */\r\nexport function extractText(node: VNode | Component, props?: Record): string {\r\n const el = document.createElement(\"div\");\r\n\r\n // Create a new virtual node with the specified properties.\r\n const vnode = createVNode(node, props);\r\n\r\n // Mount the node in our off-screen container.\r\n render(vnode, el);\r\n\r\n const text = el.innerText;\r\n\r\n // Unmount it.\r\n render(null, el);\r\n\r\n return text.trim();\r\n}\r\n\r\n/**\r\n * Renders the node into an off-screen div and then extracts the HTML content\r\n * by way of the innerHTML property of the div.\r\n *\r\n * @param node The node or component to be rendered.\r\n * @param props The properties to be passed to the component when it is mounted.\r\n *\r\n * @returns The HTML content of the node after it has rendered.\r\n */\r\nexport function extractHtml(node: VNode | Component, props?: Record): string {\r\n const el = document.createElement(\"div\");\r\n\r\n // Create a new virtual node with the specified properties.\r\n const vnode = createVNode(node, props);\r\n\r\n // Mount the node in our off-screen container.\r\n render(vnode, el);\r\n\r\n const html = el.innerHTML;\r\n\r\n // Unmount it.\r\n render(null, el);\r\n\r\n return html;\r\n}\r\n\r\n// #endregion\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { toNumberOrNull, zeroPad } from \"./numberUtils\";\r\nconst dateKeyLength = \"YYYYMMDD\".length;\r\nconst dateKeyNoYearLength = \"MMDD\".length;\r\n\r\n/**\r\n * Gets the year value from the date key.\r\n * Ex: 20210228 => 2021\r\n * @param dateKey\r\n */\r\nexport function getYear(dateKey: string | null): number {\r\n const defaultValue = 0;\r\n\r\n if (!dateKey || dateKey.length !== dateKeyLength) {\r\n return defaultValue;\r\n }\r\n\r\n const asString = dateKey.substring(0, 4);\r\n const year = toNumberOrNull(asString) || defaultValue;\r\n return year;\r\n}\r\n\r\n/**\r\n * Gets the month value from the date key.\r\n * Ex: 20210228 => 2\r\n * @param dateKey\r\n */\r\nexport function getMonth(dateKey: string | null): number {\r\n const defaultValue = 0;\r\n\r\n if (!dateKey) {\r\n return defaultValue;\r\n }\r\n\r\n if (dateKey.length === dateKeyLength) {\r\n const asString = dateKey.substring(4, 6);\r\n return toNumberOrNull(asString) || defaultValue;\r\n }\r\n\r\n if (dateKey.length === dateKeyNoYearLength) {\r\n const asString = dateKey.substring(0, 2);\r\n return toNumberOrNull(asString) || defaultValue;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Gets the day value from the date key.\r\n * Ex: 20210228 => 28\r\n * @param dateKey\r\n */\r\nexport function getDay(dateKey: string | null): number {\r\n const defaultValue = 0;\r\n\r\n if (!dateKey) {\r\n return defaultValue;\r\n }\r\n\r\n if (dateKey.length === dateKeyLength) {\r\n const asString = dateKey.substring(6, 8);\r\n return toNumberOrNull(asString) || defaultValue;\r\n }\r\n\r\n if (dateKey.length === dateKeyNoYearLength) {\r\n const asString = dateKey.substring(2, 4);\r\n return toNumberOrNull(asString) || defaultValue;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Gets the datekey constructed from the parts.\r\n * Ex: (2021, 2, 28) => '20210228'\r\n * @param year\r\n * @param month\r\n * @param day\r\n */\r\nexport function toDateKey(year: number | null, month: number | null, day: number | null): string {\r\n if (!year || year > 9999 || year < 0) {\r\n year = 0;\r\n }\r\n\r\n if (!month || month > 12 || month < 0) {\r\n month = 0;\r\n }\r\n\r\n if (!day || day > 31 || day < 0) {\r\n day = 0;\r\n }\r\n\r\n const yearStr = zeroPad(year, 4);\r\n const monthStr = zeroPad(month, 2);\r\n const dayStr = zeroPad(day, 2);\r\n\r\n return `${yearStr}${monthStr}${dayStr}`;\r\n}\r\n\r\n/**\r\n * Gets the datekey constructed from the parts.\r\n * Ex: (2, 28) => '0228'\r\n * @param month\r\n * @param day\r\n */\r\nexport function toNoYearDateKey(month: number | null, day: number | null): string {\r\n if (!month || month > 12 || month < 0) {\r\n month = 0;\r\n }\r\n\r\n if (!day || day > 31 || day < 0) {\r\n day = 0;\r\n }\r\n\r\n const monthStr = zeroPad(month, 2);\r\n const dayStr = zeroPad(day, 2);\r\n\r\n return `${monthStr}${dayStr}`;\r\n}\r\n\r\nexport default {\r\n getYear,\r\n getMonth,\r\n getDay,\r\n toDateKey,\r\n toNoYearDateKey\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { CurrentPersonBag } from \"@Obsidian/ViewModels/Crm/currentPersonBag\";\r\n\r\nexport type PageConfig = {\r\n executionStartTime: number;\r\n pageId: number;\r\n pageGuid: Guid;\r\n pageParameters: Record;\r\n interactionGuid: Guid;\r\n currentPerson: CurrentPersonBag | null;\r\n isAnonymousVisitor: boolean;\r\n loginUrlWithReturnUrl: string;\r\n};\r\n\r\nexport function smoothScrollToTop(): void {\r\n window.scrollTo({ top: 0, behavior: \"smooth\" });\r\n}\r\n\r\nexport default {\r\n smoothScrollToTop\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any\r\ndeclare const Obsidian: any;\r\n\r\n\r\n/*\r\n * Code to handle working with modals.\r\n */\r\nlet currentModalCount = 0;\r\n\r\n/**\r\n * Track a modal being opened or closed. This is used to adjust the page in response\r\n * to any modals being visible.\r\n *\r\n * @param state true if the modal is now open, false if it is now closed.\r\n */\r\nexport function trackModalState(state: boolean): void {\r\n const body = document.body;\r\n const cssClasses = [\"modal-open\"];\r\n\r\n if (state) {\r\n currentModalCount++;\r\n }\r\n else {\r\n currentModalCount = currentModalCount > 0 ? currentModalCount - 1 : 0;\r\n }\r\n\r\n if (currentModalCount > 0) {\r\n for (const cssClass of cssClasses) {\r\n body.classList.add(cssClass);\r\n }\r\n }\r\n else {\r\n for (const cssClass of cssClasses) {\r\n body.classList.remove(cssClass);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Loads a JavaScript file asynchronously into the document and returns a\r\n * Promise that can be used to determine when the script has loaded. The\r\n * promise will return true if the script loaded successfully or false if it\r\n * failed to load.\r\n *\r\n * The function passed in isScriptLoaded will be called before the script is\r\n * inserted into the DOM as well as after to make sure it actually loaded.\r\n *\r\n * @param source The source URL of the script to be loaded.\r\n * @param isScriptLoaded An optional function to call to determine if the script is loaded.\r\n * @param attributes An optional set of attributes to apply to the script tag.\r\n * @param fingerprint If set to false, then a fingerprint will not be added to the source URL. Default is true.\r\n *\r\n * @returns A Promise that indicates if the script was loaded or not.\r\n */\r\nexport async function loadJavaScriptAsync(source: string, isScriptLoaded?: () => boolean, attributes?: Record, fingerprint?: boolean): Promise {\r\n let src = source;\r\n\r\n // Add the cache busting fingerprint if we have one.\r\n if (fingerprint !== false && typeof Obsidian !== \"undefined\" && Obsidian?.options?.fingerprint) {\r\n if (src.indexOf(\"?\") === -1) {\r\n src += `?${Obsidian.options.fingerprint}`;\r\n }\r\n else {\r\n src += `&${Obsidian.options.fingerprint}`;\r\n }\r\n }\r\n\r\n // Check if the script is already loaded. First see if we have a custom\r\n // function that will do the check. Otherwise fall back to looking for any\r\n // script tags that have the same source.\r\n if (isScriptLoaded) {\r\n if (isScriptLoaded()) {\r\n return true;\r\n }\r\n }\r\n\r\n // Make sure the script wasn't already added in some other way.\r\n const scripts = Array.from(document.getElementsByTagName(\"script\"));\r\n const thisScript = scripts.filter(s => s.src === src);\r\n\r\n if (thisScript.length > 0) {\r\n const promise = scriptLoadedPromise(thisScript[0]);\r\n return promise;\r\n }\r\n\r\n // Build the script tag that will be dynamically loaded.\r\n const script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = src;\r\n if (attributes) {\r\n for (const key in attributes) {\r\n script.setAttribute(key, attributes[key]);\r\n }\r\n }\r\n\r\n // Load the script.\r\n const promise = scriptLoadedPromise(script);\r\n document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n\r\n return promise;\r\n\r\n async function scriptLoadedPromise(scriptElement: HTMLScriptElement): Promise {\r\n try {\r\n await new Promise((resolve, reject) => {\r\n scriptElement.addEventListener(\"load\", () => resolve());\r\n scriptElement.addEventListener(\"error\", () => {\r\n reject();\r\n });\r\n });\r\n\r\n // If we have a custom function, call it to see if the script loaded correctly.\r\n if (isScriptLoaded) {\r\n return isScriptLoaded();\r\n }\r\n\r\n return true;\r\n }\r\n catch {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Adds a new link to the quick return action menu. The URL in the address bar\r\n * will be used as the destination.\r\n *\r\n * @param title The title of the quick link that identifies the current page.\r\n * @param section The section title to place this link into.\r\n * @param sectionOrder The priority order to give the section if it doesn't already exist.\r\n */\r\nexport function addQuickReturn(title: string, section: string, sectionOrder?: number): void {\r\n interface IRock {\r\n personalLinks: {\r\n addQuickReturn: (type: string, typeOrder: number, itemName: string) => void\r\n }\r\n }\r\n\r\n const rock = window[\"Rock\"] as IRock;\r\n if (rock && rock.personalLinks) {\r\n rock.personalLinks.addQuickReturn(section, sectionOrder ?? 0, title);\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { ICancellationToken } from \"./cancellation\";\r\nimport { trackModalState } from \"./page\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/naming-convention\r\ndeclare const Rock: any;\r\n\r\n/** The options that describe the dialog. */\r\nexport type DialogOptions = {\r\n /** The text to display inside the dialog. */\r\n message: string | HTMLElement;\r\n\r\n /** A list of buttons to display, rendered left to right. */\r\n buttons: ButtonOptions[];\r\n\r\n /**\r\n * An optional container element for the dialog. If not specified then one\r\n * will be chosen automatically.\r\n */\r\n container?: string | Element;\r\n\r\n /**\r\n * Determines if the standard close button in the corner of the dialog\r\n * should be hidden.\r\n */\r\n hideCloseButton?: boolean;\r\n\r\n /**\r\n * An optional cancellation token that will dismiss the dialog automatically\r\n * and return `cancel` as the button clicked.\r\n */\r\n cancellationToken?: ICancellationToken;\r\n};\r\n\r\n/** The options that describe a single button in the dialog. */\r\nexport type ButtonOptions = {\r\n /** The key that uniquely identifies this button. */\r\n key: string;\r\n\r\n /** The text to display in the button. */\r\n label: string;\r\n\r\n /** The CSS classes to assign to the button, such as `btn btn-primary`. */\r\n className: string;\r\n autoFocus?: boolean;\r\n};\r\n\r\n/**\r\n * Creates a dialog to display a message.\r\n *\r\n * @param body The body content to put in the dialog.\r\n * @param footer The footer content to put in the dialog.\r\n *\r\n * @returns An element that should be added to the body.\r\n */\r\nfunction createDialog(body: HTMLElement | HTMLElement[], footer: HTMLElement | HTMLElement[] | undefined): HTMLElement {\r\n // Create the scrollable container that will act as a backdrop for the dialog.\r\n const scrollable = document.createElement(\"div\");\r\n scrollable.classList.add(\"modal-scrollable\");\r\n scrollable.style.zIndex = \"1060\";\r\n\r\n // Create the modal that will act as a container for the outer content.\r\n const modal = document.createElement(\"div\");\r\n scrollable.appendChild(modal);\r\n modal.classList.add(\"modal\", \"fade\");\r\n modal.tabIndex = -1;\r\n modal.setAttribute(\"role\", \"dialog\");\r\n modal.setAttribute(\"aria-hidden\", \"false\");\r\n modal.style.display = \"block\";\r\n\r\n // Create the inner dialog of the modal.\r\n const modalDialog = document.createElement(\"div\");\r\n modal.appendChild(modalDialog);\r\n modalDialog.classList.add(\"modal-dialog\");\r\n\r\n // Create the container for the inner content.\r\n const modalContent = document.createElement(\"div\");\r\n modalDialog.appendChild(modalContent);\r\n modalContent.classList.add(\"modal-content\");\r\n\r\n // Create the container for the body content.\r\n const modalBody = document.createElement(\"div\");\r\n modalContent.appendChild(modalBody);\r\n modalBody.classList.add(\"modal-body\");\r\n\r\n // Add all the body elements to the body.\r\n if (Array.isArray(body)) {\r\n for (const el of body) {\r\n modalBody.appendChild(el);\r\n }\r\n }\r\n else {\r\n modalBody.appendChild(body);\r\n }\r\n\r\n // If we have any footer content then create a footer.\r\n if (footer && (!Array.isArray(footer) || footer.length > 0)) {\r\n const modalFooter = document.createElement(\"div\");\r\n modalContent.appendChild(modalFooter);\r\n modalFooter.classList.add(\"modal-footer\");\r\n\r\n // Add all the footer elements to the footer.\r\n if (Array.isArray(footer)) {\r\n for (const el of footer) {\r\n modalFooter.appendChild(el);\r\n }\r\n }\r\n else {\r\n modalFooter.appendChild(footer);\r\n }\r\n }\r\n\r\n // Add a click handler to the background so the user gets feedback\r\n // that they can't just click away from the dialog.\r\n scrollable.addEventListener(\"click\", () => {\r\n modal.classList.remove(\"animated\", \"shake\");\r\n setTimeout(() => {\r\n modal.classList.add(\"animated\", \"shake\");\r\n }, 0);\r\n });\r\n\r\n return scrollable;\r\n}\r\n\r\n/**\r\n * Construct a standard close button to be placed in the dialog.\r\n *\r\n * @returns A button element.\r\n */\r\nfunction createCloseButton(): HTMLButtonElement {\r\n const closeButton = document.createElement(\"button\");\r\n closeButton.classList.add(\"close\");\r\n closeButton.type = \"button\";\r\n closeButton.style.marginTop = \"-10px\";\r\n closeButton.innerHTML = \"×\";\r\n\r\n return closeButton;\r\n}\r\n\r\n/**\r\n * Creates a standard backdrop element to be placed in the window.\r\n *\r\n * @returns An element to show that the background is not active.\r\n */\r\nfunction createBackdrop(): HTMLElement {\r\n const backdrop = document.createElement(\"div\");\r\n backdrop.classList.add(\"modal-backdrop\");\r\n backdrop.style.zIndex = \"1050\";\r\n\r\n return backdrop;\r\n}\r\n\r\n/**\r\n * Shows a dialog modal. This is meant to look and behave like the standard\r\n * Rock.dialog.* functions, but this handles fullscreen mode whereas the old\r\n * methods do not.\r\n *\r\n * @param options The options that describe the dialog to be shown.\r\n *\r\n * @returns The key of the button that was clicked, or \"cancel\" if the cancel button was clicked.\r\n */\r\nexport function showDialog(options: DialogOptions): Promise {\r\n return new Promise(resolve => {\r\n let timer: NodeJS.Timeout | null = null;\r\n const container = document.fullscreenElement || document.body;\r\n const body = document.createElement(\"div\");\r\n let autoFocus: null | HTMLElement = null;\r\n\r\n if (options.message instanceof HTMLElement) {\r\n body.appendChild(options.message);\r\n }\r\n else {\r\n body.innerText = options.message;\r\n }\r\n\r\n const buttons: HTMLElement[] = [];\r\n\r\n /**\r\n * Internal function to handle clearing the dialog and resolving the\r\n * promise.\r\n *\r\n * @param result The result to return in the promise.\r\n */\r\n function clearDialog(result: string): void {\r\n // This acts as a way to ensure only a single clear request happens.\r\n if (timer !== null) {\r\n return;\r\n }\r\n\r\n // The timout is used as a fallback in case we don't get the\r\n // transition end event.\r\n timer = setTimeout(() => {\r\n backdrop.remove();\r\n dialog.remove();\r\n trackModalState(false);\r\n\r\n resolve(result);\r\n }, 1000);\r\n\r\n modal.addEventListener(\"transitionend\", () => {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n\r\n backdrop.remove();\r\n dialog.remove();\r\n trackModalState(false);\r\n\r\n resolve(result);\r\n });\r\n\r\n modal.classList.remove(\"in\");\r\n backdrop.classList.remove(\"in\");\r\n }\r\n\r\n // Add in all the buttons specified.\r\n for (const button of options.buttons) {\r\n const btn = document.createElement(\"button\");\r\n btn.classList.value = button.className;\r\n btn.type = \"button\";\r\n btn.innerText = button.label;\r\n btn.addEventListener(\"click\", () => {\r\n clearDialog(button.key);\r\n });\r\n if (button.autoFocus) {\r\n autoFocus = btn;\r\n }\r\n buttons.push(btn);\r\n }\r\n\r\n const dialogBody: HTMLElement[] = [body];\r\n\r\n if (!options.hideCloseButton) {\r\n // Construct the close (cancel) button.\r\n const closeButton = createCloseButton();\r\n closeButton.addEventListener(\"click\", () => {\r\n clearDialog(\"cancel\");\r\n });\r\n\r\n dialogBody.splice(0, 0, closeButton);\r\n }\r\n\r\n const dialog = createDialog(dialogBody, buttons);\r\n const backdrop = createBackdrop();\r\n\r\n const modal = dialog.querySelector(\".modal\") as HTMLElement;\r\n\r\n // Do final adjustments to the elements and add to the body.\r\n trackModalState(true);\r\n container.appendChild(dialog);\r\n container.appendChild(backdrop);\r\n modal.style.marginTop = `-${modal.offsetHeight / 2.0}px`;\r\n\r\n if (autoFocus) {\r\n autoFocus.focus();\r\n }\r\n\r\n // Show the backdrop and the modal.\r\n backdrop.classList.add(\"in\");\r\n modal.classList.add(\"in\");\r\n\r\n // Handle dismissal of the dialog by cancellation token.\r\n options.cancellationToken?.onCancellationRequested(() => {\r\n clearDialog(\"cancel\");\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Shows an alert message that requires the user to acknowledge.\r\n *\r\n * @param message The message text to be displayed.\r\n *\r\n * @returns A promise that indicates when the dialog has been dismissed.\r\n */\r\nexport async function alert(message: string): Promise {\r\n await showDialog({\r\n message,\r\n buttons: [\r\n {\r\n key: \"ok\",\r\n label: \"OK\",\r\n className: \"btn btn-primary\"\r\n }\r\n ]\r\n });\r\n}\r\n\r\n/**\r\n * Shows a confirmation dialog that consists of OK and Cancel buttons. The\r\n * user will be required to click one of these two buttons.\r\n *\r\n * @param message The message to be displayed inside the dialog.\r\n *\r\n * @returns A promise that indicates when the dialog has been dismissed. The\r\n * value will be true if the OK button was clicked or false otherwise.\r\n */\r\nexport async function confirm(message: string): Promise {\r\n const result = await showDialog({\r\n message,\r\n buttons: [\r\n {\r\n key: \"ok\",\r\n label: \"OK\",\r\n className: \"btn btn-primary\",\r\n autoFocus: true\r\n },\r\n {\r\n key: \"cancel\",\r\n label: \"Cancel\",\r\n className: \"btn btn-default\"\r\n }\r\n ]\r\n });\r\n\r\n return result === \"ok\";\r\n}\r\n\r\n/**\r\n * Shows a delete confirmation dialog that consists of OK and Cancel buttons.\r\n * The user will be required to click one of these two buttons. The message\r\n * is standardized.\r\n *\r\n * @param nameText The name of type that will be deleted.\r\n *\r\n * @returns A promise that indicates when the dialog has been dismissed. The\r\n * value will be true if the OK button was clicked or false otherwise.\r\n */\r\nexport function confirmDelete(typeName: string, additionalMessage?: string): Promise {\r\n let message = `Are you sure you want to delete this ${typeName}?`;\r\n\r\n if (additionalMessage) {\r\n message += ` ${additionalMessage}`;\r\n }\r\n\r\n return confirm(message);\r\n}\r\n\r\n/**\r\n * Shows the security dialog for the given entity.\r\n *\r\n * @param entityTypeIdKey The identifier of the entity's type.\r\n * @param entityIdKey The identifier of the entity to secure.\r\n * @param entityTitle The title of the entity. This is used to construct the modal title.\r\n */\r\nexport function showSecurity(entityTypeIdKey: Guid | string | number, entityIdKey: Guid | string | number, entityTitle: string = \"Item\"): void {\r\n Rock.controls.modal.show(undefined, `/Secure/${entityTypeIdKey}/${entityIdKey}?t=Secure ${entityTitle}&pb=&sb=Done`);\r\n}\r\n\r\n/**\r\n * Shows the child pages for the given page.\r\n * @param pageId The page identifier\r\n */\r\nexport function showChildPages(pageId: Guid | string | number): void {\r\n Rock.controls.modal.show(undefined, `/pages/${pageId}?t=Child Pages&pb=&sb=Done`);\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Is the value a valid email address?\r\n * @param val\r\n */\r\nexport function isEmail(val: unknown): boolean {\r\n if (typeof val === \"string\") {\r\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,}))$/;\r\n return re.test(val.toLowerCase());\r\n }\r\n\r\n return false;\r\n}\r\n","import { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n\r\n/**\r\n * A function to convert the enums to array of ListItemBag in the frontend.\r\n *\r\n * @param description The enum to be converted to an array of listItemBag as a dictionary of value to enum description\r\n *\r\n * @returns An array of ListItemBag.\r\n */\r\nexport function enumToListItemBag(description: Record): ListItemBag[] {\r\n const listItemBagList: ListItemBag[] = [];\r\n const order = description[\"__order\"] as number[] | undefined;\r\n\r\n if (order) {\r\n for (const value of order) {\r\n listItemBagList.push({\r\n text: description[value],\r\n value: value.toString()\r\n });\r\n }\r\n }\r\n else {\r\n for (const property in description) {\r\n listItemBagList.push({\r\n text: description[property],\r\n value: property.toString()\r\n });\r\n }\r\n }\r\n\r\n return listItemBagList;\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { isValidGuid, normalize } from \"./guid\";\r\nimport { IFieldType } from \"@Obsidian/Types/fieldType\";\r\nimport { Ref, inject, provide, ref } from \"vue\";\r\n\r\nconst fieldTypeTable: Record = {};\r\nconst fieldTypeAttributeGuidSymbol = Symbol();\r\n\r\n\r\n/** Determines how the field type component is being used so it can adapt to different */\r\nexport type DataEntryMode = \"defaultValue\" | undefined;\r\n\r\n/**\r\n * Register a new field type in the system. This must be called for all field\r\n * types a plugin registers.\r\n *\r\n * @param fieldTypeGuid The unique identifier of the field type.\r\n * @param fieldType The class instance that will handle the field type.\r\n */\r\nexport function registerFieldType(fieldTypeGuid: Guid, fieldType: IFieldType): void {\r\n const normalizedGuid = normalize(fieldTypeGuid);\r\n\r\n if (!isValidGuid(fieldTypeGuid) || normalizedGuid === null) {\r\n throw \"Invalid guid specified when registering field type.\";\r\n }\r\n\r\n if (fieldTypeTable[normalizedGuid] !== undefined) {\r\n throw \"Invalid attempt to replace existing field type.\";\r\n }\r\n\r\n fieldTypeTable[normalizedGuid] = fieldType;\r\n}\r\n\r\n/**\r\n * Get the field type handler for a given unique identifier.\r\n *\r\n * @param fieldTypeGuid The unique identifier of the field type.\r\n *\r\n * @returns The field type instance or null if not found.\r\n */\r\nexport function getFieldType(fieldTypeGuid: Guid): IFieldType | null {\r\n const normalizedGuid = normalize(fieldTypeGuid);\r\n\r\n if (normalizedGuid !== null) {\r\n const field = fieldTypeTable[normalizedGuid];\r\n\r\n if (field) {\r\n return field;\r\n }\r\n }\r\n\r\n console.warn(`Field type \"${fieldTypeGuid}\" was not found`);\r\n return null;\r\n}\r\n\r\n/**\r\n * Provides the attribute guid for a field type component to use.\r\n *\r\n * @param guid A reference to the attribute guid value.\r\n */\r\nexport function provideFieldTypeAttributeGuid(guid: Ref): void {\r\n provide(fieldTypeAttributeGuidSymbol, guid);\r\n}\r\n\r\n/**\r\n * Gets a reference to the attribute guid value for this field. The value may be\r\n * undefined or null.\r\n *\r\n * @returns A function that will cause the block component to be reloaded.\r\n */\r\nexport function useFieldTypeAttributeGuid(): Ref {\r\n return inject>(fieldTypeAttributeGuidSymbol, ref());\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { useHttp } from \"./http\";\r\nimport Cache from \"./cache\";\r\n\r\n/**\r\n * Triggers an automatic download of the data so it can be saved to the\r\n * filesystem.\r\n *\r\n * @param data The data to be downloaded by the browser.\r\n * @param filename The name of the filename to suggest to the browser.\r\n */\r\nexport async function downloadFile(data: Blob, filename: string): Promise {\r\n // Create the URL that contains the file data.\r\n const url = URL.createObjectURL(data);\r\n\r\n // Create a fake hyperlink to simulate an attempt to download a file.\r\n const element = document.createElement(\"a\");\r\n element.innerText = \"Download\";\r\n element.style.position = \"absolute\";\r\n element.style.top = \"-100px\";\r\n element.style.left = \"0\";\r\n element.href = url;\r\n element.download = filename;\r\n document.body.appendChild(element);\r\n element.click();\r\n document.body.removeChild(element);\r\n\r\n setTimeout(() => URL.revokeObjectURL(url), 100);\r\n}\r\n\r\n/**\r\n * Fetch the global attribute configuration for image file extensions from the server as an array of\r\n * file extension strings.\r\n */\r\nasync function fetchImageFileExtensions(): Promise {\r\n const http = useHttp();\r\n const result = await http.post(\"/api/v2/Utilities/GetImageFileExtensions\");\r\n\r\n if (result.isSuccess && result.data) {\r\n return result.data.split(\",\");\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Fetch the global attribute configuration for image file extensions from the server as an array of\r\n * file extension strings.\r\n *\r\n * Cacheable version of fetchImageFileExtensions\r\n */\r\nexport const getImageFileExtensions = Cache.cachePromiseFactory(\"imageFileExtensions\", fetchImageFileExtensions);\r\n\r\n/**\r\n * Determine, based on the file's extension and the list of image file extensions (from the\r\n * server's configuration), whether the file is an image.\r\n */\r\nexport async function isImage(filename: string): Promise {\r\n const imageExtensions = await getImageFileExtensions();\r\n const extension = filename.split(\".\").pop();\r\n return !!extension && (imageExtensions?.includes(extension.toLowerCase()) ?? false);\r\n}\r\n\r\n/**\r\n * Creates a file processor function that resizes images to fit within a specified maximum width and/or height,\r\n * while maintaining the original aspect ratio.\r\n *\r\n * If the input file is not an image, it is returned unchanged. If `maxWidth` or `maxHeight` is provided,\r\n * the image will be resized accordingly.\r\n *\r\n * @param {object} [options] - The resizing options (optional).\r\n * @param {number} [options.maxWidth] - The maximum allowed width for the image (optional).\r\n * @param {number} [options.maxHeight] - The maximum allowed height for the image (optional).\r\n * @returns {(file: File) => File | Promise} A function that processes the given file and returns either the original file or a resized version.\r\n *\r\n * @example\r\n * const processor = resizeImageFileProcessor({ maxWidth: 800 }); // Resize only by width\r\n * const resizedFile = await processor(imageFile);\r\n */\r\nexport function resizeImageFileProcessor({\r\n maxWidth,\r\n maxHeight\r\n}: { maxWidth?: number; maxHeight?: number } = {}): (file: File) => File | Promise {\r\n return (file: File): File | Promise => {\r\n if (!file.type.startsWith(\"image/\")) {\r\n // File is not an image.\r\n return file;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.src = URL.createObjectURL(file);\r\n img.onload = () => {\r\n const { width, height } = img;\r\n\r\n if (!maxWidth && !maxHeight) {\r\n // No constraints provided, return original file.\r\n resolve(file);\r\n return;\r\n }\r\n\r\n // Determine scaling factor to maintain aspect ratio\r\n const widthScale = maxWidth ? maxWidth / width : 1;\r\n const heightScale = maxHeight ? maxHeight / height : 1;\r\n const scaleFactor = Math.min(widthScale, heightScale, 1); // Never upscale\r\n\r\n if (scaleFactor === 1) {\r\n // No resizing needed\r\n resolve(file);\r\n return;\r\n }\r\n\r\n const newWidth = Math.round(width * scaleFactor);\r\n const newHeight = Math.round(height * scaleFactor);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = newWidth;\r\n canvas.height = newHeight;\r\n\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n reject(new Error(\"Failed to get canvas context\"));\r\n return;\r\n }\r\n\r\n ctx.drawImage(img, 0, 0, newWidth, newHeight);\r\n canvas.toBlob(blob => {\r\n if (!blob) {\r\n reject(new Error(\"Failed to resize image\"));\r\n return;\r\n }\r\n\r\n // Create a new File object from the resized blob.\r\n const resizedFile = new File([blob], file.name, { type: file.type });\r\n resolve(resizedFile);\r\n }, file.type);\r\n };\r\n\r\n img.onerror = () => reject(new Error(\"Failed to load image\"));\r\n });\r\n };\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { inject, provide } from \"vue\";\r\n\r\n/** The unique symbol used when injecting the form state. */\r\nconst formStateSymbol = Symbol();\r\n\r\n/**\r\n * Holds the state of a single form on the page along with any callback methods\r\n * that can be used to interact with the form.\r\n */\r\nexport type FormState = {\r\n /** The number of submissions the form has had. */\r\n submitCount: number;\r\n\r\n /** Sets the current error for the given field name. A blank error means no error. */\r\n setError: (id: string, name: string, error: string) => void;\r\n};\r\n\r\n/**\r\n * Contains the internal form error passed between RockForm and RockValidation.\r\n *\r\n * This is an internal type and subject to change at any time.\r\n */\r\nexport type FormError = {\r\n /** The name of the field. */\r\n name: string;\r\n\r\n /** The current error text. */\r\n text: string;\r\n};\r\n\r\n/**\r\n * Provides the form state for any child components that need access to it.\r\n * \r\n * @param state The state that will be provided to child components.\r\n */\r\nexport function provideFormState(state: FormState): void {\r\n provide(formStateSymbol, state);\r\n}\r\n\r\n/**\r\n * Makes use of the FormState that was previously provided by a parent component.\r\n *\r\n * @returns The form state or undefined if it was not available.\r\n */\r\nexport function useFormState(): FormState | undefined {\r\n return inject(formStateSymbol, undefined);\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n// Define the browser-specific versions of these functions that older browsers\r\n// implemented before using the standard API.\r\ndeclare global {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n interface Document {\r\n mozCancelFullScreen?: () => Promise;\r\n webkitExitFullscreen?: () => Promise;\r\n mozFullScreenElement?: Element;\r\n webkitFullscreenElement?: Element;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n interface HTMLElement {\r\n mozRequestFullscreen?: () => Promise;\r\n webkitRequestFullscreen?: () => Promise;\r\n }\r\n}\r\n\r\n/**\r\n * Request that the window enter true fullscreen mode for the given element.\r\n *\r\n * @param element The element that will be the root of the fullscreen view.\r\n * @param exitCallback The function to call when leaving fullscreen mode.\r\n *\r\n * @returns A promise that indicates when the operation has completed.\r\n */\r\nexport async function enterFullscreen(element: HTMLElement, exitCallback?: (() => void)): Promise {\r\n try {\r\n if (element.requestFullscreen) {\r\n await element.requestFullscreen();\r\n }\r\n else if (element.mozRequestFullscreen) {\r\n await element.mozRequestFullscreen();\r\n }\r\n else if (element.webkitRequestFullscreen) {\r\n await element.webkitRequestFullscreen();\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n element.classList.add(\"is-fullscreen\");\r\n\r\n const onFullscreenChange = (): void => {\r\n element.classList.remove(\"is-fullscreen\");\r\n\r\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\r\n document.removeEventListener(\"mozfullscreenchange\", onFullscreenChange);\r\n document.removeEventListener(\"webkitfullscreenchange\", onFullscreenChange);\r\n\r\n if (exitCallback) {\r\n exitCallback();\r\n }\r\n };\r\n\r\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\r\n document.addEventListener(\"mozfullscreenchange\", onFullscreenChange);\r\n document.addEventListener(\"webkitfullscreenchange\", onFullscreenChange);\r\n\r\n return true;\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Checks if any element is currently in fullscreen mode.\r\n *\r\n * @returns True if an element is currently in fullscreen mode in the window; otherwise false.\r\n */\r\nexport function isFullscreen(): boolean {\r\n return !!getFullscreenElement();\r\n}\r\n\r\n/**\r\n * Gets the element that is currently the root of fullscreen mode.\r\n */\r\nexport function getFullscreenElement(): Element | undefined {\r\n return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\r\n}\r\n\r\n/**\r\n * Manually exits fullscreen mode.\r\n *\r\n * @returns True if fullscreen mode was exited; otherwise false.\r\n */\r\nexport async function exitFullscreen(): Promise {\r\n try {\r\n if (document.exitFullscreen) {\r\n await document.exitFullscreen();\r\n }\r\n else if (document.mozCancelFullScreen) {\r\n await document.mozCancelFullScreen();\r\n }\r\n else if (document.webkitExitFullscreen) {\r\n document.webkitExitFullscreen();\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n return false;\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/* global google */\r\n\r\nimport { DrawingMode, Coordinate, ILatLng, ILatLngLiteral } from \"@Obsidian/Types/Controls/geo\";\r\nimport { GeoPickerSettingsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerSettingsBag\";\r\nimport { GeoPickerGetSettingsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerGetSettingsOptionsBag\";\r\nimport { GeoPickerGoogleMapSettingsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerGoogleMapSettingsBag\";\r\nimport { emptyGuid } from \"./guid\";\r\nimport { post } from \"./http\";\r\nimport { loadJavaScriptAsync } from \"./page\";\r\n\r\n/**\r\n * Converts a LatLng object, \"lat,lng\" coordinate string, or WellKnown \"lng lat\" coordinate string to a Coordinate array\r\n * @param coord Either a string in \"lat,lng\" format or a LatLng object from Google Maps\r\n * @param isWellKnown True if is \"lng lat\" format, false if it is \"lat, lng\"\r\n *\r\n * @returns Coordinate: Tuple with a Latitude number and Longitude number as the elements\r\n */\r\nexport function toCoordinate(coord: string | ILatLng, isWellKnown: boolean = false): Coordinate {\r\n if (typeof coord == \"string\") {\r\n // WellKnown string format\r\n if (isWellKnown) {\r\n return coord.split(\" \").reverse().map(val => parseFloat(val)) as Coordinate;\r\n }\r\n // Google Maps URL string format\r\n else {\r\n return coord.split(\",\").map(val => parseFloat(val)) as Coordinate;\r\n }\r\n }\r\n else {\r\n return [coord.lat(), coord.lng()];\r\n }\r\n}\r\n\r\n/**\r\n * Takes a Well Known Text value and converts it into a Coordinate array\r\n */\r\nexport function wellKnownToCoordinates(wellKnownText: string, type: DrawingMode): Coordinate[] {\r\n if (wellKnownText == \"\") {\r\n return [];\r\n }\r\n if (type == \"Point\") {\r\n // From this format: POINT (-112.130946 33.600114)\r\n return [toCoordinate(wellKnownText.replace(/(POINT *\\( *)|( *\\) *)/ig, \"\"), true)];\r\n }\r\n else {\r\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))\r\n return wellKnownText.replace(/(POLYGON *\\(+ *)|( *\\)+ *)/ig, \"\").split(/ *, */).map((coord) => toCoordinate(coord, true));\r\n }\r\n}\r\n\r\n/**\r\n * Takes a Well Known Text value and converts it into a Coordinate array\r\n */\r\nexport function coordinatesToWellKnown(coordinates: Coordinate[], type: DrawingMode): string {\r\n if (coordinates.length == 0) {\r\n return \"\";\r\n }\r\n else if (type == \"Point\") {\r\n return `POINT(${coordinates[0].reverse().join(\" \")})`;\r\n }\r\n else {\r\n // DB doesn't work well with the points of a polygon specified in clockwise order for some reason\r\n if (isClockwisePolygon(coordinates)) {\r\n coordinates.reverse();\r\n }\r\n\r\n const coordinateString = coordinates.map(coords => coords.reverse().join(\" \")).join(\", \");\r\n return `POLYGON((${coordinateString}))`;\r\n }\r\n}\r\n\r\n/**\r\n * Takes a Coordinate and uses Geocoding to get nearest address\r\n */\r\nexport function nearAddressForCoordinate(coordinate: Coordinate): Promise {\r\n return new Promise(resolve => {\r\n // only try if google is loaded\r\n if (window.google) {\r\n const geocoder = new google.maps.Geocoder();\r\n geocoder.geocode({ location: new google.maps.LatLng(...coordinate) }, function (results, status) {\r\n if (status == google.maps.GeocoderStatus.OK && results?.[0]) {\r\n resolve(\"near \" + results[0].formatted_address);\r\n }\r\n else {\r\n console.log(\"Geocoder failed due to: \" + status);\r\n resolve(\"\");\r\n }\r\n });\r\n }\r\n else {\r\n resolve(\"\");\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Takes a Coordinate array and uses Geocoding to get nearest address for the first point\r\n */\r\nexport function nearAddressForCoordinates(coordinates: Coordinate[]): Promise {\r\n if (!coordinates || coordinates.length == 0) {\r\n return Promise.resolve(\"\");\r\n }\r\n return nearAddressForCoordinate(coordinates[0]);\r\n}\r\n\r\n/**\r\n * Determine whether the polygon's coordinates are drawn in clockwise order\r\n * Thank you dominoc!\r\n * http://dominoc925.blogspot.com/2012/03/c-code-to-determine-if-polygon-vertices.html\r\n */\r\nexport function isClockwisePolygon(polygon: number[][]): boolean {\r\n let sum = 0;\r\n\r\n for (let i = 0; i < polygon.length - 1; i++) {\r\n sum += (Math.abs(polygon[i + 1][0]) - Math.abs(polygon[i][0])) * (Math.abs(polygon[i + 1][1]) + Math.abs(polygon[i][1]));\r\n }\r\n\r\n return sum > 0;\r\n}\r\n\r\n/**\r\n * Download the necessary resources to run the maps and return the map settings from the API\r\n *\r\n * @param options Options for which data to get from the API\r\n *\r\n * @return Promise with the map settings retrieved from the API\r\n */\r\nexport async function loadMapResources(options: GeoPickerGetSettingsOptionsBag = { mapStyleValueGuid: emptyGuid }): Promise {\r\n const response = await post(\"/api/v2/Controls/GeoPickerGetGoogleMapSettings\", undefined, options);\r\n const googleMapSettings = response.data ?? {};\r\n\r\n let keyParam = \"\";\r\n\r\n if (googleMapSettings.googleApiKey) {\r\n keyParam = `key=${googleMapSettings.googleApiKey}&`;\r\n }\r\n\r\n await loadJavaScriptAsync(`https://maps.googleapis.com/maps/api/js?${keyParam}libraries=drawing,visualization,geometry,marker`, () => typeof (google) != \"undefined\" && typeof (google.maps) != \"undefined\", {}, false);\r\n\r\n return googleMapSettings;\r\n}\r\n\r\n/**\r\n * Creates a ILatLng object\r\n */\r\nexport function createLatLng(latOrLatLngOrLatLngLiteral: number | ILatLngLiteral | ILatLng, lngOrNoClampNoWrap?: number | boolean | null, noClampNoWrap?: boolean): ILatLng {\r\n return new google.maps.LatLng(latOrLatLngOrLatLngLiteral as number, lngOrNoClampNoWrap, noClampNoWrap);\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { DayOfWeek, RockDateTime } from \"./rockDateTime\";\r\nimport { newGuid } from \"./guid\";\r\nimport { toNumberOrNull } from \"./numberUtils\";\r\nimport { pluralConditional } from \"./stringUtils\";\r\n\r\ntype Frequency = \"DAILY\" | \"WEEKLY\" | \"MONTHLY\";\r\n\r\n/**\r\n * The day of the week and an interval number for that particular day.\r\n */\r\nexport type WeekdayNumber = {\r\n /** The interval number for this day. */\r\n value: number;\r\n\r\n /** The day of the week. */\r\n day: DayOfWeek;\r\n};\r\n\r\n// Abbreviate nth lookup table.\r\nconst nthNamesAbbreviated: [number, string][] = [\r\n [1, \"1st\"],\r\n [2, \"2nd\"],\r\n [3, \"3rd\"],\r\n [4, \"4th\"],\r\n [-1, \"last\"]\r\n];\r\n\r\n// #region Internal Functions\r\n\r\n/**\r\n * Converts the number to a string and pads the left with zeros to make up\r\n * the minimum required length.\r\n *\r\n * @param value The value to be converted to a string.\r\n * @param length The minimum required length of the final string.\r\n *\r\n * @returns A string that represents the value.\r\n */\r\nfunction padZeroLeft(value: number, length: number): string {\r\n const str = value.toString();\r\n\r\n return \"0\".repeat(length - str.length) + str;\r\n}\r\n\r\n/**\r\n * Get a date-only string that can be used in the iCal format.\r\n *\r\n * @param date The date object to be converted to a string.\r\n *\r\n * @returns A string that represents only the date portion of the parameter.\r\n */\r\nfunction getDateString(date: RockDateTime): string {\r\n const year = date.year;\r\n const month = date.month;\r\n const day = date.day;\r\n\r\n return `${year}${padZeroLeft(month, 2)}${padZeroLeft(day, 2)}`;\r\n}\r\n\r\n/**\r\n * Gets a time-only string that can be used in the iCal format.\r\n *\r\n * @param date The date object to be converted to a string.\r\n *\r\n * @returns A string that represents only the time portion of the parameter.\r\n */\r\nfunction getTimeString(date: RockDateTime): string {\r\n const hour = date.hour;\r\n const minute = date.minute;\r\n const second = date.second;\r\n\r\n return `${padZeroLeft(hour, 2)}${padZeroLeft(minute, 2)}${padZeroLeft(second, 2)}`;\r\n}\r\n\r\n/**\r\n * Gets a date and time string that can be used in the iCal format.\r\n *\r\n * @param date The date object to be converted to a string.\r\n *\r\n * @returns A string that represents only the date and time of the parameter.\r\n */\r\nfunction getDateTimeString(date: RockDateTime): string {\r\n return `${getDateString(date)}T${getTimeString(date)}`;\r\n}\r\n\r\n/**\r\n * Gets all the date objects from a range or period string value. This converts\r\n * from an iCal format into a set of date objects.\r\n *\r\n * @param value The string value in iCal format.\r\n *\r\n * @returns An array of date objects that represents the range or period value.\r\n */\r\nfunction getDatesFromRangeOrPeriod(value: string): RockDateTime[] {\r\n const segments = value.split(\"/\");\r\n\r\n if (segments.length === 0) {\r\n return [];\r\n }\r\n\r\n const startDate = getDateFromString(segments[0]);\r\n if (!startDate) {\r\n return [];\r\n }\r\n\r\n if (segments.length !== 2) {\r\n return [startDate];\r\n }\r\n\r\n const dates: RockDateTime[] = [];\r\n\r\n if (segments[1].startsWith(\"P\")) {\r\n // Value is a period so we have a start date and then a period marker\r\n // to tell us how long that date extends.\r\n const days = getPeriodDurationInDays(segments[1]);\r\n\r\n for (let day = 0; day < days; day++) {\r\n const date = startDate.addDays(day);\r\n if (date) {\r\n dates.push(date);\r\n }\r\n }\r\n }\r\n else {\r\n // Value is a date range so we have a start date and then an end date\r\n // and we need to fill in the dates in between.\r\n const endDate = getDateFromString(segments[1]);\r\n\r\n if (endDate !== null) {\r\n let date = startDate;\r\n\r\n while (date <= endDate) {\r\n dates.push(date);\r\n date = date.addDays(1);\r\n }\r\n }\r\n }\r\n\r\n return dates;\r\n}\r\n\r\n/**\r\n * Get a date object that only has the date portion filled in from the iCal\r\n * date string. The time will be set to midnight.\r\n *\r\n * @param value An iCal date value.\r\n *\r\n * @returns A date object that represents the iCal date value.\r\n */\r\nfunction getDateFromString(value: string): RockDateTime | null {\r\n if (value.length < 8) {\r\n return null;\r\n }\r\n\r\n const year = parseInt(value.substring(0, 4));\r\n const month = parseInt(value.substring(4, 6));\r\n const day = parseInt(value.substring(6, 8));\r\n\r\n return RockDateTime.fromParts(year, month, day);\r\n}\r\n\r\n/**\r\n * Get a date object that has both the date and time filled in from the iCal\r\n * date string.\r\n *\r\n * @param value An iCal date value.\r\n *\r\n * @returns A date object that represents the iCal date value.\r\n */\r\nfunction getDateTimeFromString(value: string): RockDateTime | null {\r\n if (value.length < 15 || value[8] !== \"T\") {\r\n return null;\r\n }\r\n\r\n const year = parseInt(value.substring(0, 4));\r\n const month = parseInt(value.substring(4, 6));\r\n const day = parseInt(value.substring(6, 8));\r\n const hour = parseInt(value.substring(9, 11));\r\n const minute = parseInt(value.substring(11, 13));\r\n const second = parseInt(value.substring(13, 15));\r\n\r\n return RockDateTime.fromParts(year, month, day, hour, minute, second);\r\n}\r\n\r\n/**\r\n * Gets an iCal period duration in the number of days.\r\n *\r\n * @param period The iCal period definition.\r\n *\r\n * @returns The number of days found in the definition.\r\n */\r\nfunction getPeriodDurationInDays(period: string): number {\r\n // These are in a format like P1D, P2W, etc.\r\n if (!period.startsWith(\"P\")) {\r\n return 0;\r\n }\r\n\r\n if (period.endsWith(\"D\")) {\r\n return parseInt(period.substring(1, period.length - 1));\r\n }\r\n else if (period.endsWith(\"W\")) {\r\n return parseInt(period.substring(1, period.length - 1)) * 7;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Gets the specific recurrence dates from a RDATE iCal value string.\r\n *\r\n * @param attributes The attributes that were defined on the RDATE property.\r\n * @param value The value of the RDATE property.\r\n *\r\n * @returns An array of date objects found in the RDATE value.\r\n */\r\nfunction getRecurrenceDates(attributes: Record, value: string): RockDateTime[] {\r\n const recurrenceDates: RockDateTime[] = [];\r\n const valueParts = value.split(\",\");\r\n let valueType = attributes[\"VALUE\"];\r\n\r\n for (const valuePart of valueParts) {\r\n if(!valueType) {\r\n // The value type is unspecified and it could be a PERIOD, DATE-TIME or a DATE.\r\n // Determine it based on the length and the contents of the valuePart string.\r\n\r\n const length = valuePart.length;\r\n\r\n if (length === 8) { // Eg: 20240117\r\n valueType = \"DATE\";\r\n }\r\n else if ((length === 15 || length === 16) && valuePart[8] === \"T\") { // Eg: 19980119T020000, 19970714T173000Z\r\n valueType = \"DATE-TIME\";\r\n }\r\n else { // Eg: 20240201/20240202, 20240118/P1D\r\n valueType = \"PERIOD\";\r\n }\r\n }\r\n\r\n\r\n if (valueType === \"PERIOD\") {\r\n // Values are stored in period format, such as \"20221005/P1D\".\r\n recurrenceDates.push(...getDatesFromRangeOrPeriod(valuePart));\r\n }\r\n else if (valueType === \"DATE\") {\r\n // Values are date-only values.\r\n const date = getDateFromString(valuePart);\r\n if (date) {\r\n recurrenceDates.push(date);\r\n }\r\n }\r\n else if (valueType === \"DATE-TIME\") {\r\n // Values are date and time values.\r\n const date = getDateTimeFromString(valuePart);\r\n if (date) {\r\n recurrenceDates.push(date);\r\n }\r\n }\r\n }\r\n\r\n return recurrenceDates;\r\n}\r\n\r\n/**\r\n * Gets the name of the weekday from the iCal abbreviation.\r\n *\r\n * @param day The iCal day abbreviation.\r\n *\r\n * @returns A string that represents the day name.\r\n */\r\nfunction getWeekdayName(day: DayOfWeek): \"Sunday\" | \"Monday\" | \"Tuesday\" | \"Wednesday\" | \"Thursday\" | \"Friday\" | \"Saturday\" | \"Unknown\" {\r\n if (day === DayOfWeek.Sunday) {\r\n return \"Sunday\";\r\n }\r\n else if (day === DayOfWeek.Monday) {\r\n return \"Monday\";\r\n }\r\n else if (day === DayOfWeek.Tuesday) {\r\n return \"Tuesday\";\r\n }\r\n else if (day === DayOfWeek.Wednesday) {\r\n return \"Wednesday\";\r\n }\r\n else if (day === DayOfWeek.Thursday) {\r\n return \"Thursday\";\r\n }\r\n else if (day === DayOfWeek.Friday) {\r\n return \"Friday\";\r\n }\r\n else if (day === DayOfWeek.Saturday) {\r\n return \"Saturday\";\r\n }\r\n else {\r\n return \"Unknown\";\r\n }\r\n}\r\n\r\n/**\r\n * Checks if the date matches one of the weekday options.\r\n *\r\n * @param rockDate The date that must match one of the weekday options.\r\n * @param days The array of weekdays that the date must match.\r\n *\r\n * @returns True if the date matches; otherwise false.\r\n */\r\nfunction dateMatchesDays(rockDate: RockDateTime, days: DayOfWeek[]): boolean {\r\n for (const day of days) {\r\n if (rockDate.dayOfWeek === day) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Checks if the date matches the specifie day of week and also the offset into\r\n * the month for that day.\r\n *\r\n * @param rockDate The date object to be checked.\r\n * @param dayOfWeek The day of week the date must be on.\r\n * @param offsets The offset in week, such as 2 meaning the second 'dayOfWeek' or -1 meaning the last 'dayOfWeek'.\r\n *\r\n * @returns True if the date matches the options; otherwise false.\r\n */\r\nfunction dateMatchesOffsetDayOfWeeks(rockDate: RockDateTime, dayOfWeek: DayOfWeek, offsets: number[]): boolean {\r\n if (!dateMatchesDays(rockDate, [dayOfWeek])) {\r\n return false;\r\n }\r\n\r\n const dayOfMonth = rockDate.day;\r\n\r\n for (const offset of offsets) {\r\n if (offset === 1 && dayOfMonth >= 1 && dayOfMonth <= 7) {\r\n return true;\r\n }\r\n else if (offset === 2 && dayOfMonth >= 8 && dayOfMonth <= 14) {\r\n return true;\r\n }\r\n else if (offset === 3 && dayOfMonth >= 15 && dayOfMonth <= 21) {\r\n return true;\r\n }\r\n else if (offset === 4 && dayOfMonth >= 22 && dayOfMonth <= 28) {\r\n return true;\r\n }\r\n else if (offset === -1) {\r\n const lastDayOfMonth = rockDate.addDays(-(rockDate.day - 1)).addMonths(1).addDays(-1).day;\r\n\r\n if (dayOfMonth >= (lastDayOfMonth - 7) && dayOfMonth <= lastDayOfMonth) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Gets the DayOfWeek value that corresponds to the iCal formatted weekday.\r\n *\r\n * @param day The day of the week to be parsed.\r\n *\r\n * @returns A DayOfWeek value that represents the day.\r\n */\r\nfunction getDayOfWeekFromIcalDay(day: \"SU\" | \"MO\" | \"TU\" | \"WE\" | \"TH\" | \"FR\" | \"SA\"): DayOfWeek {\r\n switch (day) {\r\n case \"SU\":\r\n return DayOfWeek.Sunday;\r\n\r\n case \"MO\":\r\n return DayOfWeek.Monday;\r\n case \"TU\":\r\n return DayOfWeek.Tuesday;\r\n\r\n case \"WE\":\r\n return DayOfWeek.Wednesday;\r\n\r\n case \"TH\":\r\n return DayOfWeek.Thursday;\r\n\r\n case \"FR\":\r\n return DayOfWeek.Friday;\r\n\r\n case \"SA\":\r\n return DayOfWeek.Saturday;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the iCal abbreviation for the day of the week.\r\n *\r\n * @param day The day of the week to be converted to iCal format.\r\n *\r\n * @returns An iCal representation of the day of week.\r\n */\r\nfunction getiCalDay(day: DayOfWeek): \"SU\" | \"MO\" | \"TU\" | \"WE\" | \"TH\" | \"FR\" | \"SA\" {\r\n switch (day) {\r\n case DayOfWeek.Sunday:\r\n return \"SU\";\r\n\r\n case DayOfWeek.Monday:\r\n return \"MO\";\r\n\r\n case DayOfWeek.Tuesday:\r\n return \"TU\";\r\n\r\n case DayOfWeek.Wednesday:\r\n return \"WE\";\r\n\r\n case DayOfWeek.Thursday:\r\n return \"TH\";\r\n\r\n case DayOfWeek.Friday:\r\n return \"FR\";\r\n\r\n case DayOfWeek.Saturday:\r\n return \"SA\";\r\n }\r\n}\r\n\r\n/**\r\n * Normalizes line length so that none of the individual lines exceed the\r\n * maximum length of 75 charactes from the RFC.\r\n *\r\n * @param lines The array of lines to be normalized.\r\n *\r\n * @returns A new array with the lines normalized for length.\r\n */\r\nfunction normalizeLineLength(lines: string[]): string[] {\r\n const newLines: string[] = [...lines];\r\n\r\n for (let lineNumber = 0; lineNumber < newLines.length; lineNumber++) {\r\n // Spec does not allow lines longer than 75 characters.\r\n if (newLines[lineNumber].length > 75) {\r\n const currentLine = newLines[lineNumber].substring(0, 75);\r\n const newLine = \" \" + newLines[lineNumber].substring(75);\r\n\r\n newLines.splice(lineNumber, 1, currentLine, newLine);\r\n }\r\n }\r\n\r\n return newLines;\r\n}\r\n\r\n/**\r\n * Denormalizes line length so that any continuation lines are appending\r\n * to the previous line for proper parsing.\r\n *\r\n * @param lines The array of lines to be denormalized.\r\n *\r\n * @returns A new array with the lines denormalized.\r\n */\r\nfunction denormalizeLineLength(lines: string[]): string[] {\r\n const newLines: string[] = [...lines];\r\n\r\n for (let lineNumber = 1; lineNumber < newLines.length;) {\r\n if (newLines[lineNumber][0] === \" \") {\r\n newLines[lineNumber - 1] += newLines[lineNumber].substring(1);\r\n newLines.splice(lineNumber, 1);\r\n }\r\n else {\r\n lineNumber++;\r\n }\r\n }\r\n\r\n return newLines;\r\n}\r\n\r\n// #endregion\r\n\r\n/**\r\n * Helper utility to feed lines into ICS parsers.\r\n */\r\nclass LineFeeder {\r\n // #region Properties\r\n\r\n /**\r\n * The denormalzied lines that represent the ICS data.\r\n */\r\n private lines: string[];\r\n\r\n // #endregion\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new LineFeeder with the given content.\r\n *\r\n * @param content A string that represents raw ICS data.\r\n */\r\n constructor(content: string) {\r\n const lines = content.split(/\\r\\n|\\n|\\r/);\r\n\r\n this.lines = denormalizeLineLength(lines);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Peek at the next line to be read from the feeder.\r\n *\r\n * @returns The next line to be read or null if no more lines remain.\r\n */\r\n public peek(): string | null {\r\n if (this.lines.length === 0) {\r\n return null;\r\n }\r\n\r\n return this.lines[0];\r\n }\r\n\r\n /**\r\n * Pops the next line from the feeder, removing it.\r\n *\r\n * @returns The line that was removed from the feeder or null if no lines remain.\r\n */\r\n public pop(): string | null {\r\n if (this.lines.length === 0) {\r\n return null;\r\n }\r\n\r\n return this.lines.splice(0, 1)[0];\r\n }\r\n\r\n // #endregion\r\n}\r\n\r\n/**\r\n * Logic and structure for a rule that defines when an even recurs on\r\n * different dates.\r\n */\r\nexport class RecurrenceRule {\r\n // #region Properties\r\n\r\n /**\r\n * The frequency of this recurrence. Only Daily, Weekly and Monthly\r\n * are supported.\r\n */\r\n public frequency?: Frequency;\r\n\r\n /**\r\n * The date at which no more event dates will be generated. This is\r\n * an exclusive date, meaning if an event date lands on this date\r\n * then it will not be included in the list of dates.\r\n */\r\n public endDate?: RockDateTime;\r\n\r\n /**\r\n * The maximum number of dates, including the original date, that\r\n * should be generated.\r\n */\r\n public count?: number;\r\n\r\n /**\r\n * The interval between dates based on the frequency. If this value is\r\n * 2 and frequency is Weekly, then you are asking for \"every other week\".\r\n */\r\n public interval: number = 1;\r\n\r\n /**\r\n * The days of the month the event should recur on. Only a single value\r\n * is supported currently.\r\n */\r\n public byMonthDay: number[] = [];\r\n\r\n /**\r\n * The days of the week the event shoudl recur on.\r\n */\r\n public byDay: WeekdayNumber[] = [];\r\n\r\n // #endregion\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new recurrence rule that can be used to define or adjust the\r\n * recurrence pattern of an event.\r\n *\r\n * @param rule An existing RRULE string from an iCal file.\r\n *\r\n * @returns A new instance that can be used to adjust or define the rule.\r\n */\r\n public constructor(rule: string | undefined = undefined) {\r\n if (!rule) {\r\n return;\r\n }\r\n\r\n // Rule has a format like \"FREQ=DAILY;COUNT=5\" so we split by semicolon\r\n // first and then sub-split by equals character and then stuff everything\r\n // into this values object.\r\n const values: Record = {};\r\n\r\n for (const attr of rule.split(\";\")) {\r\n const attrParts = attr.split(\"=\");\r\n if (attrParts.length === 2) {\r\n values[attrParts[0]] = attrParts[1];\r\n }\r\n }\r\n\r\n // Make sure the values we have are valid.\r\n if (values[\"UNTIL\"] !== undefined && values[\"COUNT\"] !== undefined) {\r\n throw new Error(`Recurrence rule '${rule}' cannot specify both UNTIL and COUNT.`);\r\n }\r\n\r\n if (values[\"FREQ\"] !== \"DAILY\" && values[\"FREQ\"] !== \"WEEKLY\" && values[\"FREQ\"] !== \"MONTHLY\") {\r\n throw new Error(`Invalid frequence for recurrence rule '${rule}'.`);\r\n }\r\n\r\n this.frequency = values[\"FREQ\"];\r\n\r\n if (values[\"UNTIL\"]?.length === 8) {\r\n this.endDate = getDateFromString(values[\"UNTIL\"]) ?? undefined;\r\n }\r\n else if (values[\"UNTIL\"]?.length >= 15) {\r\n this.endDate = getDateTimeFromString(values[\"UNTIL\"]) ?? undefined;\r\n }\r\n\r\n if (values[\"COUNT\"] !== undefined) {\r\n this.count = toNumberOrNull(values[\"COUNT\"]) ?? undefined;\r\n }\r\n\r\n if (values[\"INTERVAL\"] !== undefined) {\r\n this.interval = toNumberOrNull(values[\"INTERVAL\"]) ?? 1;\r\n }\r\n\r\n if (values[\"BYMONTHDAY\"] !== undefined && values[\"BYMONTHDAY\"].length > 0) {\r\n this.byMonthDay = [];\r\n\r\n for (const v of values[\"BYMONTHDAY\"].split(\",\")) {\r\n const num = toNumberOrNull(v);\r\n if (num !== null) {\r\n this.byMonthDay.push(num);\r\n }\r\n }\r\n }\r\n\r\n if (values[\"BYDAY\"] !== undefined && values[\"BYDAY\"].length > 0) {\r\n this.byDay = [];\r\n\r\n for (const v of values[\"BYDAY\"].split(\",\")) {\r\n if (v.length < 2) {\r\n continue;\r\n }\r\n\r\n const num = v.length > 2 ? toNumberOrNull(v.substring(0, v.length - 2)) : 1;\r\n const day = v.substring(v.length - 2);\r\n\r\n if (num === null) {\r\n continue;\r\n }\r\n\r\n if (day === \"SU\" || day === \"MO\" || day === \"TU\" || day == \"WE\" || day == \"TH\" || day == \"FR\" || day == \"SA\") {\r\n this.byDay.push({\r\n value: num,\r\n day: getDayOfWeekFromIcalDay(day)\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Builds and returns the RRULE value for an iCal file export.\r\n *\r\n * @returns A RRULE value that represents the recurrence rule.\r\n */\r\n public build(): string {\r\n const attributes: string[] = [];\r\n\r\n attributes.push(`FREQ=${this.frequency}`);\r\n\r\n if (this.count !== undefined) {\r\n attributes.push(`COUNT=${this.count}`);\r\n }\r\n else if (this.endDate) {\r\n attributes.push(`UNTIL=${getDateTimeString(this.endDate)}`);\r\n }\r\n\r\n if (this.interval > 1) {\r\n attributes.push(`INTERVAL=${this.interval}`);\r\n }\r\n\r\n if (this.byMonthDay.length > 0) {\r\n const monthDayValues = this.byMonthDay.map(md => md.toString()).join(\",\");\r\n attributes.push(`BYMONTHDAY=${monthDayValues}`);\r\n }\r\n\r\n if (this.frequency === \"MONTHLY\" && this.byDay.length > 0) {\r\n const dayValues = this.byDay.map(d => `${d.value}${getiCalDay(d.day)}`);\r\n attributes.push(`BYDAY=${dayValues}`);\r\n }\r\n else if (this.byDay.length > 0) {\r\n const dayValues = this.byDay.map(d => d.value !== 1 ? `${d.value}${getiCalDay(d.day)}` : getiCalDay(d.day));\r\n attributes.push(`BYDAY=${dayValues}`);\r\n }\r\n\r\n return attributes.join(\";\");\r\n }\r\n\r\n /**\r\n * Gets all the dates within the range that match the recurrence rule. A\r\n * maximum of 100,000 dates will be returned by this function.\r\n *\r\n * @param eventStartDateTime The start date and time of the primary event this rule is for.\r\n * @param startDateTime The inclusive starting date and time that events should be returned for.\r\n * @param endDateTime The exclusive ending date and time that events should be returned for.\r\n *\r\n * @returns An array of date objects that represent the additional dates and times for the event.\r\n */\r\n public getDates(eventStartDateTime: RockDateTime, startDateTime: RockDateTime, endDateTime: RockDateTime): RockDateTime[] {\r\n const dates: RockDateTime[] = [];\r\n let rockDate = eventStartDateTime;\r\n let dateCount = 0;\r\n\r\n if (!rockDate) {\r\n return [];\r\n }\r\n\r\n if (this.endDate && this.endDate < endDateTime) {\r\n endDateTime = this.endDate;\r\n }\r\n\r\n while (rockDate < endDateTime && dateCount < 100_000) {\r\n if (this.count && dateCount >= this.count) {\r\n break;\r\n }\r\n\r\n dateCount++;\r\n\r\n if (rockDate >= startDateTime) {\r\n dates.push(rockDate);\r\n }\r\n\r\n const nextDate = this.nextDateAfter(rockDate);\r\n\r\n if (nextDate === null) {\r\n break;\r\n }\r\n else {\r\n rockDate = nextDate;\r\n }\r\n }\r\n\r\n return dates;\r\n }\r\n\r\n /**\r\n * Gets the next valid date after the specified date based on our recurrence\r\n * rules.\r\n *\r\n * @param rockDate The reference date that should be used when calculation the next date.\r\n *\r\n * @returns The next date after the reference date or null if one cannot be determined.\r\n */\r\n private nextDateAfter(rockDate: RockDateTime): RockDateTime | null {\r\n if (this.frequency === \"DAILY\") {\r\n return rockDate.addDays(this.interval);\r\n }\r\n else if (this.frequency === \"WEEKLY\" && this.byDay.length > 0) {\r\n let nextDate = rockDate;\r\n\r\n if (nextDate.dayOfWeek === DayOfWeek.Saturday) {\r\n // On saturday process any skip intervals to move past the next n weeks.\r\n nextDate = nextDate.addDays(1 + ((this.interval - 1) * 7));\r\n }\r\n else {\r\n nextDate = nextDate.addDays(1);\r\n }\r\n\r\n while (!dateMatchesDays(nextDate, this.byDay.map(d => d.day))) {\r\n if (nextDate.dayOfWeek === DayOfWeek.Saturday) {\r\n // On saturday process any skip intervals to move past the next n weeks.\r\n nextDate = nextDate.addDays(1 + ((this.interval - 1) * 7));\r\n }\r\n else {\r\n nextDate = nextDate.addDays(1);\r\n }\r\n }\r\n\r\n return nextDate;\r\n }\r\n else if (this.frequency === \"MONTHLY\") {\r\n if (this.byMonthDay.length > 0) {\r\n let nextDate = rockDate.addDays(-(rockDate.day - 1));\r\n\r\n if (rockDate.day >= this.byMonthDay[0]) {\r\n nextDate = nextDate.addMonths(this.interval);\r\n }\r\n\r\n let lastDayOfMonth = nextDate.addMonths(1).addDays(-1).day;\r\n let loopCount = 0;\r\n\r\n // Skip any months that don't have this day number.\r\n while (lastDayOfMonth < this.byMonthDay[0]) {\r\n nextDate = nextDate.addMonths(this.interval);\r\n\r\n lastDayOfMonth = nextDate.addMonths(1).addDays(-1).day;\r\n\r\n // Fail-safe check so we don't get stuck looping forever\r\n // if the rule is one that can't be determined. Such as a\r\n // rule for the 30th day of the month every 12 months\r\n // starting in February.\r\n if (loopCount++ >= 100) {\r\n return null;\r\n }\r\n }\r\n\r\n nextDate = nextDate.addDays(this.byMonthDay[0] - 1);\r\n\r\n return nextDate;\r\n }\r\n else if (this.byDay.length > 0) {\r\n const dayOfWeek = this.byDay[0].day;\r\n const offsets = this.byDay.map(d => d.value);\r\n\r\n let nextDate = rockDate.addDays(1);\r\n\r\n while (!dateMatchesOffsetDayOfWeeks(nextDate, dayOfWeek, offsets)) {\r\n nextDate = nextDate.addDays(1);\r\n }\r\n\r\n return nextDate;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n // #endregion\r\n}\r\n\r\n/**\r\n * A single event inside a calendar.\r\n */\r\nexport class Event {\r\n // #region Properties\r\n\r\n /**\r\n * The unique identifier for this schedule used in the scheduled event.\r\n */\r\n public uid?: string;\r\n\r\n /**\r\n * The first date and time that the event occurs on. This must be provided\r\n * before the schedule can be built.\r\n */\r\n public startDateTime?: RockDateTime;\r\n\r\n /**\r\n * The end date and time for the event. This must be provided before\r\n * this schedule can be built.\r\n */\r\n public endDateTime?: RockDateTime;\r\n\r\n /**\r\n * An array of dates to be excluded from the recurrence rules.\r\n */\r\n public excludedDates: RockDateTime[] = [];\r\n\r\n /**\r\n * An array of specific dates that this schedule will recur on. This is\r\n * only valid if recurrenceRules contains no rules.\r\n */\r\n public recurrenceDates: RockDateTime[] = [];\r\n\r\n /**\r\n * The rules that define when this schedule recurs on for additional dates.\r\n * Only the first rule is currently supported.\r\n */\r\n public recurrenceRules: RecurrenceRule[] = [];\r\n\r\n // #endregion\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new internet calendar event.\r\n *\r\n * @param icsContent The content from the ICS file that represents this single event.\r\n *\r\n * @returns A new Event instance.\r\n */\r\n public constructor(icsContent: string | LineFeeder | undefined = undefined) {\r\n if (icsContent === undefined) {\r\n this.uid = newGuid();\r\n return;\r\n }\r\n\r\n let feeder: LineFeeder;\r\n\r\n if (typeof icsContent === \"string\") {\r\n feeder = new LineFeeder(icsContent);\r\n }\r\n else {\r\n feeder = icsContent;\r\n }\r\n\r\n this.parse(feeder);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Build the event as a list of individual lines that make up the event in\r\n * the ICS file format.\r\n *\r\n * @returns An array of lines to be inserted into an ICS file.\r\n */\r\n public buildLines(): string[] {\r\n if (!this.startDateTime || !this.endDateTime) {\r\n return [];\r\n }\r\n\r\n const lines: string[] = [];\r\n\r\n lines.push(\"BEGIN:VEVENT\");\r\n lines.push(`DTEND:${getDateTimeString(this.endDateTime)}`);\r\n lines.push(`DTSTAMP:${getDateTimeString(RockDateTime.now())}`);\r\n lines.push(`DTSTART:${getDateTimeString(this.startDateTime)}`);\r\n\r\n if (this.excludedDates.length > 0) {\r\n lines.push(`EXDATE:${this.excludedDates.map(d => getDateString(d) + \"/P1D\").join(\",\")}`);\r\n }\r\n\r\n if (this.recurrenceDates.length > 0) {\r\n const recurrenceDates: string[] = [];\r\n for (const date of this.recurrenceDates) {\r\n const rDate = RockDateTime.fromParts(date.year, date.month, date.day, this.startDateTime.hour, this.startDateTime.minute, this.startDateTime.second);\r\n if (rDate) {\r\n recurrenceDates.push(getDateTimeString(rDate));\r\n }\r\n }\r\n\r\n lines.push(`RDATE:${recurrenceDates.join(\",\")}`);\r\n }\r\n else if (this.recurrenceRules.length > 0) {\r\n for (const rrule of this.recurrenceRules) {\r\n lines.push(`RRULE:${rrule.build()}`);\r\n }\r\n }\r\n\r\n lines.push(\"SEQUENCE:0\");\r\n lines.push(`UID:${this.uid}`);\r\n lines.push(\"END:VEVENT\");\r\n\r\n return lines;\r\n }\r\n\r\n /**\r\n * Builds the event into a string that conforms to ICS format.\r\n *\r\n * @returns An ICS formatted string that represents the event data.\r\n */\r\n public build(): string | null {\r\n const lines = this.buildLines();\r\n\r\n if (lines.length === 0) {\r\n return null;\r\n }\r\n\r\n return normalizeLineLength(lines).join(\"\\r\\n\");\r\n }\r\n\r\n /**\r\n * Parse data from an existing event and store it on this instance.\r\n *\r\n * @param feeder The feeder that will provide the line data for parsing.\r\n */\r\n private parse(feeder: LineFeeder): void {\r\n let duration: string | null = null;\r\n let line: string | null;\r\n\r\n // Verify this is an event.\r\n if (feeder.peek() !== \"BEGIN:VEVENT\") {\r\n throw new Error(\"Invalid event.\");\r\n }\r\n\r\n feeder.pop();\r\n\r\n // Parse the line until we run out of lines or see an END line.\r\n while ((line = feeder.pop()) !== null) {\r\n if (line === \"END:VEVENT\") {\r\n break;\r\n }\r\n\r\n const splitAt = line.indexOf(\":\");\r\n if (splitAt < 0) {\r\n continue;\r\n }\r\n\r\n let key = line.substring(0, splitAt);\r\n const value = line.substring(splitAt + 1);\r\n\r\n const keyAttributes: Record = {};\r\n const keySegments = key.split(\";\");\r\n if (keySegments.length > 1) {\r\n key = keySegments[0];\r\n keySegments.splice(0, 1);\r\n\r\n for (const attr of keySegments) {\r\n const attrSegments = attr.split(\"=\");\r\n if (attr.length === 2) {\r\n keyAttributes[attrSegments[0]] = attrSegments[1];\r\n }\r\n }\r\n }\r\n\r\n if (key === \"DTSTART\") {\r\n this.startDateTime = getDateTimeFromString(value) ?? undefined;\r\n }\r\n else if (key === \"DTEND\") {\r\n this.endDateTime = getDateTimeFromString(value) ?? undefined;\r\n }\r\n else if (key === \"RRULE\") {\r\n this.recurrenceRules.push(new RecurrenceRule(value));\r\n }\r\n else if (key === \"RDATE\") {\r\n this.recurrenceDates = getRecurrenceDates(keyAttributes, value);\r\n }\r\n else if (key === \"UID\") {\r\n this.uid = value;\r\n }\r\n else if (key === \"DURATION\") {\r\n duration = value;\r\n }\r\n else if (key === \"EXDATE\") {\r\n const dateValues = value.split(\",\");\r\n for (const dateValue of dateValues) {\r\n const dates = getDatesFromRangeOrPeriod(dateValue);\r\n this.excludedDates.push(...dates);\r\n }\r\n }\r\n }\r\n\r\n if (duration !== null) {\r\n // TODO: Calculate number of seconds and add to startDate.\r\n }\r\n }\r\n\r\n /**\r\n * Determines if the date is listed in one of the excluded dates. This\r\n * currently only checks the excludedDates but in the future might also\r\n * check the excluded rules.\r\n *\r\n * @param rockDate The date to be checked to see if it is excluded.\r\n *\r\n * @returns True if the date is excluded; otherwise false.\r\n */\r\n private isDateExcluded(rockDate: RockDateTime): boolean {\r\n const rockDateOnly = rockDate.date;\r\n\r\n for (const excludedDate of this.excludedDates) {\r\n if (excludedDate.date.isEqualTo(rockDateOnly)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Get all the dates for this event that fall within the specified date range.\r\n *\r\n * @param startDateTime The inclusive starting date to use when filtering event dates.\r\n * @param endDateTime The exclusive endign date to use when filtering event dates.\r\n *\r\n * @returns An array of dates that fall between startDateTime and endDateTime.\r\n */\r\n public getDates(startDateTime: RockDateTime, endDateTime: RockDateTime): RockDateTime[] {\r\n if (!this.startDateTime) {\r\n return [];\r\n }\r\n\r\n // If the schedule has a startDateTime that is later than the requested\r\n // startDateTime then use ours instead.\r\n if (this.startDateTime > startDateTime) {\r\n startDateTime = this.startDateTime;\r\n }\r\n\r\n if (this.recurrenceDates.length > 0) {\r\n const dates: RockDateTime[] = [];\r\n const recurrenceDates: RockDateTime[] = [this.startDateTime, ...this.recurrenceDates];\r\n\r\n for (const date of recurrenceDates) {\r\n if (date >= startDateTime && date < endDateTime) {\r\n dates.push(date);\r\n }\r\n }\r\n\r\n return dates;\r\n }\r\n else if (this.recurrenceRules.length > 0) {\r\n const rrule = this.recurrenceRules[0];\r\n\r\n return rrule.getDates(this.startDateTime, startDateTime, endDateTime)\r\n .filter(d => !this.isDateExcluded(d));\r\n }\r\n else {\r\n if (this.startDateTime >= startDateTime && this.startDateTime < endDateTime) {\r\n return [this.startDateTime];\r\n }\r\n\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Get the friendly text string that represents this event. This will be a\r\n * plain text string with no formatting applied.\r\n *\r\n * @returns A string that represents the event in a human friendly manner.\r\n */\r\n public toFriendlyText(): string {\r\n return this.toFriendlyString(false);\r\n }\r\n\r\n /**\r\n * Get the friendly HTML string that represents this event. This will be\r\n * formatted with HTML to make the information easier to read.\r\n *\r\n * @returns A string that represents the event in a human friendly manner.\r\n */\r\n public toFriendlyHtml(): string {\r\n return this.toFriendlyString(true);\r\n }\r\n\r\n /**\r\n * Get the friendly string that can be easily understood by a human.\r\n *\r\n * @param html If true then the string can contain HTML content to make things easier to read.\r\n *\r\n * @returns A string that represents the event in a human friendly manner.\r\n */\r\n private toFriendlyString(html: boolean): string {\r\n if (!this.startDateTime) {\r\n return \"\";\r\n }\r\n\r\n const startTimeText = this.startDateTime.toLocaleString({ hour: \"numeric\", minute: \"2-digit\", hour12: true });\r\n\r\n if (this.recurrenceRules.length > 0) {\r\n const rrule = this.recurrenceRules[0];\r\n\r\n if (rrule.frequency === \"DAILY\") {\r\n let result = \"Daily\";\r\n\r\n if (rrule.interval > 1) {\r\n result += ` every ${rrule.interval} ${pluralConditional(rrule.interval, \"day\", \"days\")}`;\r\n }\r\n\r\n result += ` at ${startTimeText}`;\r\n\r\n return result;\r\n }\r\n else if (rrule.frequency === \"WEEKLY\") {\r\n if (rrule.byDay.length === 0) {\r\n return \"No Scheduled Days\";\r\n }\r\n\r\n let result = rrule.byDay.map(d => getWeekdayName(d.day) + \"s\").join(\",\");\r\n\r\n if (rrule.interval > 1) {\r\n result = `Every ${rrule.interval} weeks: ${result}`;\r\n }\r\n else {\r\n result = `Weekly: ${result}`;\r\n }\r\n\r\n return `${result} at ${startTimeText}`;\r\n }\r\n else if (rrule.frequency === \"MONTHLY\") {\r\n if (rrule.byMonthDay.length > 0) {\r\n let result = `Day ${rrule.byMonthDay[0]} of every `;\r\n\r\n if (rrule.interval > 1) {\r\n result += `${rrule.interval} months`;\r\n }\r\n else {\r\n result += \"month\";\r\n }\r\n\r\n return `${result} at ${startTimeText}`;\r\n }\r\n else if (rrule.byDay.length > 0) {\r\n const byDay = rrule.byDay[0];\r\n const offsetNames = nthNamesAbbreviated.filter(n => rrule.byDay.some(d => d.value == n[0])).map(n => n[1]);\r\n let result = \"\";\r\n\r\n if (offsetNames.length > 0) {\r\n let nameText: string;\r\n\r\n if (offsetNames.length > 2) {\r\n nameText = `${offsetNames.slice(0, offsetNames.length - 1).join(\", \")} and ${offsetNames[offsetNames.length - 1]}`;\r\n }\r\n else {\r\n nameText = offsetNames.join(\" and \");\r\n }\r\n result = `The ${nameText} ${getWeekdayName(byDay.day)} of every month`;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n\r\n return `${result} at ${startTimeText}`;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n else {\r\n const dates: RockDateTime[] = [this.startDateTime, ...this.recurrenceDates];\r\n\r\n if (dates.length === 1) {\r\n return `Once at ${this.startDateTime.toASPString(\"g\")}`;\r\n }\r\n else if (!html || dates.length > 99) {\r\n const firstDate = dates[0];\r\n const lastDate = dates[dates.length - 1];\r\n\r\n if (firstDate && lastDate) {\r\n return `Multiple dates between ${firstDate.toASPString(\"g\")} and ${lastDate.toASPString(\"g\")}`;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n else if (dates.length > 1) {\r\n let listHtml = `
    `;\r\n\r\n for (const date of dates) {\r\n listHtml += `
  • ${date.toASPString(\"g\")}
  • `;\r\n }\r\n\r\n listHtml += \"\";\r\n\r\n return listHtml;\r\n }\r\n else {\r\n return \"No Schedule\";\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n}\r\n\r\n/**\r\n * A recurring schedule allows schedules to be built and customized from the iCal\r\n * format used in ics files.\r\n */\r\nexport class Calendar {\r\n // #region Properties\r\n\r\n /**\r\n * The events that exist for this calendar.\r\n */\r\n public events: Event[] = [];\r\n\r\n // #endregion\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new Calendar instance.\r\n *\r\n * @param icsContent The content from an ICS file to initialize the calendar with.\r\n *\r\n * @returns A new Calendar instance.\r\n */\r\n public constructor(icsContent: string | undefined = undefined) {\r\n if (icsContent === undefined) {\r\n return;\r\n }\r\n\r\n const feeder = new LineFeeder(icsContent);\r\n\r\n this.parse(feeder);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Builds the calendar into a string that conforms to ICS format.\r\n *\r\n * @returns An ICS formatted string that represents the calendar data.\r\n */\r\n public build(): string | null {\r\n const lines: string[] = [];\r\n\r\n lines.push(\"BEGIN:VCALENDAR\");\r\n lines.push(\"PRODID:-//github.com/SparkDevNetwork/Rock//NONSGML Rock//EN\");\r\n lines.push(\"VERSION:2.0\");\r\n\r\n for (const event of this.events) {\r\n lines.push(...event.buildLines());\r\n }\r\n\r\n lines.push(\"END:VCALENDAR\");\r\n\r\n return denormalizeLineLength(lines).join(\"\\r\\n\");\r\n }\r\n\r\n /**\r\n * Parses the ICS data from a line feeder and constructs the calendar\r\n * from that data.\r\n *\r\n * @param feeder The feeder that provides the individual lines.\r\n */\r\n private parse(feeder: LineFeeder): void {\r\n let line: string | null;\r\n\r\n // Parse the line data.\r\n while ((line = feeder.peek()) !== null) {\r\n if (line === \"BEGIN:VEVENT\") {\r\n const event = new Event(feeder);\r\n\r\n this.events.push(event);\r\n }\r\n else {\r\n feeder.pop();\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Liquid } from \"@Obsidian/Libs/liquidjs\";\r\n\r\nconst engine = new Liquid({\r\n cache: true\r\n});\r\n\r\nconst hasLavaCommandFieldsRegex: RegExp = /\\{%.+%\\}/;\r\nconst hasLavaShortcodeFieldsRegex: RegExp = /\\{\\[.+\\]\\}/;\r\n\r\nexport function resolveMergeFields(template: string, mergeFields: Record): string {\r\n const tpl = engine.parse(template);\r\n\r\n return engine.renderSync(tpl, mergeFields);\r\n}\r\n\r\n/** Determines whether the string potentially has lava command {% %} fields in it. */\r\nexport function hasLavaCommandFields(template: string): boolean {\r\n return hasLavaCommandFieldsRegex.test(template);\r\n}\r\n\r\n/** Determines whether the string potentially has lava shortcode {[ ]} fields in it. */\r\nexport function hasLavaShortcodeFields(template: string): boolean {\r\n return hasLavaShortcodeFieldsRegex.test(template);\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n\r\nexport function asListItemBagOrNull(bagJson: string): ListItemBag | null {\r\n try {\r\n const val = JSON.parse(bagJson);\r\n\r\n if (\"value\" in val || \"text\" in val) {\r\n return val;\r\n }\r\n\r\n return null;\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { MergeFieldPickerFormatSelectedValueOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeFieldPickerFormatSelectedValueOptionsBag\";\r\nimport { useHttp } from \"./http\";\r\n\r\n/**\r\n * Take a given mergeFieldPicker value and format it for Lava\r\n *\r\n * @param value The merge field to be formatted\r\n *\r\n * @returns The formatted string in a Promise\r\n */\r\nexport async function formatValue(value: string): Promise {\r\n const http = useHttp();\r\n\r\n const options: MergeFieldPickerFormatSelectedValueOptionsBag = {\r\n selectedValue: value\r\n };\r\n\r\n const response = await http.post(\"/api/v2/Controls/MergeFieldPickerFormatSelectedValue\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.error(\"Error\", response.errorMessage || `Error formatting '${value}'.`);\r\n return \"\";\r\n }\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n\r\nexport function fromEntries(entries: Iterable<[PropertyKey, string]>): Record {\r\n const res = {};\r\n for (const entry of entries) {\r\n res[entry[0]] = entry[1];\r\n }\r\n return res;\r\n}\r\n\r\n/**\r\n * Clone an object/array. Only works with values that can be converted to JSON, which means no\r\n * functions, self-/circular references, etc.\r\n */\r\nexport function clone(obj:T) : T {\r\n return JSON.parse(JSON.stringify(obj));\r\n}\r\n\r\n/**\r\n * Take an object and convert it to a list of ListItemBag objects.\r\n * Each property is a ListItemBag where the key becomes the text property\r\n * and the value becomes the value property.\r\n *\r\n * @param obj The object to convert. Each property value should be able to be converted to a string.\r\n *\r\n * @return A list of ListItemBags.\r\n */\r\nexport function toListItemBagList (obj: Record): ListItemBag[] {\r\n return Object.entries(obj).map(([key, value]) => {\r\n return {\r\n text: key,\r\n value: `${value}`,\r\n } as ListItemBag;\r\n });\r\n}\r\n\r\n/**\r\n * Gets the value at the specified path within the object.\r\n *\r\n * @example\r\n * const object = {\r\n * person: {\r\n * name: \"Ted Decker\"\r\n * }\r\n * };\r\n *\r\n * const value = getValueFromPath(object, \"person.name\"); // returns \"Ted Decker\"\r\n *\r\n * @param object The object containing the desired value.\r\n * @param path The dot-separated path name to the desired value.\r\n * @returns The value at the specified path within the object, or `undefined`\r\n * if no such path exists.\r\n */\r\nexport function getValueFromPath(object: Record, path: string): unknown {\r\n if (!object || !path) {\r\n return;\r\n }\r\n\r\n const pathNames = path.split(\".\");\r\n\r\n for (let i = 0; i < pathNames.length; i++) {\r\n const pathName = pathNames[i].trim();\r\n\r\n // If the object doesn't have the specified path name as its own\r\n // property, return `undefined`.\r\n if (!pathName || !Object.prototype.hasOwnProperty.call(object, pathName)) {\r\n return;\r\n }\r\n\r\n const value = object[pathName];\r\n\r\n // If this is the last path name specified, return the current value.\r\n if (i === pathNames.length - 1) {\r\n return value;\r\n }\r\n\r\n // If the current value is not an object, but there are still\r\n // more path names to traverse, return `undefined`.\r\n if (typeof value !== \"object\") {\r\n return;\r\n }\r\n\r\n // Reassign `object` to the current value. This type assertion might\r\n // be incorrect, but will be caught on the next iteration if so,\r\n // in which case `undefined` will be returned.\r\n object = value as Record;\r\n }\r\n\r\n // If we somehow got here, return `undefined`.\r\n return;\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport Cache from \"./cache\";\r\nimport { useHttp } from \"./http\";\r\nimport { PhoneNumberBoxGetConfigurationResultsBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberBoxGetConfigurationResultsBag\";\r\nimport { PhoneNumberCountryCodeRulesConfigurationBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberCountryCodeRulesConfigurationBag\";\r\nimport { PhoneNumberBoxGetConfigurationOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberBoxGetConfigurationOptionsBag\";\r\n\r\n/**\r\n * Fetch the configuration for phone numbers and their possible formats for different countries\r\n */\r\nasync function fetchPhoneNumberConfiguration(): Promise {\r\n const http = useHttp();\r\n const result = await http.post(\"/api/v2/Controls/PhoneNumberBoxGetConfiguration\", undefined, null);\r\n\r\n if (result.isSuccess && result.data) {\r\n return result.data;\r\n }\r\n\r\n throw new Error(result.errorMessage ?? \"Error fetching phone number configuration\");\r\n}\r\n\r\n/**\r\n * Fetch the configuration for phone numbers, SMS option, and possible phone number formats for different countries\r\n */\r\nasync function fetchPhoneNumberAndSmsConfiguration(): Promise {\r\n const http = useHttp();\r\n const options: PhoneNumberBoxGetConfigurationOptionsBag = {\r\n showSmsOptIn: true\r\n };\r\n const result = await http.post(\"/api/v2/Controls/PhoneNumberBoxGetConfiguration\", undefined, options);\r\n\r\n if (result.isSuccess && result.data) {\r\n return result.data;\r\n }\r\n\r\n throw new Error(result.errorMessage ?? \"Error fetching phone number configuration\");\r\n}\r\n\r\n/**\r\n * Fetch the configuration for phone numbers and their possible formats for different countries.\r\n * Cacheable version of fetchPhoneNumberConfiguration cacheable\r\n */\r\nexport const getPhoneNumberConfiguration = Cache.cachePromiseFactory(\"phoneNumberConfiguration\", fetchPhoneNumberConfiguration);\r\n\r\nexport const getPhoneNumberAndSmsConfiguration = Cache.cachePromiseFactory(\"phoneNumberAndSmsConfiguration\", fetchPhoneNumberAndSmsConfiguration);\r\n\r\nconst defaultRulesConfig = [\r\n {\r\n \"match\": \"^(\\\\d{3})(\\\\d{4})$\",\r\n \"format\": \"$1-$2\"\r\n },\r\n {\r\n \"match\": \"^(\\\\d{3})(\\\\d{3})(\\\\d{4})$\",\r\n \"format\": \"($1) $2-$3\"\r\n },\r\n {\r\n \"match\": \"^1(\\\\d{3})(\\\\d{3})(\\\\d{4})$\",\r\n \"format\": \"($1) $2-$3\"\r\n }\r\n];\r\n\r\n/**\r\n * Format a phone number according to a given configuration\r\n *\r\n * e.g. from the default configuration:\r\n * 3214567 => 321-4567\r\n * 3214567890 => (321) 456-7890\r\n */\r\nexport function formatPhoneNumber(value: string, rules: PhoneNumberCountryCodeRulesConfigurationBag[] = defaultRulesConfig): string {\r\n value = stripPhoneNumber(value);\r\n\r\n if (!value || rules.length == 0) {\r\n return value;\r\n }\r\n\r\n for (const rule of rules) {\r\n const regex = new RegExp(rule.match ?? \"\");\r\n\r\n if (regex.test(value)) {\r\n return value.replace(regex, rule.format ?? \"\") || value;\r\n }\r\n }\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Strips special characters from the phone number.\r\n * (321) 456-7890 => 3214567890\r\n * @param str\r\n */\r\nexport function stripPhoneNumber(str: string): string {\r\n if (!str) {\r\n return \"\";\r\n }\r\n\r\n return str.replace(/\\D/g, \"\");\r\n}\r\n\r\nexport default {\r\n getPhoneNumberConfiguration,\r\n formatPhoneNumber,\r\n stripPhoneNumber\r\n};\r\n\r\n/* eslint-disable */\r\n// @ts-ignore\r\nwindow.formatPhoneNumber = formatPhoneNumber;","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n\r\n// NOTE: Do not make this public yet. This is essentially temporary and\r\n// will likely move to a different place and be merged with the tooltip\r\n// concept code as well.\r\ntype PopoverOptions = {\r\n /** Allow HTML content in the popover. */\r\n html?: boolean;\r\n\r\n /** Enables santization of HTML content. */\r\n sanitize?: boolean;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndeclare const $: any;\r\n\r\n/**\r\n * Configure a popover for the specified node or nodes to show on hover. This\r\n * currently uses Bootstrap popovers but may be changed to use a different\r\n * method later.\r\n * \r\n * @param node The node or nodes to have popovers configured on.\r\n * @param options The options that describe how the popovers should behave.\r\n */\r\nexport function popover(node: Element | Element[], options?: PopoverOptions): void {\r\n // If we got an array of elements then activate each one.\r\n if (Array.isArray(node)) {\r\n for (const n of node) {\r\n popover(n, options);\r\n }\r\n\r\n return;\r\n }\r\n\r\n $(node).popover({\r\n html: options?.html,\r\n sanitize: options?.sanitize ?? true\r\n });\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Returns a promise that completes after the specified number of milliseconds\r\n * have ellapsed.\r\n * \r\n * @param ms The number of milliseconds to wait.\r\n * \r\n * @returns A promise that completes after the interval has ellapsed.\r\n */\r\nexport function sleep(ms: number): Promise {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n\r\n/**\r\n * Checks if the value is a promise to return a value. This is used to check\r\n * if a function that could have returned either a value or a promise for a\r\n * value returned a promise.\r\n * \r\n * @param obj The object to be tested if it is a promise.\r\n *\r\n * @returns True if the object is a promise.\r\n */\r\nexport function isPromise(obj: PromiseLike | T): obj is PromiseLike {\r\n return !!obj && (typeof obj === \"object\" || typeof obj === \"function\") && typeof (obj as Record).then === \"function\";\r\n}\r\n\r\n/**\r\n * A class that provides a way to defer execution via await until some\r\n * external trigger happens.\r\n */\r\nexport class PromiseCompletionSource {\r\n private internalPromise: Promise;\r\n\r\n private internalResolve: (T) => void = () => { /* Intentionally blank. */ };\r\n\r\n private internalReject: (reason?: unknown) => void = () => { /* Intentionally blank. */ };\r\n\r\n constructor() {\r\n this.internalPromise = new Promise((resolve, reject) => {\r\n this.internalResolve = resolve;\r\n this.internalReject = reject;\r\n });\r\n }\r\n\r\n /** The promise that can be awaited. */\r\n public get promise(): Promise {\r\n return this.internalPromise;\r\n }\r\n\r\n /**\r\n * Resolves the promise with the given value.\r\n * \r\n * @param value The value to be returned by the await call.\r\n */\r\n public resolve(value: T): void {\r\n this.internalResolve(value);\r\n }\r\n\r\n /**\r\n * Rejects the promise and throws the reason as an error.\r\n * \r\n * @param reason The reason to be thrown by the await call.\r\n */\r\n public reject(reason?: unknown): void {\r\n this.internalReject(reason);\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { loadJavaScriptAsync } from \"./page\";\r\n\r\n// Disable certain checks as they are needed to interface with existing JS file.\r\n/* eslint-disable @typescript-eslint/ban-types */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\n/** A generic set a server functions with no type checking. */\r\nexport type GenericServerFunctions = {\r\n [name: string]: (...args: unknown[]) => unknown;\r\n};\r\n\r\n/** A set of specific server functions that conform to an interface. */\r\nexport type ServerFunctions = {\r\n [K in keyof T]: T[K] extends Function ? T[K] : never;\r\n};\r\n\r\n/**\r\n * An object that allows RealTime communication between the browser and the Rock\r\n * server over a specific topic.\r\n */\r\nexport interface ITopic = GenericServerFunctions> {\r\n /**\r\n * Allows messages to be sent to the server. Any property access is treated\r\n * like a message function whose property name is the message name.\r\n */\r\n server: TServer;\r\n\r\n /**\r\n * Gets the connection identifier for this topic. This will be the same for\r\n * all topics, but that should not be relied on staying that way in the future.\r\n */\r\n get connectionId(): string | null;\r\n\r\n /**\r\n * Gets a value that indicates if the topic is currently reconnecting.\r\n */\r\n get isReconnecting(): boolean;\r\n\r\n /**\r\n * Gets a value that indicates if the topic is disconnected and will no\r\n * longer try to connect to the server.\r\n */\r\n get isDisconnected(): boolean;\r\n\r\n /**\r\n * Registers a handler to be called when a message with the given name\r\n * is received.\r\n *\r\n * @param messageName The message name that will trigger the handler.\r\n * @param handler The handler to be called when a message is received.\r\n */\r\n on(messageName: string, handler: ((...args: any[]) => void)): void;\r\n\r\n /**\r\n * Registers a handler to be called when any message is received.\r\n *\r\n * @param handler The handler to be called when a message is received.\r\n */\r\n onMessage(handler: ((messageName: string, args: unknown[]) => void)): void;\r\n\r\n /**\r\n * Registers a callback to be called when the connection has been\r\n * temporarily lost. An automatic reconnection is in progress. The topic\r\n * is now in a state where it can not send any messages.\r\n *\r\n * @param callback The callback to be called.\r\n */\r\n onReconnecting(callback: (() => void)): void;\r\n\r\n /**\r\n * Registers a callback to be called when the connection has been\r\n * reconnected. The topic can now send messages again.\r\n *\r\n * @param callback The callback to be called.\r\n */\r\n onReconnected(callback: (() => void)): void;\r\n\r\n /**\r\n * Registers a callback to be called when the connection has been lost\r\n * and will no longer try to reconnect.\r\n *\r\n * @param callback The callback to be called.\r\n */\r\n onDisconnected(callback: (() => void)): void;\r\n}\r\n\r\ninterface IRockRealTimeStatic {\r\n getTopic>(identifier: string): Promise>;\r\n}\r\n\r\nlet libraryObject: IRockRealTimeStatic | null = null;\r\nlet libraryPromise: Promise | null = null;\r\n\r\n/**\r\n * Gets the real time object from window.Rock.RealTime. If it is not available\r\n * then an exception will be thrown.\r\n *\r\n * @returns An instance of IRockRealTimeStatic.\r\n */\r\nasync function getRealTimeObject(): Promise {\r\n if (libraryObject) {\r\n return libraryObject;\r\n }\r\n\r\n if (!libraryPromise) {\r\n libraryPromise = loadJavaScriptAsync(\"/Scripts/Rock/realtime.js\", () => !!window[\"Rock\"]?.[\"RealTime\"]);\r\n }\r\n\r\n if (!await libraryPromise) {\r\n throw new Error(\"Unable to load RealTime library.\");\r\n }\r\n\r\n libraryObject = window[\"Rock\"]?.[\"RealTime\"] as IRockRealTimeStatic;\r\n\r\n return libraryObject;\r\n}\r\n\r\n/**\r\n * Connects to a specific topic in the Rock RealTime system and returns an\r\n * instance to a proxy that handles sending to and receiving messages from\r\n * that specific topic.\r\n *\r\n * @param identifier The identifier of the topic to be connected to.\r\n *\r\n * @returns A proxy to handle communication with the topic.\r\n */\r\nexport async function getTopic>(identifier: string): Promise> {\r\n const realTime = await getRealTimeObject();\r\n\r\n return realTime.getTopic(identifier);\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\n/**\r\n * Regex patterns used for validation purposes\r\n */\r\nexport const regexPatterns = {\r\n // This regular expression pattern matches parentheses, curly braces, square brackets, and double quotes.\r\n specialCharacterPattern: /[({[\\]})\"]/,\r\n\r\n // Regular expression to match emojis and special Unicode characters.\r\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,\r\n\r\n // Regular expression to match special font characters.\r\n specialFontPattern: /[\\u{1D400}-\\u{1D7FF}\\u{1F100}-\\u{1F1FF}]/u\r\n};\r\n\r\n/**\r\n * Returns a regular expression pattern for matching special characters.\r\n * This pattern can be used to identify or validate strings containing parentheses, curly braces, square brackets, and double quotes.\r\n * @returns {RegExp} A regular expression object for matching special characters.\r\n */\r\nexport const getSpecialCharacterPattern = (): RegExp => regexPatterns.specialCharacterPattern;\r\n\r\n/**\r\n * Returns a regular expression pattern for matching emoji characters.\r\n * This pattern can be used to identify or validate strings containing emojis.\r\n * @returns {RegExp} A regular expression object for matching emoji characters.\r\n */\r\nexport const getEmojiPattern = (): RegExp => regexPatterns.emojiPattern;\r\n\r\n/**\r\n * Returns a regular expression pattern for matching special font characters.\r\n * This pattern can be used to identify or validate strings containing characters from special fonts,\r\n * such as mathematical alphanumeric symbols or enclosed alphanumerics.\r\n * @returns {RegExp} A regular expression object for matching special font characters.\r\n */\r\nexport const getSpecialFontPattern = (): RegExp => regexPatterns.specialFontPattern;","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport Big from \"@Obsidian/Libs/big\";\r\nimport { CurrencyInfoBag } from \"@Obsidian/ViewModels/Rest/Utilities/currencyInfoBag\";\r\nimport { toCurrencyOrNull } from \"./numberUtils\";\r\n\r\ntype RockCurrencyValue = number | string | RockCurrency;\r\n\r\ntype RockCurrencyFormatOptions = {\r\n excludeGroupingSeparators: boolean;\r\n};\r\n\r\nexport class RockCurrency {\r\n private readonly big: Big;\r\n\r\n get isZero(): boolean {\r\n return this.big.eq(0);\r\n }\r\n\r\n get number(): number {\r\n return this.big.toNumber();\r\n }\r\n\r\n get isNegative(): boolean {\r\n return this.big.lt(0);\r\n }\r\n\r\n get units(): number {\r\n return this.big.times(new Big(10).pow(this.currencyInfo.decimalPlaces)).toNumber();\r\n }\r\n\r\n /**\r\n * Creates a new RockCurrency instance.\r\n *\r\n * Keep private so the constructor can hide reference to the underlying Big library usage.\r\n */\r\n private constructor(value: RockCurrencyValue | Big.Big, readonly currencyInfo: CurrencyInfoBag) {\r\n if (value instanceof RockCurrency) {\r\n // Always truncate the currency value decimal places (with Big.roundDown).\r\n this.big = new Big(value.big).round(this.currencyInfo.decimalPlaces, Big.roundDown);\r\n }\r\n else {\r\n // Always truncate the currency value decimal places (with Big.roundDown).\r\n // Default to 0 if the value is nullish.\r\n this.big = new Big(value ?? 0).round(this.currencyInfo.decimalPlaces, Big.roundDown);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new instance of the RockCurrency class.\r\n *\r\n * @param value The currency value.\r\n * @param currencyInfo The currency info.\r\n * @returns A new RockCurrency instance.\r\n */\r\n static create(value: RockCurrencyValue, currencyInfo: CurrencyInfoBag): RockCurrency {\r\n return new RockCurrency(value, currencyInfo);\r\n }\r\n\r\n asRockCurrency(value: RockCurrencyValue): RockCurrency {\r\n return value instanceof RockCurrency ? value : new RockCurrency(value, this.currencyInfo);\r\n }\r\n\r\n /**\r\n * Adds an amount to this RockCurrency.\r\n *\r\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.\r\n * @returns A createCurrency instance containing the sum of the two currencies.\r\n * @example\r\n * createCurrency(2.61).add(3.999); // returns createCurrency(6.60)\r\n * createCurrency(2.61).add(createCurrency(3.999)); // returns createCurrency(6.60)\r\n */\r\n add(value: RockCurrencyValue): RockCurrency {\r\n const currency = this.asRockCurrency(value);\r\n\r\n return new RockCurrency(this.big.plus(currency.big), this.currencyInfo);\r\n }\r\n\r\n /**\r\n * Gets the negation of this RockCurrency.\r\n *\r\n * @returns A createCurrency instance containing the negation of this RockCurrency.\r\n * @example\r\n * createCurrency(2.61).negate(); // returns createCurrency(-2.61)\r\n */\r\n negate(): RockCurrency {\r\n return new RockCurrency(this.big.neg(), this.currencyInfo);\r\n }\r\n\r\n /**\r\n * Divides this currency by a number.\r\n *\r\n * @param divisor The number by which to divide this currency. Must be a number as a currency cannot be divided by another currency.\r\n * @returns The quotient and remainder of the division as separate RockCurrency instances.\r\n * @example\r\n * createCurrency(3.50).divide(3); // returns { quotient: createCurrency(1.16), remainder: createCurrency(0.02) }\r\n */\r\n divide(divisor: number): { quotient: RockCurrency, remainder: RockCurrency } {\r\n // Always truncate the currency value decimal places (with Big.roundDown).\r\n const quotient = this.big.div(divisor).round(this.currencyInfo.decimalPlaces, Big.roundDown);\r\n const remainder = this.big.minus(quotient.times(divisor));\r\n\r\n return {\r\n quotient: new RockCurrency(quotient, this.currencyInfo),\r\n remainder: new RockCurrency(remainder, this.currencyInfo),\r\n };\r\n }\r\n\r\n /**\r\n * Subtracts an amount from this currency.\r\n *\r\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.\r\n * @returns A createCurrency instance containing the difference of the two currencies.\r\n * @example\r\n * createCurrency(2.61).subtract(3.999); // returns createCurrency(-1.38)\r\n * createCurrency(2.61).subtract(createCurrency(3.999)); // returns createCurrency(-1.38)\r\n */\r\n subtract(value: RockCurrencyValue): RockCurrency {\r\n const currency = this.asRockCurrency(value);\r\n\r\n return new RockCurrency(this.big.minus(currency.big), this.currencyInfo);\r\n }\r\n\r\n /**\r\n * Determines if this currency is equal another currency.\r\n *\r\n * @param value The currency to which to compare.\r\n * @returns `true` if the currencies are equal; otherwise, `false` is returned.\r\n */\r\n isEqualTo(value: RockCurrencyValue): boolean {\r\n const currency = this.asRockCurrency(value);\r\n return this.big.eq(currency.big);\r\n }\r\n\r\n /**\r\n * Determines if this currency is not equal to another currency.\r\n *\r\n * @param value The currency to which to compare.\r\n * @returns `true` if the currencies are not equal; otherwise, `false` is returned.\r\n */\r\n isNotEqualTo(value: RockCurrencyValue): boolean {\r\n const currency = this.asRockCurrency(value);\r\n return !this.big.eq(currency.big);\r\n }\r\n\r\n /**\r\n * Determines if this currency is less than another currency.\r\n *\r\n * @param value The currency to which to compare.\r\n * @returns `true` if this currency is less than the provided currency; otherwise, `false` is returned.\r\n */\r\n isLessThan(value: RockCurrencyValue): boolean {\r\n const currency = this.asRockCurrency(value);\r\n return this.big.lt(currency.big);\r\n }\r\n\r\n /**\r\n * Determines if this currency is less than or equal to another currency.\r\n *\r\n * @param value The currency to which to compare.\r\n * @returns `true` if this currency is less than or equal to the provided currency; otherwise, `false` is returned.\r\n */\r\n isLessThanOrEqualTo(value: RockCurrencyValue): boolean {\r\n const currency = this.asRockCurrency(value);\r\n return this.big.lte(currency.big);\r\n }\r\n\r\n /**\r\n * Returns this currency limited by the provided value.\r\n *\r\n * @param value The currency to which to compare.\r\n * @returns `this` currency if it is equal to or greater than the limit; otherwise, `value` is returned.\r\n */\r\n noLessThan(value: RockCurrencyValue): RockCurrency {\r\n const currency = this.asRockCurrency(value);\r\n if (this.big.lt(currency.big)) {\r\n return new RockCurrency(currency.big, this.currencyInfo);\r\n }\r\n else {\r\n return this;\r\n }\r\n }\r\n\r\n /**\r\n * Determines if this currency is greater than another currency.\r\n *\r\n * @param value The currency to which to compare.\r\n * @returns `true` if this currency is greater than the provided currency; otherwise, `false` is returned.\r\n */\r\n isGreaterThan(value: RockCurrencyValue): boolean {\r\n const limit = this.asRockCurrency(value);\r\n return this.big.gt(limit.big);\r\n }\r\n\r\n /**\r\n * Returns this currency limited by the provided value.\r\n *\r\n * @param value The currency to which to compare.\r\n * @returns `this` currency if it is equal to or less than the limit; otherwise, `limit` is returned.\r\n */\r\n noGreaterThan(value: RockCurrencyValue): RockCurrency {\r\n const currency = this.asRockCurrency(value);\r\n if (this.big.gt(currency.big)) {\r\n return currency;\r\n }\r\n else {\r\n return this;\r\n }\r\n }\r\n\r\n /** Gets the absolute value of this currency. */\r\n abs(): RockCurrency {\r\n return new RockCurrency(this.big.abs(), this.currencyInfo);\r\n }\r\n\r\n /**\r\n * Returns the remainder after dividing this currency by a number.\r\n */\r\n mod(divisor: number): RockCurrency {\r\n const { remainder } = this.divide(divisor);\r\n return remainder;\r\n }\r\n\r\n format(options: RockCurrencyFormatOptions | null = null): string {\r\n if (options?.excludeGroupingSeparators) {\r\n const valueString = this.big.toFixed(this.currencyInfo.decimalPlaces, Big.roundDown);\r\n return `${this.currencyInfo.symbol}${valueString}`;\r\n }\r\n return this.toString();\r\n }\r\n\r\n /**\r\n * Gets the formatted string value of this currency.\r\n */\r\n toString(): string {\r\n // Always truncate the currency value decimal places (with Big.roundDown).\r\n const valueString = this.big.toFixed(this.currencyInfo.decimalPlaces, Big.roundDown);\r\n\r\n return toCurrencyOrNull(valueString, this.currencyInfo) ?? `${this.currencyInfo.symbol}${valueString}`;\r\n }\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport {nextTick, onMounted, onUnmounted, Ref, ref} from \"vue\";\r\n\r\nexport function useScreenSize(mobileThreshold: number = 480): { isMobile: Ref, screenSize: Ref } {\r\n const isMobile = ref(false);\r\n const screenSize = ref(screen.width);\r\n\r\n function onResize(): void {\r\n screenSize.value = screen.width;\r\n if (screen.width <= mobileThreshold) {\r\n isMobile.value = true;\r\n }\r\n else {\r\n isMobile.value = false;\r\n }\r\n }\r\n\r\n onMounted(() => {\r\n // Bit of a wait to make sure everything is fully initialized first.\r\n nextTick(() => {\r\n onResize();\r\n });\r\n\r\n window.addEventListener(\"resize\", onResize);\r\n });\r\n\r\n onUnmounted(() => {\r\n window.removeEventListener(\"resize\", onResize);\r\n });\r\n\r\n return {\r\n isMobile,\r\n screenSize\r\n };\r\n}\r\n\r\nexport function useViewportWidth(mobileThreshold: number = 480): { isMobile: Ref, viewportWidth: Ref } {\r\n const isMobile = ref(false);\r\n const viewportWidth = ref(window.innerWidth);\r\n\r\n function onResize(): void {\r\n viewportWidth.value = window.innerWidth;\r\n isMobile.value = viewportWidth.value <= mobileThreshold;\r\n }\r\n\r\n onMounted(() => {\r\n // Bit of a wait to make sure everything is fully initialized first.\r\n nextTick(() => {\r\n onResize();\r\n });\r\n\r\n window.addEventListener(\"resize\", onResize);\r\n });\r\n\r\n onUnmounted(() => {\r\n window.removeEventListener(\"resize\", onResize);\r\n });\r\n\r\n return {\r\n isMobile,\r\n viewportWidth: viewportWidth\r\n };\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { toNumber, toNumberOrNull } from \"./numberUtils\";\r\nimport { SlidingDateRangeType as RangeType, SlidingDateRangeType } from \"@Obsidian/Enums/Controls/slidingDateRangeType\";\r\nimport { TimeUnitType as TimeUnit } from \"@Obsidian/Enums/Controls/timeUnitType\";\r\nimport { DayOfWeek, RockDateTime } from \"./rockDateTime\";\r\n\r\n// This file contains helper functions and tooling required to work with sliding\r\n// date ranges. A sliding date range is one that, generally, is anchored to whatever\r\n// the current date and time is when the check is made. For example, \"within the next\r\n// 5 days\" would be the english equivalent of a sliding date range.\r\n\r\n/**\r\n * The enums have been moved to separate files in order to share with the back end. We import them\r\n * above (with the names used by the definitions that used to exist in this file) so they can be\r\n * used below and we export them here so that any files previously importing them from here\r\n * do not break.\r\n */\r\nexport { SlidingDateRangeType as RangeType } from \"@Obsidian/Enums/Controls/slidingDateRangeType\";\r\nexport { TimeUnitType as TimeUnit } from \"@Obsidian/Enums/Controls/timeUnitType\";\r\n\r\n/**\r\n * Specifies the information required to track a sliding date range.\r\n */\r\nexport type SlidingDateRange = {\r\n /** The type of sliding date range represented by this instance. */\r\n rangeType: RangeType;\r\n\r\n /** The unit of time represented by the timeValue property. */\r\n timeUnit?: TimeUnit;\r\n\r\n /** The number of time units used when calculating the date range. */\r\n timeValue?: number;\r\n\r\n /** The lower value of a specific date range. */\r\n lowerDate?: string;\r\n\r\n /** The upper value of a specific date range. */\r\n upperDate?: string;\r\n};\r\n\r\n/**\r\n * The sliding date range types represented as an array of ListItemBag objects.\r\n * These are ordered correctly and can be used in pickers.\r\n */\r\nexport const rangeTypeOptions: ListItemBag[] = [\r\n {\r\n value: RangeType.Current.toString(),\r\n text: \"Current\"\r\n },\r\n {\r\n value: RangeType.Previous.toString(),\r\n text: \"Previous\"\r\n },\r\n {\r\n value: RangeType.Last.toString(),\r\n text: \"Last\"\r\n },\r\n {\r\n value: RangeType.Next.toString(),\r\n text: \"Next\"\r\n },\r\n {\r\n value: RangeType.Upcoming.toString(),\r\n text: \"Upcoming\"\r\n },\r\n {\r\n value: RangeType.DateRange.toString(),\r\n text: \"Date Range\"\r\n }\r\n];\r\n\r\n/**\r\n * The sliding date range time units represented as an array of ListItemBag objects.\r\n * These are ordered correctly and can be used in pickers.\r\n */\r\nexport const timeUnitOptions: ListItemBag[] = [\r\n {\r\n value: TimeUnit.Hour.toString(),\r\n text: \"Hour\"\r\n },\r\n {\r\n value: TimeUnit.Day.toString(),\r\n text: \"Day\"\r\n },\r\n {\r\n value: TimeUnit.Week.toString(),\r\n text: \"Week\"\r\n },\r\n {\r\n value: TimeUnit.Month.toString(),\r\n text: \"Month\"\r\n },\r\n {\r\n value: TimeUnit.Year.toString(),\r\n text: \"Year\"\r\n },\r\n];\r\n\r\n/**\r\n * Helper function to get the text from a ListItemBag that matches the value.\r\n *\r\n * @param value The value to be searched for.\r\n * @param options The ListItemBag options to be searched.\r\n *\r\n * @returns The text value of the ListItemBag or an empty string if not found.\r\n */\r\nfunction getTextForValue(value: string, options: ListItemBag[]): string {\r\n const matches = options.filter(v => v.value === value);\r\n\r\n return matches.length > 0 ? matches[0].text ?? \"\" : \"\";\r\n}\r\n\r\n/**\r\n * Gets the user friendly text that represents the RangeType value.\r\n *\r\n * @param rangeType The RangeType value to be represented.\r\n *\r\n * @returns A human readable string that represents the RangeType value.\r\n */\r\nexport function getRangeTypeText(rangeType: RangeType): string {\r\n const rangeTypes = rangeTypeOptions.filter(o => o.value === rangeType.toString());\r\n\r\n return rangeTypes.length > 0 ? rangeTypes[0].text ?? \"\" : \"\";\r\n}\r\n\r\n/**\r\n * Gets the user friendly text that represents the TimeUnit value.\r\n *\r\n * @param timeUnit The TimeUnit value to be represented.\r\n *\r\n * @returns A human readable string that represents the TimeUnit value.\r\n */\r\nexport function getTimeUnitText(timeUnit: TimeUnit): string {\r\n const timeUnits = timeUnitOptions.filter(o => o.value === timeUnit.toString());\r\n\r\n return timeUnits.length > 0 ? timeUnits[0].text ?? \"\" : \"\";\r\n}\r\n\r\n/**\r\n * Parses a pipe delimited string into a SlidingDateRange native object. The\r\n * delimited string is a format used by attribute values and other places.\r\n *\r\n * @param value The pipe delimited string that should be parsed.\r\n *\r\n * @returns A SlidingDaterange object or null if the string could not be parsed.\r\n */\r\nexport function parseSlidingDateRangeString(value: string): SlidingDateRange | null {\r\n const segments = value.split(\"|\");\r\n\r\n if (segments.length < 3) {\r\n return null;\r\n }\r\n\r\n // Find the matching range types and time units (should be 0 or 1) that\r\n // match the values in the string.\r\n const rangeTypes = rangeTypeOptions.filter(o => (o.text ?? \"\").replace(\" \", \"\").toLowerCase() === segments[0].toLowerCase() || o.value === segments[0]);\r\n const timeUnits = timeUnitOptions.filter(o => (o.text ?? \"\").toLowerCase() === segments[2].toLowerCase() || o.value === segments[2]);\r\n\r\n if (rangeTypes.length === 0) {\r\n return null;\r\n }\r\n\r\n const range: SlidingDateRange = {\r\n rangeType: toNumber(rangeTypes[0].value)\r\n };\r\n\r\n // If the range type is one that has time units then parse the time units.\r\n if (([RangeType.Current, RangeType.Last, RangeType.Next, RangeType.Previous, RangeType.Upcoming] as number[]).includes(range.rangeType)) {\r\n range.timeUnit = timeUnits.length > 0 ? toNumber(timeUnits[0].value) as TimeUnit : TimeUnit.Hour;\r\n\r\n // If the range type is one that has time values then parse the time value.\r\n if (([RangeType.Last, RangeType.Next, RangeType.Previous, RangeType.Upcoming] as number[]).includes(range.rangeType)) {\r\n range.timeValue = toNumberOrNull(segments[1]) ?? 1;\r\n }\r\n }\r\n\r\n // Parse the lower and upper dates if our range type is a DateRange.\r\n if (range.rangeType === RangeType.DateRange) {\r\n if (segments.length > 3) {\r\n range.lowerDate = segments[3];\r\n }\r\n\r\n if (segments.length > 4) {\r\n range.upperDate = segments[4];\r\n }\r\n }\r\n\r\n return range;\r\n}\r\n\r\n/**\r\n * Formats the pipe delimited string.\r\n *\r\n * @param value The pipe delimited string that should be formatted.\r\n *\r\n * @returns A string that formats the sliding date range.\r\n */\r\nexport function slidingDateRangeToString(value: SlidingDateRange): string {\r\n switch (value.rangeType) {\r\n case RangeType.Current:\r\n return `Current||${getTextForValue(value.timeUnit?.toString() ?? \"\", timeUnitOptions)}||`;\r\n\r\n case RangeType.DateRange:\r\n return `DateRange|||${value.lowerDate ?? \"\"}|${value.upperDate ?? \"\"}`;\r\n\r\n default:\r\n return `${getTextForValue(value.rangeType.toString(), rangeTypeOptions) || \"All\"}|${value.timeValue ?? \"\"}|${getTextForValue(value.timeUnit?.toString() ?? \"\", timeUnitOptions)}||`;\r\n }\r\n}\r\n\r\n/**\r\n * Calculates the start and end dates in a sliding date range.\r\n *\r\n * @param value The sliding date range to use when calculating dates.\r\n * @param currentDateTime The date and time to use in any \"now\" calculations.\r\n *\r\n * @returns An object that contains the start and end dates and times.\r\n */\r\nexport function calculateSlidingDateRange(value: SlidingDateRange, currentDateTime: RockDateTime | null | undefined = undefined): { start: RockDateTime | null, end: RockDateTime | null } {\r\n const result: { start: RockDateTime | null, end: RockDateTime | null } = {\r\n start: null,\r\n end: null\r\n };\r\n\r\n if (!currentDateTime) {\r\n currentDateTime = RockDateTime.now();\r\n }\r\n\r\n if (value.rangeType === RangeType.Current) {\r\n if (value.timeUnit === TimeUnit.Hour) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0);\r\n result.end = result.start?.addHours(1) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Day) {\r\n result.start = currentDateTime.date;\r\n result.end = result.start.addDays(1);\r\n }\r\n else if (value.timeUnit === TimeUnit.Week) {\r\n // TODO: This needs to be updated to get the FirstDayOfWeek from server.\r\n let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\r\n\r\n if (diff < 0) {\r\n diff += 7;\r\n }\r\n\r\n result.start = currentDateTime.addDays(-1 * diff).date;\r\n result.end = result.start.addDays(7);\r\n }\r\n else if (value.timeUnit === TimeUnit.Month) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1);\r\n result.end = result.start?.addMonths(1) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Year) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, 1, 1);\r\n result.end = RockDateTime.fromParts(currentDateTime.year + 1, 1, 1);\r\n }\r\n }\r\n else if (value.rangeType === RangeType.Last || value.rangeType === RangeType.Previous) {\r\n // The number of time units to adjust by.\r\n const count = value.timeValue ?? 1;\r\n\r\n // If we are getting \"Last\" then round up to include the\r\n // current day/week/month/year.\r\n const roundUpCount = value.rangeType === RangeType.Last ? 1 : 0;\r\n\r\n if (value.timeUnit === TimeUnit.Hour) {\r\n result.end = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0)\r\n ?.addHours(roundUpCount) ?? null;\r\n result.start = result.end?.addHours(-count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Day) {\r\n result.end = currentDateTime.date.addDays(roundUpCount);\r\n result.start = result.end?.addDays(-count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Week) {\r\n // TODO: This needs to be updated to get the FirstDayOfWeek from server.\r\n let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\r\n\r\n if (diff < 0) {\r\n diff += 7;\r\n }\r\n\r\n result.end = currentDateTime.addDays(-1 * diff).date.addDays(7 * roundUpCount);\r\n result.start = result.end.addDays(-count * 7);\r\n }\r\n else if (value.timeUnit === TimeUnit.Month) {\r\n result.end = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1)?.addMonths(roundUpCount) ?? null;\r\n result.start = result.end?.addMonths(-count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Year) {\r\n result.end = RockDateTime.fromParts(currentDateTime.year, 1, 1)?.addYears(roundUpCount) ?? null;\r\n result.start = result.end?.addYears(-count) ?? null;\r\n }\r\n\r\n // don't let Last,Previous have any future dates\r\n const cutoffDate = currentDateTime.date.addDays(1);\r\n if (result.end && result.end.date > cutoffDate) {\r\n result.end = cutoffDate;\r\n }\r\n }\r\n else if (value.rangeType === RangeType.Next || value.rangeType === RangeType.Upcoming) {\r\n // The number of time units to adjust by.\r\n const count = value.timeValue ?? 1;\r\n\r\n // If we are getting \"Upcoming\" then round up to include the\r\n // current day/week/month/year.\r\n const roundUpCount = value.rangeType === RangeType.Upcoming ? 1 : 0;\r\n\r\n if (value.timeUnit === TimeUnit.Hour) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0)\r\n ?.addHours(roundUpCount) ?? null;\r\n result.end = result.start?.addHours(count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Day) {\r\n result.start = currentDateTime.date.addDays(roundUpCount);\r\n result.end = result.start.addDays(count);\r\n }\r\n else if (value.timeUnit === TimeUnit.Week) {\r\n // TODO: This needs to be updated to get the FirstDayOfWeek from server.\r\n let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\r\n\r\n if (diff < 0) {\r\n diff += 7;\r\n }\r\n\r\n result.start = currentDateTime.addDays(-1 * diff)\r\n .date.addDays(7 * roundUpCount);\r\n result.end = result.start.addDays(count * 7);\r\n }\r\n else if (value.timeUnit === TimeUnit.Month) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1)\r\n ?.addMonths(roundUpCount) ?? null;\r\n result.end = result.start?.addMonths(count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Year) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, 1, 1)\r\n ?.addYears(roundUpCount) ?? null;\r\n result.end = result.start?.addYears(count) ?? null;\r\n }\r\n\r\n // don't let Next,Upcoming have any past dates\r\n if (result.start && result.start.date < currentDateTime.date) {\r\n result.start = currentDateTime.date;\r\n }\r\n }\r\n else if (value.rangeType === RangeType.DateRange) {\r\n result.start = RockDateTime.parseISO(value.lowerDate ?? \"\");\r\n result.end = RockDateTime.parseISO(value.upperDate ?? \"\");\r\n\r\n // Sliding date range does not use ISO dates (though might be changed\r\n // in the future). So if we can't parse as an ISO date then try a\r\n // natural parse.\r\n if (!result.start && value.lowerDate) {\r\n result.start = RockDateTime.fromJSDate(new Date(value.lowerDate));\r\n }\r\n\r\n if (!result.end && value.upperDate) {\r\n result.end = RockDateTime.fromJSDate(new Date(value.upperDate));\r\n }\r\n\r\n if (result.end) {\r\n // Add a day to the end so that we get the entire day when comparing.\r\n result.end = result.end.addDays(1);\r\n }\r\n }\r\n\r\n // To avoid confusion about the day or hour of the end of the date range,\r\n // subtract a millisecond off our 'less than' end date. For example, if our\r\n // end date is 2019-11-7, we actually want all the data less than 2019-11-8,\r\n // but if a developer does EndDate.DayOfWeek, they would want 2019-11-7 and\r\n // not 2019-11-8 So, to make sure we include all the data for 2019-11-7, but\r\n // avoid the confusion about what DayOfWeek of the end, we'll compromise by\r\n // subtracting a millisecond from the end date\r\n if (result.end && value.timeUnit != TimeUnit.Hour) {\r\n result.end = result.end.addMilliseconds(-1);\r\n }\r\n\r\n return result;\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport { useHttp } from \"./http\";\r\nimport { StructuredContentEditorConfigurationBag } from \"@Obsidian/ViewModels/Rest/Controls/structuredContentEditorConfigurationBag\";\r\nimport { StructuredContentBag } from \"@Obsidian/ViewModels/Rest/Controls/StructuredContentBag\";\r\nimport { StructuredContentEditorGetConfigurationOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/structuredContentEditorGetConfigurationOptionsBag\";\r\n\r\nconst http = useHttp();\r\n\r\n/** Fetches the configuration for the structured content editor. */\r\nexport async function getStructuredContentEditorConfiguration(options: StructuredContentEditorGetConfigurationOptionsBag): Promise {\r\n const result = await http.post(\"/api/v2/Controls/StructuredContentEditorGetConfiguration\", undefined, options);\r\n\r\n if (result.isSuccess && result.data) {\r\n return result.data;\r\n }\r\n\r\n throw new Error(result.errorMessage || \"Error fetching structured content editor configuration\");\r\n}\r\n\r\n/** Fetches structured content as html. */\r\nexport async function getStructuredContentAsHtml(structuredContent: StructuredContentBag): Promise {\r\n try {\r\n const result = await http.post(\"/api/v2/Controls/StructuredContentAsHtml\", undefined, {...structuredContent});\r\n\r\n if (result.isSuccess && result.data) {\r\n return result.data;\r\n }\r\n }\r\n catch (error) {\r\n /* Error intentionally ignored */\r\n }\r\n return \"\";\r\n}\r\n\r\n\r\nexport default {\r\n getStructuredContentAsHtml,\r\n getStructuredContentEditorConfiguration\r\n};","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { getUniqueCssSelector } from \"./dom\";\r\nimport { getFullscreenElement, isFullscreen } from \"./fullscreen\";\r\n\r\n// NOTE: Do not make this public yet. This is essentially temporary and\r\n// will likely move to a different place and be merged with the popover\r\n// concept code as well.\r\ntype TooltipOptions = {\r\n /** The container element to place the tooltip in. */\r\n container?: string;\r\n\r\n /** Allow HTML content in the tooltip. */\r\n html?: boolean;\r\n\r\n /** Enables santization of HTML content. */\r\n sanitize?: boolean;\r\n\r\n /** The delay before showing/hiding the tooltip. */\r\n delay?: number | {\r\n /** The delay before showing the tooltip. */\r\n show?: number;\r\n\r\n /** The delay before hiding the tooltip. */\r\n hide?: number;\r\n };\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndeclare const $: any;\r\n\r\n/**\r\n * Configure a tooltip for the specified node or nodes to show on hover. This\r\n * currently uses Bootstrap tooltips but may be changed to use a different\r\n * method later.\r\n *\r\n * @param node The node or nodes to have tooltips configured on.\r\n * @param options The options that describe how the tooltips should behave.\r\n */\r\nexport function tooltip(node: Element | Element[], options?: TooltipOptions): void {\r\n // If we got an array of elements then activate each one.\r\n if (Array.isArray(node)) {\r\n for (const n of node) {\r\n tooltip(n, options);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (typeof $ !== \"function\") {\r\n return;\r\n }\r\n\r\n const $node = $(node);\r\n let appliedContainer: string | undefined = undefined;\r\n let fsElement: HTMLElement | undefined = undefined;\r\n\r\n const getContainer = (): string | undefined => {\r\n if (!isFullscreen() && fsElement) {\r\n // No long in fullscreen mode, so reset everything.\r\n fsElement.style.position = \"\";\r\n fsElement = undefined;\r\n\r\n return options?.container ?? \"body\";\r\n }\r\n\r\n const newFsElement = getFullscreenElement();\r\n\r\n if (newFsElement && newFsElement === fsElement) {\r\n // No change\r\n return undefined;\r\n }\r\n\r\n if (newFsElement && newFsElement.contains(node)) {\r\n // Newly in fullscreen mode, use the fullscreen element\r\n fsElement = newFsElement as HTMLElement;\r\n const fsElementPosition = getComputedStyle(fsElement).position;\r\n\r\n if (fsElementPosition === \"static\") {\r\n fsElement.style.position = \"relative\";\r\n }\r\n\r\n return getUniqueCssSelector(fsElement);\r\n }\r\n\r\n return options?.container ?? \"body\";\r\n };\r\n\r\n const applyTooltip = (container: string | undefined): void => {\r\n // Already applied to this container, or no container provided so don't do anything.\r\n if (appliedContainer === container || container === undefined) {\r\n return;\r\n }\r\n\r\n if (appliedContainer) {\r\n $node?.tooltip(\"destroy\");\r\n\r\n setTimeout(() => {\r\n $node?.tooltip({\r\n container: container,\r\n html: options?.html,\r\n sanitize: options?.sanitize ?? true,\r\n delay: options?.delay\r\n });\r\n\r\n }, 151);\r\n }\r\n else {\r\n $node?.tooltip({\r\n container: container,\r\n html: options?.html,\r\n sanitize: options?.sanitize ?? true,\r\n delay: options?.delay\r\n });\r\n }\r\n\r\n appliedContainer = container;\r\n };\r\n\r\n // When we attach to the body/html element, we need to change the container when we're in fullscreen mode.\r\n if (!options?.container || options.container === \"body\" || options.container === \"html\") {\r\n document.addEventListener(\"fullscreenchange\", () => applyTooltip(getContainer()));\r\n }\r\n\r\n applyTooltip(getContainer());\r\n\r\n $node?.on(\"mouseleave\", function () {\r\n $node?.tooltip(\"hide\");\r\n });\r\n}\r\n\r\n/**\r\n * Manually show a previously-configured tooltip for the specified node.\r\n *\r\n * @param node The node for which to show a tooltip\r\n */\r\nexport function showTooltip(node: Element): void {\r\n if (typeof $ === \"function\") {\r\n $(node).tooltip(\"show\");\r\n }\r\n}\r\n\r\n/**\r\n * Manually destroy a previously-configured tooltip for the specified node.\r\n *\r\n * @param node The node for which to destroy a tooltip.\r\n */\r\nexport function destroyTooltip(node: Element | Element[]): void {\r\n if (typeof $ === \"function\") {\r\n $(node).tooltip(\"destroy\");\r\n }\r\n}\r\n\r\n/**\r\n * Reset a tooltip by destroying the existing one and adding a new tooltip on\r\n *\r\n * @param node The node or nodes to have tooltips configured on.\r\n * @param options The options that describe how the tooltips should behave.\r\n */\r\nexport function resetTooltip(node: Element | Element[], options?: TooltipOptions): Promise {\r\n return new Promise(res => {\r\n destroyTooltip(node);\r\n\r\n setTimeout(() => {\r\n tooltip(node, options);\r\n res();\r\n }, 151);\r\n });\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { emptyGuid, toGuidOrNull } from \"./guid\";\r\nimport { post } from \"./http\";\r\nimport { SiteType } from \"@Obsidian/Enums/Cms/siteType\";\r\nimport { TreeItemBag } from \"@Obsidian/ViewModels/Utility/treeItemBag\";\r\nimport { CategoryPickerChildTreeItemsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/categoryPickerChildTreeItemsOptionsBag\";\r\nimport { LocationItemPickerGetActiveChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/locationItemPickerGetActiveChildrenOptionsBag\";\r\nimport { DataViewPickerGetDataViewsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/dataViewPickerGetDataViewsOptionsBag\";\r\nimport { WorkflowTypePickerGetWorkflowTypesOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/workflowTypePickerGetWorkflowTypesOptionsBag\";\r\nimport { PagePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/pagePickerGetChildrenOptionsBag\";\r\nimport { PagePickerGetSelectedPageHierarchyOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/pagePickerGetSelectedPageHierarchyOptionsBag\";\r\nimport { ConnectionRequestPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/connectionRequestPickerGetChildrenOptionsBag\";\r\nimport { GroupPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/groupPickerGetChildrenOptionsBag\";\r\nimport { MergeTemplatePickerGetMergeTemplatesOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeTemplatePickerGetMergeTemplatesOptionsBag\";\r\nimport { MergeTemplateOwnership } from \"@Obsidian/Enums/Controls/mergeTemplateOwnership\";\r\nimport { MetricCategoryPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/metricCategoryPickerGetChildrenOptionsBag\";\r\nimport { MetricItemPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/metricItemPickerGetChildrenOptionsBag\";\r\nimport { RegistrationTemplatePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/registrationTemplatePickerGetChildrenOptionsBag\";\r\nimport { ReportPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/reportPickerGetChildrenOptionsBag\";\r\nimport { SchedulePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/schedulePickerGetChildrenOptionsBag\";\r\nimport { WorkflowActionTypePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/workflowActionTypePickerGetChildrenOptionsBag\";\r\nimport { MergeFieldPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeFieldPickerGetChildrenOptionsBag\";\r\nimport { AssetManagerGetRootFoldersOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/assetManagerGetRootFoldersOptionsBag\";\r\nimport { AssetManagerBaseOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/assetManagerBaseOptionsBag\";\r\nimport { UniversalItemTreePickerOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/UniversalItemTreePickerOptionsBag\";\r\nimport { flatten } from \"./arrayUtils\";\r\nimport { toNumberOrNull } from \"./numberUtils\";\r\n\r\n/**\r\n * The methods that must be implemented by tree item providers. These methods\r\n * provide the TreeItem objects to be displayed when lazy loading is being used.\r\n */\r\nexport interface ITreeItemProvider {\r\n /**\r\n * Get the root items to be displayed in the tree list.\r\n *\r\n * @param expandToValues The values that should be auto-expanded to. This will contain\r\n * the nodes that should be visible when the data is returned, they should not be\r\n * expanded themselves, only any ancestor nodes.\r\n *\r\n * @returns A collection of TreeItem objects, optionally wrapped in a Promise\r\n * if the loading is being performed asynchronously.\r\n */\r\n getRootItems(expandToValues: string[]): Promise | TreeItemBag[];\r\n\r\n /**\r\n * Get the child items of the given tree item.\r\n *\r\n * @param item The parent item whose children should be loaded.\r\n *\r\n * @returns A collection of TreeItem objects, optionally wrapped in a Promise\r\n * if the loading is being performed asynchronously.\r\n */\r\n getChildItems(item: TreeItemBag): Promise | TreeItemBag[];\r\n\r\n /**\r\n * Checks if the item can be selected by the individual. This function\r\n * is optional.\r\n *\r\n * @param item The item that is about to be selected.\r\n * @param isSelectable True if the tree view considers the item selectable.\r\n *\r\n * @returns A boolean that determines the final selectable state of the item.\r\n */\r\n canSelectItem?(item: TreeItemBag, isSelectable: boolean): boolean;\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving categories from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class CategoryTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The root category to start pulling categories from. Set to undefined to\r\n * begin with any category that does not have a parent.\r\n */\r\n public rootCategoryGuid?: Guid;\r\n\r\n /**\r\n * The entity type unique identifier to restrict results to. Set to undefined\r\n * to include all categories, regardless of entity type.\r\n */\r\n public entityTypeGuid?: Guid;\r\n\r\n /**\r\n * The value that must match in the category EntityTypeQualifierColumn\r\n * property. Set to undefined or an empty string to ignore.\r\n */\r\n public entityTypeQualifierColumn?: string;\r\n\r\n /**\r\n * The value that must match in the category EntityTypeQualifierValue\r\n * property.\r\n */\r\n public entityTypeQualifierValue?: string;\r\n\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: CategoryPickerChildTreeItemsOptionsBag = {\r\n parentGuid: parentGuid,\r\n entityTypeGuid: this.entityTypeGuid,\r\n entityTypeQualifierColumn: this.entityTypeQualifierColumn,\r\n entityTypeQualifierValue: this.entityTypeQualifierValue,\r\n lazyLoad: false,\r\n securityGrantToken: this.securityGrantToken,\r\n\r\n getCategorizedItems: false,\r\n includeCategoriesWithoutChildren: true,\r\n includeInactiveItems: false,\r\n includeUnnamedEntityItems: false,\r\n };\r\n\r\n const response = await post(\"/api/v2/Controls/CategoryPickerChildTreeItems\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(this.rootCategoryGuid);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving locations from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class LocationTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: LocationItemPickerGetActiveChildrenOptionsBag = {\r\n guid: toGuidOrNull(parentGuid) ?? emptyGuid,\r\n rootLocationGuid: emptyGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/LocationItemPickerGetActiveChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving data views from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class DataViewTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The entity type unique identifier to restrict results to. Set to undefined\r\n * to include all categories, regardless of entity type.\r\n */\r\n public entityTypeGuid?: Guid;\r\n\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * The flag sets whether only persisted data view should be shown by the picker\r\n */\r\n public displayPersistedOnly: boolean = false;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: DataViewPickerGetDataViewsOptionsBag = {\r\n parentGuid,\r\n getCategorizedItems: true,\r\n includeCategoriesWithoutChildren: false,\r\n entityTypeGuidFilter: this.entityTypeGuid,\r\n lazyLoad: false,\r\n securityGrantToken: this.securityGrantToken,\r\n displayPersistedOnly: this.displayPersistedOnly,\r\n includeUnnamedEntityItems: false,\r\n };\r\n\r\n const response = await post(\"/api/v2/Controls/DataViewPickerGetDataViews\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving categories from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class WorkflowTypeTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The entity type unique identifier to restrict results to. Set to undefined\r\n * to include all categories, regardless of entity type.\r\n */\r\n public includeInactiveItems?: boolean;\r\n\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: WorkflowTypePickerGetWorkflowTypesOptionsBag = {\r\n parentGuid,\r\n includeInactiveItems: this.includeInactiveItems ?? false,\r\n securityGrantToken: this.securityGrantToken,\r\n\r\n getCategorizedItems: false,\r\n includeCategoriesWithoutChildren: false,\r\n includeUnnamedEntityItems: false,\r\n lazyLoad: false,\r\n };\r\n\r\n const response = await post(\"/api/v2/Controls/WorkflowTypePickerGetWorkflowTypes\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving pages from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class PageTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * List of GUIDs or pages to exclude from the list.\r\n */\r\n public hidePageGuids?: Guid[] | null;\r\n\r\n /**\r\n * Currently selected page\r\n */\r\n public selectedPageGuids?: Guid[] | null;\r\n\r\n /**\r\n * The site type to limit the results.\r\n */\r\n public siteType?: SiteType | null;\r\n\r\n /**\r\n * Gets the child items of the given parent (or root if no parent given) from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n let result: TreeItemBag[];\r\n\r\n const options: PagePickerGetChildrenOptionsBag = {\r\n guid: toGuidOrNull(parentGuid) ?? emptyGuid,\r\n rootPageGuid: null,\r\n hidePageGuids: this.hidePageGuids ?? [],\r\n securityGrantToken: this.securityGrantToken,\r\n siteType: this.siteType\r\n };\r\n const url = \"/api/v2/Controls/PagePickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n result = response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n\r\n // If we're getting child nodes or if there is no selected page\r\n if (parentGuid || !this.selectedPageGuids) {\r\n return result;\r\n }\r\n\r\n // If we're getting the root elements and we have a selected page, we also want to grab\r\n // all the parent pages so we can pre-load the entire hierarchy to the selected page\r\n return this.getHierarchyToSelectedPage(result);\r\n }\r\n\r\n /**\r\n * Get the hierarchical list of parent pages of the selectedPageGuid\r\n *\r\n * @returns A list of GUIDs of the parent pages\r\n */\r\n private async getParentList(): Promise {\r\n const options: PagePickerGetSelectedPageHierarchyOptionsBag = {\r\n selectedPageGuids: this.selectedPageGuids,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/PagePickerGetSelectedPageHierarchy\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Fill in pages to the depth of the selected page\r\n *\r\n * @param rootLayer The bottom layer of pages that we'll build depth upon\r\n *\r\n * @return The augmented `rootLayer` with the child pages\r\n */\r\n private async getHierarchyToSelectedPage(rootLayer: TreeItemBag[]): Promise {\r\n const parents = await this.getParentList();\r\n\r\n if (!parents || parents.length == 0) {\r\n // Selected page has no parents, so we're done.\r\n return rootLayer;\r\n }\r\n\r\n const childLists = await Promise.all(parents.map(guid => this.getItems(guid)));\r\n const allPages = rootLayer.concat(flatten(childLists));\r\n\r\n parents.forEach((parentGuid, i) => {\r\n const parentPage: TreeItemBag | undefined = allPages.find(page => page.value == parentGuid);\r\n if (parentPage) {\r\n parentPage.children = childLists[i];\r\n }\r\n });\r\n\r\n return rootLayer;\r\n }\r\n\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving connection requests from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class ConnectionRequestTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: ConnectionRequestPickerGetChildrenOptionsBag = {\r\n parentGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/ConnectionRequestPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving groups from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class GroupTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** GUID of the group you want to use as the root. */\r\n public rootGroupGuid: Guid | null = null;\r\n\r\n /** List of group types GUIDs to limit to groups of those types. */\r\n public includedGroupTypeGuids: Guid[] = [];\r\n\r\n /** Whether to include inactive groups or not. */\r\n public includeInactiveGroups: boolean = false;\r\n\r\n /** Whether to limit to only groups that have scheduling enabled. */\r\n public limitToSchedulingEnabled: boolean = false;\r\n\r\n /** Whether to limit to only groups that have RSVPs enabled. */\r\n public limitToRSVPEnabled: boolean = false;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: GroupPickerGetChildrenOptionsBag = {\r\n guid: parentGuid,\r\n rootGroupGuid: this.rootGroupGuid,\r\n includedGroupTypeGuids: this.includedGroupTypeGuids,\r\n includeInactiveGroups: this.includeInactiveGroups,\r\n limitToSchedulingEnabled: this.limitToSchedulingEnabled,\r\n limitToRSVPEnabled: this.limitToRSVPEnabled,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/GroupPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving merge templates from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class MergeTemplateTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** Filter for which merge templates to include in results: Global, Public, or Both */\r\n public mergeTemplateOwnership: MergeTemplateOwnership = MergeTemplateOwnership.Global;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: MergeTemplatePickerGetMergeTemplatesOptionsBag = {\r\n parentGuid,\r\n mergeTemplateOwnership: (toNumberOrNull(this.mergeTemplateOwnership) ?? 0) as MergeTemplateOwnership,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/MergeTemplatePickerGetMergeTemplates\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving merge templates from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class MetricCategoryTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: MetricCategoryPickerGetChildrenOptionsBag = {\r\n parentGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/MetricCategoryPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving merge templates from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class MetricItemTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** A list of category GUIDs to filter the results */\r\n public includeCategoryGuids: Guid[] | null = null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: MetricItemPickerGetChildrenOptionsBag = {\r\n parentGuid,\r\n includeCategoryGuids: this.includeCategoryGuids,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/MetricItemPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving registration templates from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class RegistrationTemplateTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: RegistrationTemplatePickerGetChildrenOptionsBag = {\r\n parentGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/RegistrationTemplatePickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving reports from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class ReportTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** A list of category GUIDs to filter the results. */\r\n public includeCategoryGuids: Guid[] | null = null;\r\n\r\n /** Guid of an Entity Type to filter results by the reports that relate to this entity type. */\r\n public entityTypeGuid: Guid | null = null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: ReportPickerGetChildrenOptionsBag = {\r\n parentGuid,\r\n includeCategoryGuids: this.includeCategoryGuids,\r\n entityTypeGuid: this.entityTypeGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/ReportPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving reports from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class ScheduleTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** Whether to include inactive schedules in the results. */\r\n public includeInactive: boolean = false;\r\n\r\n /** Whether to exclude private schedules in the results. */\r\n public includePublicOnly: boolean = false;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: SchedulePickerGetChildrenOptionsBag = {\r\n parentGuid,\r\n includeInactiveItems: this.includeInactive,\r\n includePublicItemsOnly: this.includePublicOnly,\r\n securityGrantToken: this.securityGrantToken,\r\n };\r\n const url = \"/api/v2/Controls/SchedulePickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving reports from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class WorkflowActionTypeTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** Whether to include inactive schedules in the results. */\r\n public includeInactive: boolean = false;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentId: string | null = null): Promise {\r\n const options: WorkflowActionTypePickerGetChildrenOptionsBag = {\r\n parentId: toNumberOrNull(parentId) ?? 0,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/WorkflowActionTypePickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving merge fields from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class MergeFieldTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Currently selected page\r\n */\r\n public selectedIds?: string[] | string | null;\r\n\r\n /**\r\n * Root Level Merge Fields\r\n */\r\n public additionalFields: string = \"\";\r\n\r\n /**\r\n * Gets the child items of the given parent (or root if no parent given) from the server.\r\n *\r\n * @param parentId The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentId?: string | null): Promise {\r\n let result: TreeItemBag[];\r\n\r\n const options: MergeFieldPickerGetChildrenOptionsBag = {\r\n id: parentId || \"0\",\r\n additionalFields: this.additionalFields\r\n };\r\n const url = \"/api/v2/Controls/MergeFieldPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n result = response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n\r\n // If we're getting child nodes or if there is no selected page\r\n if (parentId || !this.selectedIds || this.selectedIds.length == 0) {\r\n return result;\r\n }\r\n\r\n // If we're getting the root elements and we have a selected page, we also want to grab\r\n // all the parent pages so we can pre-load the entire hierarchy to the selected page\r\n return this.getHierarchyToSelectedMergeField(result);\r\n }\r\n\r\n /**\r\n * Fill in pages to the depth of the selected page\r\n *\r\n * @param rootLayer The bottom layer of pages that we'll build depth upon\r\n *\r\n * @return The augmented `rootLayer` with the child pages\r\n */\r\n private async getHierarchyToSelectedMergeField(rootLayer: TreeItemBag[]): Promise {\r\n const parents = this.getParentList();\r\n\r\n if (!parents || parents.length == 0) {\r\n // Selected page has no parents, so we're done.\r\n return rootLayer;\r\n }\r\n\r\n const childLists = await Promise.all(parents.map(id => this.getItems(id)));\r\n const allMergeFields = rootLayer.concat(flatten(childLists));\r\n\r\n parents.forEach((parentGuid, i) => {\r\n const parentMergeField: TreeItemBag | undefined = allMergeFields.find(page => page.value == parentGuid);\r\n if (parentMergeField) {\r\n parentMergeField.children = childLists[i];\r\n }\r\n });\r\n\r\n return rootLayer;\r\n }\r\n\r\n /**\r\n * Get the hierarchical list of parent merge fields of the selected merge fields\r\n *\r\n * @returns A list of IDs of the parent merge fields\r\n */\r\n private getParentList(): string[] | null {\r\n if (!this.selectedIds || this.selectedIds.length == 0) {\r\n return null;\r\n }\r\n\r\n // If it's a single selection, grab the parents by splitting on \"|\",\r\n // e.g. \"Grand|Parent|Child\" will give [\"Grand\", \"Parent\"] as the parents\r\n if (typeof this.selectedIds == \"string\") {\r\n return this.splitSelectionIntoParents(this.selectedIds);\r\n }\r\n\r\n // Not null/empty nor a single selection, so must be an array of selections\r\n return flatten(this.selectedIds.map(sel => this.splitSelectionIntoParents(sel)));\r\n }\r\n\r\n /**\r\n * Split the given selected ID up and get a list of the parent IDs\r\n *\r\n * @param selection a string denoted one of the selected values\r\n */\r\n private splitSelectionIntoParents(selection: string): string[] {\r\n const parentIds: string[] = [];\r\n\r\n // grab the parents by splitting on \"|\",\r\n // e.g. \"Grand|Parent|Child\" will give [\"Grand\", \"Parent\"] as the parents\r\n const splitList = selection.split(\"|\");\r\n splitList.pop();\r\n\r\n // Now we need to make sure each item further in the list contains it's parents' names\r\n // e.g. [\"Grand\", \"Parent\"] => [\"Grand\", \"Grand|Parent\"]\r\n while (splitList.length >= 1) {\r\n parentIds.unshift(splitList.join(\"|\"));\r\n splitList.pop();\r\n }\r\n\r\n return parentIds;\r\n }\r\n\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for Asset Storage Provider folders from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class AssetManagerTreeItemProvider implements ITreeItemProvider {\r\n\r\n /** List of folders that are currently expanded in the tree list. */\r\n public openFolders: Set = new Set();\r\n public selectedFolder: string | null = \"\";\r\n public enableAssetManager = false;\r\n public enableFileManager = false;\r\n public encryptedRootFolder = \"\";\r\n public securityGrantToken = \"\";\r\n public userSpecificRoot = false;\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n const options: AssetManagerGetRootFoldersOptionsBag = {\r\n expandedFolders: this.openFolders.size > 0 ? Array.from(this.openFolders) : null,\r\n selectedFolder: this.selectedFolder,\r\n enableAssetManager: this.enableAssetManager,\r\n enableFileManager: this.enableFileManager,\r\n rootFolder: this.encryptedRootFolder,\r\n securityGrantToken: this.securityGrantToken,\r\n userSpecificRoot: this.userSpecificRoot\r\n };\r\n const url = \"/api/v2/Controls/AssetManagerGetRootFolders\";\r\n const response = await post<{ tree: TreeItemBag[], updatedExpandedFolders: string[] }>(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n this.openFolders = new Set(response.data.updatedExpandedFolders);\r\n return response.data.tree;\r\n }\r\n else {\r\n console.error(\"Error Fetching Root Asset Manager Items\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n const options: AssetManagerBaseOptionsBag = {\r\n assetFolderId: item.value,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/AssetManagerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.error(\"Error Fetching Asset Manager Children\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving adaptive messages from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class AdaptiveMessageTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: UniversalItemTreePickerOptionsBag = {\r\n parentValue: parentGuid,\r\n securityGrantToken: this.securityGrantToken,\r\n };\r\n\r\n const response = await post(\"/api/v2/Controls/AdaptiveMessagePickerGetAdaptiveMessages\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Ref, watch } from \"vue\";\r\n\r\n/**\r\n * Is the value a valid URL?\r\n * @param val\r\n */\r\nexport function isUrl(val: unknown): boolean {\r\n if (typeof val === \"string\") {\r\n // https://www.regextester.com/1965\r\n // Modified from link above to support urls like \"http://localhost:6229/Person/1/Edit\" (Url does not have a period)\r\n const re = /^(http[s]?:\\/\\/)?[^\\s([\"<,>]*\\.?[^\\s[\",><]*$/;\r\n return re.test(val);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Make the URL safe to use for redirects. Basically, this strips off any\r\n * protocol and hostname from the URL and ensures it's not a javascript:\r\n * url or anything like that.\r\n *\r\n * @param url The URL to be made safe to use with a redirect.\r\n *\r\n * @returns A string that is safe to assign to window.location.href.\r\n */\r\nexport function makeUrlRedirectSafe(url: string): string {\r\n try {\r\n // If this can't be parsed as a url, such as \"/page/123\" it will throw\r\n // an error which will be handled by the next section.\r\n const u = new URL(url);\r\n\r\n // If the protocol isn't an HTTP or HTTPS, then it is most likely\r\n // a dangerous URL.\r\n if (u.protocol !== \"http:\" && u.protocol !== \"https:\") {\r\n return \"/\";\r\n }\r\n\r\n // Try again incase they did something like \"http:javascript:alert('hi')\".\r\n return makeUrlRedirectSafe(`${u.pathname}${u.search}`);\r\n }\r\n catch {\r\n // If the URL contains a : but could not be parsed as a URL then it\r\n // is not valid, so return \"/\" so they get redirected to home page.\r\n if (url.indexOf(\":\") !== -1) {\r\n return \"/\";\r\n }\r\n\r\n // Otherwise consider it safe to use.\r\n return url;\r\n }\r\n}\r\n\r\n/**\r\n * Keep a list of named Refs synchronized with URL query parameters in the address of the same names.\r\n * If there are already query parameters in the URL with those names, the Refs will be assigned those\r\n * values. This will also watch those Refs for changes and update the query parameters to reflect\r\n * those changes.\r\n *\r\n * @param refs An object where the keys represent the query parameters keys to keep synchronized with\r\n * and the values are the Refs those query parameters are synched with.\r\n */\r\nexport function syncRefsWithQueryParams(refs: Record): void {\r\n // Get current query parameters\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n Object.entries(refs).forEach(([key, ref]: [string, Ref]) => {\r\n let param = null;\r\n\r\n // try to get the decoded parameter value\r\n try {\r\n param = JSON.parse(decodeURI(params.get(key) ?? \"\"));\r\n }\r\n catch (e) { /* just leave the param as null */ }\r\n\r\n // If we found a value, set the Ref to it\r\n if (param != null) {\r\n ref.value = param;\r\n }\r\n\r\n // keep URL params up-to-date with changes to this Ref\r\n watch(ref, updater(key));\r\n });\r\n\r\n //\r\n function updater(key) {\r\n return (value) => {\r\n params.set(key, encodeURI(JSON.stringify(value)));\r\n\r\n history.replaceState(null, \"\", \"?\" + params.toString());\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Removes query parameters from the current URL and replaces the state in history.\r\n *\r\n * @param queryParamKeys The string array of query parameter keys to remove from the current URL.\r\n */\r\nexport function removeCurrentUrlQueryParams(...queryParamKeys: string[]): (string | null)[] {\r\n return removeUrlQueryParams(window.location.href, ...queryParamKeys);\r\n}\r\n\r\n/**\r\n * Removes query parameters from the current URL and replaces the state in history.\r\n *\r\n * @param url The URL from which to remove the query parameters.\r\n * @param queryParamKeys The string array of query parameter keys to remove from the current URL.\r\n */\r\nexport function removeUrlQueryParams(url: string | URL, ...queryParamKeys: string[]): (string | null)[] {\r\n if (!queryParamKeys || !queryParamKeys.length) {\r\n return [];\r\n }\r\n\r\n if (typeof url === \"string\") {\r\n url = new URL(url);\r\n }\r\n\r\n const queryParams = url.searchParams;\r\n\r\n const removedQueryParams: (string | null)[] = [];\r\n\r\n for (let i = 0; i < queryParamKeys.length; i++) {\r\n const queryParamKey = queryParamKeys[i];\r\n removedQueryParams.push(queryParams.get(queryParamKey));\r\n queryParams.delete(queryParamKey);\r\n }\r\n\r\n window.history.replaceState(null, \"\", url);\r\n\r\n return removedQueryParams;\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport type { RulesPropType, ValidationResult, ValidationRule, ValidationRuleFunction, ValidationRuleReference } from \"@Obsidian/Types/validationRules\";\r\nimport type { PropType } from \"vue\";\r\n\r\n/** The currently defined rules by name. */\r\nconst definedRules: Record = {};\r\n\r\n/** Defines the property type for a component's rules. */\r\nexport const rulesPropType: RulesPropType = {\r\n type: [Array, Object, String] as PropType,\r\n default: \"\"\r\n};\r\n\r\n/**\r\n * Parse a string into a valid rule reference. Basically this does the heavy\r\n * lifting to take a string and spit out the rule name and parameters. This\r\n * assumes the rule has already been normalized and does not contain multiple\r\n * rules separated by a | character.\r\n *\r\n * @param rule The rule to be parsed.\r\n *\r\n * @returns The rule reference that contains the name and parameters.\r\n */\r\nexport function parseRule(rule: string): ValidationRuleReference {\r\n let name = \"\";\r\n let params: unknown[] = [];\r\n\r\n const colonIndex = rule.indexOf(\":\");\r\n if (colonIndex === -1) {\r\n name = rule;\r\n }\r\n else {\r\n name = rule.substring(0, colonIndex);\r\n params = rule.substring(colonIndex + 1).split(\",\");\r\n }\r\n\r\n return {\r\n name,\r\n params\r\n };\r\n}\r\n\r\n/**\r\n * Normalize a single rule or array of rules into a flat array of rules. This\r\n * handles strings that contain multiple rules and splits them out into individual\r\n * rule strings.\r\n *\r\n * @param rules The rules to be normalized.\r\n *\r\n * @returns A flattened array that contains all the individual rules.\r\n */\r\nexport function normalizeRules(rules: ValidationRule | ValidationRule[]): ValidationRule[] {\r\n if (typeof rules === \"string\") {\r\n if (rules.indexOf(\"|\") !== -1) {\r\n return rules.split(\"|\").filter(r => r.trim() !== \"\");\r\n }\r\n else if (rules.trim() !== \"\") {\r\n return [rules.trim()];\r\n }\r\n }\r\n else if (Array.isArray(rules)) {\r\n // Normalize the rule, since it may contain a string like \"required|notzero\"\r\n // which needs to be further normalized.\r\n const normalizedRules: ValidationRule[] = [];\r\n\r\n for (const r of rules) {\r\n normalizedRules.push(...normalizeRules(r));\r\n }\r\n\r\n return normalizedRules;\r\n }\r\n else if (typeof rules === \"function\") {\r\n return [rules];\r\n }\r\n else if (typeof rules === \"object\") {\r\n return [rules];\r\n }\r\n\r\n return [];\r\n}\r\n\r\n/**\r\n * Checks if any of the specified rules indicates a rule that requires the value\r\n * to be filled in.\r\n *\r\n * @param rules The rules to be checked.\r\n *\r\n * @returns True if any of the rules is considered a required rule; otherwise false.\r\n */\r\nexport function containsRequiredRule(rules: ValidationRule | ValidationRule[]): boolean {\r\n return normalizeRules(rules).some(r => r === \"required\");\r\n}\r\n\r\n/**\r\n * Normalizes rules to callable functions. This is used to translate string\r\n * and reference rules to their final function that will be called.\r\n *\r\n * @param rules The rules to be normalized to functions.\r\n *\r\n * @returns An array of rule functions that will perform validation checks.\r\n */\r\nfunction normalizeRulesToFunctions(rules: ValidationRule[]): ValidationRuleFunction[] {\r\n const ruleFunctions: ValidationRuleFunction[] = [];\r\n\r\n for (const rule of rules) {\r\n if (typeof rule === \"string\") {\r\n const ruleRef = parseRule(rule);\r\n const fn = definedRules[ruleRef.name];\r\n\r\n if (fn) {\r\n ruleFunctions.push((value) => fn(value, ruleRef.params));\r\n }\r\n else {\r\n console.warn(`Attempt to validate with unknown rule ${rule}.`);\r\n }\r\n }\r\n else if (typeof rule === \"function\") {\r\n ruleFunctions.push(rule);\r\n }\r\n else if (typeof rule === \"object\") {\r\n const fn = definedRules[rule.name];\r\n\r\n if (fn) {\r\n ruleFunctions.push((value) => fn(value, rule.params));\r\n }\r\n else {\r\n console.warn(`Attempt to validate with unknown rule ${rule.name}.`);\r\n }\r\n }\r\n }\r\n\r\n return ruleFunctions;\r\n}\r\n\r\n/**\r\n * Normalize a validation result into a useful text message that can be\r\n * displayed to the user.\r\n *\r\n * @param result The validation error message or a blank string if validation passed.\r\n */\r\nfunction normalizeRuleResult(result: ValidationResult): string {\r\n if (typeof result === \"string\") {\r\n return result;\r\n }\r\n else if (result === true) {\r\n return \"\";\r\n }\r\n else {\r\n return \"failed validation\";\r\n }\r\n}\r\n\r\n/**\r\n * Runs validation on the value for all the rules provided.\r\n *\r\n * @param value The value to be checked.\r\n * @param rule The array of rules that will be used during validation.\r\n *\r\n * @returns An array of error messages, or empty if value passed.\r\n */\r\nexport function validateValue(value: unknown, rule: ValidationRule | ValidationRule[]): string[] {\r\n const fns = normalizeRulesToFunctions(normalizeRules(rule));\r\n\r\n const results: string[] = [];\r\n\r\n for (const fn of fns) {\r\n const result = normalizeRuleResult(fn(value));\r\n\r\n if (result !== \"\") {\r\n results.push(result);\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n\r\n/**\r\n * Define a new rule by name and provide the validation function.\r\n *\r\n * @param ruleName The name of the rule to be registered.\r\n * @param validator The validation function.\r\n */\r\nexport function defineRule(ruleName: string, validator: ValidationRuleFunction): void {\r\n if (definedRules[ruleName] !== undefined) {\r\n console.warn(`Attempt to redefine validation rule ${ruleName}.`);\r\n }\r\n else {\r\n definedRules[ruleName] = validator;\r\n }\r\n}\r\n"],"names":["doApiCallRaw","_x","_x2","_x3","_x4","_x5","_doApiCallRaw","apply","arguments","_asyncToGenerator","method","url","params","data","cancellationToken","axios","signal","getSignal","controller","AbortController","onCancellationRequested","aborted","abort","doApiCall","_x6","_x7","_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","_x8","_get","post","_x9","_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","_x10","_x11","_x12","_uploadFile","progress","headers","onUploadProgress","event","total","loaded","Math","floor","uploadContentFile","_x13","_x14","_x15","_x16","_uploadContentFile","file","encryptedRootFolder","folderPath","_options$baseUrl","concat","baseUrl","encodeURIComponent","formData","FormData","append","text","FileName","uploadAssetProviderFile","_x17","_x18","_x19","_x20","_uploadAssetProviderFile","assetStorageId","_options$baseUrl2","uploadBinaryFile","_x21","_x22","_x23","_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","lastOrUndefined","single","singleOrUndefined","orderBy","comparer","OrderedList","orderByDescending","where","toArray","baseComparer","sort","thenBy","thenByDescending","Enumerable","iterableFactory","from","source","iterator","self","_iterator","_createForOfIteratorHelper","_step","s","n","done","item","err","f","select","selector","_iterator2","_step2","skip","count","skipped","_iterator3","_step3","take","i","_iterator4","_step4","firstOrDefault","defaultValue","_iterator5","_step5","lastOrDefault","last","_iterator6","_step6","aggregate","accumulator","seed","index","_iterator7","_step7","_iterator8","_step8","all","_iterator9","_step9","action","_iterator10","_step10","toList","OrderedEnumerable","descendingComparer","withIndex","_iterator11","_step11","ofType","typeCheck","_iterator12","_step12","initialComparer","sortComparers","thenOrderBy","_iterator13","_step13","cmp","thenOrderByDescending","array","_iterator14","_step14","emptyGuid","newGuid","replace","c","r","random","v","toString","normalize","isValidGuid","guid","test","toGuidOrNull","areEqual","isEmpty","isWhiteSpace","trim","isNullOrWhiteSpace","splitCase","asCommaAnd","strs","andStr","pop","join","toTitleCase","str","word","charAt","toUpperCase","substring","toKebabCase","_options$preserveMult","preserveMultipleDashes","_options$allowLeading","allowLeadingDashes","_options$allowTrailin","allowTrailingDashes","_options$allowSpecial","allowSpecialChars","upperCaseFirstCharacter","pluralize","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","chr","charCodeAt","replaceAll","search","safeParseJson","JSON","parse","_unused","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","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","freeze","_defineProperty","cancel","isCancelled","emitter","emit","mitt","on","CancellationTokenSource","parent","token","internalToken","getUniqueCssSelector","el","path","parentNode","unshift","tagName","indexOf","children","getAncestors","element","parentElement","scrollElementStartToTop","isWithinScrolledContainer","ancestorElement","_getComputedStyle","getComputedStyle","overflowY","isScrollable","scrollHeight","clientHeight","scrollIntoView","block","behavior","rect","getBoundingClientRect","desiredLeft","left","desiredTop","elementsAtDesiredLocation","document","elementsFromPoint","fixedElementAtDesiredLocation","find","position","_fixedElementAtDesire","fixedHeight","height","scrollBy","top","findDirectChildContaining","descendantElement","current","isHTMLElement","findNearestIFrameElementFromPoint","iframe","x","y","_iframe$contentWindow","xRange","yRange","iframeDoc","contentDocument","contentWindow","console","error","isAbove","isBelow","isLeft","isRight","iframeRect","closestElement","smallestDistance","Infinity","_loop","dx","_loop2","dy","matches","elementX","elementY","distance","sqrt","pow","getWindow","ownerDocument","defaultView","isElement","_el$ownerDocument","elWindow","Element","_el$ownerDocument2","HTMLElement","isHTMLAnchorElement","_el$ownerDocument3","HTMLAnchorElement","isDocument","doc","docWindow","Document","isMouseEvent","eventWindow","MouseEvent","isTouchEvent","TouchEvent","removeWhiteSpaceFromElement","_element$textContent","childNodes","nodeType","Node","TEXT_NODE","textContent","innerHTML","removeWhiteSpaceFromElementAndChildElements","removeWhiteSpaceFromChildElements","querySelectorAll","deepEqual","strict","isNaN","aEntries","entries","bEntries","aEntry","bEntry","debounce","fn","delay","eager","timeout","clearTimeout","debounceAsync","_options$delay","_options$eager","isEagerExecutionInProgress","pendingPromise","_ref","parentCancellationToken","_source","cts","Promise","resolve","reject","isNullish","isNotNullish","PageMessages","QueryStringChanged","BlockMessages","BeginEdit","EndEdit","useBrowserBus","BrowserBus","customDomEventName","_objectSpread","eventListener","onEvent","addEventListener","CustomEvent","detail","name","timestamp","onMessage","handlers","_i","_handlers","handler","blockType","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","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","withPrefix","off","emptyPreferenceProvider","blockPreferences","getGlobalPreferences","getEntityPreferences","providePersonPreferences","provider","usePersonPreferences","_inject","asBooleanOrNull","asString","asBoolean","asYesNoOrNull","boolOrNull","asTrueFalseOrNull","asTrueOrFalseString","keyPrefix","set","key","ttl","warn","expiration","cache","cacheJson","stringify","sessionStorage","setItem","getItem","promiseCache","cachePromiseFactory","_promiseCache$key","cachedResult","then","catch","suspenseSymbol","BasicSuspenseProvider","parentProvider","operationKey","pendingOperations","finishedHandlers","allOperationsComplete","nextTick","completeAsyncOperation","addOperation","operation","startAsyncOperation","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","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","dataViewFilterProps","modelValue","required","filterMode","dataViewSelectProps","extendedRef","refValue","propertyRef","getVNodeProp","node","propName","defaultProps","defaultProp","getVNodeProps","_node$type$props$_p","propType","_toNumberOrNull","extractText","createElement","vnode","createVNode","render","innerText","extractHtml","html","dateKeyLength","dateKeyNoYearLength","getYear","dateKey","getMonth","getDay","toDateKey","yearStr","monthStr","dayStr","toNoYearDateKey","smoothScrollToTop","scrollTo","currentModalCount","trackModalState","body","cssClasses","cssClass","classList","add","remove","loadJavaScriptAsync","_loadJavaScriptAsync","isScriptLoaded","fingerprint","_Obsidian","src","Obsidian","scripts","getElementsByTagName","thisScript","promise","scriptLoadedPromise","script","setAttribute","appendChild","_scriptLoadedPromise","scriptElement","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","button","btn","className","dialogBody","hideCloseButton","querySelector","offsetHeight","focus","alert","_alert","confirm","_confirm","confirmDelete","typeName","additionalMessage","showSecurity","entityTypeIdKey","entityIdKey","entityTitle","Rock","controls","show","showChildPages","pageId","isEmail","re","enumToListItemBag","description","listItemBagList","order","property","fieldTypeTable","fieldTypeAttributeGuidSymbol","registerFieldType","fieldTypeGuid","fieldType","normalizedGuid","getFieldType","field","provideFieldTypeAttributeGuid","useFieldTypeAttributeGuid","downloadFile","_downloadFile","filename","URL","createObjectURL","href","download","click","removeChild","revokeObjectURL","fetchImageFileExtensions","_fetchImageFileExtensions","getImageFileExtensions","Cache","isImage","_isImage","_imageExtensions$incl","imageExtensions","extension","resizeImageFileProcessor","maxWidth","maxHeight","startsWith","img","Image","onload","width","widthScale","heightScale","scaleFactor","min","newWidth","newHeight","canvas","ctx","getContext","drawImage","toBlob","blob","resizedFile","File","onerror","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","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","attr","attrParts","frequency","_getDateFromString","_getDateTimeFromStrin","_toNumberOrNull2","interval","byMonthDay","byDay","build","monthDayValues","md","dayValues","d","getDates","eventStartDateTime","startDateTime","endDateTime","dateCount","nextDate","nextDateAfter","loopCount","Event","icsContent","uid","feeder","buildLines","excludedDates","rDate","recurrenceRules","rrule","line","splitAt","keyAttributes","keySegments","attrSegments","_getDateTimeFromStrin2","_getDateTimeFromStrin3","dateValues","dateValue","isDateExcluded","rockDateOnly","excludedDate","_recurrenceDates","toFriendlyText","toFriendlyString","toFriendlyHtml","startTimeText","hour12","offsetNames","nameText","firstDate","lastDate","listHtml","Calendar","events","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","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","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","applyTooltip","_options$sanitize2","showTooltip","destroyTooltip","resetTooltip","CategoryTreeItemProvider","getItems","parentGuid","_this","entityTypeQualifierColumn","entityTypeQualifierValue","lazyLoad","getCategorizedItems","includeCategoriesWithoutChildren","includeInactiveItems","includeUnnamedEntityItems","getRootItems","_this2","rootCategoryGuid","getChildItems","_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","allPages","parentPage","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","AdaptiveMessageTreeItemProvider","_this51","parentValue","_this52","_this53","isUrl","makeUrlRedirectSafe","u","protocol","pathname","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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"}