{"version":3,"file":"datePickerBase.obs.js","sources":["../../../Framework/Controls/datePickerBase.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <div class=\"input-group input-width-md js-date-picker date\">\r\n        <input ref=\"inputEl\" type=\"text\" :id=\"computedId\" class=\"form-control\" v-model.lazy=\"internalValue\" :disabled=\"disabled\" />\r\n        <span class=\"input-group-addon\">\r\n            <i class=\"fa fa-calendar\"></i>\r\n        </span>\r\n    </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n    declare global {\r\n        /* eslint-disable @typescript-eslint/naming-convention */\r\n        interface Window {\r\n            Rock: {\r\n                controls: {\r\n                    datePicker: {\r\n                        initialize: (args: Record<string, unknown>) => void\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        /* eslint-enable @typescript-eslint/naming-convention */\r\n    }\r\n\r\n    export enum StartViewOption {\r\n        Month = 0,\r\n        Year = 1,\r\n        Decade = 2\r\n    }\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, onMounted, PropType, watch, ref } from \"vue\";\r\n    import { newGuid } from \"@Obsidian/Utility/guid\";\r\n\r\n    const props = defineProps({\r\n        modelValue: {\r\n            type: String as PropType<string | null>,\r\n            default: null\r\n        },\r\n\r\n        id: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        /** Whether to parse the entered value and reformat it to match the set format */\r\n        disableForceParse: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        /** If set to true, only clicking on the calendar icon will open the calendar widget */\r\n        disableShowOnFocus: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        /** Whether or not to highlight the current day on the calendar */\r\n        disableHighlightToday: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        /** Whether or not the user should be able to select dates in the future */\r\n        disallowFutureDateSelection: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        /** Whether or not the user should be able to select dates in the past */\r\n        disallowPastDateSelection: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        /** Which view do we open the calendar widget on? 0 = Month, 1 = Year, 2 = Decade */\r\n        startView: {\r\n            type: Number as PropType<0 | 1 | 2>,\r\n            default: 0\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"update:modelValue\", val: string | null): void\r\n    }>();\r\n\r\n    // #region Values\r\n\r\n    const internalValue = ref<string | null>(null);\r\n    const defaultId = `datepicker-${newGuid()}`;\r\n    const inputEl = ref<HTMLInputElement | null>(null);\r\n\r\n    // #endregion\r\n\r\n    // #region Computed Values\r\n\r\n    const computedId = computed(() => {\r\n        return props.id || defaultId;\r\n    });\r\n\r\n    const asRockDateOrNull = computed(() => {\r\n        const match = /^(\\d+)\\/(\\d+)\\/(\\d+)/.exec(internalValue.value ?? \"\");\r\n\r\n        if (match !== null) {\r\n            return `${match[3]}-${match[1]}-${match[2]}`;\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    });\r\n\r\n    const dateLimiterOptions = computed(() => {\r\n        const options: Record<string, Date> = {};\r\n        if (props.disallowFutureDateSelection) {\r\n            options.endDate = new Date();\r\n        }\r\n        if (props.disallowPastDateSelection) {\r\n            options.startDate = new Date();\r\n        }\r\n\r\n        return options;\r\n    });\r\n\r\n    // #endregion\r\n\r\n    // #region Watchers\r\n\r\n    watch(() => props.modelValue, () => {\r\n        if (!props.modelValue) {\r\n            internalValue.value = null;\r\n\r\n            return;\r\n        }\r\n\r\n        const match = /^(\\d+)-(\\d+)-(\\d+)/.exec(props.modelValue);\r\n\r\n        if (match !== null) {\r\n            internalValue.value = `${match[2]}/${match[3]}/${match[1]}`;\r\n        }\r\n        else {\r\n            internalValue.value = null;\r\n        }\r\n    }, { immediate: true });\r\n\r\n    watch(asRockDateOrNull, () => {\r\n        emit(\"update:modelValue\", asRockDateOrNull.value);\r\n    });\r\n\r\n    // #endregion\r\n\r\n    // #region Lifecycle\r\n\r\n    onMounted(() => {\r\n        const input = inputEl.value as HTMLInputElement;\r\n\r\n        window.Rock.controls.datePicker.initialize({\r\n            ...(dateLimiterOptions.value),\r\n            id: input.id,\r\n            startView: props.startView,\r\n            showOnFocus: !props.disableShowOnFocus,\r\n            format: \"mm/dd/yyyy\",\r\n            todayHighlight: !props.disableHighlightToday,\r\n            forceParse: !props.disableForceParse,\r\n            onChangeScript: () => {\r\n                internalValue.value = input.value;\r\n            }\r\n        });\r\n    });\r\n\r\n    // #endregion\r\n\r\n</script>\r\n"],"names":["StartViewOption","internalValue","ref","defaultId","concat","newGuid","inputEl","computedId","computed","props","id","asRockDateOrNull","_internalValue$value","match","exec","value","dateLimiterOptions","options","disallowFutureDateSelection","endDate","Date","disallowPastDateSelection","startDate","watch","modelValue","immediate","emit","onMounted","input","window","Rock","controls","datePicker","initialize","_objectSpread","startView","showOnFocus","disableShowOnFocus","format","todayHighlight","disableHighlightToday","forceParse","disableForceParse","onChangeScript"],"mappings":"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"}