{"version":3,"file":"textBox.obs.js","sources":["../../../Framework/Controls/textBox.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <RockFormField v-model=\"internalValue\" :formGroupClasses=\"'rock-text-box ' + formGroupClasses\" name=\"textbox\">\r\n        <template #pre>\r\n            <em v-if=\"showCountDown\" class=\"pull-right badge\" :class=\"countdownClass\">\r\n                {{ charsRemaining }}\r\n            </em>\r\n        </template>\r\n        <template #default=\"{ uniqueId, field }\">\r\n            <div class=\"control-wrapper\">\r\n                <slot name=\"prepend\" :isInputGroupSupported=\"true\" />\r\n                <div :class=\"controlContainerClass\">\r\n                    <slot name=\"inputGroupPrepend\" :isInputGroupSupported=\"true\" />\r\n                    <textarea v-if=\"isTextarea\" v-model=\"internalValue\" :rows=\"rows\" cols=\"20\" :maxlength=\"maxLength\" :id=\"uniqueId\" class=\"form-control\" v-bind=\"field\"></textarea>\r\n                    <input v-else v-model=\"internalValue\" :id=\"uniqueId\" :type=\"type\" :class=\"formControlClass\" v-bind=\"field\" :maxlength=\"maxLength\" :placeholder=\"placeholder\" />\r\n                    <slot name=\"inputGroupAppend\" :isInputGroupSupported=\"true\" />\r\n                </div>\r\n                <slot name=\"append\" :isInputGroupSupported=\"true\" />\r\n            </div>\r\n        </template>\r\n    </RockFormField>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, useSlots } from \"vue\";\r\n    import { PropType } from \"vue\";\r\n    import { useVModelPassthrough } from \"@Obsidian/Utility/component\";\r\n    import RockFormField from \"./rockFormField.obs\";\r\n\r\n    const props = defineProps({\r\n        modelValue: {\r\n            type: String as PropType<string>,\r\n            required: true\r\n        },\r\n        type: {\r\n            type: String as PropType<string>,\r\n            default: \"text\"\r\n        },\r\n        maxLength: {\r\n            type: Number as PropType<number>,\r\n            default: 524288\r\n        },\r\n        showCountDown: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n        placeholder: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n        inputClasses: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n        formGroupClasses: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n        rows: {\r\n            type: Number as PropType<number>,\r\n            default: 3\r\n        },\r\n        textMode: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n        size: {\r\n            type: String as PropType<\"small\" | \"medium\" | \"large\">,\r\n            default: \"medium\"\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"update:modelValue\", value: string): void;\r\n    }>();\r\n\r\n    const slots = useSlots();\r\n\r\n    const internalValue = useVModelPassthrough(props, \"modelValue\", emit);\r\n\r\n    const isTextarea = computed((): boolean => {\r\n        return props.textMode?.toLowerCase() === \"multiline\";\r\n    });\r\n\r\n    const charsRemaining = computed((): number => {\r\n        return props.maxLength - internalValue.value.length;\r\n    });\r\n\r\n    const countdownClass = computed((): string => {\r\n        if (charsRemaining.value >= 10) {\r\n            return \"badge-default\";\r\n        }\r\n\r\n        if (charsRemaining.value >= 0) {\r\n            return \"badge-warning\";\r\n        }\r\n\r\n        return \"badge-danger\";\r\n    });\r\n\r\n    const isInputGroup = computed((): boolean => {\r\n        return !!slots.inputGroupPrepend || !!slots.inputGroupAppend;\r\n    });\r\n\r\n    const controlContainerClass = computed((): Record<string, boolean> => {\r\n        return {\r\n            \"input-group col-xs-12\": isInputGroup.value,\r\n            \"input-group-sm\": isInputGroup.value && props.size == \"small\",\r\n            \"input-group-lg\": isInputGroup.value && props.size == \"large\"\r\n        };\r\n    });\r\n\r\n    const formControlClass = computed((): Record<string, boolean> => {\r\n        return {\r\n            \"form-control\": true,\r\n            [props.inputClasses]: true,\r\n            \"input-sm\": props.size == \"small\",\r\n            \"input-lg\": props.size == \"large\"\r\n        };\r\n    });\r\n</script>\r\n"],"names":["slots","useSlots","internalValue","useVModelPassthrough","props","emit","isTextarea","computed","_props$textMode","textMode","toLowerCase","charsRemaining","maxLength","value","length","countdownClass","isInputGroup","inputGroupPrepend","inputGroupAppend","controlContainerClass","size","formControlClass","inputClasses"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA4EI,IAAMA,KAAK,GAAGC,QAAQ,EAAE,CAAA;UAExB,IAAMC,aAAa,GAAGC,oBAAoB,CAACC,KAAK,EAAE,YAAY,EAAEC,IAAI,CAAC,CAAA;MAErE,IAAA,IAAMC,UAAU,GAAGC,QAAQ,CAAC,MAAe;MAAA,MAAA,IAAAC,eAAA,CAAA;MACvC,MAAA,OAAO,CAAAA,CAAAA,eAAA,GAAAJ,KAAK,CAACK,QAAQ,MAAA,IAAA,IAAAD,eAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAdA,eAAA,CAAgBE,WAAW,EAAE,MAAK,WAAW,CAAA;MACxD,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMC,cAAc,GAAGJ,QAAQ,CAAC,MAAc;YAC1C,OAAOH,KAAK,CAACQ,SAAS,GAAGV,aAAa,CAACW,KAAK,CAACC,MAAM,CAAA;MACvD,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMC,cAAc,GAAGR,QAAQ,CAAC,MAAc;MAC1C,MAAA,IAAII,cAAc,CAACE,KAAK,IAAI,EAAE,EAAE;MAC5B,QAAA,OAAO,eAAe,CAAA;MAC1B,OAAA;MAEA,MAAA,IAAIF,cAAc,CAACE,KAAK,IAAI,CAAC,EAAE;MAC3B,QAAA,OAAO,eAAe,CAAA;MAC1B,OAAA;MAEA,MAAA,OAAO,cAAc,CAAA;MACzB,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMG,YAAY,GAAGT,QAAQ,CAAC,MAAe;YACzC,OAAO,CAAC,CAACP,KAAK,CAACiB,iBAAiB,IAAI,CAAC,CAACjB,KAAK,CAACkB,gBAAgB,CAAA;MAChE,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMC,qBAAqB,GAAGZ,QAAQ,CAAC,MAA+B;YAClE,OAAO;cACH,uBAAuB,EAAES,YAAY,CAACH,KAAK;cAC3C,gBAAgB,EAAEG,YAAY,CAACH,KAAK,IAAIT,KAAK,CAACgB,IAAI,IAAI,OAAO;cAC7D,gBAAgB,EAAEJ,YAAY,CAACH,KAAK,IAAIT,KAAK,CAACgB,IAAI,IAAI,OAAA;aACzD,CAAA;MACL,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMC,gBAAgB,GAAGd,QAAQ,CAAC,MAA+B;YAC7D,OAAO;MACH,QAAA,cAAc,EAAE,IAAI;MACpB,QAAA,CAACH,KAAK,CAACkB,YAAY,GAAG,IAAI;MAC1B,QAAA,UAAU,EAAElB,KAAK,CAACgB,IAAI,IAAI,OAAO;MACjC,QAAA,UAAU,EAAEhB,KAAK,CAACgB,IAAI,IAAI,OAAA;aAC7B,CAAA;MACL,KAAC,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}