{"version":3,"file":"radioButtonList.obs.js","sources":["../../../Framework/Controls/radioButtonList.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <RockFormField\r\n                   :formGroupClasses=\"'rock-radio-button-list ' + formGroupClasses\"\r\n                   #default=\"{ uniqueId }\" name=\"radiobuttonlist\" v-model=\"internalValue\">\r\n        <div class=\"control-wrapper\">\r\n            <slot name=\"prepend\" :isInputGroupSupported=\"false\" />\r\n            <div class=\"controls rockradiobuttonlist\" :class=\"containerClasses\">\r\n                <span>\r\n                    <template v-if=\"horizontal\">\r\n                        <label v-for=\"item in actualItems\" class=\"radio-inline\" :for=\"getItemUniqueId(uniqueId, item)\" :key=\"item.value ?? undefined\">\r\n                            <input :id=\"getItemUniqueId(uniqueId, item)\" :name=\"uniqueId\" type=\"radio\" :value=\"item.value\" v-model=\"internalValue\" :disabled=\"isItemDisabled(item)\" />\r\n                            <span class=\"label-text\">{{ item.text }}</span>\r\n                        </label>\r\n                    </template>\r\n                    <template v-else>\r\n                        <div v-for=\"item in actualItems\" class=\"radio\" :key=\"item.value ?? undefined\">\r\n                            <label :for=\"getItemUniqueId(uniqueId, item)\">\r\n                                <input :id=\"getItemUniqueId(uniqueId, item)\" :name=\"uniqueId\" type=\"radio\" :value=\"item.value\" v-model=\"internalValue\" :disabled=\"isItemDisabled(item)\" />\r\n                                <span class=\"label-text\">{{ item.text }}</span>\r\n                            </label>\r\n                        </div>\r\n                    </template>\r\n                </span>\r\n            </div>\r\n            <slot name=\"append\" :isInputGroupSupported=\"false\" />\r\n        </div>\r\n    </RockFormField>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, PropType, ref, watch } from \"vue\";\r\n    import { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n    import RockFormField from \"./rockFormField.obs\";\r\n    import { updateRefValue } from \"@Obsidian/Utility/component\";\r\n    import { defaultControlCompareValue } from \"@Obsidian/Utility/stringUtils\";\r\n\r\n    const props = defineProps({\r\n        items: {\r\n            type: Array as PropType<ListItemBag[]>,\r\n            default: []\r\n        },\r\n\r\n        modelValue: {\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            required: false,\r\n            default: false\r\n        },\r\n\r\n        formGroupClasses: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n\r\n        repeatColumns: {\r\n            type: Number as PropType<number>,\r\n            default: 0\r\n        },\r\n\r\n        horizontal: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        showBlankItem: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        compareValue: {\r\n            type: Function as PropType<((value: string, itemValue: string) => boolean)>,\r\n            default: defaultControlCompareValue\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 internalValue = ref(props.modelValue);\r\n\r\n    const containerClasses = computed((): string => {\r\n        const classes: string[] = [];\r\n\r\n        if (props.repeatColumns > 0) {\r\n            classes.push(`in-columns in-columns-${props.repeatColumns}`);\r\n        }\r\n\r\n        if (props.horizontal) {\r\n            classes.push(\"rockradiobuttonlist-horizontal\");\r\n        }\r\n        else {\r\n            classes.push(\"rockradiobuttonlist-vertical\");\r\n        }\r\n\r\n        return classes.join(\" \");\r\n    });\r\n\r\n    const actualItems = computed((): ListItemBag[] => {\r\n        const items = [...props.items];\r\n\r\n        if (props.showBlankItem) {\r\n            items.splice(0, 0, {\r\n                value: \"\",\r\n                text: \"None\"\r\n            });\r\n        }\r\n\r\n        return items;\r\n    });\r\n\r\n    function isItemDisabled(item: ListItemBag): boolean {\r\n        return item.category === \"disabled\" || props.disabled;\r\n    }\r\n\r\n    const getItemUniqueId = (uniqueId: string, item: ListItemBag): string => {\r\n        const key = (item.value ?? \"\").replace(\" \", \"-\");\r\n\r\n        return `${uniqueId}-${key}`;\r\n    };\r\n\r\n    const syncInternalValue = (): void => {\r\n        let value = props.modelValue;\r\n\r\n        if (value) {\r\n            // Ensure it is a valid value, if not then set it to blank.\r\n            const selectedOption = props.items.find(o => props.compareValue(value as string, o.value ?? \"\")) || null;\r\n\r\n            if (!selectedOption) {\r\n                value = \"\";\r\n            }\r\n            else {\r\n                value = selectedOption.value ?? \"\";\r\n            }\r\n        }\r\n\r\n        updateRefValue(internalValue, value);\r\n    };\r\n\r\n    watch([() => props.modelValue, () => props.items], () => {\r\n        syncInternalValue();\r\n    });\r\n\r\n    watch(internalValue, () => {\r\n        emit(\"update:modelValue\", internalValue.value);\r\n    });\r\n\r\n    syncInternalValue();\r\n</script>\r\n"],"names":["internalValue","ref","props","modelValue","containerClasses","computed","classes","repeatColumns","push","concat","horizontal","join","actualItems","items","showBlankItem","splice","value","text","isItemDisabled","item","category","disabled","getItemUniqueId","uniqueId","_item$value","key","replace","syncInternalValue","selectedOption","find","o","_o$value","compareValue","_selectedOption$value","updateRefValue","watch","emit"],"mappings":"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"}