{"version":3,"file":"tabbedBar.obs.js","sources":["../../../Framework/Controls/tabbedBar.obs","../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <div class=\"tabbed-bar\" :class=\"{ 'pills': props.type === 'pills' }\">\r\n        <ul class=\"toolbar-nav\" ref=\"toolbarNavElement\">\r\n            <li v-for=\"tab in tabs\" :class=\"{ active: isTabActive(tab) }\">\r\n                <span class=\"title\" @click.prevent=\"onSelectTab(tab)\">\r\n                    {{ getTabText(tab) }}\r\n                </span>\r\n            </li>\r\n\r\n            <li class=\"more-items\">\r\n                <DropDownMenu :items=\"overflowTabActions\" align=\"right\">\r\n                    <span class=\"title text-muted\">More <i class=\"fa fa-chevron-down\"></i></span>\r\n                </DropDownMenu>\r\n            </li>\r\n        </ul>\r\n    </div>\r\n</template>\r\n\r\n<style scoped>\r\n.tabbed-bar {\r\n    border-bottom: 6px solid #dedede;\r\n    padding: 0 24px;\r\n}\r\n\r\n.tabbed-bar > .toolbar-nav {\r\n    display: flex;\r\n    margin: 0;\r\n    padding: 0;\r\n    margin-bottom: -6px;\r\n    list-style-type: none;\r\n}\r\n\r\n.tabbed-bar > .toolbar-nav > li {\r\n    display: inline-block;\r\n    padding: 8px 12px;\r\n    border-bottom: 6px solid transparent;\r\n    white-space: nowrap;\r\n    transition: border-bottom-color 0.25s ease;\r\n}\r\n\r\n.tabbed-bar > .toolbar-nav > li:hover {\r\n    border-bottom-color: #cecece;\r\n}\r\n\r\n.tabbed-bar > .toolbar-nav > li.active {\r\n    border-bottom-color: var(--color-primary, #a8a8a8);\r\n}\r\n\r\n.tabbed-bar > .toolbar-nav > li .title {\r\n    display: inline-block;\r\n    padding: 4px 6px;\r\n    cursor: pointer;\r\n    font-weight: 600;\r\n}\r\n\r\n.tabbed-bar > .toolbar-nav > li > a {\r\n    color: #000;\r\n}\r\n\r\n.tabbed-bar > .toolbar-nav > li.more-items {\r\n    font-weight: initial;\r\n}\r\n\r\n.tabbed-bar > .toolbar-nav > li.more-items .fa {\r\n    margin-left: 8px;\r\n}\r\n\r\n/* Pills overrides. */\r\n.tabbed-bar.pills {\r\n    margin-bottom: 0;\r\n    border-bottom: 0;\r\n}\r\n\r\n.tabbed-bar.pills > .toolbar-nav > li {\r\n    padding: 0 6px;\r\n    border-bottom: 0;\r\n}\r\n\r\n.tabbed-bar.pills > .toolbar-nav > li .title {\r\n    padding: 6px 12px;\r\n    border-radius: 4px;\r\n    transition: background-color 0.25s ease, color 0.25s ease;\r\n}\r\n\r\n.tabbed-bar.pills > .toolbar-nav > li:hover .title {\r\n    background-color: #f5f5f5;\r\n}\r\n\r\n.tabbed-bar.pills > .toolbar-nav > li.active .title {\r\n    background-color: var(--color-primary, #a8a8a8);\r\n    color: #fff;\r\n}\r\n\r\n/* Drop Down Menu button overrides. */\r\n.tabbed-bar > .toolbar-nav > li.more-items :deep(.btn-overflow) {\r\n    margin: 0;\r\n    padding: 0;\r\n    border: 0;\r\n}\r\n</style>\r\n\r\n<script setup lang=\"ts\">\r\n    import DropDownMenu from \"@Obsidian/Controls/dropDownMenu.obs\";\r\n    import { MenuAction } from \"@Obsidian/Types/Controls/dropDownMenu\";\r\n    import { computed, nextTick, PropType, ref, watch } from \"vue\";\r\n    import { useVModelPassthrough } from \"@Obsidian/Utility/component\";\r\n    import { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n\r\n    const props = defineProps({\r\n        /** The currently selected tab. */\r\n        modelValue: {\r\n            type: String as PropType<string>,\r\n            required: true\r\n        },\r\n\r\n        /** The list of tab names to be displayed. */\r\n        tabs: {\r\n            type: Array as PropType<string[] | ListItemBag[]>,\r\n            required: true\r\n        },\r\n\r\n        /** The type of tab bar to display. */\r\n        type: {\r\n            type: String as PropType<\"tabs\" | \"pills\">,\r\n            default: \"tabs\"\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 toolbarNavElement = ref<HTMLElement>();\r\n    const selectedTab = useVModelPassthrough(props, \"modelValue\", emit);\r\n    const overflowTabs = ref<ListItemBag[]>([]);\r\n    let resizeObserver: ResizeObserver | undefined;\r\n    let resizeTimer: number | undefined;\r\n\r\n    // #region Computed Values\r\n\r\n    /**\r\n     * Contains a list of menu actions that represent all the tabs that have\r\n     * overflown the container and are not directly visible.\r\n     */\r\n    const overflowTabActions = computed((): MenuAction[] => {\r\n        return overflowTabs.value.map((tab: ListItemBag) => {\r\n            return {\r\n                type: \"default\",\r\n                title: getTabText(tab),\r\n                handler: () => {\r\n                    selectedTab.value = getTabValue(tab);\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     * Gets the provided tab's value.\r\n     *\r\n     * @param tab The tab, which could be a string or list item bag.\r\n     */\r\n    function getTabValue(tab: string | ListItemBag): string {\r\n        return typeof tab === \"object\" ? tab.value ?? \"\" : tab;\r\n    }\r\n\r\n    /**\r\n     * Gets the provided tab's [friendly] text.\r\n     *\r\n     * @param tab The tab, which could be a string or list item bag.\r\n     */\r\n    function getTabText(tab: string | ListItemBag): string {\r\n        return typeof tab === \"object\" ? tab.text ?? \"\" : tab;\r\n    }\r\n\r\n    /**\r\n     * Gets whether provided tab is currently active.\r\n     *\r\n     * @param tab The tab, which could be a string or a list item bag.\r\n     */\r\n    function isTabActive(tab: string | ListItemBag): boolean {\r\n        return getTabValue(tab) === selectedTab.value;\r\n    }\r\n\r\n    /**\r\n     * Install or remove the overflow observer. If we are on a recent browser\r\n     * then we use the ResizeObserver. Otherwise use a timer.\r\n     */\r\n    function updateOverflowObserver(): void {\r\n        if (window.ResizeObserver) {\r\n            if (toolbarNavElement.value && !resizeObserver) {\r\n                resizeObserver = new ResizeObserver(updateOverflowTabs);\r\n                resizeObserver.observe(toolbarNavElement.value);\r\n            }\r\n            else if (!toolbarNavElement.value && resizeObserver) {\r\n                resizeObserver.disconnect();\r\n                resizeObserver = undefined;\r\n            }\r\n        }\r\n        else {\r\n            if (toolbarNavElement.value && resizeTimer === undefined) {\r\n                resizeTimer = window.setInterval(updateOverflowTabs, 1000);\r\n            }\r\n            else if (!toolbarNavElement.value && resizeTimer !== undefined) {\r\n                clearInterval(resizeTimer);\r\n                resizeTimer = undefined;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates which tabs are overflowing and adjusts which tabs are visible.\r\n     */\r\n    function updateOverflowTabs(): void {\r\n        // With 12 tabs when all are visible and fit, this function takes\r\n        // <1ms.\r\n        //\r\n        // With 12 tabs when nearly all are hidden because of a small screen,\r\n        // this function takes about 4ms. This is due to the clone operation\r\n        // and having to add/remove the clone from the DOM.\r\n\r\n        if (!toolbarNavElement.value) {\r\n            return;\r\n        }\r\n\r\n        const elementWidths: number[] = [];\r\n        const barWidth = toolbarNavElement.value.getBoundingClientRect().width;\r\n        let requiredWidth = 0;\r\n\r\n        for (let i = 0; i < toolbarNavElement.value.children.length; i++) {\r\n            let child = toolbarNavElement.value.children[i];\r\n            let box = child.getBoundingClientRect();\r\n\r\n            // If the item is hidden, clone it so we can get the actual size.\r\n            if (box.width === 0) {\r\n                const clone = child.cloneNode(true) as HTMLElement;\r\n                clone.style.display = \"\";\r\n                clone.style.visibility = \"hidden\";\r\n                clone.style.position = \"absolute\";\r\n                toolbarNavElement.value.appendChild(clone);\r\n                box = clone.getBoundingClientRect();\r\n                clone.remove();\r\n            }\r\n\r\n            elementWidths.push(box.width);\r\n        }\r\n\r\n        // Get the width of each tab, except the \"More\" tab.\r\n        for (let i = 0; i < elementWidths.length - 1; i++) {\r\n            requiredWidth += elementWidths[i];\r\n        }\r\n\r\n        if (requiredWidth < barWidth) {\r\n            // Everything fits so make everything except the \"More\" tab visible.\r\n            for (let i = 0; i < toolbarNavElement.value.children.length; i++) {\r\n                const child = toolbarNavElement.value.children[i] as HTMLElement;\r\n\r\n                child.style.display = i < toolbarNavElement.value.children.length - 1\r\n                    ? \"\"\r\n                    : \"none\";\r\n            }\r\n        }\r\n        else {\r\n            // Get the total width of all tabs, including the \"More\" tab.\r\n            let totalWidth = requiredWidth + elementWidths[elementWidths.length - 1];\r\n            const tabsToOverflow: number[] = [];\r\n            const selectedTabIndex = props.tabs\r\n                .findIndex((tab: string | ListItemBag) => getTabValue(tab) === selectedTab.value);\r\n\r\n            // Start hiding tabs from the end.\r\n            for (let i = elementWidths.length - 1; i >= 0; i--) {\r\n                const child = toolbarNavElement.value.children[i] as HTMLElement;\r\n\r\n                // The \"More\" tab should always be visible.\r\n                if (i === elementWidths.length - 1) {\r\n                    child.style.display = \"\";\r\n                    continue;\r\n                }\r\n\r\n                // The currently selected tab should always be visible.\r\n                if (i === selectedTabIndex) {\r\n                    child.style.display = \"\";\r\n                    continue;\r\n                }\r\n\r\n                // If we have room for all the remaining tabs then display\r\n                // this tab, otherwise hide it.\r\n                if (totalWidth <= barWidth) {\r\n                    child.style.display = \"\";\r\n                }\r\n                else {\r\n                    tabsToOverflow.push(i);\r\n                    child.style.display = \"none\";\r\n                    totalWidth -= elementWidths[i];\r\n                }\r\n            }\r\n\r\n            // Usage of the `unknown` type and the multiple casts below are to make\r\n            // this code compatible with older versions of TypeScript, and will be\r\n            // improved in a later version of Rock.\r\n            overflowTabs.value = (props.tabs as unknown[])\r\n                .filter((_, idx) => tabsToOverflow.includes(idx))\r\n                .map((tab: unknown) => {\r\n                    return typeof tab === \"object\"\r\n                        ? tab as ListItemBag\r\n                        : {\r\n                            text: tab as string,\r\n                            value: tab as string\r\n                        };\r\n                });\r\n        }\r\n    }\r\n\r\n    // #endregion\r\n\r\n    // #region Event Handlers\r\n\r\n    /**\r\n     * Event handler for when a tab has been selected in the UI.\r\n     *\r\n     * @param tab The tab that was selected.\r\n     */\r\n    function onSelectTab(tab: string | ListItemBag): void {\r\n        selectedTab.value = getTabValue(tab);\r\n    }\r\n\r\n    // #endregion\r\n\r\n    // Make sure we have a valid selection.\r\n    if (!props.tabs.some((tab: string | ListItemBag) => getTabValue(tab) === selectedTab.value)) {\r\n        // Select the first tab (if any were provided).\r\n        selectedTab.value = props.tabs.length\r\n            ? getTabValue(props.tabs[0])\r\n            : \"\";\r\n    }\r\n\r\n    watch(toolbarNavElement, updateOverflowObserver);\r\n\r\n    // Any time the selected tab changes or our list of tabs change then we\r\n    // need to recalculate the overflow tabs.\r\n    watch([selectedTab, () => props.tabs], () => {\r\n        nextTick(updateOverflowTabs);\r\n    });\r\n</script>","function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n"],"names":["toolbarNavElement","ref","selectedTab","useVModelPassthrough","props","emit","overflowTabs","resizeObserver","resizeTimer","overflowTabActions","computed","value","map","tab","type","title","getTabText","handler","getTabValue","_tab$value","_tab$text","text","isTabActive","updateOverflowObserver","window","ResizeObserver","updateOverflowTabs","observe","disconnect","undefined","setInterval","clearInterval","elementWidths","barWidth","getBoundingClientRect","width","requiredWidth","i","children","length","child","box","clone","cloneNode","style","display","visibility","position","appendChild","remove","push","totalWidth","tabsToOverflow","selectedTabIndex","tabs","findIndex","filter","_","idx","includes","onSelectTab","some","watch","nextTick","styleInject","css","insertAt","document","head","getElementsByTagName","createElement","firstChild","insertBefore","styleSheet","cssText","createTextNode"],"mappings":"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"}