{"version":3,"file":"index.mjs","names":[],"sources":["../src/components/misc/ClassicDataTable_Internal.vue","../src/components/misc/ClassicDataTable_Internal.vue","../src/components/misc/ClassicDataTable.vue","../src/components/misc/ClassicDataTable.vue","../src/components/misc/ClassicNotifications.vue","../src/components/misc/ClassicNotifications.vue","../src/components/form/ClassicButtonGroup.vue","../src/components/form/ClassicButtonGroup.vue","../src/components/form/OctopusSelect.vue","../src/components/form/OctopusSelect.vue","../src/components/composable/useMetaTitle.ts","../src/components/composable/useMetaTitleWatch.ts","../src/components/composable/useOrganisationFilter.ts","../src/components/composable/useInit.ts","../src/components/composable/useSticky.ts","../src/helper/equals.ts","../src/helper/rubriquesHelper.ts","../src/helper/featureHelper.ts","../src/stores/class/cartouchier/cartouche.ts","../src/router/utils.ts","../src/router/routes.ts","../index.ts"],"sourcesContent":["<!--\n    This component is used by ClassicDataTable and should not be used by\n    itself.\n-->\n<template>\n    <table class=\"w-100\">\n        <!-- Displays the headers of the table -->\n        <thead>\n            <tr>\n                <th v-if=\"selectable\" />\n                <th v-for=\"(header, i) in headers\" :key=\"i\">\n                    {{ header.label }}\n                </th>\n            </tr>\n        </thead>\n\n        <!-- Displays the data of the table -->\n        <tbody>\n            <tr v-for=\"(item, i) in items\" :key=\"'item-' + i\">\n                <td v-if=\"selectable\" class=\"selection\">\n                    <ClassicCheckbox\n                        :text-init=\"isSelected(item)\"\n                        @update:text-init=\"select(item)\"\n                    />\n                </td>\n                <td v-for=\"(header, j) in headers\" :key=\"'item-' + i + '-' + j\">\n                    <!-- Slot to allow for customisation of value display -->\n                    <slot\n                        :name=\"'item-' + header.value.toString()\"\n                        :item=\"item\"\n                        :value=\"item[header.value]\"\n                    >\n                        {{ item[header.value] }}\n                    </slot>\n                </td>\n\n                <!-- Slot to display optional actions -->\n                <td v-if=\"slots['item-actions']\" class=\"actions d-flex\">\n                    <slot name=\"item-actions\" :item=\"item\" />\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport { useSlots } from 'vue';\n\nimport ClassicCheckbox from '../form/ClassicCheckbox.vue';\n\n/**\n * Header of table\n */\nexport interface ClassicDataTableHeader<T> {\n    /** Label of the header */\n    label: string;\n    /** Key of the item that will be displayed */\n    value: keyof T;\n}\n\nexport interface ClassicDataTableProps<T> {\n    /** The elements to display in the table */\n    items: Array<T>;\n    /** The columns to display in the table */\n    headers: Array<ClassicDataTableHeader<T>>;\n    /** When true, checkboxes allowing for selection will be displayed */\n    selectable?: boolean;\n    /** The currently selected items */\n    selection?: Array<T>;\n    /** When set to false, only one element can be selected */\n    selectionMultiple?: boolean;\n}\n\nexport interface ClassicDataTableEvents<T> {\n    /** Event triggered when the selection changes */\n    (e: 'update:selection', selection: Array<T>): void\n}\n\nconst { selection, selectionMultiple = true } = defineProps<ClassicDataTableProps<T>>();\n\nconst emit = defineEmits<ClassicDataTableEvents<T>>();\n\nconst slots = useSlots();\n\nfunction isSelected(element: T): boolean {\n    return selection.indexOf(element) >= 0;\n}\n\nfunction select(element: T): void  {\n    if (isSelected(element)) {\n        emit('update:selection', []);\n    } else if (selectionMultiple === false) {\n        emit('update:selection', [element]);\n    } else {\n        emit('update:selection', [...selection, element]);\n    }\n}\n</script>\n\n<style scoped lang=\"scss\">\ntable {\n    border-collapse: collapse;\n}\n\nth {\n    text-align: start;\n}\n\ntr {\n    height: var(--table-line-height);\n    min-height: var(--table-line-height);\n}\n\nthead, tr/*:not(:last-child)*/ {\n    // Display a border between each line\n    border-bottom: 1px solid var(--octopus-primary-more-transparent);\n\n    td:first-child, th:first-child {\n        padding: 0px 32px;\n    }\n}\n\n.actions {\n    // Right align content\n    justify-content: right;\n}\n\n.selection {\n    width: 20px;\n    padding: 0;\n}\n</style>\n","<!--\n    This component is used by ClassicDataTable and should not be used by\n    itself.\n-->\n<template>\n    <table class=\"w-100\">\n        <!-- Displays the headers of the table -->\n        <thead>\n            <tr>\n                <th v-if=\"selectable\" />\n                <th v-for=\"(header, i) in headers\" :key=\"i\">\n                    {{ header.label }}\n                </th>\n            </tr>\n        </thead>\n\n        <!-- Displays the data of the table -->\n        <tbody>\n            <tr v-for=\"(item, i) in items\" :key=\"'item-' + i\">\n                <td v-if=\"selectable\" class=\"selection\">\n                    <ClassicCheckbox\n                        :text-init=\"isSelected(item)\"\n                        @update:text-init=\"select(item)\"\n                    />\n                </td>\n                <td v-for=\"(header, j) in headers\" :key=\"'item-' + i + '-' + j\">\n                    <!-- Slot to allow for customisation of value display -->\n                    <slot\n                        :name=\"'item-' + header.value.toString()\"\n                        :item=\"item\"\n                        :value=\"item[header.value]\"\n                    >\n                        {{ item[header.value] }}\n                    </slot>\n                </td>\n\n                <!-- Slot to display optional actions -->\n                <td v-if=\"slots['item-actions']\" class=\"actions d-flex\">\n                    <slot name=\"item-actions\" :item=\"item\" />\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport { useSlots } from 'vue';\n\nimport ClassicCheckbox from '../form/ClassicCheckbox.vue';\n\n/**\n * Header of table\n */\nexport interface ClassicDataTableHeader<T> {\n    /** Label of the header */\n    label: string;\n    /** Key of the item that will be displayed */\n    value: keyof T;\n}\n\nexport interface ClassicDataTableProps<T> {\n    /** The elements to display in the table */\n    items: Array<T>;\n    /** The columns to display in the table */\n    headers: Array<ClassicDataTableHeader<T>>;\n    /** When true, checkboxes allowing for selection will be displayed */\n    selectable?: boolean;\n    /** The currently selected items */\n    selection?: Array<T>;\n    /** When set to false, only one element can be selected */\n    selectionMultiple?: boolean;\n}\n\nexport interface ClassicDataTableEvents<T> {\n    /** Event triggered when the selection changes */\n    (e: 'update:selection', selection: Array<T>): void\n}\n\nconst { selection, selectionMultiple = true } = defineProps<ClassicDataTableProps<T>>();\n\nconst emit = defineEmits<ClassicDataTableEvents<T>>();\n\nconst slots = useSlots();\n\nfunction isSelected(element: T): boolean {\n    return selection.indexOf(element) >= 0;\n}\n\nfunction select(element: T): void  {\n    if (isSelected(element)) {\n        emit('update:selection', []);\n    } else if (selectionMultiple === false) {\n        emit('update:selection', [element]);\n    } else {\n        emit('update:selection', [...selection, element]);\n    }\n}\n</script>\n\n<style scoped lang=\"scss\">\ntable {\n    border-collapse: collapse;\n}\n\nth {\n    text-align: start;\n}\n\ntr {\n    height: var(--table-line-height);\n    min-height: var(--table-line-height);\n}\n\nthead, tr/*:not(:last-child)*/ {\n    // Display a border between each line\n    border-bottom: 1px solid var(--octopus-primary-more-transparent);\n\n    td:first-child, th:first-child {\n        padding: 0px 32px;\n    }\n}\n\n.actions {\n    // Right align content\n    justify-content: right;\n}\n\n.selection {\n    width: 20px;\n    padding: 0;\n}\n</style>\n","<!--\n    Generic component to display an array of elements\n\n    **Slots** :\n    - `item-[header.value]`\n      - Replace the default display of a value\n      - Parameters :\n        - `item`: The item being displayed\n        - `value`: The value of the item\n    - `item-actions`\n      - When defined, add a final column dedicated to action buttons\n      - Parameters :\n        - `item`: The item being displayed\n-->\n<template>\n    <ClassicDataTable_Internal \n        v-if=\"noPagination\"\n        v-bind=\"{ ...props, ...$attrs }\"\n    >\n        <template v-for=\"(_, name) in $slots\" v-slot:[name]=\"scope\">\n            <slot :name=\"name\" v-bind=\"{ ...scope }\" />\n        </template>\n    </ClassicDataTable_Internal>\n    <ListPaginate\n        v-else\n        :first=\"first\"\n        :size=\"size\"\n        :text-count=\"$t('Number items', { nb: items.length })\"\n        :total-count=\"items.length\"\n        :loading=\"loading\"\n        :loading-text=\"$t('Loading content ...')\"\n    >\n        <template v-if=\"!loading\" #list>\n            <ClassicDataTable_Internal \n                v-bind=\"{ ...props, ...$attrs }\"\n            >\n                <template v-for=\"(_, name) in $slots\" v-slot:[name]=\"scope\">\n                    <slot :name=\"name\" v-bind=\"{ ...scope }\" />\n                </template>\n            </ClassicDataTable_Internal>\n        </template>\n    </ListPaginate>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport ListPaginate from '../display/list/ListPaginate.vue';\nimport ClassicDataTable_Internal, {\n    type ClassicDataTableHeader,\n    type ClassicDataTableProps\n} from './ClassicDataTable_Internal.vue';\n\nexport type { ClassicDataTableHeader };\n\nconst {\n    first = 0,\n    size = 50,\n    noPagination = false,\n    ...props\n} = defineProps<ClassicDataTableProps<T> & {\n    /** Index of first element in pagination */\n    first?: number;\n    /** Number of elements in pagination */\n    size?: number;\n    /** Disable pagination */\n    noPagination?: boolean;\n    /** Indicates that data is loading */\n    loading?: boolean;\n}>();\n</script>\n\n<style scoped lang=\"scss\">\ntable {\n    border-collapse: collapse;\n}\n\nth {\n    text-align: start;\n}\n\ntr {\n    height: var(--table-line-height);\n    min-height: var(--table-line-height);\n}\n\nthead, tr/*:not(:last-child)*/ {\n    // Display a border between each line\n    border-bottom: 1px solid var(--octopus-primary-more-transparent);\n\n    td:first-child, th:first-child {\n        padding: 0px 32px;\n    }\n}\n\n.actions {\n    // Right align content\n    justify-content: right;\n}\n</style>\n","<!--\n    Generic component to display an array of elements\n\n    **Slots** :\n    - `item-[header.value]`\n      - Replace the default display of a value\n      - Parameters :\n        - `item`: The item being displayed\n        - `value`: The value of the item\n    - `item-actions`\n      - When defined, add a final column dedicated to action buttons\n      - Parameters :\n        - `item`: The item being displayed\n-->\n<template>\n    <ClassicDataTable_Internal \n        v-if=\"noPagination\"\n        v-bind=\"{ ...props, ...$attrs }\"\n    >\n        <template v-for=\"(_, name) in $slots\" v-slot:[name]=\"scope\">\n            <slot :name=\"name\" v-bind=\"{ ...scope }\" />\n        </template>\n    </ClassicDataTable_Internal>\n    <ListPaginate\n        v-else\n        :first=\"first\"\n        :size=\"size\"\n        :text-count=\"$t('Number items', { nb: items.length })\"\n        :total-count=\"items.length\"\n        :loading=\"loading\"\n        :loading-text=\"$t('Loading content ...')\"\n    >\n        <template v-if=\"!loading\" #list>\n            <ClassicDataTable_Internal \n                v-bind=\"{ ...props, ...$attrs }\"\n            >\n                <template v-for=\"(_, name) in $slots\" v-slot:[name]=\"scope\">\n                    <slot :name=\"name\" v-bind=\"{ ...scope }\" />\n                </template>\n            </ClassicDataTable_Internal>\n        </template>\n    </ListPaginate>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport ListPaginate from '../display/list/ListPaginate.vue';\nimport ClassicDataTable_Internal, {\n    type ClassicDataTableHeader,\n    type ClassicDataTableProps\n} from './ClassicDataTable_Internal.vue';\n\nexport type { ClassicDataTableHeader };\n\nconst {\n    first = 0,\n    size = 50,\n    noPagination = false,\n    ...props\n} = defineProps<ClassicDataTableProps<T> & {\n    /** Index of first element in pagination */\n    first?: number;\n    /** Number of elements in pagination */\n    size?: number;\n    /** Disable pagination */\n    noPagination?: boolean;\n    /** Indicates that data is loading */\n    loading?: boolean;\n}>();\n</script>\n\n<style scoped lang=\"scss\">\ntable {\n    border-collapse: collapse;\n}\n\nth {\n    text-align: start;\n}\n\ntr {\n    height: var(--table-line-height);\n    min-height: var(--table-line-height);\n}\n\nthead, tr/*:not(:last-child)*/ {\n    // Display a border between each line\n    border-bottom: 1px solid var(--octopus-primary-more-transparent);\n\n    td:first-child, th:first-child {\n        padding: 0px 32px;\n    }\n}\n\n.actions {\n    // Right align content\n    justify-content: right;\n}\n</style>\n","<!--\n    A component to display notifications\n-->\n<template>\n    <MessageModal\n        v-if=\"currentNotification\"\n        :title=\"currentNotification.title\"\n        :message=\"currentNotification.message\"\n        :closeable=\"currentNotification.closeable !== false\"\n        @close=\"clearNotification\"\n    />\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia';\nimport { useNotificationStore } from '../../stores/NotificationStore';\n\nconst MessageModal = defineAsyncComponent(() => import('./modal/MessageModal.vue'));\n\nimport { defineAsyncComponent } from 'vue';\n\nconst {\n    clearNotification\n} = useNotificationStore();\n\nconst {\n    currentNotification,\n} = storeToRefs(useNotificationStore());\n</script>\n","<!--\n    A component to display notifications\n-->\n<template>\n    <MessageModal\n        v-if=\"currentNotification\"\n        :title=\"currentNotification.title\"\n        :message=\"currentNotification.message\"\n        :closeable=\"currentNotification.closeable !== false\"\n        @close=\"clearNotification\"\n    />\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia';\nimport { useNotificationStore } from '../../stores/NotificationStore';\n\nconst MessageModal = defineAsyncComponent(() => import('./modal/MessageModal.vue'));\n\nimport { defineAsyncComponent } from 'vue';\n\nconst {\n    clearNotification\n} = useNotificationStore();\n\nconst {\n    currentNotification,\n} = storeToRefs(useNotificationStore());\n</script>\n","<template>\n    <div class=\"classic-button-group\">\n        <button\n            v-for=\"option in options\"\n            :key=\"option.value\"\n            type=\"button\"\n            class=\"btn\"\n            :class=\"{ active: value.includes(option.value) }\"\n            @click=\"toggle(option.value)\"\n        >\n            {{ option.label }}\n        </button>\n    </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nexport interface ButtonGroupOption<T> {\n    label: string;\n    value: T;\n}\n\nconst props = defineProps<{\n    /** Currently selected values */\n    value: T[];\n    /** Possible values */\n    options: ButtonGroupOption<T>[];\n    /** Select only one option */\n    solo?: boolean;\n}>();\n\nconst emit = defineEmits<{\n    (e: 'update:value', values: T[]): void;\n}>();\n\nfunction toggle(value: T): void {\n    if (props.solo === true) {\n        emit('update:value', [value]);\n    } else {\n        const isSelected = props.value.includes(value);\n        if (isSelected && props.value.length <= 1) { return; }\n        const newValues = isSelected\n            ? props.value.filter(v => v !== value)\n            : [...props.value, value];\n        emit('update:value', newValues);\n    }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.classic-button-group {\n    display: inline-flex;\n    border: 1px solid var(--octopus-border-default);\n    border-radius: var(--octopus-border-radius);\n    overflow: hidden;\n\n    .btn {\n        border: none;\n        border-right: 1px solid var(--octopus-border-default);\n        border-radius: 0;\n        background-color: var(--octopus-secondary);\n        color: var(--octopus-gray-text);\n        font-size: 0.8rem;\n        transition: background-color 0.15s ease;\n\n        &:last-child {\n            border-right: none;\n        }\n\n        &:hover:not(.active) {\n            background-color: var(--octopus-secondary-darker);\n        }\n\n        &.active {\n            background-color: var(--octopus-primary);\n            color: white;\n        }\n    }\n}\n</style>\n","<template>\n    <div class=\"classic-button-group\">\n        <button\n            v-for=\"option in options\"\n            :key=\"option.value\"\n            type=\"button\"\n            class=\"btn\"\n            :class=\"{ active: value.includes(option.value) }\"\n            @click=\"toggle(option.value)\"\n        >\n            {{ option.label }}\n        </button>\n    </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nexport interface ButtonGroupOption<T> {\n    label: string;\n    value: T;\n}\n\nconst props = defineProps<{\n    /** Currently selected values */\n    value: T[];\n    /** Possible values */\n    options: ButtonGroupOption<T>[];\n    /** Select only one option */\n    solo?: boolean;\n}>();\n\nconst emit = defineEmits<{\n    (e: 'update:value', values: T[]): void;\n}>();\n\nfunction toggle(value: T): void {\n    if (props.solo === true) {\n        emit('update:value', [value]);\n    } else {\n        const isSelected = props.value.includes(value);\n        if (isSelected && props.value.length <= 1) { return; }\n        const newValues = isSelected\n            ? props.value.filter(v => v !== value)\n            : [...props.value, value];\n        emit('update:value', newValues);\n    }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.classic-button-group {\n    display: inline-flex;\n    border: 1px solid var(--octopus-border-default);\n    border-radius: var(--octopus-border-radius);\n    overflow: hidden;\n\n    .btn {\n        border: none;\n        border-right: 1px solid var(--octopus-border-default);\n        border-radius: 0;\n        background-color: var(--octopus-secondary);\n        color: var(--octopus-gray-text);\n        font-size: 0.8rem;\n        transition: background-color 0.15s ease;\n\n        &:last-child {\n            border-right: none;\n        }\n\n        &:hover:not(.active) {\n            background-color: var(--octopus-secondary-darker);\n        }\n\n        &.active {\n            background-color: var(--octopus-primary);\n            color: white;\n        }\n    }\n}\n</style>\n","<template>\n    <div\n        ref=\"containerRef\"\n        class=\"octopus-select\"\n        :class=\"{ 'form-margin': label }\"\n    >\n        <label\n            v-if=\"label\"\n            :for=\"computedId\"\n            class=\"form-label\"\n        >\n            {{ label }}\n        </label>\n\n        <div\n            class=\"octopus-select-field\"\n            :class=\"{ disabled, open: isOpen, noBorder }\"\n            @click=\"openDropdown\"\n        >\n            <span\n                v-show=\"selectedLabel && !isOpen\"\n                class=\"octopus-select-value\"\n            >{{ selectedLabel }}</span>\n            <input\n                v-show=\"!selectedLabel || isOpen\"\n                :id=\"computedId\"\n                ref=\"inputRef\"\n                v-model=\"searchQuery\"\n                type=\"text\"\n                class=\"octopus-select-input\"\n                :placeholder=\"inputPlaceholder\"\n                :disabled=\"disabled\"\n                @focus=\"openDropdown\"\n                @input=\"handleInput\"\n            >\n            <button\n                class=\"btn-transparent octopus-select-chevron\"\n                :disabled=\"disabled\"\n                @click.stop=\"toggleDropdown\"\n            >\n                <ChevronDownIcon />\n            </button>\n        </div>\n\n        <Teleport :to=\"teleportTarget\">\n            <div\n                v-if=\"isOpen\"\n                ref=\"dropdownRef\"\n                class=\"octopus-select-dropdown\"\n                :class=\"dropdownClass\"\n                :style=\"dropdownStyle\"\n            >\n                <div class=\"octopus-select-options\">\n                    <button\n                        v-for=\"(option, index) in visibleOptions\"\n                        :key=\"index\"\n                        class=\"octopus-select-option\"\n                        :class=\"{ selected: isSelected(option) }\"\n                        @click=\"selectOption(option)\"\n                    >\n                        {{ getLabel(option) }}\n                    </button>\n                    <span v-if=\"visibleOptions.length === 0\" class=\"text-indic px-2\">\n                        {{ t('No elements found. Consider changing the search query.') }}\n                    </span>\n                </div>\n            </div>\n        </Teleport>\n    </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport { type CSSProperties, computed, nextTick, onMounted, onUnmounted, ref, toRaw, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport ChevronDownIcon from 'vue-material-design-icons/ChevronDown.vue';\nimport { useOctopusDropdown } from '../composable/form/useOctopusDropdown';\n\nconst props = withDefaults(defineProps<{\n    /** Optional label displayed above the field. */\n    label?: string;\n    /** Currently selected item. Bind with `v-model:value`. */\n    value?: T;\n    /** Full list of options to display or filter. */\n    options: T[];\n    /** Key of each option object to use as the ID. */\n    optionKey?: keyof T;\n    /** Key of each option object to use as the display label. */\n    optionLabel: keyof T & string;\n    /** Disables the field when true. */\n    disabled?: boolean;\n    /** Placeholder shown in the input when no item is selected. Defaults to the translated \"Search\" string. */\n    placeholder?: string;\n    /** Disable the border around the input. */\n    noBorder?: boolean;\n    /** When true (default), clicking the already-selected option clears the selection. */\n    allowDeselect?: boolean;\n    /** When true, the option matching the current value is moved to the top of the list\n     *  the moment the dropdown opens. This is a snapshot taken at open time — it does not\n     *  live-reorder while the dropdown stays open, only on the next closed→open transition. */\n    pullSelectedToTop?: boolean;\n    /** Extra class applied to the teleported dropdown, to style it from the parent via :global(). */\n    dropdownClass?: string;\n}>(), {\n    label: undefined,\n    value: undefined,\n    optionKey: undefined,\n    placeholder: undefined,\n    dropdownClass: undefined,\n    allowDeselect: true,\n});\n\nconst emit = defineEmits<{\n    /** Emitted when the selection changes. */\n    (e: 'update:value', value: T | undefined): void;\n    /** Emitted on every input change. When listened to, the parent is responsible for\n     *  updating `options`; otherwise the component filters `options` client-side. */\n    (e: 'search', query: string): void;\n}>();\n\nconst { t } = useI18n();\n\n// Ref on the teleported dropdown div — passed as ignored element to useOctopusDropdown\n// so clicks inside the dropdown don't trigger the click-outside handler.\nconst dropdownRef = ref<HTMLElement | null>(null);\n\nconst {\n    searchQuery,\n    isOpen,\n    containerRef,\n    inputRef,\n    teleportTarget,\n    computedId,\n    displayedOptions,\n    inputPlaceholder,\n    getLabel,\n    openDropdown,\n    closeDropdown,\n    toggleDropdown,\n    handleInput,\n} = useOctopusDropdown(props, (query) => emit('search', query), 'select', [dropdownRef]);\n\n// Position of the teleported dropdown (position: fixed, anchored below the trigger field)\nconst dropdownStyle = ref<CSSProperties>({});\n\nfunction updateDropdownPosition(): void {\n    if (!containerRef.value) { return; }\n    const rect = containerRef.value.getBoundingClientRect();\n    dropdownStyle.value = {\n        position: 'fixed',\n        top: `${rect.bottom + 2}px`,\n        left: `${rect.left}px`,\n        width: `${rect.width}px`,\n    };\n}\n\n// Value snapshot captured the instant the dropdown opens, used only to freeze the\n// sort order when pullSelectedToTop is set — does not react to later `value` changes\n// while the dropdown stays open.\nconst pinnedValue = ref<T | undefined>(undefined);\n\nwatch(isOpen, (val) => {\n    if (val) {\n        pinnedValue.value = props.value;\n        nextTick(updateDropdownPosition);\n    }\n});\n\nonMounted(() => {\n    // Keep the teleported dropdown aligned when the page scrolls or the viewport resizes\n    window.addEventListener('scroll', updateDropdownPosition, true);\n    window.addEventListener('resize', updateDropdownPosition);\n});\n\nonUnmounted(() => {\n    window.removeEventListener('scroll', updateDropdownPosition, true);\n    window.removeEventListener('resize', updateDropdownPosition);\n});\n\nconst selectedLabel = computed(() =>\n    props.value !== undefined ? getLabel(props.value) : undefined\n);\n\nfunction isSelected(option: T): boolean {\n    if (props.value === undefined) {\n        return false;\n    }\n    if (props.optionKey) {\n        return props.value[props.optionKey] === option[props.optionKey];\n    }\n    return toRaw(props.value as object) === toRaw(option as object);\n}\n\nfunction isPinned(option: T): boolean {\n    if (pinnedValue.value === undefined) {\n        return false;\n    }\n    if (props.optionKey) {\n        return pinnedValue.value[props.optionKey] === option[props.optionKey];\n    }\n    return toRaw(pinnedValue.value as object) === toRaw(option as object);\n}\n\nconst visibleOptions = computed<T[]>(() => {\n    if (!props.pullSelectedToTop) {\n        return displayedOptions.value;\n    }\n    return [...displayedOptions.value.filter(isPinned), ...displayedOptions.value.filter((option) => !isPinned(option))];\n});\n\nfunction selectOption(option: T): void {\n    if (isSelected(option) && props.allowDeselect) {\n        emit('update:value', undefined);\n    } else {\n        emit('update:value', option);\n    }\n    closeDropdown();\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-select {\n    position: relative;\n\n    .octopus-select-field {\n        display: flex;\n        align-items: center;\n        border: 1px solid var(--octopus-border-default);\n        border-radius: var(--octopus-border-radius);\n        background: white;\n        cursor: pointer;\n\n        &.open {\n            border-color: var(--octopus-primary);\n        }\n\n        &.disabled {\n            background: var(--octopus-secondary-lighter);\n            cursor: default;\n        }\n\n        &.noBorder {\n            border: none;\n        }\n    }\n\n    .octopus-select-value {\n        flex: 1;\n        min-width: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        padding: 0.4rem 0.5rem;\n        padding-right: 0;\n        height: 2rem;\n    }\n\n    .octopus-select-input {\n        flex: 1;\n        border: none;\n        background: transparent;\n        padding: 0.4rem 0.5rem;\n        height: 2rem;\n        outline: none;\n        cursor: inherit;\n        min-width: 0;\n    }\n\n    .octopus-select-chevron {\n        padding: 0.25rem 0.5rem;\n        display: flex;\n        align-items: center;\n    }\n\n}\n\n// Dropdown is teleported to body — scoped rules must be top-level so that [data-v-xxxx]\n// is matched directly on the element rather than via a descendant-of-.octopus-select selector.\n.octopus-select-dropdown {\n    z-index: 100;\n    background: white;\n    border: 1px solid var(--octopus-border-default);\n    border-radius: var(--octopus-border-radius);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n    padding: 0.25rem 0;\n}\n\n.octopus-select-options {\n    max-height: 14rem;\n    overflow-y: auto;\n}\n\n.octopus-select-option {\n    display: block;\n    width: 100%;\n    text-align: left;\n    padding: 0.25rem 0.5rem;\n    border: none;\n    background: transparent;\n    cursor: pointer;\n\n    &:hover {\n        background: var(--octopus-secondary-lighter);\n    }\n\n    &.selected {\n        font-weight: 600;\n        color: var(--octopus-primary);\n    }\n}\n</style>\n","<template>\n    <div\n        ref=\"containerRef\"\n        class=\"octopus-select\"\n        :class=\"{ 'form-margin': label }\"\n    >\n        <label\n            v-if=\"label\"\n            :for=\"computedId\"\n            class=\"form-label\"\n        >\n            {{ label }}\n        </label>\n\n        <div\n            class=\"octopus-select-field\"\n            :class=\"{ disabled, open: isOpen, noBorder }\"\n            @click=\"openDropdown\"\n        >\n            <span\n                v-show=\"selectedLabel && !isOpen\"\n                class=\"octopus-select-value\"\n            >{{ selectedLabel }}</span>\n            <input\n                v-show=\"!selectedLabel || isOpen\"\n                :id=\"computedId\"\n                ref=\"inputRef\"\n                v-model=\"searchQuery\"\n                type=\"text\"\n                class=\"octopus-select-input\"\n                :placeholder=\"inputPlaceholder\"\n                :disabled=\"disabled\"\n                @focus=\"openDropdown\"\n                @input=\"handleInput\"\n            >\n            <button\n                class=\"btn-transparent octopus-select-chevron\"\n                :disabled=\"disabled\"\n                @click.stop=\"toggleDropdown\"\n            >\n                <ChevronDownIcon />\n            </button>\n        </div>\n\n        <Teleport :to=\"teleportTarget\">\n            <div\n                v-if=\"isOpen\"\n                ref=\"dropdownRef\"\n                class=\"octopus-select-dropdown\"\n                :class=\"dropdownClass\"\n                :style=\"dropdownStyle\"\n            >\n                <div class=\"octopus-select-options\">\n                    <button\n                        v-for=\"(option, index) in visibleOptions\"\n                        :key=\"index\"\n                        class=\"octopus-select-option\"\n                        :class=\"{ selected: isSelected(option) }\"\n                        @click=\"selectOption(option)\"\n                    >\n                        {{ getLabel(option) }}\n                    </button>\n                    <span v-if=\"visibleOptions.length === 0\" class=\"text-indic px-2\">\n                        {{ t('No elements found. Consider changing the search query.') }}\n                    </span>\n                </div>\n            </div>\n        </Teleport>\n    </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport { type CSSProperties, computed, nextTick, onMounted, onUnmounted, ref, toRaw, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport ChevronDownIcon from 'vue-material-design-icons/ChevronDown.vue';\nimport { useOctopusDropdown } from '../composable/form/useOctopusDropdown';\n\nconst props = withDefaults(defineProps<{\n    /** Optional label displayed above the field. */\n    label?: string;\n    /** Currently selected item. Bind with `v-model:value`. */\n    value?: T;\n    /** Full list of options to display or filter. */\n    options: T[];\n    /** Key of each option object to use as the ID. */\n    optionKey?: keyof T;\n    /** Key of each option object to use as the display label. */\n    optionLabel: keyof T & string;\n    /** Disables the field when true. */\n    disabled?: boolean;\n    /** Placeholder shown in the input when no item is selected. Defaults to the translated \"Search\" string. */\n    placeholder?: string;\n    /** Disable the border around the input. */\n    noBorder?: boolean;\n    /** When true (default), clicking the already-selected option clears the selection. */\n    allowDeselect?: boolean;\n    /** When true, the option matching the current value is moved to the top of the list\n     *  the moment the dropdown opens. This is a snapshot taken at open time — it does not\n     *  live-reorder while the dropdown stays open, only on the next closed→open transition. */\n    pullSelectedToTop?: boolean;\n    /** Extra class applied to the teleported dropdown, to style it from the parent via :global(). */\n    dropdownClass?: string;\n}>(), {\n    label: undefined,\n    value: undefined,\n    optionKey: undefined,\n    placeholder: undefined,\n    dropdownClass: undefined,\n    allowDeselect: true,\n});\n\nconst emit = defineEmits<{\n    /** Emitted when the selection changes. */\n    (e: 'update:value', value: T | undefined): void;\n    /** Emitted on every input change. When listened to, the parent is responsible for\n     *  updating `options`; otherwise the component filters `options` client-side. */\n    (e: 'search', query: string): void;\n}>();\n\nconst { t } = useI18n();\n\n// Ref on the teleported dropdown div — passed as ignored element to useOctopusDropdown\n// so clicks inside the dropdown don't trigger the click-outside handler.\nconst dropdownRef = ref<HTMLElement | null>(null);\n\nconst {\n    searchQuery,\n    isOpen,\n    containerRef,\n    inputRef,\n    teleportTarget,\n    computedId,\n    displayedOptions,\n    inputPlaceholder,\n    getLabel,\n    openDropdown,\n    closeDropdown,\n    toggleDropdown,\n    handleInput,\n} = useOctopusDropdown(props, (query) => emit('search', query), 'select', [dropdownRef]);\n\n// Position of the teleported dropdown (position: fixed, anchored below the trigger field)\nconst dropdownStyle = ref<CSSProperties>({});\n\nfunction updateDropdownPosition(): void {\n    if (!containerRef.value) { return; }\n    const rect = containerRef.value.getBoundingClientRect();\n    dropdownStyle.value = {\n        position: 'fixed',\n        top: `${rect.bottom + 2}px`,\n        left: `${rect.left}px`,\n        width: `${rect.width}px`,\n    };\n}\n\n// Value snapshot captured the instant the dropdown opens, used only to freeze the\n// sort order when pullSelectedToTop is set — does not react to later `value` changes\n// while the dropdown stays open.\nconst pinnedValue = ref<T | undefined>(undefined);\n\nwatch(isOpen, (val) => {\n    if (val) {\n        pinnedValue.value = props.value;\n        nextTick(updateDropdownPosition);\n    }\n});\n\nonMounted(() => {\n    // Keep the teleported dropdown aligned when the page scrolls or the viewport resizes\n    window.addEventListener('scroll', updateDropdownPosition, true);\n    window.addEventListener('resize', updateDropdownPosition);\n});\n\nonUnmounted(() => {\n    window.removeEventListener('scroll', updateDropdownPosition, true);\n    window.removeEventListener('resize', updateDropdownPosition);\n});\n\nconst selectedLabel = computed(() =>\n    props.value !== undefined ? getLabel(props.value) : undefined\n);\n\nfunction isSelected(option: T): boolean {\n    if (props.value === undefined) {\n        return false;\n    }\n    if (props.optionKey) {\n        return props.value[props.optionKey] === option[props.optionKey];\n    }\n    return toRaw(props.value as object) === toRaw(option as object);\n}\n\nfunction isPinned(option: T): boolean {\n    if (pinnedValue.value === undefined) {\n        return false;\n    }\n    if (props.optionKey) {\n        return pinnedValue.value[props.optionKey] === option[props.optionKey];\n    }\n    return toRaw(pinnedValue.value as object) === toRaw(option as object);\n}\n\nconst visibleOptions = computed<T[]>(() => {\n    if (!props.pullSelectedToTop) {\n        return displayedOptions.value;\n    }\n    return [...displayedOptions.value.filter(isPinned), ...displayedOptions.value.filter((option) => !isPinned(option))];\n});\n\nfunction selectOption(option: T): void {\n    if (isSelected(option) && props.allowDeselect) {\n        emit('update:value', undefined);\n    } else {\n        emit('update:value', option);\n    }\n    closeDropdown();\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-select {\n    position: relative;\n\n    .octopus-select-field {\n        display: flex;\n        align-items: center;\n        border: 1px solid var(--octopus-border-default);\n        border-radius: var(--octopus-border-radius);\n        background: white;\n        cursor: pointer;\n\n        &.open {\n            border-color: var(--octopus-primary);\n        }\n\n        &.disabled {\n            background: var(--octopus-secondary-lighter);\n            cursor: default;\n        }\n\n        &.noBorder {\n            border: none;\n        }\n    }\n\n    .octopus-select-value {\n        flex: 1;\n        min-width: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        padding: 0.4rem 0.5rem;\n        padding-right: 0;\n        height: 2rem;\n    }\n\n    .octopus-select-input {\n        flex: 1;\n        border: none;\n        background: transparent;\n        padding: 0.4rem 0.5rem;\n        height: 2rem;\n        outline: none;\n        cursor: inherit;\n        min-width: 0;\n    }\n\n    .octopus-select-chevron {\n        padding: 0.25rem 0.5rem;\n        display: flex;\n        align-items: center;\n    }\n\n}\n\n// Dropdown is teleported to body — scoped rules must be top-level so that [data-v-xxxx]\n// is matched directly on the element rather than via a descendant-of-.octopus-select selector.\n.octopus-select-dropdown {\n    z-index: 100;\n    background: white;\n    border: 1px solid var(--octopus-border-default);\n    border-radius: var(--octopus-border-radius);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n    padding: 0.25rem 0;\n}\n\n.octopus-select-options {\n    max-height: 14rem;\n    overflow-y: auto;\n}\n\n.octopus-select-option {\n    display: block;\n    width: 100%;\n    text-align: left;\n    padding: 0.25rem 0.5rem;\n    border: none;\n    background: transparent;\n    cursor: pointer;\n\n    &:hover {\n        background: var(--octopus-secondary-lighter);\n    }\n\n    &.selected {\n        font-weight: 600;\n        color: var(--octopus-primary);\n    }\n}\n</style>\n","import { useGeneralStore } from \"../../stores/GeneralStore\";\nimport { useRoute } from \"vue-router\";\nimport { useI18n } from \"vue-i18n\";\n\nexport const useMetaTitle = ()=>{\n\n  const route = useRoute();\n  const generalStore = useGeneralStore();\n  const {t} = useI18n();\n\n  function updateMetaTitle(){\n    if(\"\" !== route.meta.title){\n      document.title = route.meta.title ? t(route.meta.title as string) + ' - ' + generalStore.metaTitle: generalStore.metaTitle;\n    }\n  }\n\n  return {\n    updateMetaTitle\n  }\n}\n","import { useRoute } from \"vue-router\";\nimport { useMetaTitle } from \"./useMetaTitle\";\nimport { watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nexport const useMetaTitleWatch = ()=>{\n  const { updateMetaTitle } = useMetaTitle();\n\n  const route = useRoute();\n  const {locale} = useI18n();\n\n  watch(route, () => updateMetaTitle(), {immediate:true});\n  watch(locale, () => updateMetaTitle());\n}\n","import {useErrorHandler} from \"./useErrorHandler\";\nimport { useFilterStore } from \"../../stores/FilterStore\";\nimport { useSaveFetchStore } from \"../../stores/SaveFetchStore\";\nimport { state } from \"../../stores/ParamSdkStore\";\nimport classicApi from \"../../api/classicApi\";\nimport { Rubriquage } from \"@/stores/class/rubrique/rubriquage\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { AxiosError } from \"axios\";\nexport const useOrganisationFilter= ()=>{\n\n  const {handle403} = useErrorHandler();\n\n  const filterStore = useFilterStore();\n  const saveFetchStore = useSaveFetchStore();\n\n  const route = useRoute();\n  const router = useRouter();\n \n  async function  selectOrganisation(organisationId: string): Promise<void> {\n    try {\n      const getOrgaData = saveFetchStore.getOrgaData(organisationId);\n      const fetchData = classicApi.fetchData<Array<Rubriquage>>({\n        api: 0,\n        path:\"rubriquage/find/\" + organisationId,\n        parameters:{\n          sort: \"HOMEPAGEORDER\",\n          homePageOrder: true,\n        },\n        specialTreatement:true\n      });\n      const getOrgaLive = saveFetchStore.getOrgaLiveEnabled(organisationId);\n\n      const [response, data, isLive] = await Promise.all([getOrgaData, fetchData, getOrgaLive]);\n      \n      filterStore.filterUpdateOrga({\n        orgaId: organisationId,\n        imgUrl: response.imageUrl,\n        name: response.name,\n        rubriquageArray: data.filter((element: Rubriquage) => {\n          return element.rubriques.length;\n        }),\n        isLive: isLive,\n      });\n      if(!state.generalParameters.podcastmaker){\n        const queries = route.query;\n        router.push({\n          query: { ...queries, ...{ productor: organisationId, o:undefined } },\n        });\n      }\n    } catch (error) {\n      handle403(error as AxiosError);\n    }\n  }\n\n  function removeSelectedOrga(): void {\n    if (route.query.productor) {\n      router.push({\n        query: { ...route.query, ...{ productor: undefined } },\n      });\n    }\n    filterStore.filterUpdateOrga({ orgaId: undefined });\n  }\n\n  return {\n    selectOrganisation,\n    removeSelectedOrga\n  }\n}\n","import classicApi from \"../../api/classicApi\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport { useGeneralStore } from \"../../stores/GeneralStore\";\nimport { Category } from \"@/stores/class/general/category\";\nimport { useI18n } from \"vue-i18n\";\n\nexport const useInit= ()=>{\n\n  const authStore = useAuthStore();\n  const generalStore = useGeneralStore();\n\n  const {locale} = useI18n()\n\n  async function initSdk() {\n    classicApi.fetchData<Array<Category>>({\n      api: 0,\n      path:`iab/list${authStore.authOrgaId ? \"/\" + authStore.authOrgaId : \"\"}`,\n      parameters:{ lang: locale.value },\n    })\n    .then((data: Array<Category>) => {\n      if(data.length){\n        generalStore.storedUpdateCategories(data);\n      }\n    });\n    const captcha = document.getElementsByClassName(\n      \"grecaptcha-badge\",\n    )[0] as HTMLElement;\n    if (captcha) {\n      captcha.style.display = \"none\";\n    }\n  }\n\n  return {\n    initSdk\n  }\n}\n","import { ref, toValue, onMounted, onBeforeUnmount, type Ref, type MaybeRef } from 'vue';\n\n/**\n * Detects whether a sticky element is currently stuck (fixed at its `top` offset)\n * or in its natural DOM position.\n *\n * A 1px invisible sentinel element is inserted immediately before the sticky element.\n * When that sentinel scrolls out of the IntersectionObserver's root viewport (adjusted\n * by `topOffset`), the element is considered stuck.\n *\n * `topOffset` must match the element's CSS `top` value in pixels. It is read once at\n * mount time. Pass a `Ref<number>` if the value is computed asynchronously (e.g. from\n * a CSS variable set by JavaScript after first render).\n */\nexport function useSticky(elementRef: Ref<HTMLElement | null>, topOffset: MaybeRef<number> = 0) {\n    const isStuck = ref(false);\n    let sentinel: HTMLElement | null = null;\n    let observer: IntersectionObserver | null = null;\n\n    onMounted(() => {\n        const el = elementRef.value;\n        if (!el) {\n            return;\n        }\n\n        const offset = toValue(topOffset);\n\n        sentinel = document.createElement('div');\n        sentinel.style.cssText = 'height:1px;pointer-events:none;';\n        el.parentNode!.insertBefore(sentinel, el);\n\n        observer = new IntersectionObserver(\n            ([entry]) => { isStuck.value = !entry.isIntersecting; },\n            { rootMargin: `-${offset}px 0px 0px 0px` }\n        );\n        observer.observe(sentinel);\n    });\n\n    onBeforeUnmount(() => {\n        observer?.disconnect();\n        sentinel?.remove();\n    });\n\n    return { isStuck };\n}\n","export function deepEqual(obj1: any, obj2: any) {\n    // it's just the same object. No need to compare.\n    if(obj1 === obj2)  {\n        return true;\n    }\n\n    // compare primitives\n    if(isPrimitive(obj1) && isPrimitive(obj2)) {\n        return obj1 === obj2;\n    }\n\n    // one is a primitive but not the other (for example undefined vs array)\n    if (isPrimitive(obj1) || isPrimitive(obj2)) {\n        return false;\n    }\n\n    if(Object.keys(obj1).length !== Object.keys(obj2).length) {\n        return false;\n    }\n\n    // compare objects with same number of keys\n    for(const key in obj1) {\n        //other object doesn't have this prop\n        if(!(key in obj2)) {\n            return false;\n        }\n        if(!deepEqual(obj1[key], obj2[key])) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n//check if value is primitive\nfunction isPrimitive(obj: unknown) {\n    return (obj !== Object(obj));\n}\n","import { Rubriquage, RubriquageMode } from \"@/stores/class/rubrique/rubriquage\";\n\nexport function isRubriquageMandatory(rubriquage: Rubriquage): boolean {\n    return [RubriquageMode.RESTRICTIVE, RubriquageMode.MANDATORY].includes(rubriquage.mode);\n}\n\n","import { organisationApi } from \"@/api\";\n\n/**\n * Enum of the features enabled on a given organisation\n */\nexport enum Feature {\n    /** Podcast can be created from videos */\n    Video\n}\n\n/**\n * Check whether the organisation identified by `organisationId` has the feature\n * `feature` enabled.\n * @param organisationId The ID of organisation\n * @param feature The feature to check\n * @returns True if the feature is enabled for the organisation\n */\nexport async function hasFeature(organisationId: string, feature: Feature): Promise<boolean> {\n    if (feature === Feature.Video) {\n        const config = await organisationApi.getVideoConfig(organisationId);\n        return config.active;\n    }\n    return false;\n}\n","import { Media } from \"../general/media\";\n\nexport interface Cartouche {\n  media?: Media;\n  cartoucheId?: number;\n  colorId?: string;\n  level?: number;\n  id: number;\n  width: number;\n  interval?: number;\n  elapsed?: number;\n  loop?: boolean;\n}\n\nexport function emptyCartouche(): Cartouche {\n  return {\n    id: 0,\n    width: 0,\n    level: 100,\n  };\n}\n","import { Router, RouteRecordRaw, RouteRecordSingleView, RouteRecordSingleViewWithChildren, RouteLocationNormalized } from \"vue-router\";\nimport { useFilterStore, FilterStore } from \"../stores/FilterStore\";\nimport { useSaveFetchStore } from \"../stores/SaveFetchStore\";\nimport { Rubriquage } from \"../stores/class/rubrique/rubriquage\";\nimport classicApi from \"../api/classicApi\";\nimport { useAuthStore, AuthStore } from \"../stores/AuthStore\";\nimport { deepEqual } from \"../helper/equals\";\nimport { RouteProps, ROUTE_PARAMS } from \"../components/composable/route/types\";\nimport { type Component } from \"vue\";\nimport { state as sdkParams } from \"../stores/ParamSdkStore\";\n\nexport function getSimpleRouteProps(route: RouteLocationNormalized): RouteProps {\n  return {\n    pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,\n    ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,\n    routeQuery: route.query.q as string ?? \"\"\n  };\n}\n\n/**\n * Return route props used for filtering\n */\nexport function getRouteProps(route: RouteLocationNormalized): RouteProps {\n  let routeEmissionGroups: number[]|undefined = undefined;\n  const reg = route.query[ROUTE_PARAMS.EmissionGroups];\n\n  if (reg !== undefined) {\n    if (Array.isArray(reg)) {\n      routeEmissionGroups = reg.map(g => parseInt(g, 10));\n    } else {\n      routeEmissionGroups = [parseInt(reg, 10)];\n    }\n  }\n  \n  return {\n    ...getSimpleRouteProps(route),\n    routeMonetisable: route.query.m as string ?? \"\",\n    routeIab: route.query.i ? parseInt(route.query.i.toString(), 10) : undefined,\n    routeSort: route.query.s as string ?? \"\",\n    routeIncludeHidden: route.query.h as string ?? \"\",\n    routeFrom: route.query.from as string|undefined,\n    routeTo: route.query.to as string|undefined,\n    routeOrga:route.query.o as string|undefined,\n    routeRubriques :route.query.r as string ?? route.query.rubriquesId as string|undefined,\n    routeBeneficiaries: route.query[ROUTE_PARAMS.Beneficiaries] as string[]|undefined,\n    routeOnlyVideo: route.query.v as string|undefined ?? \"\",\n    routeValidity: route.query.vl as string ?? \"\",\n    routeEmissionGroups\n  }\n}\n\n/**\n * Utility type to use with `overwriteRoutes`.\n */\ninterface OverwriteRoute {\n  /** Name of the route to overwrite */\n  name: string;\n  /** Component to overwrite with */\n  component: Component;\n}\n\n/**\n * Utility function to overwrite the routes defined in the SDK\n * Overwrite the component of given routes based on their name, without\n * having to specify the path.\n * This allows for the SDK to completely manage its routes, and be able to\n * change their paths, without having to update the routes in the app using the\n * SDK.\n */\nexport function overwriteRoutes(routes: Array<RouteRecordSingleView| RouteRecordSingleViewWithChildren>, overwrite: Array<OverwriteRoute>): Array<RouteRecordRaw> {\n  const newRoutes = [...routes];\n\n  overwrite.forEach(overwrite => {\n    // Find route by name\n    const idx = newRoutes.findIndex(r => r.name === overwrite.name);\n    if (idx < 0) {\n      console.warn(`Could not find route '${overwrite.name}' to overwrite`);\n      return;\n    }\n\n    // Overwrite component of route\n    const data = newRoutes[idx];\n    newRoutes[idx] = {\n      ...data,\n      component: overwrite.component\n    }\n  });\n  \n  return newRoutes;\n}\n\nasync function changeOrgaFilter(orgaFilter: string, filterStore: FilterStore){\n  const saveStore = useSaveFetchStore();\n  const response = await saveStore.getOrgaData(orgaFilter);\n  const data = await classicApi.fetchData<Array<Rubriquage>>({\n    api: 0,\n    path: \"rubriquage/find/\" + orgaFilter,\n    parameters: {\n      sort: \"HOMEPAGEORDER\",\n      homePageOrder: true,\n    },\n    specialTreatement: true,\n  });\n  const isLive = await saveStore.getOrgaLiveEnabled(orgaFilter);\n  filterStore.filterUpdateOrga({\n    orgaId: orgaFilter,\n    imgUrl: response.imageUrl,\n    name: response.name,\n    rubriquageArray: data.filter((element: Rubriquage) => {\n      return element.rubriques.length;\n    }),\n    isLive: isLive,\n  });\n}\n\n// Type for loading layouts\ntype LayoutLoader = () => Promise<{ default: Component }>;\n\n/**\n * Utility function to prepare a layout for a given route\n */\nasync function loadLayout(loader: LayoutLoader, route: RouteLocationNormalized): Promise<void> {\n  try {\n    const layout = await loader();\n    route.meta.layoutComponent = layout.default;\n  } catch (e) {\n    console.error(\"Error occured while processing layout\", e);\n    const layout = await import('../layouts/SimpleLayout.vue');\n    route.meta.layoutComponent = layout.default;\n  }\n}\n\nlet fetchMyOrgaActive = false;\n/** Variable used to apply beforeEach redirect only once */\nlet resolved = false;\n\n/**\n * Utility function seting up the router with a custom beforeEach\n * @param router The router to setup\n * @param getMyOrgaActive Callback to retrieve current organisation for user\n * @param defaultLayout Loader for the default layout of pages\n */\nexport function setupRouter(router: Router, getMyOrgaActive: (authStore: AuthStore) => Promise<void>, defaultLayout: LayoutLoader): void {\n  router.beforeResolve(async () =>{\n    fetchMyOrgaActive = false;\n    // Reinit variable to allow one redirect\n    resolved = false;\n  });\n\n  // Navigation guard that setups layout\n  router.beforeEach(async(route) => {\n    if (route.meta.layout) {\n      await loadLayout(route.meta.layout as LayoutLoader, route);\n    } else {\n      await loadLayout(defaultLayout, route);\n    }\n  });\n\n  // Navigation guard that updates current organisation & may make redirects\n  router.beforeEach(async (to, from) => {\n\n    if (\"/logout\" === to.path && \"/logout\" !== from.path) {\n      setTimeout(() => {\n        window.location.reload(true);\n      }, 500);\n    }\n    const authStore = useAuthStore();\n    const filterStore = useFilterStore();\n    \n    const isSamePath = to.matched[0]?.path === from.matched[0]?.path && to.path.includes(from.path);\n    let orgaToFocus = isSamePath ? (to.query.productor?.toString() ?? undefined) : undefined;\n\n    if(authStore.authProfile){\n      if(!isSamePath && !fetchMyOrgaActive){\n        await getMyOrgaActive(authStore);\n        fetchMyOrgaActive = true;\n      }\n      if(undefined!==orgaToFocus){\n        orgaToFocus = authStore.authOrgaId;\n      }\n    }\n\n    // Update organisation\n    if (isSamePath && orgaToFocus !== from.query.productor) {\n      if (filterStore.filterOrgaId !== orgaToFocus && orgaToFocus !== undefined) {\n        await changeOrgaFilter(orgaToFocus, filterStore);\n      }\n    }\n\n    // Only change target if not going to logout and not already resolved\n    if (\"/logout\" !== to.path && resolved !== true) {\n      resolved = true;\n      const newQuery = {\n        ...to.query\n      };\n\n      // Set productor\n      if (sdkParams.generalParameters.podcastmaker === true) {\n        delete newQuery.productor;\n      } else if (to.query.productor) {\n        newQuery.productor = to.query.productor;\n      } else if (filterStore.filterOrgaId === undefined) {\n        delete newQuery.productor;\n      } else {\n        newQuery.productor = filterStore.filterOrgaId;\n      }\n\n      // Enable 'viewall' mode if already active\n      if ((from.query.viewall === \"true\" || to.query.viewall === \"true\") && to.query.viewall !== \"false\") {\n        newQuery.viewall = \"true\";\n      } else {\n        delete newQuery.viewall;\n      }\n\n      // If the queries are different, update path\n      if (!deepEqual(newQuery, to.query)) {\n        return {\n          path: to.path,\n          query: { ...newQuery },\n          params: to.params,\n          name: to.name,\n        };\n      }\n    }\n  });\n}\n","import { RouteLocationNormalized, RouteRecordSingleView, RouteRecordSingleViewWithChildren } from \"vue-router\";\n\nimport { getRouteProps, getSimpleRouteProps } from \"./utils\";\n\nconst Home = () => import(\"../components/pages/HomePage.vue\");\nconst MapPage = () => import(\"../components/pages/MapPage.vue\");\nconst PodcastsPage = () => import(\"../components/pages/PodcastsPage.vue\");\nconst EmissionPage = () => import(\"../components/pages/EmissionPage.vue\");\nconst EmissionsPage = () => import(\"../components/pages/EmissionsPage.vue\");\nconst ParticpantsPage = () => import(\"../components/pages/ParticipantsPage.vue\");\nconst PodcastPage = () => import(\"../components/pages/PodcastPage.vue\");\nconst ParticipantPage = () => import(\"../components/pages/ParticipantPage.vue\");\nconst SearchPage = () => import(\"../components/pages/SearchPage.vue\");\nconst CategoryPage = () => import(\"../components/pages/CategoryPage.vue\");\nconst RubriquePage = () => import(\"../components/pages/RubriquePage.vue\");\nconst TagPage = () => import(\"../components/pages/TagPage.vue\");\nconst LivesPage = () => import(\"../components/pages/LivesPage.vue\");\nconst PlaylistPage = () => import(\"../components/pages/PlaylistPage.vue\");\nconst PlaylistsPage = () => import(\"../components/pages/PlaylistsPage.vue\");\nconst Error403Page = () => import(\"../components/pages/Error403Page.vue\");\nconst PageNotFound = () => import(\"../components/pages/PageNotFound.vue\");\nconst RadioPage = () => import(\"../components/pages/RadioPage.vue\");\nconst VideoPage = () => import(\"../components/pages/VideoPage.vue\");\nconst PageLogout = () => import(\"../components/pages/PageLogout.vue\");\nconst SmartLinkPage = () => import(\"../components/pages/SmartLinkPage.vue\");\n\nexport const routes: Array<RouteRecordSingleView|RouteRecordSingleViewWithChildren> = [\n  /*--------------------------------------------------------------------------\n  Liens publics\n  --------------------------------------------------------------------------*/\n  {\n    path: \"/main/pub/error\",\n    name: \"error-403\",\n    component: Error403Page,\n  },\n  {\n    path: \"/main/pub/home\",\n    name: \"home\",\n    component: Home,\n    meta:{\n      title: \"Home\",\n    }\n  },\n  {\n    path: \"/main/pub/map\",\n    name: \"map\",\n    component: MapPage,\n    meta:{\n      title: \"Site map\",\n    }\n  },\n  {\n    path: \"/main/pub/search/:query?\",\n    name: \"search\",\n    component: SearchPage,\n    props: (route: RouteLocationNormalized) => ({\n      queryRoute: route.params.query,\n    }),\n    meta:{\n      title: \"Search\",\n    }\n  },\n  {\n    path: \"/main/pub/podcasts/\",\n    name: \"podcasts\",\n    component: PodcastsPage,\n    props: getRouteProps,\n    meta:{\n      title: \"Podcasts\",\n    }\n  },\n  {\n    path: \"/main/pub/emissions/\",\n    name: \"emissions\",\n    component: EmissionsPage,\n    props: getRouteProps,\n    meta:{\n      title: \"Emissions\",\n    }\n  },\n  {\n    path: \"/main/pub/participants\",\n    name: \"participants\",\n    component: ParticpantsPage,\n    props: (route: RouteLocationNormalized) => ({\n      ...getSimpleRouteProps(route),\n      routeOrga:route.query.o,\n    }),\n    meta:{\n      title: \"Speakers\",\n    }\n  },\n  {\n    path: \"/main/pub/emission/:emissionId(\\\\d+):title([^?/]*)?:productor?\",\n    name: \"emission\",\n    component: EmissionPage,\n    props: (route: RouteLocationNormalized) => ({\n      ...getSimpleRouteProps(route),\n      emissionId: parseInt(route.params.emissionId.toString(), 10),\n    }),\n    meta:{\n      title: \"\",\n      noScroll:true\n    }\n  },\n  {\n    path: \"/main/pub/podcast/:podcastId(\\\\d+):title([^?]*)?:productor?\",\n    name: \"podcast\",\n    component: PodcastPage,\n    props: (route: RouteLocationNormalized) => ({\n      podcastId: parseInt(route.params.podcastId.toString(), 10)\n    }),\n    meta:{\n      title: \"\"\n    }\n  },\n  {\n    path: \"/main/pub/video/:podcastId(\\\\d+):title([^?]*)?:productor?\",\n    name: \"video\",\n    component: VideoPage,\n    props: (route: RouteLocationNormalized) => ({\n      podcastId: parseInt(route.params.podcastId.toString(), 10),\n    }),\n    meta:{\n      title: \"\"\n    }\n  },\n  {\n    path: \"/main/pub/participant/:participantId(\\\\d+):title([^?]*)?:productor?\",\n    name: \"participant\",\n    component: ParticipantPage,\n    props: (route: RouteLocationNormalized) => ({\n      ...getSimpleRouteProps(route),\n      participantId: parseInt(route.params.participantId.toString(), 10),\n    }),\n    meta:{\n      title: \"\",\n      noScroll:true\n    }\n  },\n  {\n    path: \"/main/pub/category/:iabId/:productor?\",\n    name: \"category\",\n    component: CategoryPage,\n    props: (route: RouteLocationNormalized) => ({\n      iabId: parseInt(route.params.iabId.toString(), 10),\n      productor: route.params.productor,\n    }),\n    meta:{\n      title: \"\",\n    }\n  },\n  {\n    path: \"/main/pub/rubrique/:rubriqueId(\\\\d+):title([^?]*)?:productor?\",\n    name: \"rubrique\",\n    component: RubriquePage,\n    props: (route: RouteLocationNormalized) => ({\n      ...getSimpleRouteProps(route),\n      rubriqueId: parseInt(route.params.rubriqueId.toString(), 10),\n      routeOrga:route.query.o,\n    }),\n    meta:{\n      title: \"\",\n    }\n  },\n  {\n    path: \"/main/pub/tag/:tag([^?]*)?:productor?\",\n    name: \"tag\",\n    component: TagPage,\n    props: (route: RouteLocationNormalized) => ({\n      ...getSimpleRouteProps(route),\n      tag: route.params.tag,\n      routeOrga:route.query.o,\n    }),\n    meta:{\n      title: \"\",\n    }\n  },\n  {\n    path: \"/main/pub/lives/:productor?\",\n    name: \"lives\",\n    component: LivesPage,\n    props: (route: RouteLocationNormalized) => ({\n      productor: route.params.productor,\n    }),\n    meta:{\n      title: \"Radio & Live\",\n    }\n  },\n  {\n    path: \"/main/pub/radio/:canalId(\\\\d+):title([^?]*)?:productor?\",\n    name: \"radio\",\n    component: RadioPage,\n    props: (route: RouteLocationNormalized) => ({\n      canalId: parseInt(route.params.canalId.toString(), 10),\n    }),\n    meta:{\n      title: \"\"\n    }\n  },\n  {\n    path: \"/main/pub/playlists/\",\n    name: \"playlists\",\n    component: PlaylistsPage,\n    props: (route: RouteLocationNormalized) => ({\n      ...getSimpleRouteProps(route),\n      routeOrga:route.query.o,\n    }),\n    meta:{\n      title: \"Playlists\"\n    }\n  },\n  {\n    path: \"/main/pub/playlist/:playlistId(\\\\d+):title([^?/]*)?:productor?\",\n    name: \"playlist\",\n    component: PlaylistPage,\n    props: (route: RouteLocationNormalized) => ({\n      ...getSimpleRouteProps(route),\n      playlistId: parseInt(route.params.playlistId.toString(), 10),\n    }),\n    meta:{\n      title: \"\",\n      noScroll:true\n    }\n  },\n  {\n    path: \"/smartlink/e/:emissionId(\\\\d+):title([^?/]*)?:productor?\",\n    name: \"emission-smartlink\",\n    component: SmartLinkPage,\n    props: (route: RouteLocationNormalized) => ({\n      emissionId: parseInt(route.params.emissionId.toString(), 10),\n    }),\n    meta:{\n      title: \"\",\n      noScroll:true,\n      layout: () => import('../layouts/SimpleLayout.vue')\n    }\n  },\n  {\n    path: \"/smartlink/p/:playlistId(\\\\d+):title([^?/]*)?:productor?\",\n    name: \"playlist-smartlink\",\n    component: SmartLinkPage,\n    props: (route: RouteLocationNormalized) => ({\n      playlistId: parseInt(route.params.playlistId.toString(), 10),\n    }),\n    meta:{\n      title: \"\",\n      noScroll:true,\n      layout: () => import('../layouts/SimpleLayout.vue')\n    }\n  },\n  { path: \"/logout\", component: PageLogout },\n  { path: \"/sso/logout\", component: PageLogout },\n  { path: \"/:pathMatch(.*)*\", component: PageNotFound },\n];\n","//Pages\nexport const getLives = () => import(\"./src/components/pages/LivesPage.vue\");\nexport const getPodcast = () => import(\"./src/components/pages/PodcastPage.vue\");\nexport const getPodcasts = () => import(\"./src/components/pages/PodcastsPage.vue\");\nexport const getEmission = () => import(\"./src/components/pages/EmissionPage.vue\");\nexport const getEmissions = () => import(\"./src/components/pages/EmissionsPage.vue\");\nexport const getPlaylist = () => import(\"./src/components/pages/PlaylistPage.vue\");\nexport const getPlaylists = () => import(\"./src/components/pages/PlaylistsPage.vue\");\nexport const getParticipant = () => import(\"./src/components/pages/ParticipantPage.vue\");\nexport const getParticipants = () => import(\"./src/components/pages/ParticipantsPage.vue\");\nexport const getSearch = () => import(\"./src/components/pages/SearchPage.vue\");\nexport const getHome = () => import(\"./src/components/pages/HomePage.vue\");\nexport const getCategory = () => import(\"./src/components/pages/CategoryPage.vue\");\nexport const getRubrique = () => import(\"./src/components/pages/RubriquePage.vue\");\nexport const getTag = () => import(\"./src/components/pages/TagPage.vue\");\nexport const getError403Page = () => import(\"./src/components/pages/Error403Page.vue\");\nexport const getRadio = () => import(\"./src/components/pages/RadioPage.vue\");\nexport const getVideo = () => import(\"./src/components/pages/VideoPage.vue\");\nexport const getMapPage= () => import(\"./src/components/pages/MapPage.vue\");\nexport const getPageNotFound= () => import(\"./src/components/pages/PageNotFound.vue\");\nexport const getPageLogout= () => import(\"./src/components/pages/PageLogout.vue\");\n\n//Misc\nexport const getAccordion = () => import(\"./src/components/misc/ClassicAccordion.vue\");\nexport const getNav = () => import(\"./src/components/misc/ClassicNav.vue\");\nexport const getProgressBar = () => import(\"./src/components/misc/ProgressBar.vue\");\nexport const getSpinner = () => import(\"./src/components/misc/ClassicSpinner.vue\");\nexport const getFooter = () => import(\"./src/components/misc/FooterSection.vue\");\nexport const getPlayer = () => import(\"./src/components/misc/player/PlayerComponent.vue\");\nexport const getSnackbar = () => import(\"./src/components/misc/SnackBar.vue\");\nexport const getTopBar = () => import(\"./src/components/misc/TopBar.vue\");\nexport const getMobileMenu = () => import(\"./src/components/misc/MobileMenu.vue\");\nexport const getHomeDropdown = () => import(\"./src/components/misc/HomeDropdown.vue\");\nexport const getMessageModal = () => import(\"./src/components/misc/modal/MessageModal.vue\");\nexport const getErrorMessage = () => import(\"./src/components/misc/ErrorMessage.vue\");\nexport const getPopover = () => import(\"./src/components/misc/ClassicPopover.vue\");\nexport const getClassicModal = () => import(\"./src/components/misc/modal/ClassicModal.vue\");\nexport const getClassicLazy = () => import(\"./src/components/misc/ClassicLazy.vue\");\nexport const getContractPreviewModal = () => import(\"./src/components/misc/modal/ContractPreviewModal.vue\");\nexport const getClassicModalInBody = () => import(\"./src/components/misc/modal/ClassicModalInBody.vue\");\nexport const getClassicHelpButton = () => import(\"./src/components/misc/ClassicHelpButton.vue\");\nexport const getClassicAlert = () => import(\"./src/components/misc/ClassicAlert.vue\");\nexport const getClassicBigChip = () => import(\"./src/components/misc/ClassicBigChip.vue\");\nexport const getClassicTabs = () => import(\"./src/components/misc/ClassicTabs.vue\");\n\nimport ClassicDataTable, { type ClassicDataTableHeader } from \"./src/components/misc/ClassicDataTable.vue\";\nimport ClassicNotifications from \"./src/components/misc/ClassicNotifications.vue\";\nexport { type Tab } from \"./src/components/misc/ClassicTabs.vue\";\n\nexport {\n    ClassicDataTable,\n    type ClassicDataTableHeader,\n    ClassicNotifications\n}\n\n// Buttons\nexport * from \"./src/components/buttons/\";\n\n// Form\nimport ClassicButtonGroup from \"./src/components/form/ClassicButtonGroup.vue\";\nimport OctopusMultiselect from \"./src/components/form/OctopusMultiselect.vue\";\nimport OctopusSelect from \"./src/components/form/OctopusSelect.vue\";\nexport { ClassicButtonGroup, OctopusMultiselect, OctopusSelect };\nexport type { ButtonGroupOption } from \"./src/components/form/ClassicButtonGroup.vue\";\n\n//Display\nexport const getCategoryChooser = () => import(\"./src/components/display/categories/CategoryChooser.vue\");\nexport const getCategoryList = () => import(\"./src/components/display/categories/CategoryList.vue\");\nexport const getCategoryFilter = () => import(\"./src/components/display/categories/CategoryFilter.vue\");\nexport const getEmissionList = () => import(\"./src/components/display/emission/EmissionList.vue\");\nexport const getEmissionGroupChooser = () => import(\"./src/components/display/emission/EmissionGroupChooser.vue\");\nexport const getOrganisationChooser = () => import(\"./src/components/display/organisation/OrganisationChooser.vue\");\nexport const getPodcastFilterList = () => import(\"./src/components/display/podcasts/PodcastFilterList.vue\");\nexport const getPodcastInlineList = () => import(\"./src/components/display/podcasts/PodcastInlineList.vue\");\nexport const getPodcastList = () => import(\"./src/components/display/podcasts/PodcastList.vue\");\nexport const getPlaylistPodcastList = () => import(\"./src/components/display/playlist/PodcastList.vue\");\nexport const getShareButtons = () => import(\"./src/components/display/sharing/ShareSocialsButtons.vue\");\nexport const getShareAnonymous = () => import(\"./src/components/display/sharing/ShareAnonymous.vue\");\nexport const getShareNewsletter = () => import(\"./src/components/display/sharing/ShareNewsletter.vue\");\nexport const getQrCode = () => import(\"./src/components/display/sharing/QrCode.vue\");\nexport const SubscribeButtons = defineAsyncComponent(() => import(\"./src/components/display/sharing/SubscribeButtons.vue\"));\nexport const PodcastSeasonInfo = defineAsyncComponent(() => import(\"./src/components/display/podcasts/PodcastSeasonInfo.vue\"));\nexport const RightsIndicator = defineAsyncComponent(() => import(\"./src/components/display/RightsIndicator.vue\"));\nexport const RightsWrapper = defineAsyncComponent(() => import(\"./src/components/display/RightsWrapper.vue\"));\n\n\nexport const getEmissionInlineList = () => import(\"./src/components/display/emission/EmissionInlineList.vue\");\nexport const getRubriqueChooser = () => import(\"./src/components/display/rubriques/RubriqueChooser.vue\");\nexport const getCommentList = () => import(\"./src/components/display/comments/CommentList.vue\");\nexport const getCommentInput = () => import(\"./src/components/display/comments/CommentInput.vue\");\nexport const getCommentSection = () => import(\"./src/components/display/comments/CommentSection.vue\");\nexport const getPodcastPlaylistInlineList = () => import(\"./src/components/display/playlist/PodcastPlaylistInlineList.vue\");\nexport const getLiveList = () => import(\"./src/components/display/live/LiveList.vue\");\nexport const getEmissionPresentationList = () => import(\"./src/components/display/emission/EmissionPresentationList.vue\");\nexport const getPodcastPlayButton = () => import(\"./src/components/display/podcasts/PodcastPlayButton.vue\");\nexport const getParticipantInlineList = () => import(\"./src/components/display/participant/ParticipantInlineList.vue\");\nexport const getPodcastPresentationList = () => import(\"./src/components/display/podcasts/PodcastPresentationList.vue\");\n\n//Radio\nexport const getRadioCurrently = () => import(\"./src/components/display/live/RadioCurrently.vue\");\nexport const getRadioPlanning = () => import(\"./src/components/display/live/RadioPlanning.vue\");\n\n\n//AdvancedSearch\nexport const getAdvancedSearch = () => import(\"./src/components/display/filter/AdvancedSearch.vue\");\nexport const getRubriqueFilter = () => import(\"./src/components/display/filter/RubriqueFilter.vue\");\nexport const getDateFilter = () => import(\"./src/components/display/filter/DateFilter.vue\");\nexport const getSearchOrder = () => import(\"./src/components/display/filter/SearchOrder.vue\");\n\n//form\nexport const getClassicSearch = () => import(\"./src/components/form/ClassicSearch.vue\");\nexport const getClassicCheckbox = () => import(\"./src/components/form/ClassicCheckbox.vue\");\nexport const getClassicRadio = () => import(\"./src/components/form/ClassicRadio.vue\");\nexport const getClassicRadioLabel = () => import(\"./src/components/form/ClassicRadioLabel.vue\");\nexport const getClassicLoading = () => import(\"./src/components/form/ClassicLoading.vue\");\nexport const getClassicSelect = () => import(\"./src/components/form/ClassicSelect.vue\");\nexport const getClassicDatePicker = () => import(\"./src/components/form/ClassicDatePicker.vue\");\nexport const getPaginate = () => import(\"./src/components/display/list/PaginateSection.vue\");\nexport const getPaginateParams = () => import(\"./src/components/display/list/PaginateParams.vue\");\nexport const getListPaginate = () => import(\"./src/components/display/list/ListPaginate.vue\");\nexport const getClassicMultiselect = () => import(\"./src/components/form/ClassicMultiselect.vue\");\nexport const getClassicInputText = () => import(\"./src/components/form/ClassicInputText.vue\");\nexport const getClassicEmojiPicker = () => import(\"./src/components/form/ClassicEmojiPicker.vue\");\nexport const getClassicContentEditable = () => import(\"./src/components/form/ClassicContentEditable.vue\");\nexport const getSwiperList = () => import(\"./src/components/display/list/SwiperList.vue\");\nexport const getClassicCopyButton = () => import(\"./src/components/form/ClassicCopyButton.vue\");\nexport const getClassicTagInput = () => import(\"./src/components/form/ClassicTagInput.vue\");\nexport const getClassicWysiwyg = () => import(\"./src/components/form/ClassicWysiwyg.vue\");\n\n//Composable\nimport { useRights, ActionRight } from \"./src/components/composable/useRights\";\nimport {useResizePhone} from \"./src/components/composable/useResizePhone\";\nimport {useTagOf} from \"./src/components/composable/useTagOf\";\nimport {useSelenium} from \"./src/components/composable/useSelenium\";\nimport {useImageProxy} from \"./src/components/composable/useImageProxy\";\nimport {useMetaTitle} from \"./src/components/composable/useMetaTitle\";\nimport {useMetaTitleWatch} from \"./src/components/composable/useMetaTitleWatch\";\nimport {useOrganisationFilter} from \"./src/components/composable/useOrganisationFilter\";\nimport {useInit} from \"./src/components/composable/useInit\";\nimport {useErrorHandler} from \"./src/components/composable/useErrorHandler\";\nimport { useSimplePageParam } from \"./src/components/composable/route/useSimplePageParam\";\nexport { CHECK_TOKEN_KEY, LOAD_LOCALE_MESSAGES_KEY } from \"./src/components/composable/keys\";\nexport { useSharePlatforms, PREDEFINED_PLATFORMS, SharePlatformName, type SharePlatform } from \"./src/components/composable/share/useSharePlatforms\";\nexport { useSharePath } from \"./src/components/composable/share/useSharePath\";\nexport { useOrgaComputed } from \"./src/components/composable/useOrgaComputed\";\nexport { useSeoTitleUrl } from \"./src/components/composable/route/useSeoTitleUrl\";\nexport { useSeasonsManagement } from \"./src/components/composable/useSeasonsManagement\";\nexport { useTranslation } from \"./src/components/composable/useTranslation\";\nexport { useDayjs } from \"./src/components/composable/useDayjs\";\nexport { useSticky } from \"./src/components/composable/useSticky\";\nexport { useSubOrganisations, type SubOrganisation } from \"./src/components/composable/useSubOrganisations\";\n\n//helper\nexport { getLanguage } from \"./src/helper/language\";\nimport domHelper from \"./src/helper/domHelper\";\nimport durationHelper from \"./src/helper/durationHelper\";\nimport stringHelper from \"./src/helper/stringHelper\";\nimport fetchHelper from \"./src/helper/fetchHelper\";\nimport cookiesHelper from \"./src/helper/cookiesHelper\";\nimport downloadHelper from \"./src/helper/downloadHelper\";\nimport displayHelper from \"./src/helper/displayHelper\";\nimport debounce from \"./src/helper/debounceHelper\";\nimport { deepEqual } from \"./src/helper/equals\";\nexport { colorFromString } from './src/helper/colorFromString';\nexport * from './src/helper/rubriquesHelper';\nexport * from './src/helper/arrayHelper';\nexport * from './src/helper/featureHelper';\nexport * from './src/helper/slugify';\n\n//stores\nimport {useVastStore} from \"./src/stores/VastStore\";\nimport {useSaveFetchStore} from \"./src/stores/SaveFetchStore\";\nimport {usePlayerStore} from \"./src/stores/PlayerStore\";\nimport {useGeneralStore} from \"./src/stores/GeneralStore\";\nimport {useFilterStore} from \"./src/stores/FilterStore\";\nimport {useCommentStore} from \"./src/stores/CommentStore\";\nimport {useApiStore} from \"./src/stores/ApiStore\";\nimport {useAuthStore} from \"./src/stores/AuthStore\";\nexport type { AuthStore } from \"./src/stores/AuthStore\";\nexport * from \"./src/stores/NotificationStore\";\nexport { default as ParamSdkStore, type ParamStore } from \"./src/stores/ParamSdkStore\";\nimport {getApiUrl, ModuleApi} from \"./src/api/apiConnection\";\nimport classicApi from \"./src/api/classicApi\";\n\n// API\nexport * from \"./src/api\";\nexport { TranslationState } from \"./src/api/transcriptionApi\";\n\n// i18n\nexport { registerI18n } from \"./src/i18n\";\n\n// Types\nexport { type Emission, SeasonMode, emptyEmissionData } from \"./src/stores/class/general/emission\";\nexport { type Organisation, type OrganisationAttributes, emptyOrganisationData, emptyOrgaData } from \"./src/stores/class/general/organisation\";\nexport { type Podcast, type SimplifiedPodcast, type PodcastAvailability, PodcastType, podcastToSimplified } from \"./src/stores/class/general/podcast\";\nexport { type Playlist, type PlaylistRule } from \"./src/stores/class/general/playlist\";\nexport { type Annotations } from \"./src/stores/class/general\";\nexport { type ListClassicReturn } from \"./src/stores/class/general/listReturn\";\nexport { type AdserverTiming } from \"./src/stores/class/adserver/adserverTiming\";\nexport {\n    CreateTranslation,\n    type TranslationConfiguration,\n    defaultTranslationConfig,\n    defaultModifyPodcastConfig,\n    defaultTtsParams,\n    type ModifyPodcastConfig,\n    ModifyPodcastEnum,\n    type TranscriptParams,\n    type TtsParams,\n    type ProviderTts,\n    type Voice\n} from \"./src/stores/class/transcript/transcriptParams\";\nexport { type Rubrique } from \"./src/stores/class/rubrique/rubrique\";\nexport { type Rubriquage, RubriquageMode, RUBRIQUAGE_HOMEORDER_RESET } from \"./src/stores/class/rubrique/rubriquage\";\nexport { type Cartouchier } from \"./src/stores/class/cartouchier/cartouchier\";\nexport { type Cartouche, emptyCartouche } from \"./src/stores/class/cartouchier/cartouche\";\nexport { type PlaylistMedia } from \"./src/stores/class/radio/playlistMedia\";\nexport * from \"./src/stores/class/radio/canal\";\n\n//Icons\nexport const getAmazonMusicIcon = () => import(\"./src/components/icons/AmazonMusicIcon.vue\");\nexport const getApplePodcastIcon = () => import(\"./src/components/icons/ApplePodcastIcon.vue\");\nexport const getDeezerIcon = () => import(\"./src/components/icons/DeezerIcon.vue\");\nexport const getEditFtpIcon = () => import(\"./src/components/icons/EditFtpIcon.vue\");\nexport const getIHeartIcon = () => import(\"./src/components/icons/IHeartIcon.vue\");\nexport const getPlayerFmIcon = () => import(\"./src/components/icons/PlayerFmIcon.vue\");\nexport const getPlayVideoIcon = () => import(\"./src/components/icons/PlayVideoIcon.vue\");\nexport const getPocketCastIcon = () => import(\"./src/components/icons/PocketCastIcon.vue\");\nexport const getPodcastAddictIcon = () => import(\"./src/components/icons/PodcastAddictIcon.vue\");\nexport const getRadiolineIcon = () => import(\"./src/components/icons/RadiolineIcon.vue\");\nexport const getTuninIcon = () => import(\"./src/components/icons/TuninIcon.vue\");\nexport const getXIcon = () => import(\"./src/components/icons/XIcon.vue\");\n\n// Podcastmaker\nexport const PodcastmakerHeader = defineAsyncComponent(() => import(\"./src/components/display/podcastmaker/PodcastmakerHeader.vue\"));\n\n// Layouts\nexport const getSimpleLayout = () => import(\"./src/layouts/SimpleLayout.vue\");\n\n// Routing\nexport { setupRouter, getSimpleRouteProps, getRouteProps, overwriteRoutes } from './src/router/utils';\nexport { routes as sdkRoutes } from './src/router/routes';\n\n// Types\nimport { type SelectOption } from \"./src/components/form/ClassicSelect.vue\";\n\nimport { ROUTE_PARAMS } from \"./src/components/composable/route/types\";\nimport { defineAsyncComponent } from \"vue\";\n\nexport {\n    useRights,\n    ActionRight,\n    useResizePhone,\n    useTagOf,\n    useSelenium,\n    useImageProxy,\n    useMetaTitle,\n    useMetaTitleWatch,\n    useOrganisationFilter,\n    useInit,\n    useErrorHandler,\n    useSimplePageParam,\n    debounce,\n    useVastStore,\n    useSaveFetchStore,\n    usePlayerStore,\n    useGeneralStore,\n    useFilterStore,\n    useCommentStore,\n    domHelper,\n    durationHelper,\n    stringHelper,\n    fetchHelper,\n    useApiStore,\n    useAuthStore,\n    getApiUrl,\n    ModuleApi,\n    classicApi,\n    cookiesHelper,\n    deepEqual,\n    downloadHelper,\n    displayHelper,\n    SelectOption,\n    ROUTE_PARAMS\n};\n"],"mappings":"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"}