@topvisor/ui 1.5.4-preloader.3 → 1.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.chunks/{api-DQSboD9F.amd.js → api-D5wIZnrK.amd.js} +2 -2
- package/.chunks/{api-DQSboD9F.amd.js.map → api-D5wIZnrK.amd.js.map} +1 -1
- package/.chunks/{api-DQSboD9F.esm.js → api-D5wIZnrK.esm.js} +2 -2
- package/.chunks/api-D5wIZnrK.esm.js.map +1 -0
- package/.chunks/{app-DeBknp1Q.amd.js → app-0qVCkgOO.amd.js} +2 -2
- package/.chunks/{app-DeBknp1Q.amd.js.map → app-0qVCkgOO.amd.js.map} +1 -1
- package/.chunks/{app-DeBknp1Q.esm.js → app-0qVCkgOO.esm.js} +5 -5
- package/.chunks/{app-DeBknp1Q.esm.js.map → app-0qVCkgOO.esm.js.map} +1 -1
- package/.chunks/{datepicker-B2Km72Vg.amd.js → datepicker-CYAhR3K9.amd.js} +2 -2
- package/.chunks/{datepicker-B2Km72Vg.amd.js.map → datepicker-CYAhR3K9.amd.js.map} +1 -1
- package/.chunks/{datepicker-B2Km72Vg.esm.js → datepicker-CYAhR3K9.esm.js} +2 -2
- package/.chunks/{datepicker-B2Km72Vg.esm.js.map → datepicker-CYAhR3K9.esm.js.map} +1 -1
- package/.chunks/{dialog-DPTJ7VN5.amd.js → dialog-CdgC31H2.amd.js} +2 -2
- package/.chunks/{dialog-DPTJ7VN5.amd.js.map → dialog-CdgC31H2.amd.js.map} +1 -1
- package/.chunks/{dialog-DPTJ7VN5.esm.js → dialog-CdgC31H2.esm.js} +3 -3
- package/.chunks/{dialog-DPTJ7VN5.esm.js.map → dialog-CdgC31H2.esm.js.map} +1 -1
- package/.chunks/{dialog_regionSelectorRegions-ClRx55RP.amd.js → dialog_regionSelectorRegions-BFpuUEJM.amd.js} +2 -2
- package/.chunks/{dialog_regionSelectorRegions-ClRx55RP.amd.js.map → dialog_regionSelectorRegions-BFpuUEJM.amd.js.map} +1 -1
- package/.chunks/{dialog_regionSelectorRegions-ClRx55RP.esm.js → dialog_regionSelectorRegions-BFpuUEJM.esm.js} +4 -4
- package/.chunks/dialog_regionSelectorRegions-BFpuUEJM.esm.js.map +1 -0
- package/.chunks/{forms-DKVIpGnH.amd.js → forms-BiKUURH4.amd.js} +2 -2
- package/.chunks/forms-BiKUURH4.amd.js.map +1 -0
- package/.chunks/{forms-DKVIpGnH.esm.js → forms-BiKUURH4.esm.js} +82 -86
- package/.chunks/forms-BiKUURH4.esm.js.map +1 -0
- package/.chunks/{formsExt-B32m6XEQ.amd.js → formsExt-Bk_fn1Pg.amd.js} +2 -2
- package/.chunks/{formsExt-B32m6XEQ.amd.js.map → formsExt-Bk_fn1Pg.amd.js.map} +1 -1
- package/.chunks/{formsExt-B32m6XEQ.esm.js → formsExt-Bk_fn1Pg.esm.js} +4 -4
- package/.chunks/{formsExt-B32m6XEQ.esm.js.map → formsExt-Bk_fn1Pg.esm.js.map} +1 -1
- package/.chunks/{notice-C3_mXHCe.amd.js → notice-LFdPfo-5.amd.js} +2 -2
- package/.chunks/{notice-C3_mXHCe.amd.js.map → notice-LFdPfo-5.amd.js.map} +1 -1
- package/.chunks/{notice-C3_mXHCe.esm.js → notice-LFdPfo-5.esm.js} +2 -2
- package/.chunks/notice-LFdPfo-5.esm.js.map +1 -0
- package/.chunks/popup-DB5g_8kB.amd.js +2 -0
- package/.chunks/popup-DB5g_8kB.amd.js.map +1 -0
- package/.chunks/{popup-B8Us9xZO.esm.js → popup-DB5g_8kB.esm.js} +20 -18
- package/.chunks/popup-DB5g_8kB.esm.js.map +1 -0
- package/.chunks/{popup-CtiL5V44.amd.js → popup-KKfSSrM6.amd.js} +2 -2
- package/.chunks/{popup-CtiL5V44.amd.js.map → popup-KKfSSrM6.amd.js.map} +1 -1
- package/.chunks/{popup-CtiL5V44.esm.js → popup-KKfSSrM6.esm.js} +3 -3
- package/.chunks/{popup-CtiL5V44.esm.js.map → popup-KKfSSrM6.esm.js.map} +1 -1
- package/.chunks/{utils-C1xkXfK0.amd.js → utils-3uWRvFcX.amd.js} +2 -2
- package/.chunks/utils-3uWRvFcX.amd.js.map +1 -0
- package/.chunks/{utils-C1xkXfK0.esm.js → utils-3uWRvFcX.esm.js} +5 -5
- package/.chunks/utils-3uWRvFcX.esm.js.map +1 -0
- package/.chunks/{utils-Cj8CJ22r.amd.js → utils-BiOp5DHs.amd.js} +2 -2
- package/.chunks/{utils-Cj8CJ22r.amd.js.map → utils-BiOp5DHs.amd.js.map} +1 -1
- package/.chunks/{utils-Cj8CJ22r.esm.js → utils-BiOp5DHs.esm.js} +4 -4
- package/.chunks/{utils-Cj8CJ22r.esm.js.map → utils-BiOp5DHs.esm.js.map} +1 -1
- package/.chunks/{worker-DYTgdzGP.amd.js → worker-BufdAd-a.amd.js} +2 -2
- package/.chunks/{worker-DYTgdzGP.amd.js.map → worker-BufdAd-a.amd.js.map} +1 -1
- package/.chunks/{worker-DYTgdzGP.esm.js → worker-BufdAd-a.esm.js} +3 -3
- package/.chunks/{worker-DYTgdzGP.esm.js.map → worker-BufdAd-a.esm.js.map} +1 -1
- package/api/additional.amd.js +1 -1
- package/api/additional.amd.js.map +1 -1
- package/api/additional.js +1 -4
- package/api/additional.js.map +1 -1
- package/api/index.amd.js +1 -1
- package/api/index.amd.js.map +1 -1
- package/api/index.js +1 -1
- package/assets/forms.css +1 -1
- package/assets/schedule.css +1 -0
- package/assets/themes/dark-th.css +1 -1
- package/assets/themes/dark.css +1 -1
- package/assets/themes/light.css +1 -1
- package/autoload-css-manifest.amd.json +10 -4
- package/autoload-css-manifest.json +10 -4
- package/charts/charts.amd.js +1 -1
- package/charts/charts.amd.js.map +1 -1
- package/charts/charts.js +1 -1
- package/charts/charts.js.map +1 -1
- package/core/app.amd.js +1 -1
- package/core/app.amd.js.map +1 -1
- package/core/app.js +3 -3
- package/dialog/dialog.amd.js +1 -1
- package/dialog/dialog.amd.js.map +1 -1
- package/dialog/dialog.js +2 -2
- package/forms/forms.amd.js +1 -1
- package/forms/forms.amd.js.map +1 -1
- package/forms/forms.js +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +1 -1
- package/layout/layout.amd.js +1 -1
- package/layout/layout.amd.js.map +1 -1
- package/layout/layout.js +1 -1
- package/package.json +1 -1
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +1 -1
- package/project/project.amd.js +1 -1
- package/project/project.amd.js.map +1 -1
- package/project/project.js +19 -25
- package/project/project.js.map +1 -1
- package/require/css.amd.js +2 -0
- package/schedule/schedule.amd.js +2 -0
- package/schedule/schedule.amd.js.map +1 -0
- package/schedule/schedule.d.ts +2 -0
- package/schedule/schedule.js +430 -0
- package/schedule/schedule.js.map +1 -0
- package/src/components/project/groupSelector/stories/play/apiEditorMulti.d.ts +2 -0
- package/src/components/project/projectSelector/utils.d.ts +2 -1
- package/src/components/schedule/schedule/compoents/calendar/types.d.ts +19 -0
- package/src/components/schedule/schedule/compoents/calendar/utils.d.ts +10 -0
- package/src/components/schedule/schedule/compoents/email/selector/types.d.ts +13 -0
- package/src/components/schedule/schedule/compoents/email/types.d.ts +13 -0
- package/src/components/schedule/schedule/compoents/reportSend/types.d.ts +23 -0
- package/src/components/schedule/schedule/compoents/timeSelector/types.d.ts +14 -0
- package/src/components/schedule/schedule/compoents/timeSelectors/types.d.ts +7 -0
- package/src/components/schedule/schedule/types.d.ts +25 -0
- package/src/components/schedule/schedule.d.ts +8 -0
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.js +3 -3
- package/tabsView/tabsView.js.map +1 -1
- package/utils/clipboard.amd.js +1 -1
- package/utils/clipboard.amd.js.map +1 -1
- package/utils/clipboard.js +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/date.amd.js.map +1 -1
- package/utils/date.js +1 -1
- package/utils/device.amd.js +1 -1
- package/utils/device.amd.js.map +1 -1
- package/utils/device.js +1 -1
- package/utils/lodash.amd.js +1 -1
- package/utils/lodash.amd.js.map +1 -1
- package/utils/lodash.js +1 -1
- package/utils/number.amd.js.map +1 -1
- package/utils/number.js.map +1 -1
- package/utils/price.amd.js +1 -1
- package/utils/price.amd.js.map +1 -1
- package/utils/price.js +1 -1
- package/utils/route.amd.js.map +1 -1
- package/utils/route.js.map +1 -1
- package/utils/searchers.amd.js +1 -1
- package/utils/searchers.amd.js.map +1 -1
- package/utils/searchers.js +1 -1
- package/utils/string.amd.js +1 -1
- package/utils/string.amd.js.map +1 -1
- package/utils/string.js +3 -3
- package/utils/string.js.map +1 -1
- package/utils/url.amd.js +1 -1
- package/utils/url.amd.js.map +1 -1
- package/utils/url.js +11 -7
- package/utils/url.js.map +1 -1
- package/.chunks/api-DQSboD9F.esm.js.map +0 -1
- package/.chunks/dialog_regionSelectorRegions-ClRx55RP.esm.js.map +0 -1
- package/.chunks/forms-DKVIpGnH.amd.js.map +0 -1
- package/.chunks/forms-DKVIpGnH.esm.js.map +0 -1
- package/.chunks/notice-C3_mXHCe.esm.js.map +0 -1
- package/.chunks/popup-B8Us9xZO.amd.js +0 -2
- package/.chunks/popup-B8Us9xZO.amd.js.map +0 -1
- package/.chunks/popup-B8Us9xZO.esm.js.map +0 -1
- package/.chunks/utils-C1xkXfK0.amd.js.map +0 -1
- package/.chunks/utils-C1xkXfK0.esm.js.map +0 -1
- package/src/components/formsExt/selector2/composables/useAPI.d.ts +0 -2138
- package/src/components/formsExt/selector2/composables/useMenu.d.ts +0 -2142
package/tabsView/tabsView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabsView.js","names":["$slots"],"sources":["../../src/core/utils/store/localStorage.ts","../../src/components/tabsView/tabsView/store.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/utils.ts","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue","../../src/components/tabsView/tabsView/menuTitle.vue"],"sourcesContent":["import { watch } from 'vue';\nimport type { Store } from './store';\n\n/**\n * Сгенерировать имя для сохранения данных в localStorage\n * @param stateName - имя свойства состояния\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\n */\nconst genStorageKey = <T extends Store>(stateName: keyof T, stateKey: string): string => {\n\tconst stateNameString = String(stateName);\n\n\treturn `top:${stateNameString}:${stateKey}`;\n};\n\n/**\n * Загрузить состояние\n * @param stateName - имя свойства состояния\n * @param store\n */\nconst loadLocalStorge = <T extends Store>(stateName: keyof T, store: T) => {\n\t// если Store.key не знадан, значит сохранение состояния в компоненте отключено\n\tif (!store.$id) return;\n\n\tconst localStorageKey = genStorageKey(stateName, store.$id);\n\n\ttry {\n\t\tconst localStorageValue: typeof store[keyof typeof store] = JSON.parse(localStorage.getItem(localStorageKey) as string);\n\n\t\tif (typeof localStorageValue === typeof store[stateName]) {\n\t\t\tstore[stateName] = localStorageValue;\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\n\t}\n};\n\n/**\n * Добавить автосохранение состояние при его изменении\n * @param stateName - имя свойства состояния\n * @param store\n */\nconst addSaverLocalStorge = <T extends Store>(stateName: keyof T, store: T) => {\n\t// если store.$id не знадан, значит сохранение состояния в компоненте отключено\n\tif (!store.$id) return;\n\n\tconst localStorageKey = genStorageKey(stateName, store.$id);\n\n\twatch(() => store[stateName], () => {\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(store[stateName]));\n\t}, { immediate: true });\n};\n\nexport default {\n\tloadLocalStorge,\n\taddSaverLocalStorge,\n};","import type { InjectionKey, ModelRef, UnwrapNestedRefs } from 'vue';\nimport { computed, ref } from 'vue';\nimport Core from '@/core/core/core';\nimport { defineStore, useStore, type Store as DefineStore } from '@/core/utils/store';\nimport StoreLocalStorage from '@/core/utils/store/localStorage';\nimport type { Props, Store } from './types';\nimport { getHash } from '@/core/utils/route';\n\nconst popstateCallbacks = new Set<(e: PopStateEvent) => void>();\n\naddEventListener('popstate', (e) => {\n\tpopstateCallbacks.forEach(popstateCallback => popstateCallback(e));\n});\n\nexport const injectionKey = Symbol() as InjectionKey<Store>;\n\n/**\n * Инициировать Store компонента\n */\nexport const defineTabsStore = (props: Props, model: ModelRef<string | undefined>): UnwrapNestedRefs<Store> & DefineStore => {\n\tconst store = defineStore(injectionKey, () => {\n\t\tconst showMenuInPopup = computed(() => props.showMenuInPopup ?? Core.state.isMobile);\n\t\tconst pageMod = computed(() => props.pageMod);\n\t\tconst isShort = ref(false);\n\n\t\tconst component = ref(undefined);\n\t\tconst scrollable = ref(true);\n\n\t\treturn {\n\t\t\tshowMenuInPopup,\n\t\t\tpageMod,\n\t\t\tisShort,\n\t\t\tactiveItemName: model,\n\t\t\tcomponent,\n\t\t\tscrollable,\n\t\t};\n\t}, props.idState);\n\n\tif (props.isShortable) {\n\t\tconst stateName = 'isShort';\n\n\t\tStoreLocalStorage.loadLocalStorge(stateName, store);\n\t\tStoreLocalStorage.addSaverLocalStorge(stateName, store);\n\t}\n\n\tif (store.$id) {\n\t\tconst popstateCallback = (_e: PopStateEvent) => {\n\t\t\tmodel.value = getHash(store.$id!);\n\t\t};\n\n\t\tpopstateCallbacks.add(popstateCallback);\n\t}\n\n\treturn store;\n};\n\n/**\n * Получить Store компонента\n */\nexport const useTabsStore = () => useStore(injectionKey);\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { genHash } from '@/core/utils/route';\nimport { TopPopupListItem } from '@/components/popup/popup';\nimport { useTabsStore } from './store';\nimport type { PropsMenuItem } from './types';\n\nconst props = withDefaults(defineProps<PropsMenuItem>(), {\n\tscrollable: true,\n\tcomponent: undefined,\n});\n\nconst store = useTabsStore();\n\nconst href = computed(() => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (props.name && store.$id) {\n\t\treturn genHash(store.$id, props.name);\n\t}\n\n\treturn props.href;\n});\n\nconst tagName = computed(() => {\n\tif (store.showMenuInPopup) {\n\t\treturn TopPopupListItem;\n\t}\n\n\treturn href ? 'a' : 'button';\n});\n\n/**\n * Клик по элементу меню\n */\nconst onClick = (e: MouseEvent) => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (!props.href && href.value) {\n\t\te.preventDefault();\n\t}\n\n\tif (props.name) {\n\t\tstore.activeItemName = props.name;\n\t}\n};\n</script>\n\n<template>\n\t<component\n\t\t:is=\"tagName\"\n\t\ttarget=\"_self\"\n\t\t:class=\"{\n\t\t\t['top-tabsView_menuItem']: !store.showMenuInPopup,\n\t\t\t['top-active']: name && store.activeItemName === name,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-spa-disabled']: true,\n\t\t}\"\n\t\t:href=\"href\"\n\t\t:data-top-icon=\"icon || undefined\"\n\t\t:disabled=\"disabled || undefined\"\n\t\t@click=\"onClick\"\n\t>\n\t\t<slot name=\"default\" v-if=\"store.showMenuInPopup\"></slot>\n\n\t\t<span\n\t\t\tv-else-if=\"$slots.default && !store.isShort\"\n\t\t\tclass=\"top-ellipsis\"\n\t\t>\n\t\t\t<slot name=\"default\"></slot>\n\t\t</span>\n\t</component>\n</template>\n\n<style>\n.top-tabsView_menuItem {\n\t--top-icon-color: var(--color-text-2);\n\t--top-icon-width: calc(var(--top-icon-size));\n\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\n\tborder: none;\n\tborder-radius: var(--top-radius-2);\n\tpadding: var(--top-padding-2);\n\tbackground: transparent;\n\theight: 40px;\n\n\tcolor: var(--color-text-1);\n\ttext-decoration: none;\n\twhite-space: nowrap;\n\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n\talign-items: center;\n\tjustify-content: flex-start;\n\ttransition: background var(--transition);\n}\n\n.top-tabsView_menuItem:hover {\n\t--top-icon-color: var(--color-text-1);\n\n\tbackground: var(--color-bg-shading-1);\n\ttext-decoration: none;\n}\n\n.top-tabsView_menuItem.top-active {\n\t--top-icon-color: inherit;\n\n\tbackground: var(--color-layout-front-1);\n\tcolor: inherit;\n}\n\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\n\topacity: unset;\n\tfilter: unset;\n}\n\n.top-tabsView_menuItem.top-disabled {\n\t--top-icon-color: var(--color-text-4);\n\n\tcolor: var(--color-text-4);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { genHash } from '@/core/utils/route';\nimport { TopPopupListItem } from '@/components/popup/popup';\nimport { useTabsStore } from './store';\nimport type { PropsMenuItem } from './types';\n\nconst props = withDefaults(defineProps<PropsMenuItem>(), {\n\tscrollable: true,\n\tcomponent: undefined,\n});\n\nconst store = useTabsStore();\n\nconst href = computed(() => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (props.name && store.$id) {\n\t\treturn genHash(store.$id, props.name);\n\t}\n\n\treturn props.href;\n});\n\nconst tagName = computed(() => {\n\tif (store.showMenuInPopup) {\n\t\treturn TopPopupListItem;\n\t}\n\n\treturn href ? 'a' : 'button';\n});\n\n/**\n * Клик по элементу меню\n */\nconst onClick = (e: MouseEvent) => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (!props.href && href.value) {\n\t\te.preventDefault();\n\t}\n\n\tif (props.name) {\n\t\tstore.activeItemName = props.name;\n\t}\n};\n</script>\n\n<template>\n\t<component\n\t\t:is=\"tagName\"\n\t\ttarget=\"_self\"\n\t\t:class=\"{\n\t\t\t['top-tabsView_menuItem']: !store.showMenuInPopup,\n\t\t\t['top-active']: name && store.activeItemName === name,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-spa-disabled']: true,\n\t\t}\"\n\t\t:href=\"href\"\n\t\t:data-top-icon=\"icon || undefined\"\n\t\t:disabled=\"disabled || undefined\"\n\t\t@click=\"onClick\"\n\t>\n\t\t<slot name=\"default\" v-if=\"store.showMenuInPopup\"></slot>\n\n\t\t<span\n\t\t\tv-else-if=\"$slots.default && !store.isShort\"\n\t\t\tclass=\"top-ellipsis\"\n\t\t>\n\t\t\t<slot name=\"default\"></slot>\n\t\t</span>\n\t</component>\n</template>\n\n<style>\n.top-tabsView_menuItem {\n\t--top-icon-color: var(--color-text-2);\n\t--top-icon-width: calc(var(--top-icon-size));\n\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\n\tborder: none;\n\tborder-radius: var(--top-radius-2);\n\tpadding: var(--top-padding-2);\n\tbackground: transparent;\n\theight: 40px;\n\n\tcolor: var(--color-text-1);\n\ttext-decoration: none;\n\twhite-space: nowrap;\n\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n\talign-items: center;\n\tjustify-content: flex-start;\n\ttransition: background var(--transition);\n}\n\n.top-tabsView_menuItem:hover {\n\t--top-icon-color: var(--color-text-1);\n\n\tbackground: var(--color-bg-shading-1);\n\ttext-decoration: none;\n}\n\n.top-tabsView_menuItem.top-active {\n\t--top-icon-color: inherit;\n\n\tbackground: var(--color-layout-front-1);\n\tcolor: inherit;\n}\n\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\n\topacity: unset;\n\tfilter: unset;\n}\n\n.top-tabsView_menuItem.top-disabled {\n\t--top-icon-color: var(--color-text-4);\n\n\tcolor: var(--color-text-4);\n}\n</style>\n","// TODO: Эту функцию можно вынести в глобальный utils\n\nimport { sleepWhile } from '@/core/utils/system';\n\n/**\n * Проверка нахождения компонента в состояние загрузки\n * @param component\n */\nexport const checkComponentIsLoading = (component: any) => {\n\treturn component?.name === 'AsyncComponentWrapper' && !component?.__asyncResolved;\n};\n\n/**\n * Презагрузить компонент\n *\n * Некоторое время ожидает загрузку компонента, прежде чем завершит работу\n */\nexport const preResolveComponent = async (component: any, condition: Function) => {\n\tif (component?.name !== 'AsyncComponentWrapper') return;\n\tif (component?.__asyncResolved) return;\n\n\tcomponent.__asyncLoader();\n\n\tawait sleepWhile(() => {\n\t\treturn condition() && checkComponentIsLoading(component);\n\t}, 200);\n};\n","<script setup lang=\"ts\">\nimport type { Ref, VNode } from 'vue';\nimport { markRaw, ref, useSlots, watch } from 'vue';\nimport { TopPopup } from '../../popup/popup';\nimport { getHash, setHash } from '@/core/utils/route';\n\nimport type { MenuItem, PropsMenu, PropsMenuItem } from './types';\nimport { useTabsStore } from './store';\nimport TabsViewMenuItem from './menuItem.vue';\nimport { preResolveComponent } from './utils';\n\ndefineProps<PropsMenu>();\n\nconst isLoading = defineModel('isLoading');\n\nconst store = useTabsStore();\n\nconst slots = useSlots();\n\n// словарь используется для оптимизации получения нужного menuItem\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\n\n// заполнить словарь с menuItem, по элементам в slot default\nconst setMenuItemByName = () => {\n\tif (!slots.default) return;\n\n\tconst component: any = slots.default({}).find(item => item.key === '_menu');\n\tif (!component) return;\n\n\tsetMenuItemByNameFromItems(component.children);\n};\n\n// заполнить словарь с menuItem, по элементам\nconst setMenuItemByNameFromItems = (menuItems: VNode[]) => {\n\tmenuItems.forEach((subComponent: any) => {\n\t\t// это не компонент элемента меню\n\t\tif (subComponent.type.__name && subComponent.type.__name !== TabsViewMenuItem.__name) return;\n\n\t\t// это не компонент, например template\n\t\tif (!subComponent.type.__name && typeof subComponent.children === 'object') {\n\t\t\tsetMenuItemByNameFromItems(subComponent.children);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subComponent.props?.name || subComponent.props?.disabled) return;\n\n\t\tconst menuItem: MenuItem = {\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\n\t\t\ticon: subComponent.props.icon,\n\t\t\tcomponent: subComponent.props.component ? markRaw(subComponent.props.component) : TabsViewMenuItem.props.component.default,\n\t\t\tscrollable: subComponent.props.scrollable ?? TabsViewMenuItem.props.scrollable.default,\n\t\t};\n\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\n\t});\n};\n\n/**\n * activeMenuItem нужен:\n * - для вывода текста активной вкладки в меню с popup\n * - для вывода компонента активной вкладки (store.component)\n * - для установки store.scrollable\n */\nconst activeMenuItem: Ref<MenuItem | null> = ref(null);\n\n/**\n * Кол-во изменений активной вкладки\n */\nlet countChanged = 0;\n\n/**\n * Смена активной вкладки\n *\n * TODO: смена slot, например смена языка, требует повторного выполнения setMenuItemByName()\n */\nwatch(\n\t() => store.activeItemName,\n\tasync () => {\n\t\tconst numberChanged = ++countChanged; // порядковый номер текущего изменения\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tsetMenuItemByName();\n\t\t}\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tstore.activeItemName = '';\n\n\t\t\treturn;\n\t\t}\n\n\t\tactiveMenuItem.value = menuItemByName.get(store.activeItemName) ?? null;\n\n\t\t// элемент не найден, установить из хеша страницы\n\t\tif (!activeMenuItem.value && store.$id) {\n\t\t\tconst activeItemName = getHash(store.$id);\n\n\t\t\tactiveMenuItem.value = menuItemByName.get(activeItemName) ?? null;\n\n\t\t\tif (activeMenuItem.value) {\n\t\t\t\tstore.activeItemName = activeItemName;\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// элемент не найден, установить первый доступный\n\t\tif (!activeMenuItem.value) {\n\t\t\tstore.activeItemName = menuItemByName.keys().next().value!;\n\n\t\t\treturn;\n\t\t}\n\n\t\t// запрошена смена на уже активный элемент\n\t\tif (activeMenuItem.value.component === store.component) {\n\t\t\tisLoading.value = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (store.$id) setHash(store.$id, store.activeItemName, false);\n\n\t\t// флаг загрузки будет сброшен при инициализации компонента\n\t\tisLoading.value = true;\n\n\t\t/**\n\t\t * Презагрузить компонент\n\t\t *\n\t\t * Нужно для того, чтобы минимизировать скачки интерфейса при ожидании загрузки асинхронного компонента\n\t\t */\n\t\tawait preResolveComponent(activeMenuItem.value.component, () => numberChanged === countChanged);\n\n\t\t// влкадка была сменена еще раз во время sleepWhile\n\t\tif (numberChanged !== countChanged) {\n\t\t\treturn;\n\t\t}\n\n\t\tstore.scrollable = activeMenuItem.value.scrollable;\n\t\tstore.component = activeMenuItem.value.component;\n\n\t\tif (activeMenuItem.value && !store.component) {\n\t\t\tconsole.warn(`Компонент вкладки ${store.activeItemName} не найден. Добавьте props.component для пункта меню ${store.activeItemName}.`);\n\t\t}\n\t},\n\t{ immediate: true },\n);\n\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView_menu': true,\n\t\t\t'top-tabsView_menu-inPopup_0': !store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-inPopup_1': store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-short': store.isShort && !store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<!-- Спрятать меню под кнопку в popup -->\n\t\t<TopPopup v-if=\"store.showMenuInPopup\">\n\t\t\t<template #opener>\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #contentList>\n\t\t\t\t<slot></slot>\n\t\t\t</template>\n\t\t</TopPopup>\n\n\t\t<!-- Отобразить меню на странице -->\n\t\t<template v-else>\n\t\t\t<div class=\"top-tabsView_menuList\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-if=\"isShortable\"\n\t\t\t\tclass=\"top-tabsView_menuFooter\"\n\t\t\t>\n\t\t\t\t<TabsViewMenuItem\n\t\t\t\t\tv-if=\"isShortable\"\n\t\t\t\t\t:icon=\"store.isShort ? '' : ''\"\n\t\t\t\t\t@click=\"store.isShort = !store.isShort\"\n\t\t\t\t>\n\t\t\t\t\t{{ store.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\n\t\t\t\t</TabsViewMenuItem>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n/* режим отображение табов в основной области документа */\n.top-tabsView-pageMod .top-tabsView_menu {\n\tbox-sizing: border-box;\n\tposition: sticky;\n\ttop: var(--top-tabsView-top);\n\tz-index: 10;\n}\n\n/* режим отображение табов в основной области документа без popup */\n.top-tabsView-pageMod .top-tabsView_menu-inPopup_0 {\n\theight: calc(var(--100vh) - var(--top-tabsView-top));\n}\n\n/* стантартный режим */\n.top-tabsView_menu-inPopup_0 {\n\tbox-sizing: border-box;\n\twidth: var(--top-tabsView-menu-width);\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tflex-shrink: 0;\n}\n\n/* режим вывода в popup */\n.top-tabsView_menu-inPopup_1 {\n\tborder-bottom: var(--top-tabsView-menu-border-bottom-width) solid var(--color-line-2-opacity);\n}\n\n.top-tabsView_menu-short {\n\twidth: auto;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\n\tbackground: var(--color-layer-1);\n}\n\n.top-tabsView_menuOpenerIcon { display: flex; }\n\n.top-tabsView_menuOpenerActiveItem {\n\t--top-forms-padding: 0px;\n\n\tbox-sizing: border-box;\n\tpadding: var(--top-tabsView-menu-opener-padding);\n\tmax-width: calc(100% - var(--top-forms-base-height));\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--top-padding-2);\n}\n\n.top-tabsView_menuList,\n.top-tabsView_menuFooter {\n\tpadding: var(--top-padding-2);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-2);\n}\n\n.top-tabsView_menuList {\n\toverflow-y: auto;\n}\n\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem {\n\t--top-icon-width: 100%;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Ref, VNode } from 'vue';\nimport { markRaw, ref, useSlots, watch } from 'vue';\nimport { TopPopup } from '../../popup/popup';\nimport { getHash, setHash } from '@/core/utils/route';\n\nimport type { MenuItem, PropsMenu, PropsMenuItem } from './types';\nimport { useTabsStore } from './store';\nimport TabsViewMenuItem from './menuItem.vue';\nimport { preResolveComponent } from './utils';\n\ndefineProps<PropsMenu>();\n\nconst isLoading = defineModel('isLoading');\n\nconst store = useTabsStore();\n\nconst slots = useSlots();\n\n// словарь используется для оптимизации получения нужного menuItem\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\n\n// заполнить словарь с menuItem, по элементам в slot default\nconst setMenuItemByName = () => {\n\tif (!slots.default) return;\n\n\tconst component: any = slots.default({}).find(item => item.key === '_menu');\n\tif (!component) return;\n\n\tsetMenuItemByNameFromItems(component.children);\n};\n\n// заполнить словарь с menuItem, по элементам\nconst setMenuItemByNameFromItems = (menuItems: VNode[]) => {\n\tmenuItems.forEach((subComponent: any) => {\n\t\t// это не компонент элемента меню\n\t\tif (subComponent.type.__name && subComponent.type.__name !== TabsViewMenuItem.__name) return;\n\n\t\t// это не компонент, например template\n\t\tif (!subComponent.type.__name && typeof subComponent.children === 'object') {\n\t\t\tsetMenuItemByNameFromItems(subComponent.children);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subComponent.props?.name || subComponent.props?.disabled) return;\n\n\t\tconst menuItem: MenuItem = {\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\n\t\t\ticon: subComponent.props.icon,\n\t\t\tcomponent: subComponent.props.component ? markRaw(subComponent.props.component) : TabsViewMenuItem.props.component.default,\n\t\t\tscrollable: subComponent.props.scrollable ?? TabsViewMenuItem.props.scrollable.default,\n\t\t};\n\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\n\t});\n};\n\n/**\n * activeMenuItem нужен:\n * - для вывода текста активной вкладки в меню с popup\n * - для вывода компонента активной вкладки (store.component)\n * - для установки store.scrollable\n */\nconst activeMenuItem: Ref<MenuItem | null> = ref(null);\n\n/**\n * Кол-во изменений активной вкладки\n */\nlet countChanged = 0;\n\n/**\n * Смена активной вкладки\n *\n * TODO: смена slot, например смена языка, требует повторного выполнения setMenuItemByName()\n */\nwatch(\n\t() => store.activeItemName,\n\tasync () => {\n\t\tconst numberChanged = ++countChanged; // порядковый номер текущего изменения\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tsetMenuItemByName();\n\t\t}\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tstore.activeItemName = '';\n\n\t\t\treturn;\n\t\t}\n\n\t\tactiveMenuItem.value = menuItemByName.get(store.activeItemName) ?? null;\n\n\t\t// элемент не найден, установить из хеша страницы\n\t\tif (!activeMenuItem.value && store.$id) {\n\t\t\tconst activeItemName = getHash(store.$id);\n\n\t\t\tactiveMenuItem.value = menuItemByName.get(activeItemName) ?? null;\n\n\t\t\tif (activeMenuItem.value) {\n\t\t\t\tstore.activeItemName = activeItemName;\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// элемент не найден, установить первый доступный\n\t\tif (!activeMenuItem.value) {\n\t\t\tstore.activeItemName = menuItemByName.keys().next().value!;\n\n\t\t\treturn;\n\t\t}\n\n\t\t// запрошена смена на уже активный элемент\n\t\tif (activeMenuItem.value.component === store.component) {\n\t\t\tisLoading.value = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (store.$id) setHash(store.$id, store.activeItemName, false);\n\n\t\t// флаг загрузки будет сброшен при инициализации компонента\n\t\tisLoading.value = true;\n\n\t\t/**\n\t\t * Презагрузить компонент\n\t\t *\n\t\t * Нужно для того, чтобы минимизировать скачки интерфейса при ожидании загрузки асинхронного компонента\n\t\t */\n\t\tawait preResolveComponent(activeMenuItem.value.component, () => numberChanged === countChanged);\n\n\t\t// влкадка была сменена еще раз во время sleepWhile\n\t\tif (numberChanged !== countChanged) {\n\t\t\treturn;\n\t\t}\n\n\t\tstore.scrollable = activeMenuItem.value.scrollable;\n\t\tstore.component = activeMenuItem.value.component;\n\n\t\tif (activeMenuItem.value && !store.component) {\n\t\t\tconsole.warn(`Компонент вкладки ${store.activeItemName} не найден. Добавьте props.component для пункта меню ${store.activeItemName}.`);\n\t\t}\n\t},\n\t{ immediate: true },\n);\n\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView_menu': true,\n\t\t\t'top-tabsView_menu-inPopup_0': !store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-inPopup_1': store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-short': store.isShort && !store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<!-- Спрятать меню под кнопку в popup -->\n\t\t<TopPopup v-if=\"store.showMenuInPopup\">\n\t\t\t<template #opener>\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #contentList>\n\t\t\t\t<slot></slot>\n\t\t\t</template>\n\t\t</TopPopup>\n\n\t\t<!-- Отобразить меню на странице -->\n\t\t<template v-else>\n\t\t\t<div class=\"top-tabsView_menuList\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-if=\"isShortable\"\n\t\t\t\tclass=\"top-tabsView_menuFooter\"\n\t\t\t>\n\t\t\t\t<TabsViewMenuItem\n\t\t\t\t\tv-if=\"isShortable\"\n\t\t\t\t\t:icon=\"store.isShort ? '' : ''\"\n\t\t\t\t\t@click=\"store.isShort = !store.isShort\"\n\t\t\t\t>\n\t\t\t\t\t{{ store.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\n\t\t\t\t</TabsViewMenuItem>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n/* режим отображение табов в основной области документа */\n.top-tabsView-pageMod .top-tabsView_menu {\n\tbox-sizing: border-box;\n\tposition: sticky;\n\ttop: var(--top-tabsView-top);\n\tz-index: 10;\n}\n\n/* режим отображение табов в основной области документа без popup */\n.top-tabsView-pageMod .top-tabsView_menu-inPopup_0 {\n\theight: calc(var(--100vh) - var(--top-tabsView-top));\n}\n\n/* стантартный режим */\n.top-tabsView_menu-inPopup_0 {\n\tbox-sizing: border-box;\n\twidth: var(--top-tabsView-menu-width);\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tflex-shrink: 0;\n}\n\n/* режим вывода в popup */\n.top-tabsView_menu-inPopup_1 {\n\tborder-bottom: var(--top-tabsView-menu-border-bottom-width) solid var(--color-line-2-opacity);\n}\n\n.top-tabsView_menu-short {\n\twidth: auto;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\n\tbackground: var(--color-layer-1);\n}\n\n.top-tabsView_menuOpenerIcon { display: flex; }\n\n.top-tabsView_menuOpenerActiveItem {\n\t--top-forms-padding: 0px;\n\n\tbox-sizing: border-box;\n\tpadding: var(--top-tabsView-menu-opener-padding);\n\tmax-width: calc(100% - var(--top-forms-base-height));\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--top-padding-2);\n}\n\n.top-tabsView_menuList,\n.top-tabsView_menuFooter {\n\tpadding: var(--top-padding-2);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-2);\n}\n\n.top-tabsView_menuList {\n\toverflow-y: auto;\n}\n\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem {\n\t--top-icon-width: 100%;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { defineModel, onUnmounted, ref, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { delHash } from '@/core/utils/route';\nimport type { Props } from './types';\nimport { defineTabsStore } from './store';\nimport TabsViewMenu from './menu.vue';\nimport TopLoadbar from '@/components/forms/loadbar/loadbar.vue';\nimport { checkComponentIsLoading } from './utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tshowMenuInPopup: undefined,\n\tisShortable: false,\n});\n\nconst model = defineModel<string>();\n\nconst store = defineTabsStore(props, model);\n\nconst uid = Math.random();\n\nif (props.pageMod) Core.state.documentClassModificators.set(uid, 'top-hasTabsViewPageMod');\n\nonUnmounted(() => {\n\tif (props.pageMod) Core.state.documentClassModificators.delete(uid);\n\n\tif (store.$id) delHash(store.$id, store.activeItemName, true);\n});\n\nconst componentRef = ref();\nconst isLoading = ref(false);\n\nwatch([componentRef, () => store.component], () => {\n\tisLoading.value = checkComponentIsLoading(store.component);\n}, { immediate: true });\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView': true,\n\t\t\t'top-tabsView-pageMod': props.pageMod,\n\t\t\t'top-tabsView-inPopup': store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<TabsViewMenu\n\t\t\t:isShortable=\"isShortable\"\n\t\t\tv-model:isLoading=\"isLoading\"\n\t\t>\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\n\t\t\t<slot name=\"menu\"></slot>\n\t\t</TabsViewMenu>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-tabsView_contents': true,\n\t\t\t\t'top-tabsView_contents-isLoading': isLoading,\n\t\t\t\t'top-tabsView_contents-noScrollable': !store.scrollable,\n\t\t\t}\"\n\t\t>\n\t\t\t<TopLoadbar v-if=\"isLoading\"/>\n\n\t\t\t<keep-alive>\n\t\t\t\t<component\n\t\t\t\t\tref=\"componentRef\"\n\t\t\t\t\t:is=\"store.component\"\n\t\t\t\t/>\n\t\t\t</keep-alive>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n:root {\n\t--top-tabsView-top: 0px;\n\t--top-tabsView-menu-width: 220px;\n\t--top-tabsView-contents-offset-top: 0px;\n\t--top-tabsView-menu-border-bottom-width: 1px;\n\t--top-tabsView-menu-opener-padding: var(--top-padding-2);\n}\n\n.top-tabsView {\n\tbackground: var(--color-layout-middle);\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.top-tabsView_contents {\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-layout-front-1);\n\tpadding: var(--top-padding-4);\n\tflex-grow: 1;\n\toverflow: auto;\n\tposition: relative;\n}\n\n.top-tabsView_contents-isLoading {\n\tpointer-events: none;\n}\n\n.top-tabsView_contents-noScrollable {\n\twidth: calc(100% - var(--top-tabsView-menu-width));\n\tpadding: 0;\n\toverflow: visible;\n}\n\n/* top-tabsView-inPopup */\n.top-tabsView-inPopup {\n\tbackground: var(--color-layout-front-1);\n\tflex-direction: column;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents {\n\tborder-radius: 0;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents-noScrollable {\n\twidth: auto;\n}\n\n@media only screen and (max-width: 900px) {\n\t:root {\n\t\t/* Суммарно должна быть высота элемента \".top-tabsView_menu\" */\n\t\t--top-tabsView-contents-offset-top: calc(var(--top-icon-size) + var(--top-tabsView-menu-opener-padding) * 2 + var(--top-tabsView-menu-border-bottom-width));\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { defineModel, onUnmounted, ref, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { delHash } from '@/core/utils/route';\nimport type { Props } from './types';\nimport { defineTabsStore } from './store';\nimport TabsViewMenu from './menu.vue';\nimport TopLoadbar from '@/components/forms/loadbar/loadbar.vue';\nimport { checkComponentIsLoading } from './utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tshowMenuInPopup: undefined,\n\tisShortable: false,\n});\n\nconst model = defineModel<string>();\n\nconst store = defineTabsStore(props, model);\n\nconst uid = Math.random();\n\nif (props.pageMod) Core.state.documentClassModificators.set(uid, 'top-hasTabsViewPageMod');\n\nonUnmounted(() => {\n\tif (props.pageMod) Core.state.documentClassModificators.delete(uid);\n\n\tif (store.$id) delHash(store.$id, store.activeItemName, true);\n});\n\nconst componentRef = ref();\nconst isLoading = ref(false);\n\nwatch([componentRef, () => store.component], () => {\n\tisLoading.value = checkComponentIsLoading(store.component);\n}, { immediate: true });\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView': true,\n\t\t\t'top-tabsView-pageMod': props.pageMod,\n\t\t\t'top-tabsView-inPopup': store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<TabsViewMenu\n\t\t\t:isShortable=\"isShortable\"\n\t\t\tv-model:isLoading=\"isLoading\"\n\t\t>\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\n\t\t\t<slot name=\"menu\"></slot>\n\t\t</TabsViewMenu>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-tabsView_contents': true,\n\t\t\t\t'top-tabsView_contents-isLoading': isLoading,\n\t\t\t\t'top-tabsView_contents-noScrollable': !store.scrollable,\n\t\t\t}\"\n\t\t>\n\t\t\t<TopLoadbar v-if=\"isLoading\"/>\n\n\t\t\t<keep-alive>\n\t\t\t\t<component\n\t\t\t\t\tref=\"componentRef\"\n\t\t\t\t\t:is=\"store.component\"\n\t\t\t\t/>\n\t\t\t</keep-alive>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n:root {\n\t--top-tabsView-top: 0px;\n\t--top-tabsView-menu-width: 220px;\n\t--top-tabsView-contents-offset-top: 0px;\n\t--top-tabsView-menu-border-bottom-width: 1px;\n\t--top-tabsView-menu-opener-padding: var(--top-padding-2);\n}\n\n.top-tabsView {\n\tbackground: var(--color-layout-middle);\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.top-tabsView_contents {\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-layout-front-1);\n\tpadding: var(--top-padding-4);\n\tflex-grow: 1;\n\toverflow: auto;\n\tposition: relative;\n}\n\n.top-tabsView_contents-isLoading {\n\tpointer-events: none;\n}\n\n.top-tabsView_contents-noScrollable {\n\twidth: calc(100% - var(--top-tabsView-menu-width));\n\tpadding: 0;\n\toverflow: visible;\n}\n\n/* top-tabsView-inPopup */\n.top-tabsView-inPopup {\n\tbackground: var(--color-layout-front-1);\n\tflex-direction: column;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents {\n\tborder-radius: 0;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents-noScrollable {\n\twidth: auto;\n}\n\n@media only screen and (max-width: 900px) {\n\t:root {\n\t\t/* Суммарно должна быть высота элемента \".top-tabsView_menu\" */\n\t\t--top-tabsView-contents-offset-top: calc(var(--top-icon-size) + var(--top-tabsView-menu-opener-padding) * 2 + var(--top-tabsView-menu-border-bottom-width));\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\n\n</script>\n\n<template>\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\n</template>\n\n<style>\n.top-tabsView_menuDelimeter {\n\tpadding: var(--top-padding-1) 0;\n\tdisplay: flex;\n}\n\n.top-tabsView_menuDelimeter:before {\n\tcontent: \"\";\n\theight: 2px;\n\tbackground: var(--color-line-2);\n\tflex-grow: 1;\n}\n\n.top-tabsView_menuDelimeter:first-child,\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\n\tdisplay: none;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTabsStore } from './store';\nimport type { PropsMenuTitle } from './types';\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\nimport { TopPopupListItem } from '../../popup/popup';\n\ndefineProps<PropsMenuTitle>();\n\nconst store = useTabsStore();\n</script>\n\n<template>\n\t<TopPopupListItem\n\t\tv-if=\"store.showMenuInPopup\"\n\t\ttype=\"title\"\n\t>\n\t\t<slot></slot>\n\t</TopPopupListItem>\n\n\t<TabsViewMenuDelimeter v-else-if=\"store.isShort\"/>\n\n\t<div\n\t\tv-else\n\t\t:class=\"{\n\t\t\t'top-tabsView_menuTitle': true,\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\n\t\t}\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-tabsView_menuTitle {\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\n\tfont-weight: 600;\n\tcolor: var(--color-text-1);\n}\n\n.top-tabsView_menuTitle-subtitle {\n\tpadding-top: var(--top-padding-1);\n\tfont-size: 12px;\n\tfont-weight: 400;\n\tcolor: var(--color-text-2);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTabsStore } from './store';\nimport type { PropsMenuTitle } from './types';\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\nimport { TopPopupListItem } from '../../popup/popup';\n\ndefineProps<PropsMenuTitle>();\n\nconst store = useTabsStore();\n</script>\n\n<template>\n\t<TopPopupListItem\n\t\tv-if=\"store.showMenuInPopup\"\n\t\ttype=\"title\"\n\t>\n\t\t<slot></slot>\n\t</TopPopupListItem>\n\n\t<TabsViewMenuDelimeter v-else-if=\"store.isShort\"/>\n\n\t<div\n\t\tv-else\n\t\t:class=\"{\n\t\t\t'top-tabsView_menuTitle': true,\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\n\t\t}\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-tabsView_menuTitle {\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\n\tfont-weight: 600;\n\tcolor: var(--color-text-1);\n}\n\n.top-tabsView_menuTitle-subtitle {\n\tpadding-top: var(--top-padding-1);\n\tfont-size: 12px;\n\tfont-weight: 400;\n\tcolor: var(--color-text-2);\n}\n</style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabsView.js","names":["$slots"],"sources":["../../src/core/utils/store/localStorage.ts","../../src/components/tabsView/tabsView/store.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/utils.ts","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue","../../src/components/tabsView/tabsView/menuTitle.vue"],"sourcesContent":["import { watch } from 'vue';\nimport type { Store } from './store';\n\n/**\n * Сгенерировать имя для сохранения данных в localStorage\n * @param stateName - имя свойства состояния\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\n */\nconst genStorageKey = <T extends Store>(stateName: keyof T, stateKey: string): string => {\n\tconst stateNameString = String(stateName);\n\n\treturn `top:${stateNameString}:${stateKey}`;\n};\n\n/**\n * Загрузить состояние\n * @param stateName - имя свойства состояния\n * @param store\n */\nconst loadLocalStorge = <T extends Store>(stateName: keyof T, store: T) => {\n\t// если Store.key не знадан, значит сохранение состояния в компоненте отключено\n\tif (!store.$id) return;\n\n\tconst localStorageKey = genStorageKey(stateName, store.$id);\n\n\ttry {\n\t\tconst localStorageValue: typeof store[keyof typeof store] = JSON.parse(localStorage.getItem(localStorageKey) as string);\n\n\t\tif (typeof localStorageValue === typeof store[stateName]) {\n\t\t\tstore[stateName] = localStorageValue;\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\n\t}\n};\n\n/**\n * Добавить автосохранение состояние при его изменении\n * @param stateName - имя свойства состояния\n * @param store\n */\nconst addSaverLocalStorge = <T extends Store>(stateName: keyof T, store: T) => {\n\t// если store.$id не знадан, значит сохранение состояния в компоненте отключено\n\tif (!store.$id) return;\n\n\tconst localStorageKey = genStorageKey(stateName, store.$id);\n\n\twatch(() => store[stateName], () => {\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(store[stateName]));\n\t}, { immediate: true });\n};\n\nexport default {\n\tloadLocalStorge,\n\taddSaverLocalStorge,\n};","import type { InjectionKey, ModelRef, UnwrapNestedRefs } from 'vue';\nimport { computed, ref } from 'vue';\nimport Core from '@/core/core/core';\nimport { defineStore, useStore, type Store as DefineStore } from '@/core/utils/store';\nimport StoreLocalStorage from '@/core/utils/store/localStorage';\nimport type { Props, Store } from './types';\nimport { getHash } from '@/core/utils/route';\n\nconst popstateCallbacks = new Set<(e: PopStateEvent) => void>();\n\naddEventListener('popstate', (e) => {\n\tpopstateCallbacks.forEach(popstateCallback => popstateCallback(e));\n});\n\nexport const injectionKey = Symbol() as InjectionKey<Store>;\n\n/**\n * Инициировать Store компонента\n */\nexport const defineTabsStore = (props: Props, model: ModelRef<string | undefined>): UnwrapNestedRefs<Store> & DefineStore => {\n\tconst store = defineStore(injectionKey, () => {\n\t\tconst showMenuInPopup = computed(() => props.showMenuInPopup ?? Core.state.isMobile);\n\t\tconst pageMod = computed(() => props.pageMod);\n\t\tconst isShort = ref(false);\n\n\t\tconst component = ref(undefined);\n\t\tconst scrollable = ref(true);\n\n\t\treturn {\n\t\t\tshowMenuInPopup,\n\t\t\tpageMod,\n\t\t\tisShort,\n\t\t\tactiveItemName: model,\n\t\t\tcomponent,\n\t\t\tscrollable,\n\t\t};\n\t}, props.idState);\n\n\tif (props.isShortable) {\n\t\tconst stateName = 'isShort';\n\n\t\tStoreLocalStorage.loadLocalStorge(stateName, store);\n\t\tStoreLocalStorage.addSaverLocalStorge(stateName, store);\n\t}\n\n\tif (store.$id) {\n\t\tconst popstateCallback = (_e: PopStateEvent) => {\n\t\t\tmodel.value = getHash(store.$id!);\n\t\t};\n\n\t\tpopstateCallbacks.add(popstateCallback);\n\t}\n\n\treturn store;\n};\n\n/**\n * Получить Store компонента\n */\nexport const useTabsStore = () => useStore(injectionKey);\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { genHash } from '@/core/utils/route';\nimport { TopPopupListItem } from '@/components/popup/popup';\nimport { useTabsStore } from './store';\nimport type { PropsMenuItem } from './types';\n\nconst props = withDefaults(defineProps<PropsMenuItem>(), {\n\tscrollable: true,\n\tcomponent: undefined,\n});\n\nconst store = useTabsStore();\n\nconst href = computed(() => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (props.name && store.$id) {\n\t\treturn genHash(store.$id, props.name);\n\t}\n\n\treturn props.href;\n});\n\nconst tagName = computed(() => {\n\tif (store.showMenuInPopup) {\n\t\treturn TopPopupListItem;\n\t}\n\n\treturn href.value ? 'a' : 'button';\n});\n\n/**\n * Клик по элементу меню\n */\nconst onClick = (e: MouseEvent) => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (!props.href && href.value) {\n\t\te.preventDefault();\n\t}\n\n\tif (props.name) {\n\t\tstore.activeItemName = props.name;\n\t}\n};\n</script>\n\n<template>\n\t<component\n\t\t:is=\"tagName\"\n\t\ttarget=\"_self\"\n\t\t:class=\"{\n\t\t\t['top-tabsView_menuItem']: !store.showMenuInPopup,\n\t\t\t['top-active']: name && store.activeItemName === name,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-spa-disabled']: true,\n\t\t}\"\n\t\t:href=\"href\"\n\t\t:data-top-icon=\"icon || undefined\"\n\t\t:disabled=\"disabled || undefined\"\n\t\t@click=\"onClick\"\n\t>\n\t\t<slot name=\"default\" v-if=\"store.showMenuInPopup\"></slot>\n\n\t\t<span\n\t\t\tv-else-if=\"$slots.default && !store.isShort\"\n\t\t\tclass=\"top-ellipsis\"\n\t\t>\n\t\t\t<slot name=\"default\"></slot>\n\t\t</span>\n\t</component>\n</template>\n\n<style>\n.top-tabsView_menuItem {\n\t--top-icon-color: var(--color-text-2);\n\t--top-icon-width: calc(var(--top-icon-size));\n\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\n\tborder: none;\n\tborder-radius: var(--top-radius-2);\n\tpadding: var(--top-padding-2);\n\tbackground: transparent;\n\theight: 40px;\n\n\tcolor: var(--color-text-1);\n\ttext-decoration: none;\n\twhite-space: nowrap;\n\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n\talign-items: center;\n\tjustify-content: flex-start;\n\ttransition: background var(--transition);\n}\n\n.top-tabsView_menuItem:hover {\n\t--top-icon-color: var(--color-text-1);\n\n\tbackground: var(--color-bg-shading-1);\n\ttext-decoration: none;\n}\n\n.top-tabsView_menuItem.top-active {\n\t--top-icon-color: inherit;\n\n\tbackground: var(--color-layout-front-1);\n\tcolor: inherit;\n}\n\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\n\topacity: unset;\n\tfilter: unset;\n}\n\n.top-tabsView_menuItem.top-disabled {\n\t--top-icon-color: var(--color-text-4);\n\n\tcolor: var(--color-text-4);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { genHash } from '@/core/utils/route';\nimport { TopPopupListItem } from '@/components/popup/popup';\nimport { useTabsStore } from './store';\nimport type { PropsMenuItem } from './types';\n\nconst props = withDefaults(defineProps<PropsMenuItem>(), {\n\tscrollable: true,\n\tcomponent: undefined,\n});\n\nconst store = useTabsStore();\n\nconst href = computed(() => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (props.name && store.$id) {\n\t\treturn genHash(store.$id, props.name);\n\t}\n\n\treturn props.href;\n});\n\nconst tagName = computed(() => {\n\tif (store.showMenuInPopup) {\n\t\treturn TopPopupListItem;\n\t}\n\n\treturn href.value ? 'a' : 'button';\n});\n\n/**\n * Клик по элементу меню\n */\nconst onClick = (e: MouseEvent) => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (!props.href && href.value) {\n\t\te.preventDefault();\n\t}\n\n\tif (props.name) {\n\t\tstore.activeItemName = props.name;\n\t}\n};\n</script>\n\n<template>\n\t<component\n\t\t:is=\"tagName\"\n\t\ttarget=\"_self\"\n\t\t:class=\"{\n\t\t\t['top-tabsView_menuItem']: !store.showMenuInPopup,\n\t\t\t['top-active']: name && store.activeItemName === name,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-spa-disabled']: true,\n\t\t}\"\n\t\t:href=\"href\"\n\t\t:data-top-icon=\"icon || undefined\"\n\t\t:disabled=\"disabled || undefined\"\n\t\t@click=\"onClick\"\n\t>\n\t\t<slot name=\"default\" v-if=\"store.showMenuInPopup\"></slot>\n\n\t\t<span\n\t\t\tv-else-if=\"$slots.default && !store.isShort\"\n\t\t\tclass=\"top-ellipsis\"\n\t\t>\n\t\t\t<slot name=\"default\"></slot>\n\t\t</span>\n\t</component>\n</template>\n\n<style>\n.top-tabsView_menuItem {\n\t--top-icon-color: var(--color-text-2);\n\t--top-icon-width: calc(var(--top-icon-size));\n\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\n\tborder: none;\n\tborder-radius: var(--top-radius-2);\n\tpadding: var(--top-padding-2);\n\tbackground: transparent;\n\theight: 40px;\n\n\tcolor: var(--color-text-1);\n\ttext-decoration: none;\n\twhite-space: nowrap;\n\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n\talign-items: center;\n\tjustify-content: flex-start;\n\ttransition: background var(--transition);\n}\n\n.top-tabsView_menuItem:hover {\n\t--top-icon-color: var(--color-text-1);\n\n\tbackground: var(--color-bg-shading-1);\n\ttext-decoration: none;\n}\n\n.top-tabsView_menuItem.top-active {\n\t--top-icon-color: inherit;\n\n\tbackground: var(--color-layout-front-1);\n\tcolor: inherit;\n}\n\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\n\topacity: unset;\n\tfilter: unset;\n}\n\n.top-tabsView_menuItem.top-disabled {\n\t--top-icon-color: var(--color-text-4);\n\n\tcolor: var(--color-text-4);\n}\n</style>\n","// TODO: Эту функцию можно вынести в глобальный utils\n\nimport { sleepWhile } from '@/core/utils/system';\n\n/**\n * Проверка нахождения компонента в состояние загрузки\n * @param component\n */\nexport const checkComponentIsLoading = (component: any) => {\n\treturn component?.name === 'AsyncComponentWrapper' && !component?.__asyncResolved;\n};\n\n/**\n * Презагрузить компонент\n *\n * Некоторое время ожидает загрузку компонента, прежде чем завершит работу\n */\nexport const preResolveComponent = async (component: any, condition: Function) => {\n\tif (component?.name !== 'AsyncComponentWrapper') return;\n\tif (component?.__asyncResolved) return;\n\n\tcomponent.__asyncLoader();\n\n\tawait sleepWhile(() => {\n\t\treturn condition() && checkComponentIsLoading(component);\n\t}, 200);\n};\n","<script setup lang=\"ts\">\nimport type { Ref, VNode } from 'vue';\nimport { markRaw, ref, useSlots, watch } from 'vue';\nimport { TopPopup } from '../../popup/popup';\nimport { getHash, setHash } from '@/core/utils/route';\n\nimport type { MenuItem, PropsMenu, PropsMenuItem } from './types';\nimport { useTabsStore } from './store';\nimport TabsViewMenuItem from './menuItem.vue';\nimport { preResolveComponent } from './utils';\n\ndefineProps<PropsMenu>();\n\nconst isLoading = defineModel('isLoading');\n\nconst store = useTabsStore();\n\nconst slots = useSlots();\n\n// словарь используется для оптимизации получения нужного menuItem\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\n\n// заполнить словарь с menuItem, по элементам в slot default\nconst setMenuItemByName = () => {\n\tif (!slots.default) return;\n\n\tconst component: any = slots.default({}).find(item => item.key === '_menu');\n\tif (!component) return;\n\n\tsetMenuItemByNameFromItems(component.children);\n};\n\n// заполнить словарь с menuItem, по элементам\nconst setMenuItemByNameFromItems = (menuItems: VNode[]) => {\n\tmenuItems.forEach((subComponent: any) => {\n\t\t// это не компонент элемента меню\n\t\tif (subComponent.type.__name && subComponent.type.__name !== TabsViewMenuItem.__name) return;\n\n\t\t// это не компонент, например template\n\t\tif (!subComponent.type.__name && typeof subComponent.children === 'object') {\n\t\t\tsetMenuItemByNameFromItems(subComponent.children);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subComponent.props?.name || subComponent.props?.disabled) return;\n\n\t\tconst menuItem: MenuItem = {\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\n\t\t\ticon: subComponent.props.icon,\n\t\t\tcomponent: subComponent.props.component ? markRaw(subComponent.props.component) : TabsViewMenuItem.props.component.default,\n\t\t\tscrollable: subComponent.props.scrollable ?? TabsViewMenuItem.props.scrollable.default,\n\t\t};\n\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\n\t});\n};\n\n/**\n * activeMenuItem нужен:\n * - для вывода текста активной вкладки в меню с popup\n * - для вывода компонента активной вкладки (store.component)\n * - для установки store.scrollable\n */\nconst activeMenuItem: Ref<MenuItem | null> = ref(null);\n\n/**\n * Кол-во изменений активной вкладки\n */\nlet countChanged = 0;\n\n/**\n * Смена активной вкладки\n *\n * TODO: смена slot, например смена языка, требует повторного выполнения setMenuItemByName()\n */\nwatch(\n\t() => store.activeItemName,\n\tasync () => {\n\t\tconst numberChanged = ++countChanged; // порядковый номер текущего изменения\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tsetMenuItemByName();\n\t\t}\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tstore.activeItemName = '';\n\n\t\t\treturn;\n\t\t}\n\n\t\tactiveMenuItem.value = menuItemByName.get(store.activeItemName) ?? null;\n\n\t\t// элемент не найден, установить из хеша страницы\n\t\tif (!activeMenuItem.value && store.$id) {\n\t\t\tconst activeItemName = getHash(store.$id);\n\n\t\t\tactiveMenuItem.value = menuItemByName.get(activeItemName) ?? null;\n\n\t\t\tif (activeMenuItem.value) {\n\t\t\t\tstore.activeItemName = activeItemName;\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// элемент не найден, установить первый доступный\n\t\tif (!activeMenuItem.value) {\n\t\t\tstore.activeItemName = menuItemByName.keys().next().value!;\n\n\t\t\treturn;\n\t\t}\n\n\t\t// запрошена смена на уже активный элемент\n\t\tif (activeMenuItem.value.component === store.component) {\n\t\t\tisLoading.value = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (store.$id) setHash(store.$id, store.activeItemName, false);\n\n\t\t// флаг загрузки будет сброшен при инициализации компонента\n\t\tisLoading.value = true;\n\n\t\t/**\n\t\t * Презагрузить компонент\n\t\t *\n\t\t * Нужно для того, чтобы минимизировать скачки интерфейса при ожидании загрузки асинхронного компонента\n\t\t */\n\t\tawait preResolveComponent(activeMenuItem.value.component, () => numberChanged === countChanged);\n\n\t\t// влкадка была сменена еще раз во время sleepWhile\n\t\tif (numberChanged !== countChanged) {\n\t\t\treturn;\n\t\t}\n\n\t\tstore.scrollable = activeMenuItem.value.scrollable;\n\t\tstore.component = activeMenuItem.value.component;\n\n\t\tif (activeMenuItem.value && !store.component) {\n\t\t\tconsole.warn(`Компонент вкладки ${store.activeItemName} не найден. Добавьте props.component для пункта меню ${store.activeItemName}.`);\n\t\t}\n\t},\n\t{ immediate: true },\n);\n\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView_menu': true,\n\t\t\t'top-tabsView_menu-inPopup_0': !store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-inPopup_1': store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-short': store.isShort && !store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<!-- Спрятать меню под кнопку в popup -->\n\t\t<TopPopup v-if=\"store.showMenuInPopup\">\n\t\t\t<template #opener>\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #contentList>\n\t\t\t\t<slot></slot>\n\t\t\t</template>\n\t\t</TopPopup>\n\n\t\t<!-- Отобразить меню на странице -->\n\t\t<template v-else>\n\t\t\t<div class=\"top-tabsView_menuList\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-if=\"isShortable\"\n\t\t\t\tclass=\"top-tabsView_menuFooter\"\n\t\t\t>\n\t\t\t\t<TabsViewMenuItem\n\t\t\t\t\tv-if=\"isShortable\"\n\t\t\t\t\t:icon=\"store.isShort ? '' : ''\"\n\t\t\t\t\t@click=\"store.isShort = !store.isShort\"\n\t\t\t\t>\n\t\t\t\t\t{{ store.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\n\t\t\t\t</TabsViewMenuItem>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n/* режим отображение табов в основной области документа */\n.top-tabsView-pageMod .top-tabsView_menu {\n\tbox-sizing: border-box;\n\tposition: sticky;\n\ttop: var(--top-tabsView-top);\n\tz-index: 10;\n}\n\n/* режим отображение табов в основной области документа без popup */\n.top-tabsView-pageMod .top-tabsView_menu-inPopup_0 {\n\theight: calc(var(--100vh) - var(--top-tabsView-top));\n}\n\n/* стантартный режим */\n.top-tabsView_menu-inPopup_0 {\n\tbox-sizing: border-box;\n\twidth: var(--top-tabsView-menu-width);\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tflex-shrink: 0;\n}\n\n/* режим вывода в popup */\n.top-tabsView_menu-inPopup_1 {\n\tborder-bottom: var(--top-tabsView-menu-border-bottom-width) solid var(--color-line-2-opacity);\n}\n\n.top-tabsView_menu-short {\n\twidth: auto;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\n\tbackground: var(--color-layer-1);\n}\n\n.top-tabsView_menuOpenerIcon { display: flex; }\n\n.top-tabsView_menuOpenerActiveItem {\n\t--top-forms-padding: 0px;\n\n\tbox-sizing: border-box;\n\tpadding: var(--top-tabsView-menu-opener-padding);\n\tmax-width: calc(100% - var(--top-forms-base-height));\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--top-padding-2);\n}\n\n.top-tabsView_menuList,\n.top-tabsView_menuFooter {\n\tpadding: var(--top-padding-2);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-2);\n}\n\n.top-tabsView_menuList {\n\toverflow-y: auto;\n}\n\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem {\n\t--top-icon-width: 100%;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Ref, VNode } from 'vue';\nimport { markRaw, ref, useSlots, watch } from 'vue';\nimport { TopPopup } from '../../popup/popup';\nimport { getHash, setHash } from '@/core/utils/route';\n\nimport type { MenuItem, PropsMenu, PropsMenuItem } from './types';\nimport { useTabsStore } from './store';\nimport TabsViewMenuItem from './menuItem.vue';\nimport { preResolveComponent } from './utils';\n\ndefineProps<PropsMenu>();\n\nconst isLoading = defineModel('isLoading');\n\nconst store = useTabsStore();\n\nconst slots = useSlots();\n\n// словарь используется для оптимизации получения нужного menuItem\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\n\n// заполнить словарь с menuItem, по элементам в slot default\nconst setMenuItemByName = () => {\n\tif (!slots.default) return;\n\n\tconst component: any = slots.default({}).find(item => item.key === '_menu');\n\tif (!component) return;\n\n\tsetMenuItemByNameFromItems(component.children);\n};\n\n// заполнить словарь с menuItem, по элементам\nconst setMenuItemByNameFromItems = (menuItems: VNode[]) => {\n\tmenuItems.forEach((subComponent: any) => {\n\t\t// это не компонент элемента меню\n\t\tif (subComponent.type.__name && subComponent.type.__name !== TabsViewMenuItem.__name) return;\n\n\t\t// это не компонент, например template\n\t\tif (!subComponent.type.__name && typeof subComponent.children === 'object') {\n\t\t\tsetMenuItemByNameFromItems(subComponent.children);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subComponent.props?.name || subComponent.props?.disabled) return;\n\n\t\tconst menuItem: MenuItem = {\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\n\t\t\ticon: subComponent.props.icon,\n\t\t\tcomponent: subComponent.props.component ? markRaw(subComponent.props.component) : TabsViewMenuItem.props.component.default,\n\t\t\tscrollable: subComponent.props.scrollable ?? TabsViewMenuItem.props.scrollable.default,\n\t\t};\n\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\n\t});\n};\n\n/**\n * activeMenuItem нужен:\n * - для вывода текста активной вкладки в меню с popup\n * - для вывода компонента активной вкладки (store.component)\n * - для установки store.scrollable\n */\nconst activeMenuItem: Ref<MenuItem | null> = ref(null);\n\n/**\n * Кол-во изменений активной вкладки\n */\nlet countChanged = 0;\n\n/**\n * Смена активной вкладки\n *\n * TODO: смена slot, например смена языка, требует повторного выполнения setMenuItemByName()\n */\nwatch(\n\t() => store.activeItemName,\n\tasync () => {\n\t\tconst numberChanged = ++countChanged; // порядковый номер текущего изменения\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tsetMenuItemByName();\n\t\t}\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tstore.activeItemName = '';\n\n\t\t\treturn;\n\t\t}\n\n\t\tactiveMenuItem.value = menuItemByName.get(store.activeItemName) ?? null;\n\n\t\t// элемент не найден, установить из хеша страницы\n\t\tif (!activeMenuItem.value && store.$id) {\n\t\t\tconst activeItemName = getHash(store.$id);\n\n\t\t\tactiveMenuItem.value = menuItemByName.get(activeItemName) ?? null;\n\n\t\t\tif (activeMenuItem.value) {\n\t\t\t\tstore.activeItemName = activeItemName;\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// элемент не найден, установить первый доступный\n\t\tif (!activeMenuItem.value) {\n\t\t\tstore.activeItemName = menuItemByName.keys().next().value!;\n\n\t\t\treturn;\n\t\t}\n\n\t\t// запрошена смена на уже активный элемент\n\t\tif (activeMenuItem.value.component === store.component) {\n\t\t\tisLoading.value = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (store.$id) setHash(store.$id, store.activeItemName, false);\n\n\t\t// флаг загрузки будет сброшен при инициализации компонента\n\t\tisLoading.value = true;\n\n\t\t/**\n\t\t * Презагрузить компонент\n\t\t *\n\t\t * Нужно для того, чтобы минимизировать скачки интерфейса при ожидании загрузки асинхронного компонента\n\t\t */\n\t\tawait preResolveComponent(activeMenuItem.value.component, () => numberChanged === countChanged);\n\n\t\t// влкадка была сменена еще раз во время sleepWhile\n\t\tif (numberChanged !== countChanged) {\n\t\t\treturn;\n\t\t}\n\n\t\tstore.scrollable = activeMenuItem.value.scrollable;\n\t\tstore.component = activeMenuItem.value.component;\n\n\t\tif (activeMenuItem.value && !store.component) {\n\t\t\tconsole.warn(`Компонент вкладки ${store.activeItemName} не найден. Добавьте props.component для пункта меню ${store.activeItemName}.`);\n\t\t}\n\t},\n\t{ immediate: true },\n);\n\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView_menu': true,\n\t\t\t'top-tabsView_menu-inPopup_0': !store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-inPopup_1': store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-short': store.isShort && !store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<!-- Спрятать меню под кнопку в popup -->\n\t\t<TopPopup v-if=\"store.showMenuInPopup\">\n\t\t\t<template #opener>\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #contentList>\n\t\t\t\t<slot></slot>\n\t\t\t</template>\n\t\t</TopPopup>\n\n\t\t<!-- Отобразить меню на странице -->\n\t\t<template v-else>\n\t\t\t<div class=\"top-tabsView_menuList\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-if=\"isShortable\"\n\t\t\t\tclass=\"top-tabsView_menuFooter\"\n\t\t\t>\n\t\t\t\t<TabsViewMenuItem\n\t\t\t\t\tv-if=\"isShortable\"\n\t\t\t\t\t:icon=\"store.isShort ? '' : ''\"\n\t\t\t\t\t@click=\"store.isShort = !store.isShort\"\n\t\t\t\t>\n\t\t\t\t\t{{ store.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\n\t\t\t\t</TabsViewMenuItem>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n/* режим отображение табов в основной области документа */\n.top-tabsView-pageMod .top-tabsView_menu {\n\tbox-sizing: border-box;\n\tposition: sticky;\n\ttop: var(--top-tabsView-top);\n\tz-index: 10;\n}\n\n/* режим отображение табов в основной области документа без popup */\n.top-tabsView-pageMod .top-tabsView_menu-inPopup_0 {\n\theight: calc(var(--100vh) - var(--top-tabsView-top));\n}\n\n/* стантартный режим */\n.top-tabsView_menu-inPopup_0 {\n\tbox-sizing: border-box;\n\twidth: var(--top-tabsView-menu-width);\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tflex-shrink: 0;\n}\n\n/* режим вывода в popup */\n.top-tabsView_menu-inPopup_1 {\n\tborder-bottom: var(--top-tabsView-menu-border-bottom-width) solid var(--color-line-2-opacity);\n}\n\n.top-tabsView_menu-short {\n\twidth: auto;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\n\tbackground: var(--color-layer-1);\n}\n\n.top-tabsView_menuOpenerIcon { display: flex; }\n\n.top-tabsView_menuOpenerActiveItem {\n\t--top-forms-padding: 0px;\n\n\tbox-sizing: border-box;\n\tpadding: var(--top-tabsView-menu-opener-padding);\n\tmax-width: calc(100% - var(--top-forms-base-height));\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--top-padding-2);\n}\n\n.top-tabsView_menuList,\n.top-tabsView_menuFooter {\n\tpadding: var(--top-padding-2);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-2);\n}\n\n.top-tabsView_menuList {\n\toverflow-y: auto;\n}\n\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem {\n\t--top-icon-width: 100%;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { defineModel, onUnmounted, ref, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { delHash } from '@/core/utils/route';\nimport type { Props } from './types';\nimport { defineTabsStore } from './store';\nimport TabsViewMenu from './menu.vue';\nimport TopLoadbar from '@/components/forms/loadbar/loadbar.vue';\nimport { checkComponentIsLoading } from './utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tshowMenuInPopup: undefined,\n\tisShortable: false,\n});\n\nconst model = defineModel<string>();\n\nconst store = defineTabsStore(props, model);\n\nconst uid = Math.random();\n\nif (props.pageMod) Core.state.documentClassModificators.set(uid, 'top-hasTabsViewPageMod');\n\nonUnmounted(() => {\n\tif (props.pageMod) Core.state.documentClassModificators.delete(uid);\n\n\tif (store.$id) delHash(store.$id, store.activeItemName, true);\n});\n\nconst componentRef = ref();\nconst isLoading = ref(false);\n\nwatch([componentRef, () => store.component], () => {\n\tisLoading.value = checkComponentIsLoading(store.component);\n}, { immediate: true });\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView': true,\n\t\t\t'top-tabsView-pageMod': props.pageMod,\n\t\t\t'top-tabsView-inPopup': store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<TabsViewMenu\n\t\t\t:isShortable=\"isShortable\"\n\t\t\tv-model:isLoading=\"isLoading\"\n\t\t>\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\n\t\t\t<slot name=\"menu\"></slot>\n\t\t</TabsViewMenu>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-tabsView_contents': true,\n\t\t\t\t'top-tabsView_contents-isLoading': isLoading,\n\t\t\t\t'top-tabsView_contents-noScrollable': !store.scrollable,\n\t\t\t}\"\n\t\t>\n\t\t\t<TopLoadbar v-if=\"isLoading\"/>\n\n\t\t\t<keep-alive>\n\t\t\t\t<component\n\t\t\t\t\tref=\"componentRef\"\n\t\t\t\t\t:is=\"store.component\"\n\t\t\t\t/>\n\t\t\t</keep-alive>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n:root {\n\t--top-tabsView-top: 0px;\n\t--top-tabsView-menu-width: 220px;\n\t--top-tabsView-contents-offset-top: 0px;\n\t--top-tabsView-menu-border-bottom-width: 1px;\n\t--top-tabsView-menu-opener-padding: var(--top-padding-2);\n}\n\n.top-tabsView {\n\tbackground: var(--color-layout-middle);\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.top-tabsView_contents {\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-layout-front-1);\n\tpadding: var(--top-padding-4);\n\tflex-grow: 1;\n\toverflow: auto;\n\tposition: relative;\n}\n\n.top-tabsView_contents-isLoading {\n\tpointer-events: none;\n}\n\n.top-tabsView_contents-noScrollable {\n\twidth: calc(100% - var(--top-tabsView-menu-width));\n\tpadding: 0;\n\toverflow: visible;\n}\n\n/* top-tabsView-inPopup */\n.top-tabsView-inPopup {\n\tbackground: var(--color-layout-front-1);\n\tflex-direction: column;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents {\n\tborder-radius: 0;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents-noScrollable {\n\twidth: auto;\n}\n\n@media only screen and (max-width: 900px) {\n\t:root {\n\t\t/* Суммарно должна быть высота элемента \".top-tabsView_menu\" */\n\t\t--top-tabsView-contents-offset-top: calc(var(--top-icon-size) + var(--top-tabsView-menu-opener-padding) * 2 + var(--top-tabsView-menu-border-bottom-width));\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { defineModel, onUnmounted, ref, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { delHash } from '@/core/utils/route';\nimport type { Props } from './types';\nimport { defineTabsStore } from './store';\nimport TabsViewMenu from './menu.vue';\nimport TopLoadbar from '@/components/forms/loadbar/loadbar.vue';\nimport { checkComponentIsLoading } from './utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tshowMenuInPopup: undefined,\n\tisShortable: false,\n});\n\nconst model = defineModel<string>();\n\nconst store = defineTabsStore(props, model);\n\nconst uid = Math.random();\n\nif (props.pageMod) Core.state.documentClassModificators.set(uid, 'top-hasTabsViewPageMod');\n\nonUnmounted(() => {\n\tif (props.pageMod) Core.state.documentClassModificators.delete(uid);\n\n\tif (store.$id) delHash(store.$id, store.activeItemName, true);\n});\n\nconst componentRef = ref();\nconst isLoading = ref(false);\n\nwatch([componentRef, () => store.component], () => {\n\tisLoading.value = checkComponentIsLoading(store.component);\n}, { immediate: true });\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView': true,\n\t\t\t'top-tabsView-pageMod': props.pageMod,\n\t\t\t'top-tabsView-inPopup': store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<TabsViewMenu\n\t\t\t:isShortable=\"isShortable\"\n\t\t\tv-model:isLoading=\"isLoading\"\n\t\t>\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\n\t\t\t<slot name=\"menu\"></slot>\n\t\t</TabsViewMenu>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-tabsView_contents': true,\n\t\t\t\t'top-tabsView_contents-isLoading': isLoading,\n\t\t\t\t'top-tabsView_contents-noScrollable': !store.scrollable,\n\t\t\t}\"\n\t\t>\n\t\t\t<TopLoadbar v-if=\"isLoading\"/>\n\n\t\t\t<keep-alive>\n\t\t\t\t<component\n\t\t\t\t\tref=\"componentRef\"\n\t\t\t\t\t:is=\"store.component\"\n\t\t\t\t/>\n\t\t\t</keep-alive>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n:root {\n\t--top-tabsView-top: 0px;\n\t--top-tabsView-menu-width: 220px;\n\t--top-tabsView-contents-offset-top: 0px;\n\t--top-tabsView-menu-border-bottom-width: 1px;\n\t--top-tabsView-menu-opener-padding: var(--top-padding-2);\n}\n\n.top-tabsView {\n\tbackground: var(--color-layout-middle);\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.top-tabsView_contents {\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-layout-front-1);\n\tpadding: var(--top-padding-4);\n\tflex-grow: 1;\n\toverflow: auto;\n\tposition: relative;\n}\n\n.top-tabsView_contents-isLoading {\n\tpointer-events: none;\n}\n\n.top-tabsView_contents-noScrollable {\n\twidth: calc(100% - var(--top-tabsView-menu-width));\n\tpadding: 0;\n\toverflow: visible;\n}\n\n/* top-tabsView-inPopup */\n.top-tabsView-inPopup {\n\tbackground: var(--color-layout-front-1);\n\tflex-direction: column;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents {\n\tborder-radius: 0;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents-noScrollable {\n\twidth: auto;\n}\n\n@media only screen and (max-width: 900px) {\n\t:root {\n\t\t/* Суммарно должна быть высота элемента \".top-tabsView_menu\" */\n\t\t--top-tabsView-contents-offset-top: calc(var(--top-icon-size) + var(--top-tabsView-menu-opener-padding) * 2 + var(--top-tabsView-menu-border-bottom-width));\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\n\n</script>\n\n<template>\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\n</template>\n\n<style>\n.top-tabsView_menuDelimeter {\n\tpadding: var(--top-padding-1) 0;\n\tdisplay: flex;\n}\n\n.top-tabsView_menuDelimeter:before {\n\tcontent: \"\";\n\theight: 2px;\n\tbackground: var(--color-line-2);\n\tflex-grow: 1;\n}\n\n.top-tabsView_menuDelimeter:first-child,\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\n\tdisplay: none;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTabsStore } from './store';\nimport type { PropsMenuTitle } from './types';\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\nimport { TopPopupListItem } from '../../popup/popup';\n\ndefineProps<PropsMenuTitle>();\n\nconst store = useTabsStore();\n</script>\n\n<template>\n\t<TopPopupListItem\n\t\tv-if=\"store.showMenuInPopup\"\n\t\ttype=\"title\"\n\t>\n\t\t<slot></slot>\n\t</TopPopupListItem>\n\n\t<TabsViewMenuDelimeter v-else-if=\"store.isShort\"/>\n\n\t<div\n\t\tv-else\n\t\t:class=\"{\n\t\t\t'top-tabsView_menuTitle': true,\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\n\t\t}\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-tabsView_menuTitle {\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\n\tfont-weight: 600;\n\tcolor: var(--color-text-1);\n}\n\n.top-tabsView_menuTitle-subtitle {\n\tpadding-top: var(--top-padding-1);\n\tfont-size: 12px;\n\tfont-weight: 400;\n\tcolor: var(--color-text-2);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTabsStore } from './store';\nimport type { PropsMenuTitle } from './types';\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\nimport { TopPopupListItem } from '../../popup/popup';\n\ndefineProps<PropsMenuTitle>();\n\nconst store = useTabsStore();\n</script>\n\n<template>\n\t<TopPopupListItem\n\t\tv-if=\"store.showMenuInPopup\"\n\t\ttype=\"title\"\n\t>\n\t\t<slot></slot>\n\t</TopPopupListItem>\n\n\t<TabsViewMenuDelimeter v-else-if=\"store.isShort\"/>\n\n\t<div\n\t\tv-else\n\t\t:class=\"{\n\t\t\t'top-tabsView_menuTitle': true,\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\n\t\t}\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-tabsView_menuTitle {\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\n\tfont-weight: 600;\n\tcolor: var(--color-text-1);\n}\n\n.top-tabsView_menuTitle-subtitle {\n\tpadding-top: var(--top-padding-1);\n\tfont-size: 12px;\n\tfont-weight: 400;\n\tcolor: var(--color-text-2);\n}\n</style>\n"],"mappings":"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"}
|
package/utils/clipboard.amd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define([`require`,`exports`,`../.chunks/forms-
|
|
1
|
+
define([`require`,`exports`,`../.chunks/forms-BiKUURH4.amd`],function(e,t,n){"use strict";if(r===void 0)var r=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.guestLinkToClipboard=a,t.setClipboard=i;async function i(e,t=!1){let r=!1;return navigator.clipboard&&(await navigator.clipboard.writeText(e),r=!0,t&&n.O.notice((0,n.E)().Common.Copied_to_clipboard+``,`info`)),r}async function a(e){let t=!1;(0,n.G)()||(t=await i(e));let r=`<a href="`+e+`" target="_blank">`+e+`</a>`,a=(0,n.E)().Common.Copied_to_clipboard+`:
|
|
2
2
|
`+r;if(t)n.O.notice(a,`info`);else{if(!navigator.clipboard){n.O.notice((0,n.E)().Common.Cannot_copied_to_clipboard+`:
|
|
3
3
|
`+(0,n.E)().Common.Copy_guest_link_manually+`
|
|
4
4
|
`+r,`error`);return}let t={onclick:()=>i(e).then(()=>n.O.notice(a,`info`)),default:(0,n.E)().Common.Copy+``,class:`copy`};await n.O.notice((0,n.E)().Common.Guest_link_created+`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/clipboard.js","../../src/core/utils/clipboard.ts"],"names":["vue","exports","i","r","t","
|
|
1
|
+
{"version":3,"sources":["utils/clipboard.js","../../src/core/utils/clipboard.ts"],"names":["vue","exports","i","r","t","forms_BiKUURH4_esm_js_1","a","o","s"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,+BAAkC,EAAG,SAAU,EAAS,EAAS,EAAyB,CACpH,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,ICWJ,OAAA,eAAiEC,EAAO,aAAA,CAAA,MAAA,EAAA,CAAA,EACvE,EAAa,qBAAAC,EAQb,EANI,aAAUC,EAYf,eAA2CA,EAAc,EAAA,EAAA,CAAA,EAAA,CACpD,IAAWD,EAAA,CAAA,EACD,OAAc,UAAuB,YAAA,MAAA,UAAA,UAAA,UAAAE,CAAA,EAAA,EAAA,CAAA,EAAAD,GAAAE,EAAA,EAAA,QAAA,EAAAA,EAAA,EAAA,CAAA,CAAA,CAAA,OAAA,oBAAA,GAAA,MAAA,GAAAH,CAEnD,CAGA,eACkBA,EAAe,EAAA,CAC1B,IAAAI,EAAA,CAAA,GACD,EAAAD,EAAqB,EAAA,CAAA,IAAA,EAAA,MAAAF,EAAAD,CAAA,GACf,IAAOK,EAAU,YAAOL,EAAA,qBAAqCA,EAAU,OAAOM,GAAA,EAAAH,EAAkC,EAAA,CAAO,CAAA,CAAA,OAAO,oBAAA;EAAAE,EACxI,GAAAD,EACDD,EAAA,EAAA,OAAAG,EAAA,MAAA,MAEoB,CAClB,GAAA,CAAA,UAAkC,UAAgB,CAC/BH,EAAc,EAAA,QAAA,EAAAA,EAAA,EAAA,CAAA,CAAA,CAAA,OAAA,2BAAA;GAAA,EAAAA,EAAA,EAAA,CAAA,CAAA,CAAA,OAAA,yBAAA;EAAAE,EAAA,OAAA,EAC1B,MACR,CAEU,IAAA,EAAe,CAC3B,YAAAJ,EAAAD,CAAA,CAAA,CAAA,SAAAG,EAAA,EAAA,OAAAG,EAAA,MAAA,CAAA,EACD,SAAA,EAAAH,EAAA,EAAA,CAAA,CAAA,CAAA,OAAA,KAAA,GD1BgB,MAAO,MACX,EACA,MAAMA,EAAwB,EAAE,QAAQ,EAAGA,EAAwB,EAAC,CAAE,CAAC,CAAC,OAAO,mBAAqB;EAAOE,EAAG,OAAQ,CAAE,YAAa,CAAE,CAAC,CAC5I,CACJ,CACJ,CAAC","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/forms-BiKUURH4.esm.js\"], function (require, exports, forms_BiKUURH4_esm_js_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.guestLinkToClipboard = i;\n exports.setClipboard = r;\n //#region src/core/utils/clipboard.ts\n async function r(t, r = !1) {\n let i = !1;\n return navigator.clipboard && (await navigator.clipboard.writeText(t), i = !0, r && forms_BiKUURH4_esm_js_1.O.notice((0, forms_BiKUURH4_esm_js_1.E)().Common.Copied_to_clipboard + \"\", \"info\")), i;\n }\n async function i(i) {\n let a = !1;\n (0, forms_BiKUURH4_esm_js_1.G)() || (a = await r(i));\n let o = \"<a href=\\\"\" + i + \"\\\" target=\\\"_blank\\\">\" + i + \"</a>\", s = (0, forms_BiKUURH4_esm_js_1.E)().Common.Copied_to_clipboard + \":\\n\" + o;\n if (a)\n forms_BiKUURH4_esm_js_1.O.notice(s, \"info\");\n else {\n if (!navigator.clipboard) {\n forms_BiKUURH4_esm_js_1.O.notice((0, forms_BiKUURH4_esm_js_1.E)().Common.Cannot_copied_to_clipboard + \":\\n\" + (0, forms_BiKUURH4_esm_js_1.E)().Common.Copy_guest_link_manually + \"\\n\" + o, \"error\");\n return;\n }\n let t = {\n onclick: () => r(i).then(() => forms_BiKUURH4_esm_js_1.O.notice(s, \"info\")),\n default: (0, forms_BiKUURH4_esm_js_1.E)().Common.Copy + \"\",\n class: \"copy\"\n };\n await forms_BiKUURH4_esm_js_1.O.notice((0, forms_BiKUURH4_esm_js_1.E)().Common.Guest_link_created + \"\\n\" + o, \"info\", { buttonProps: t });\n }\n }\n});\n//# sourceMappingURL=clipboard.js.map\n","import Core from '@/core/core/core';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { isSafari } from '@/core/utils/device';\n\n/**\n * Работа с буфером обмена\n * @packageDocumentation\n */\n\n/**\n * Скопировать текст в буфер омбена\n */\nexport async function setClipboard(text: string, isInfoShowing = false) {\n\tlet copyOk = false;\n\n\tif (navigator.clipboard) {\n\t\tawait navigator.clipboard.writeText(text);\n\t\tcopyOk = true;\n\t\tif (isInfoShowing) void Core.notice(useI18n().Common.Copied_to_clipboard + '', 'info');\n\t}\n\n\treturn copyOk;\n}\n\n/**\n * Скопировать гостевую ссылку в буфер обмена\n */\nexport async function guestLinkToClipboard(link: string) {\n\tlet isCopied = false;\n\tif (!isSafari()) isCopied = await setClipboard(link);\n\n\tconst aLink = '<a href=\"' + link + '\" target=\"_blank\">' + link + '</a>';\n\tconst copiedMessage = useI18n().Common.Copied_to_clipboard + `:\\n` + aLink;\n\n\tif (isCopied) {\n\t\tvoid Core.notice(copiedMessage, 'info');\n\t} else {\n\t\tif (!navigator.clipboard) {\n\t\t\tvoid Core.notice(useI18n().Common.Cannot_copied_to_clipboard + `:\\n` + useI18n().Common.Copy_guest_link_manually + `\\n` + aLink, 'error');\n\t\t\treturn;\n\t\t}\n\n\t\tconst buttonProps = {\n\t\t\t\tonclick: () => setClipboard(link).then(() => Core.notice(copiedMessage, 'info')),\n\t\t\t\tdefault: useI18n().Common.Copy + '',\n\t\t\t\tclass: 'copy',\n\t\t\t};\n\n\t\tawait Core.notice(useI18n().Common.Guest_link_created + `\\n` + aLink, 'info', { buttonProps });\n\t}\n};\n"]}
|
package/utils/clipboard.js
CHANGED
package/utils/date.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define([`require`,`exports`,`../.chunks/forms-
|
|
1
|
+
define([`require`,`exports`,`../.chunks/forms-BiKUURH4.amd`],function(e,t,n){"use strict";if(r===void 0)var r=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.stringToDate=t.getDayOfWeek=t.genUserDate=t.genDateMoscow=t.genDate=t.dateUnformat=t.dateToString=t.dateFormat=void 0,Object.defineProperty(t,"getDayOfWeek",{enumerable:!0,get:function(){return n.C}}),Object.defineProperty(t,"genUserDate",{enumerable:!0,get:function(){return n.S}}),Object.defineProperty(t,"dateFormat",{enumerable:!0,get:function(){return n._}}),Object.defineProperty(t,"genDate",{enumerable:!0,get:function(){return n.b}}),Object.defineProperty(t,"dateToString",{enumerable:!0,get:function(){return n.v}}),Object.defineProperty(t,"stringToDate",{enumerable:!0,get:function(){return n.w}}),Object.defineProperty(t,"genDateMoscow",{enumerable:!0,get:function(){return n.x}}),Object.defineProperty(t,"dateUnformat",{enumerable:!0,get:function(){return n.y}})});
|
|
2
2
|
//# sourceMappingURL=date.amd.js.map
|
package/utils/date.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/date.js"],"names":["vue","exports","
|
|
1
|
+
{"version":3,"sources":["utils/date.js"],"names":["vue","exports","forms_BiKUURH4_esm_js_1"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,+BAAkC,EAAG,SAAU,EAAS,EAAS,EAAyB,CACpH,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,IACA,OAAO,eAAeC,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,EAAQ,aAAe,EAAQ,aAAe,EAAQ,YAAc,EAAQ,cAAgB,EAAQ,QAAU,EAAQ,aAAe,EAAQ,aAAe,EAAQ,WAAa,IAAK,GACtL,OAAO,eAAeA,EAAS,eAAgB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EAC3H,OAAO,eAAeD,EAAS,cAAe,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EAC1H,OAAO,eAAeD,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACzH,OAAO,eAAeD,EAAS,UAAW,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACtH,OAAO,eAAeD,EAAS,eAAgB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EAC3H,OAAO,eAAeD,EAAS,eAAgB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EAC3H,OAAO,eAAeD,EAAS,gBAAiB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EAC5H,OAAO,eAAeD,EAAS,eAAgB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,CAC/H,CAAC","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/forms-BiKUURH4.esm.js\"], function (require, exports, forms_BiKUURH4_esm_js_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.stringToDate = exports.getDayOfWeek = exports.genUserDate = exports.genDateMoscow = exports.genDate = exports.dateUnformat = exports.dateToString = exports.dateFormat = void 0;\n Object.defineProperty(exports, \"getDayOfWeek\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.C; } });\n Object.defineProperty(exports, \"genUserDate\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.S; } });\n Object.defineProperty(exports, \"dateFormat\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1._; } });\n Object.defineProperty(exports, \"genDate\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.b; } });\n Object.defineProperty(exports, \"dateToString\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.v; } });\n Object.defineProperty(exports, \"stringToDate\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.w; } });\n Object.defineProperty(exports, \"genDateMoscow\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.x; } });\n Object.defineProperty(exports, \"dateUnformat\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.y; } });\n});\n"]}
|
package/utils/date.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as e, S as t, _ as n, b as r, v as i, w as a, x as o, y as s } from "../.chunks/forms-
|
|
1
|
+
import { C as e, S as t, _ as n, b as r, v as i, w as a, x as o, y as s } from "../.chunks/forms-BiKUURH4.esm.js";
|
|
2
2
|
export { n as dateFormat, i as dateToString, s as dateUnformat, r as genDate, o as genDateMoscow, t as genUserDate, e as getDayOfWeek, a as stringToDate };
|
package/utils/device.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define([`require`,`exports`,`../.chunks/forms-
|
|
1
|
+
define([`require`,`exports`,`../.chunks/forms-BiKUURH4.amd`],function(e,t,n){"use strict";if(r===void 0)var r=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.isSafari=t.isRetina=t.isMobile=t.isMacOS=t.isApp=t.getScrollTop=t.getOSAsync=t.getOS=t.getElsScroll=t.getCommandKeyLabel=t.get$scroll=void 0,Object.defineProperty(t,"getScrollTop",{enumerable:!0,get:function(){return n.B}}),Object.defineProperty(t,"get$scroll",{enumerable:!0,get:function(){return n.F}}),Object.defineProperty(t,"isSafari",{enumerable:!0,get:function(){return n.G}}),Object.defineProperty(t,"isMacOS",{enumerable:!0,get:function(){return n.H}}),Object.defineProperty(t,"getCommandKeyLabel",{enumerable:!0,get:function(){return n.I}}),Object.defineProperty(t,"getElsScroll",{enumerable:!0,get:function(){return n.L}}),Object.defineProperty(t,"getOS",{enumerable:!0,get:function(){return n.R}}),Object.defineProperty(t,"isMobile",{enumerable:!0,get:function(){return n.U}}),Object.defineProperty(t,"isApp",{enumerable:!0,get:function(){return n.V}}),Object.defineProperty(t,"isRetina",{enumerable:!0,get:function(){return n.W}}),Object.defineProperty(t,"getOSAsync",{enumerable:!0,get:function(){return n.z}})});
|
|
2
2
|
//# sourceMappingURL=device.amd.js.map
|
package/utils/device.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/device.js"],"names":["vue","exports","
|
|
1
|
+
{"version":3,"sources":["utils/device.js"],"names":["vue","exports","forms_BiKUURH4_esm_js_1"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,+BAAkC,EAAG,SAAU,EAAS,EAAS,EAAyB,CACpH,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,IACA,OAAO,eAAeC,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,EAAQ,SAAW,EAAQ,SAAW,EAAQ,SAAW,EAAQ,QAAU,EAAQ,MAAQ,EAAQ,aAAe,EAAQ,WAAa,EAAQ,MAAQ,EAAQ,aAAe,EAAQ,mBAAqB,EAAQ,WAAa,IAAK,GACrO,OAAO,eAAeA,EAAS,eAAgB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EAC3H,OAAO,eAAeD,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACzH,OAAO,eAAeD,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACvH,OAAO,eAAeD,EAAS,UAAW,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACtH,OAAO,eAAeD,EAAS,qBAAsB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACjI,OAAO,eAAeD,EAAS,eAAgB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EAC3H,OAAO,eAAeD,EAAS,QAAS,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACpH,OAAO,eAAeD,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACvH,OAAO,eAAeD,EAAS,QAAS,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACpH,OAAO,eAAeD,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACvH,OAAO,eAAeD,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,CAC7H,CAAC","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/forms-BiKUURH4.esm.js\"], function (require, exports, forms_BiKUURH4_esm_js_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.isSafari = exports.isRetina = exports.isMobile = exports.isMacOS = exports.isApp = exports.getScrollTop = exports.getOSAsync = exports.getOS = exports.getElsScroll = exports.getCommandKeyLabel = exports.get$scroll = void 0;\n Object.defineProperty(exports, \"getScrollTop\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.B; } });\n Object.defineProperty(exports, \"get$scroll\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.F; } });\n Object.defineProperty(exports, \"isSafari\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.G; } });\n Object.defineProperty(exports, \"isMacOS\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.H; } });\n Object.defineProperty(exports, \"getCommandKeyLabel\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.I; } });\n Object.defineProperty(exports, \"getElsScroll\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.L; } });\n Object.defineProperty(exports, \"getOS\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.R; } });\n Object.defineProperty(exports, \"isMobile\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.U; } });\n Object.defineProperty(exports, \"isApp\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.V; } });\n Object.defineProperty(exports, \"isRetina\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.W; } });\n Object.defineProperty(exports, \"getOSAsync\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.z; } });\n});\n"]}
|
package/utils/device.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { B as e, F as t, G as n, H as r, I as i, L as a, R as o, U as s, V as c, W as l, z as u } from "../.chunks/forms-
|
|
1
|
+
import { B as e, F as t, G as n, H as r, I as i, L as a, R as o, U as s, V as c, W as l, z as u } from "../.chunks/forms-BiKUURH4.esm.js";
|
|
2
2
|
export { t as get$scroll, i as getCommandKeyLabel, a as getElsScroll, o as getOS, u as getOSAsync, e as getScrollTop, c as isApp, r as isMacOS, s as isMobile, l as isRetina, n as isSafari };
|
package/utils/lodash.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define([`require`,`exports`,`../.chunks/forms-
|
|
1
|
+
define([`require`,`exports`,`../.chunks/forms-BiKUURH4.amd`],function(e,t,n){"use strict";if(r===void 0)var r=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.throttle=t.merge=t.memoize=t.debounce=t.cloneDeep=void 0,Object.defineProperty(t,"merge",{enumerable:!0,get:function(){return n.A}}),Object.defineProperty(t,"memoize",{enumerable:!0,get:function(){return n.M}}),Object.defineProperty(t,"cloneDeep",{enumerable:!0,get:function(){return n.N}}),Object.defineProperty(t,"debounce",{enumerable:!0,get:function(){return n.P}}),Object.defineProperty(t,"throttle",{enumerable:!0,get:function(){return n.j}})});
|
|
2
2
|
//# sourceMappingURL=lodash.amd.js.map
|
package/utils/lodash.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/lodash.js"],"names":["vue","exports","
|
|
1
|
+
{"version":3,"sources":["utils/lodash.js"],"names":["vue","exports","forms_BiKUURH4_esm_js_1"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,+BAAkC,EAAG,SAAU,EAAS,EAAS,EAAyB,CACpH,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,IACA,OAAO,eAAeC,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,EAAQ,SAAW,EAAQ,MAAQ,EAAQ,QAAU,EAAQ,SAAW,EAAQ,UAAY,IAAK,GACjG,OAAO,eAAeA,EAAS,QAAS,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACpH,OAAO,eAAeD,EAAS,UAAW,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACtH,OAAO,eAAeD,EAAS,YAAa,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACxH,OAAO,eAAeD,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,EACvH,OAAO,eAAeD,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOC,EAAwB,CAAG,CAAE,CAAC,CAC3H,CAAC","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/forms-BiKUURH4.esm.js\"], function (require, exports, forms_BiKUURH4_esm_js_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.throttle = exports.merge = exports.memoize = exports.debounce = exports.cloneDeep = void 0;\n Object.defineProperty(exports, \"merge\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.A; } });\n Object.defineProperty(exports, \"memoize\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.M; } });\n Object.defineProperty(exports, \"cloneDeep\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.N; } });\n Object.defineProperty(exports, \"debounce\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.P; } });\n Object.defineProperty(exports, \"throttle\", { enumerable: true, get: function () { return forms_BiKUURH4_esm_js_1.j; } });\n});\n"]}
|
package/utils/lodash.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as e, M as t, N as n, P as r, j as i } from "../.chunks/forms-
|
|
1
|
+
import { A as e, M as t, N as n, P as r, j as i } from "../.chunks/forms-BiKUURH4.esm.js";
|
|
2
2
|
export { n as cloneDeep, r as debounce, t as memoize, e as merge, i as throttle };
|
package/utils/number.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/number.js","../../src/core/utils/number.ts"],"names":["vue","exports"],"mappings":"AAAA,OAAO,CAAC,UAAW,SAAS,EAAG,SAAU,EAAS,EAAS,CCW9C,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,IACZ,OAAa,eAAaC,EAAA,aAAA,CAAA,MAAA,EAAA,CAAA,EAE1B,EAAe,aAA0B,EAAA,gBAAA,IAAA,GDAtC,EAAQ,iBCkBiB,EAAiB,EAAA,IAAA,EAAA,IAAA,
|
|
1
|
+
{"version":3,"sources":["utils/number.js","../../src/core/utils/number.ts"],"names":["vue","exports"],"mappings":"AAAA,OAAO,CAAC,UAAW,SAAS,EAAG,SAAU,EAAS,EAAS,CCW9C,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,IACZ,OAAa,eAAaC,EAAA,aAAA,CAAA,MAAA,EAAA,CAAA,EAE1B,EAAe,aAA0B,EAAA,gBAAA,IAAA,GDAtC,EAAQ,iBCkBiB,EAAiB,EAAA,IAAA,EAAA,IAAA,CACvC,GAAI,IAAS,KAER,OAAK,EACjB,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,ED3BQ,MAAO,IAAK,IAAK,EAAI,CAAC,GAAK,EAAI,EAAI,KAAK,MAAM,EAAI,IAAM,CAAC,EAAI,IAAM,EAAI,KAAK,MAAM,EAAI,IAAM,CAAC,EAAI,IAAM,EAAG,CAC9G,EAKA,EAAQ,aALA,GAAM,CACV,IAAI,EAAI,KAAK,IAAI,CAAC,EAAI,IACtB,OAAO,EAAI,KAAK,MAAM,CAAC,CAC3B,CAGJ,CAAC","sourcesContent":["define([\"require\", \"exports\"], function (require, exports) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.randomBySeed = exports.percentOfNumber = void 0;\n //#region src/core/utils/number.ts\n var e = (e, t = 100, n = 0) => {\n if (e === \"--\")\n return e;\n let r = t * 1 ? e / t : 0;\n return r *= 100, r = !n && r < 1 ? Math.round(r * 10 ** 2) / 10 ** 2 : Math.round(r * 10 ** n) / 10 ** n, r;\n }, t = (e) => {\n let t = Math.sin(e) * 1e4;\n return t - Math.floor(t);\n };\n exports.percentOfNumber = e;\n exports.randomBySeed = t;\n});\n//# sourceMappingURL=number.js.map\n","/**\n * Работа с числами\n * @packageDocumentation\n */\n\n/**\n * Посчитать процент от числа (сколько процентов составляет part от full)\n * @param part - первое число\n * @param full - второе число\n * @param precision - точность (колличество знаков после запятой)\n */\nexport const percentOfNumber = (part: '--' | number, full: number = 100, precision: number = 0): '--' | number => {\n\tif (part === '--') return part;\n\n\tlet percent = (full * 1) ? part / full : 0;\n\tpercent *= 100;\n\n\t// если десятичные знаки не выводятся и число при округлении может дать ноль, то округляем в большую сторону\n\tif (!precision && percent < 1) {\n\t\tpercent = Math.round(percent * (Math.pow(10, 2))) / (Math.pow(10, 2));\n\t} else {\n\t\tpercent = Math.round(percent * (Math.pow(10, precision))) / (Math.pow(10, precision));\n\t}\n\n\treturn percent;\n};\n\n/**\n * Генерация псевдорандомного числа\n *\n * Детерменированная функция по параметру seed\n */\nexport const randomBySeed = (seed: number) => {\n\tconst x = Math.sin(seed) * 10000;\n\n\treturn x - Math.floor(x);\n};\n"]}
|
package/utils/number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","names":[],"sources":["../../src/core/utils/number.ts"],"sourcesContent":["/**\n * Работа с числами\n * @packageDocumentation\n */\n\n/**\n * Посчитать процент от числа (сколько процентов составляет part от full)\n * @param part - первое число\n * @param full - второе число\n * @param precision - точность (колличество знаков после запятой)\n */\nexport const percentOfNumber = (part: '--' | number, full: number = 100, precision: number = 0): '--' | number => {\n\tif (part === '--') return part;\n\n\tlet percent = (full * 1) ? part / full : 0;\n\tpercent *= 100;\n\n\t// если десятичные знаки не выводятся и число при округлении может дать ноль, то округляем в большую сторону\n\tif (!precision && percent < 1) {\n\t\tpercent = Math.round(percent * (Math.pow(10, 2))) / (Math.pow(10, 2));\n\t} else {\n\t\tpercent = Math.round(percent * (Math.pow(10, precision))) / (Math.pow(10, precision));\n\t}\n\n\treturn percent;\n};\n\n/**\n * Генерация псевдорандомного числа\n *\n * Детерменированная функция по параметру seed\n */\nexport const randomBySeed = (seed: number) => {\n\
|
|
1
|
+
{"version":3,"file":"number.js","names":[],"sources":["../../src/core/utils/number.ts"],"sourcesContent":["/**\n * Работа с числами\n * @packageDocumentation\n */\n\n/**\n * Посчитать процент от числа (сколько процентов составляет part от full)\n * @param part - первое число\n * @param full - второе число\n * @param precision - точность (колличество знаков после запятой)\n */\nexport const percentOfNumber = (part: '--' | number, full: number = 100, precision: number = 0): '--' | number => {\n\tif (part === '--') return part;\n\n\tlet percent = (full * 1) ? part / full : 0;\n\tpercent *= 100;\n\n\t// если десятичные знаки не выводятся и число при округлении может дать ноль, то округляем в большую сторону\n\tif (!precision && percent < 1) {\n\t\tpercent = Math.round(percent * (Math.pow(10, 2))) / (Math.pow(10, 2));\n\t} else {\n\t\tpercent = Math.round(percent * (Math.pow(10, precision))) / (Math.pow(10, precision));\n\t}\n\n\treturn percent;\n};\n\n/**\n * Генерация псевдорандомного числа\n *\n * Детерменированная функция по параметру seed\n */\nexport const randomBySeed = (seed: number) => {\n\tconst x = Math.sin(seed) * 10000;\n\n\treturn x - Math.floor(x);\n};\n"],"mappings":";AAWA,IAAa,KAAmB,GAAqB,IAAe,KAAK,IAAoB,MAAqB;CACjH,IAAI,MAAS,MAAM,OAAO;CAE1B,IAAI,IAAW,IAAO,IAAK,IAAO,IAAO;CAUzC,OATA,KAAW,KAGX,AAGC,IAHG,CAAC,KAAa,IAAU,IACjB,KAAK,MAAM,IAAoB,MAAI,CAAG,IAAc,MAAI,IAExD,KAAK,MAAM,IAAoB,MAAI,CAAW,IAAc,MAAI,GAGpE;AACR,GAOa,KAAgB,MAAiB;CAC7C,IAAM,IAAI,KAAK,IAAI,CAAI,IAAI;CAE3B,OAAO,IAAI,KAAK,MAAM,CAAC;AACxB"}
|
package/utils/price.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define([`require`,`exports`,`../.chunks/forms-
|
|
1
|
+
define([`require`,`exports`,`../.chunks/forms-BiKUURH4.amd`],function(e,t,n){"use strict";if(r===void 0)var r=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.genPrice=void 0,t.genPrice=(e,t,r=n.O.state.currency)=>{t??=(0,n.D)().value;let i=e.toLocaleString(t,{style:`currency`,currency:r,maximumFractionDigits:2});return i=i.replace(`,`,`.`),i}});
|
|
2
2
|
//# sourceMappingURL=price.amd.js.map
|
package/utils/price.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/price.js","../../src/core/utils/price.ts"],"names":["vue","exports","
|
|
1
|
+
{"version":3,"sources":["utils/price.js","../../src/core/utils/price.ts"],"names":["vue","exports","forms_BiKUURH4_esm_js_1","a","n","r","i"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,+BAAkC,EAAG,SAAU,EAAS,EAAS,EAAyB,CACpH,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,ICeS,OAAY,eAAsEC,EAAM,aAAqB,CAAA,MAAA,EAAA,CAAA,EACzH,EAA6B,SAAA,IAAA,GDH1B,EAAQ,UCKoC,EAAA,EAAA,EAAAC,EAAA,EAAA,MAAA,WAAA,CAAY,KAAA,EAAAA,EAAA,EAAA,CAAA,CAAA,CAAA,MAAU,IAAAC,EAAAC,EAAA,eAAuBC,EAAA,CAAG,MAAA,WACtF,SAAeC,EAGzB,sBAAA,CDZQ,CAAC,EACD,MAAO,GAAIH,EAAE,QAAQ,IAAK,GAAG,EAAGA,CACpC,CAEJ,CAAC","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/forms-BiKUURH4.esm.js\"], function (require, exports, forms_BiKUURH4_esm_js_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.genPrice = void 0;\n //#region src/core/utils/price.ts\n var n = (n, r, i = forms_BiKUURH4_esm_js_1.O.state.currency) => {\n r ??= (0, forms_BiKUURH4_esm_js_1.D)().value;\n let a = n.toLocaleString(r, {\n style: \"currency\",\n currency: i,\n maximumFractionDigits: 2\n });\n return a = a.replace(\",\", \".\"), a;\n };\n exports.genPrice = n;\n});\n//# sourceMappingURL=price.js.map\n","/**\n * Работа с ценами\n * @packageDocumentation\n */\n\nimport type { Lang } from '@/core/plugins/i18n';\nimport { useI18nLang } from '@/core/plugins/i18n';\nimport Core from '@/core/core/core';\n\n/**\n * Сгенерировать строку с суммой и валютой\n * @param sum - сумма\n * @param lang - язык, берётся из профиля, если не задано\n * @param currency - валюта, берётся из профиля, если не задано\n * @returns строка с языкозависимым представлением числа sum и знаком валюты\n */\nexport const genPrice = (sum: number, lang?: Lang, currency: typeof Core.state.currency = Core.state.currency): string => {\n\tlang = lang ?? useI18nLang().value;\n\n\tlet sumStr = sum.toLocaleString(lang, { style: 'currency', currency, maximumFractionDigits: 2 });\n\tsumStr = sumStr.replace(',', '.');\n\n\treturn sumStr;\n};\n"]}
|
package/utils/price.js
CHANGED
package/utils/route.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/route.js","../../src/core/utils/route.ts"],"names":["vue","exports","e","t","i","r","a","n"],"mappings":"AAAA,OAAO,CAAC,UAAW,SAAS,EAAG,SAAU,EAAS,EAAS,CCQ9C,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,IACZ,OAAe,eAAiBC,EAAO,aACZ,CAAA,MAAQ,EAAA,CAAA,EAMnC,EALK,SAAe,EAAoB,QAElC,EAAK,gBAA2B,EAChC,QAAc,EAAQ,QAErB,EAAM,QAAA,IAAA,GAOb,
|
|
1
|
+
{"version":3,"sources":["utils/route.js","../../src/core/utils/route.ts"],"names":["vue","exports","e","t","i","r","a","n"],"mappings":"AAAA,OAAO,CAAC,UAAW,SAAS,EAAG,SAAU,EAAS,EAAS,CCQ9C,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,IACZ,OAAe,eAAiBC,EAAO,aACZ,CAAA,MAAQ,EAAA,CAAA,EAMnC,EALK,SAAe,EAAoB,QAElC,EAAK,gBAA2B,EAChC,QAAc,EAAQ,QAErB,EAAM,QAAA,IAAA,GAOb,IAAMC,EAAe,SAAW,EAAA,EAAA,SAAA,KAAA,CAGT,IAEK,EAAA,OAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,MAAA,CAAA,EAON,MAAA,CAAU,GAAc,EAAe,QAAoC,EAAA,IAAA,EAAA,GAAA,mBAAA,EAAA,EAAA,EAAA,EAAA,GAAA,EAAA,EAAA,CAAA,QAAA,MAAA,GAAA,EAAA,EAAA,GACzF,EAAMC,EAAA,SAAkB,EAAA,EAAA,EAAA,CAAA,EAAA,CAMV,IAAAC,EAAUC,EAAA,EAAc,CAA+B,EACvEC,EAAS,CAAA,CAAA,EAAAF,CAAO,CAmBtB,EAAAG,EAjBA,SAA4B,EAAQ,EAAM,EAEtC,CAAA,EAAA,CAqBmBJ,EAAA,EAAA,KAAoDE,CAAA,CACvE,EAAAA,EAAA,SAAgB,EAAK,EAAO,EAAA,SAAO,KAAgB,CAGnD,IAAO,EAAA,OAAS,KAAA,EAAA,SAAA,GAAA,EAEf,MAAc,GAAM,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,OAAA,GAAA,EAAA,GAAA,CAAA,QAAA,IAAA,KAAA,EAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,CAAA,EAAA,EAAA,QAAA,IAAA,EAAA,GAAA,GAAA,KAAA,GAAA,IAAA,EAAA,IAAA,IAAA,EAAA,EAAA,QAAA,MAAA,GAAA,EAAA,EAAA,EAAA,QAAA,aAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,MAAA,GAAA,EAAA,IAAA,MAAA,EAAA,IAAA,CACxB,EAAMD,EAAS,SAAO,EAAO,EAAA,CACjB,aAAc,MAEjB,EAAU,OAAA,YACC,CAAA,GAAQ,IAAI,IAAA,KAAa,EAAA,CAAK,GAGnD,IAAA,EAAA,SAAA,KAEY,IAAA,IAAQ,KAAO,EAAG,CAuBoB,IAAO,EAAA,OAAuB,KAAA,EAAA,SAAA,GAAA,EAGnE,EAAA,EAAA,QAAe,EAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,IAAA,EAAA,GAAA,GAAA,CAAA,QAAA,IAAA,KAAA,EAAA,GAAA,IAAA,EAAA,IAAA,EAAA,GAEtB,CAKL,EAAA,EAAQ,QAAA,MAAa,GAAA,EAAQ,EAAA,EAAO,QAAO,aAEnC,IAAA,EAAU,EAAA,IAAQ,EAAO,EAAI,EAAG,QAAA,MAAA,GAAA,EAAA,IAAA,MAAA,EAAA,IAAAE,EAAA,CAAA,CAAA,EAAA,CAAA,CAIzC,EAAMA,GAAQ,EAAI,CAAA,EAAA,IAAA,CACT,GAAA,IAAA,SAAA,KACA,OACR,IAAA,EAAA,SAAA,KAAA,EAAA,SAAA,KAAA,QAAA,MAAA,EAAA,EAAA,EAEM,EAAA,QAAA,aAAmB,QAAA,MAAA,GAAA,CAAA,EAAA,QAAA,UAAA,QAAA,MAAA,GAAA,CAAA,EAC3B,IAAA,EAAA,IAAA,gBAAA,aAAA,CDnGY,OAAQ,EACR,OAAQ,CACZ,CAAC,EACD,OAAO,cAAc,CAAC,CAC1B,EACA,EAAQ,QAAUJ,EAClB,EAAQ,QAAUC,EAClB,EAAQ,QAAUI,EAClB,EAAQ,QAAUF,EAClB,EAAQ,SAAWD,EACnB,EAAQ,gBAAkBE,CAC9B,CAAC","sourcesContent":["define([\"require\", \"exports\"], function (require, exports) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.setHashs = exports.setHash = exports.historySetState = exports.getHash = exports.genHash = exports.delHash = void 0;\n //#region src/core/utils/route.ts\n var e = function (e, t = location.hash) {\n let n = RegExp(\"[#?&]\" + e + \"=([^&]*)\"), r = t.match(n);\n return !r || r.length != 2 ? \"\" : (r[1] = decodeURIComponent(r[1]), r[1] = r[1].replace(/\\+/g, \" \"), r[1]);\n }, t = function (e, t, n = !0) {\n let i = r(e, t);\n a(!!n, i);\n }, n = function (e, n, r = !0) {\n t(e, null, r);\n }, r = function (e, t, n = location.hash) {\n let r = RegExp(\"&?\" + e + \"=[^&]*\", \"g\");\n return n = n.replace(r, \"\"), t !== null && (t = (t + \"\").replace(\" \", \"%20\"), n = n.replace(r, \"&\" + e + \"=\" + t), n.indexOf(\"&\" + e + \"=\") == -1 && (n += \"&\" + e + \"=\" + t)), n = n.replace(/&+/g, \"&\"), n = n.replace(/^(#)?&|&$/g, \"$1\"), n = \"#\" + n, n = n.replace(/^#+/, \"#\"), n === \"#\" && (n = \"\"), n;\n }, i = function (e, t) {\n e instanceof Map && (e = Object.fromEntries(e)), t === void 0 && (t = !0);\n let n = location.hash;\n for (let t in e) {\n let r = RegExp(\"&?\" + t + \"=[^&]*\", \"g\");\n n = n.replace(r, \"\"), e[t] !== null && (e[t] = (e[t] + \"\").replace(\" \", \"%20\"), n += \"&\" + t + \"=\" + e[t]);\n }\n n = n.replace(/&+/g, \"&\"), n = n.replace(/^(#)?&|&$/g, \"$1\"), n = \"#\" + n, n = n.replace(/^#+/, \"#\"), n === \"#\" && (n = \"\"), a(!!t, n);\n }, a = (e = !1, t) => {\n if (t === location.hash)\n return;\n let n = location.href, r = location.href.replace(/#.*/, \"\") + t;\n e ? history.replaceState(history.state, \"\", r) : history.pushState(history.state, \"\", r);\n let i = new HashChangeEvent(\"hashchange\", {\n oldURL: n,\n newURL: r\n });\n window.dispatchEvent(i);\n };\n exports.getHash = e;\n exports.setHash = t;\n exports.delHash = n;\n exports.genHash = r;\n exports.setHashs = i;\n exports.historySetState = a;\n});\n//# sourceMappingURL=route.js.map\n","/**\n * Управление навигацией страницы, работа с hash параметрами страницы\n * @packageDocumentation\n */\n\n/**\n * Получить значение хэш параметра страницы\n */\nexport const getHash = function (name: string, locationHash: string = location.hash): string {\n\tconst re = new RegExp('[#?&]' + name + '=([^&]*)');\n\tconst value = locationHash.match(re);\n\tif (!value || value.length != 2) return '';\n\n\tvalue[1] = decodeURIComponent(value[1]);\n\tvalue[1] = value[1].replace(/\\+/g, ' ');\n\n\treturn value[1];\n};\n\n/**\n * Установить значение в хэш параметр страницы\n */\nexport const setHash = function (name: string, value: string | number | null, replaceState: boolean = true): void {\n\tconst hash = genHash(name, value);\n\n\tif (replaceState) {\n\t\thistorySetState(true, hash);\n\t} else {\n\t\thistorySetState(false, hash);\n\t}\n};\n\n/**\n * Удалить значение из хэш параметра страницы\n */\nexport const delHash = function (name: string, value: string, replaceState: boolean = true): void {\n\tsetHash(name, null, replaceState);\n};\n\n/**\n * Сгенерировать новое значение для хэш параметра страницы с указанным параметром\n */\nexport const genHash = function (name: string, value: string | number | null, locationHash: string = location.hash): string {\n\tconst re = new RegExp('&?' + name + '=[^&]*', 'g');\n\n\tlocationHash = locationHash.replace(re, '');\n\n\tif (value !== null) {\n\t\tvalue = (value + '').replace(' ', '%20');\n\t\tlocationHash = locationHash.replace(re, '&' + name + '=' + value);\n\n\t\tif (locationHash.indexOf('&' + name + '=') == -1) locationHash += '&' + name + '=' + value;\n\t}\n\n\tlocationHash = locationHash.replace(/&+/g, '&');\n\tlocationHash = locationHash.replace(/^(#)?&|&$/g, '$1');\n\n\tlocationHash = '#' + locationHash;\n\tlocationHash = locationHash.replace(/^#+/, '#');\n\n\tif (locationHash === '#') locationHash = '';\n\n\treturn locationHash;\n};\n\n/**\n * Установить значения в хэш параметр страницы\n */\nexport const setHashs = function (data: Map<string, string> | object | any, replaceState: boolean): void {\n\tif (data instanceof Map) data = Object.fromEntries(data);\n\n\tif (replaceState === undefined) replaceState = true;\n\tlet hash = location.hash;\n\n\tfor (const name in data) {\n\t\tconst re = new RegExp('&?' + name + '=[^&]*', 'g');\n\t\thash = hash.replace(re, '');\n\n\t\tif (data[name] !== null) {\n\t\t\tdata[name] = (data[name] + '').replace(' ', '%20');\n\t\t\thash += '&' + name + '=' + data[name];\n\t\t}\n\t}\n\n\thash = hash.replace(/&+/g, '&');\n\thash = hash.replace(/^(#)?&|&$/g, '$1');\n\n\thash = '#' + hash;\n\thash = hash.replace(/^#+/, '#');\n\n\tif (hash === '#') hash = '';\n\n\tif (replaceState) {\n\t\thistorySetState(true, hash);\n\t} else {\n\t\thistorySetState(false, hash);\n\t}\n};\n\n/**\n * Установть позицию в истории вкладки браузера\n *\n * @see history.replaceState\n * @see history.pushState\n *\n * @todo Объединить с historyPushState() из @/component/vue/app/spa\n */\nexport const historySetState = (replace: boolean = false, hash: string): void => {\n\t// дедупликация хеш навигации\n\t// необходима так как js слушает нативную навигацию и если состояние уже устанолено, оно не должно повторно устанавливаться из js\n\tif (hash === location.hash) return;\n\n\tconst oldURL = location.href;\n\n\tconst url = location.href.replace(/#.*/, '') + hash;\n\n\tif (replace) {\n\t\thistory.replaceState(history.state, '', url);\n\t} else {\n\t\thistory.pushState(history.state, '', url);\n\t}\n\n\t// имитация hashchange, так как при работе с history, он не будет вызван автоматически\n\tconst event = new HashChangeEvent('hashchange', {\n\t\toldURL: oldURL,\n\t\tnewURL: url,\n\t});\n\n\twindow.dispatchEvent(event);\n};\n"]}
|
package/utils/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","names":[],"sources":["../../src/core/utils/route.ts"],"sourcesContent":["/**\n * Управление навигацией страницы, работа с hash параметрами страницы\n * @packageDocumentation\n */\n\n/**\n * Получить значение хэш параметра страницы\n */\nexport const getHash = function (name: string, locationHash: string = location.hash): string {\n\tconst re = new RegExp('[#?&]' + name + '=([^&]*)');\n\tconst value = locationHash.match(re);\n\tif (!value || value.length != 2) return '';\n\n\tvalue[1] = decodeURIComponent(value[1]);\n\tvalue[1] = value[1].replace(/\\+/g, ' ');\n\n\treturn value[1];\n};\n\n/**\n * Установить значение в хэш параметр страницы\n */\nexport const setHash = function (name: string, value: string | number | null, replaceState: boolean = true): void {\n\
|
|
1
|
+
{"version":3,"file":"route.js","names":[],"sources":["../../src/core/utils/route.ts"],"sourcesContent":["/**\n * Управление навигацией страницы, работа с hash параметрами страницы\n * @packageDocumentation\n */\n\n/**\n * Получить значение хэш параметра страницы\n */\nexport const getHash = function (name: string, locationHash: string = location.hash): string {\n\tconst re = new RegExp('[#?&]' + name + '=([^&]*)');\n\tconst value = locationHash.match(re);\n\tif (!value || value.length != 2) return '';\n\n\tvalue[1] = decodeURIComponent(value[1]);\n\tvalue[1] = value[1].replace(/\\+/g, ' ');\n\n\treturn value[1];\n};\n\n/**\n * Установить значение в хэш параметр страницы\n */\nexport const setHash = function (name: string, value: string | number | null, replaceState: boolean = true): void {\n\tconst hash = genHash(name, value);\n\n\tif (replaceState) {\n\t\thistorySetState(true, hash);\n\t} else {\n\t\thistorySetState(false, hash);\n\t}\n};\n\n/**\n * Удалить значение из хэш параметра страницы\n */\nexport const delHash = function (name: string, value: string, replaceState: boolean = true): void {\n\tsetHash(name, null, replaceState);\n};\n\n/**\n * Сгенерировать новое значение для хэш параметра страницы с указанным параметром\n */\nexport const genHash = function (name: string, value: string | number | null, locationHash: string = location.hash): string {\n\tconst re = new RegExp('&?' + name + '=[^&]*', 'g');\n\n\tlocationHash = locationHash.replace(re, '');\n\n\tif (value !== null) {\n\t\tvalue = (value + '').replace(' ', '%20');\n\t\tlocationHash = locationHash.replace(re, '&' + name + '=' + value);\n\n\t\tif (locationHash.indexOf('&' + name + '=') == -1) locationHash += '&' + name + '=' + value;\n\t}\n\n\tlocationHash = locationHash.replace(/&+/g, '&');\n\tlocationHash = locationHash.replace(/^(#)?&|&$/g, '$1');\n\n\tlocationHash = '#' + locationHash;\n\tlocationHash = locationHash.replace(/^#+/, '#');\n\n\tif (locationHash === '#') locationHash = '';\n\n\treturn locationHash;\n};\n\n/**\n * Установить значения в хэш параметр страницы\n */\nexport const setHashs = function (data: Map<string, string> | object | any, replaceState: boolean): void {\n\tif (data instanceof Map) data = Object.fromEntries(data);\n\n\tif (replaceState === undefined) replaceState = true;\n\tlet hash = location.hash;\n\n\tfor (const name in data) {\n\t\tconst re = new RegExp('&?' + name + '=[^&]*', 'g');\n\t\thash = hash.replace(re, '');\n\n\t\tif (data[name] !== null) {\n\t\t\tdata[name] = (data[name] + '').replace(' ', '%20');\n\t\t\thash += '&' + name + '=' + data[name];\n\t\t}\n\t}\n\n\thash = hash.replace(/&+/g, '&');\n\thash = hash.replace(/^(#)?&|&$/g, '$1');\n\n\thash = '#' + hash;\n\thash = hash.replace(/^#+/, '#');\n\n\tif (hash === '#') hash = '';\n\n\tif (replaceState) {\n\t\thistorySetState(true, hash);\n\t} else {\n\t\thistorySetState(false, hash);\n\t}\n};\n\n/**\n * Установть позицию в истории вкладки браузера\n *\n * @see history.replaceState\n * @see history.pushState\n *\n * @todo Объединить с historyPushState() из @/component/vue/app/spa\n */\nexport const historySetState = (replace: boolean = false, hash: string): void => {\n\t// дедупликация хеш навигации\n\t// необходима так как js слушает нативную навигацию и если состояние уже устанолено, оно не должно повторно устанавливаться из js\n\tif (hash === location.hash) return;\n\n\tconst oldURL = location.href;\n\n\tconst url = location.href.replace(/#.*/, '') + hash;\n\n\tif (replace) {\n\t\thistory.replaceState(history.state, '', url);\n\t} else {\n\t\thistory.pushState(history.state, '', url);\n\t}\n\n\t// имитация hashchange, так как при работе с history, он не будет вызван автоматически\n\tconst event = new HashChangeEvent('hashchange', {\n\t\toldURL: oldURL,\n\t\tnewURL: url,\n\t});\n\n\twindow.dispatchEvent(event);\n};\n"],"mappings":";AAQA,IAAa,IAAU,SAAU,GAAc,IAAuB,SAAS,MAAc;CAC5F,IAAM,IAAS,OAAO,UAAU,IAAO,UAAU,GAC3C,IAAQ,EAAa,MAAM,CAAE;CAMnC,OALI,CAAC,KAAS,EAAM,UAAU,IAAU,MAExC,EAAM,KAAK,mBAAmB,EAAM,EAAE,GACtC,EAAM,KAAK,EAAM,GAAG,QAAQ,OAAO,GAAG,GAE/B,EAAM;AACd,GAKa,IAAU,SAAU,GAAc,GAA+B,IAAwB,IAAY;CACjH,IAAM,IAAO,EAAQ,GAAM,CAAK;CAEhC,AACC,EADG,KACmB,CAEK;AAE7B,GAKa,IAAU,SAAU,GAAc,GAAe,IAAwB,IAAY;CACjG,EAAQ,GAAM,MAAM,CAAY;AACjC,GAKa,IAAU,SAAU,GAAc,GAA+B,IAAuB,SAAS,MAAc;CAC3H,IAAM,IAAS,OAAO,OAAO,IAAO,UAAU,GAAG;CAmBjD,OAjBA,IAAe,EAAa,QAAQ,GAAI,EAAE,GAEtC,MAAU,SACb,KAAS,IAAQ,IAAI,QAAQ,KAAK,KAAK,GACvC,IAAe,EAAa,QAAQ,GAAI,MAAM,IAAO,MAAM,CAAK,GAE5D,EAAa,QAAQ,MAAM,IAAO,GAAG,KAAK,OAAI,KAAgB,MAAM,IAAO,MAAM,KAGtF,IAAe,EAAa,QAAQ,OAAO,GAAG,GAC9C,IAAe,EAAa,QAAQ,cAAc,IAAI,GAEtD,IAAe,MAAM,GACrB,IAAe,EAAa,QAAQ,OAAO,GAAG,GAE1C,MAAiB,QAAK,IAAe,KAElC;AACR,GAKa,IAAW,SAAU,GAA0C,GAA6B;CAGxG,AAFI,aAAgB,QAAK,IAAO,OAAO,YAAY,CAAI,IAEnD,MAAiB,KAAA,MAAW,IAAe;CAC/C,IAAI,IAAO,SAAS;CAEpB,KAAK,IAAM,KAAQ,GAAM;EACxB,IAAM,IAAS,OAAO,OAAO,IAAO,UAAU,GAAG;EAGjD,AAFA,IAAO,EAAK,QAAQ,GAAI,EAAE,GAEtB,EAAK,OAAU,SAClB,EAAK,MAAS,EAAK,KAAQ,IAAI,QAAQ,KAAK,KAAK,GACjD,KAAQ,MAAM,IAAO,MAAM,EAAK;CAElC;CAUA,AARA,IAAO,EAAK,QAAQ,OAAO,GAAG,GAC9B,IAAO,EAAK,QAAQ,cAAc,IAAI,GAEtC,IAAO,MAAM,GACb,IAAO,EAAK,QAAQ,OAAO,GAAG,GAE1B,MAAS,QAAK,IAAO,KAGxB,EADG,KACmB,CAEK;AAE7B,GAUa,KAAmB,IAAmB,IAAO,MAAuB;CAGhF,IAAI,MAAS,SAAS,MAAM;CAE5B,IAAM,IAAS,SAAS,MAElB,IAAM,SAAS,KAAK,QAAQ,OAAO,EAAE,IAAI;CAE/C,AAAI,IACH,QAAQ,aAAa,QAAQ,OAAO,IAAI,CAAG,IAE3C,QAAQ,UAAU,QAAQ,OAAO,IAAI,CAAG;CAIzC,IAAM,IAAQ,IAAI,gBAAgB,cAAc;EACvC;EACR,QAAQ;CACT,CAAC;CAED,OAAO,cAAc,CAAK;AAC3B"}
|
package/utils/searchers.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define([`require`,`exports`,`../.chunks/app-
|
|
1
|
+
define([`require`,`exports`,`../.chunks/app-0qVCkgOO.amd`],function(e,t){"use strict";if(n===void 0)var n=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.searchersNames=t.prepareVolumeType=t.getSearcherGIcon=t.getLangLabel=t.getDeviceGIcon=t.genVolumeLabel=void 0,t.searchersNames={0:`Yandex`,20:`Yandex.com`,21:`Yandex.com.tr`,1:`Google`,4:`YouTube`,5:`Bing`,7:`Seznam`,8:`AppStore`,9:`GooglePlay`,101:`VK`,102:`Facebook`,103:`Twitter`},t.getSearcherGIcon=e=>{let t=``;switch(typeof e==`string`&&(e=Number(e)),e){case 0:t=``;break;case 20:case 21:t=``;break;case 1:t=``;break;case 2:t=``;break;case 3:t=``;break;case 4:t=``;break;case 5:t=``;break;case 6:t=``;break;case 7:t=``;break;case 8:t=``;break;case 9:t=``;break;case null:t=``;break}return t},t.getDeviceGIcon=e=>{let t=``;switch(typeof e==`string`&&(e=Number(e)),e%10){case 0:t=``;break;case 1:t=``;break;case 2:t=``;break}return t},t.getLangLabel=(e,t)=>{switch(typeof e==`string`&&(e=Number(e)),e*1){case 1:case 4:case 5:case 6:case 8:case 9:return t}return``},t.genVolumeLabel=(e,t,n)=>{switch(t*1){case 0:switch(n*1){case 2:e=`"${e}"`;break;case 3:e=`"!${e}"`;break;case 5:e=`"[${e}]"`;break;case 6:e=`"[!${e}]"`;break}break;case 1:e=`[${e}]`;break}return e},t.prepareVolumeType=(e,t)=>{switch(t===null&&(t=6),e){case 1:t=3;break;case 2:t=2;break;case 5:t>1&&(t=1);break;default:[1,2,3,5,6].includes(t)||(t=3)}return t}});
|
|
2
2
|
//# sourceMappingURL=searchers.amd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/searchers.js","../../src/core/utils/searchers.ts"],"names":["vue","exports"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,6BAAgC,EAAG,SAAU,EAAS,EAAS,CACzF,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,ICIS,OAAiB,eAAAC,EAAA,aAAA,CAAA,MAAA,EAAA,CAAA,EAC1B,EAAA,eAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,IAAA,GD0HA,EAAQ,eAAiB,CCvHzB,EAAA,SACA,GAAA,aACA,GAAA,gBACA,EAAA,SACA,EAAA,UACA,EAAA,OACE,EAAA,SACA,EAAA,WACA,EAAA,aAO2B,IAAA,KAC5B,IAAO,WAIX,IAFI,SDqGwB,EACzB,EAAQ,iBCnGL,GAAA,CACG,IAAA,EAAA,GAEP,OAAA,OAAA,GAAA,WAAA,EAAA,OAAA,CAAA,GAAA,EAAA,CACI,IAAA,GACA,EAAA,IACG,MAEP,IAAA,IACI,IAAA,IACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACF,KAAA,KAEO,EAAA,IAM2D,KAC9D,CAIJ,OAFI,CAGH,EDqCE,EAAQ,eCrCL,GAAA,CACG,IAAA,EAAA,GAEP,OAAA,OAAA,GAAA,WAAA,EAAA,OAAA,CAAA,GAAA,EAAA,GAAA,CACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACF,IAAA,GAEO,EAAA,IAMmD,KAG1D,CACM,OAAA,CACL,EDaE,EAAQ,cCbL,EAAA,IAAA,CACA,OAAA,OAAA,GAAA,WAAA,EAAA,OAAA,CAAA,GAAA,EAAA,EAAA,CACA,IAAA,GACA,IAAA,GAEJ,IAAO,GACT,IAAA,GAEO,IAAA,GAMsC,IAAoB,GAA0C,OAAA,CAC3G,CAEM,MAAA,EACJ,EDJC,EAAQ,gBCID,EAAa,EAArB,IAAA,CACC,OAAK,EAAA,EAAL,CACS,IAAU,GAElB,OAAA,EAAA,EAAA,CACI,IAAA,GACe,EAAA,IAAA,EAAA,GAEnB,MACI,IAAA,GACe,EAAA,KAAA,EAAA,GAEnB,MACI,IAAA,GACgB,EAAA,KAAA,EAAA,IAEpB,MACF,IAAA,GACA,EAAA,MAAA,EAAA,IAEI,KACc,CAElB,MACF,IAAA,GAEO,EAAA,IAAA,EAAA,GAM+C,KAItD,CACM,OAAA,CACJ,EDzCC,EAAQ,mBCyCI,EAAA,IAAA,CAEb,OAAA,IAAA,OAAA,EAAA,GAAA,EAAA,CACI,IAAA,GACS,EAAA,EAEb,MACI,IAAA,GACgB,EAAa,EAEjC,MAEA,IAAA,GAAM,EAAA,IAAA,EAAA,GAAG,MAAG,QAAA,CAAG,EAAG,EAAsB,EAC1C,EAEO,CACR,CAAA,CAAA,SAAA,CAAA,IAAA,EAAA,EDjEQ,CACA,OAAO,CACX,CAOJ,CAAC","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/app-
|
|
1
|
+
{"version":3,"sources":["utils/searchers.js","../../src/core/utils/searchers.ts"],"names":["vue","exports"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,6BAAgC,EAAG,SAAU,EAAS,EAAS,CACzF,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,ICIS,OAAiB,eAAAC,EAAA,aAAA,CAAA,MAAA,EAAA,CAAA,EAC1B,EAAA,eAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,IAAA,GD0HA,EAAQ,eAAiB,CCvHzB,EAAA,SACA,GAAA,aACA,GAAA,gBACA,EAAA,SACA,EAAA,UACA,EAAA,OACE,EAAA,SACA,EAAA,WACA,EAAA,aAO2B,IAAA,KAC5B,IAAO,WAIX,IAFI,SDqGwB,EACzB,EAAQ,iBCnGL,GAAA,CACG,IAAA,EAAA,GAEP,OAAA,OAAA,GAAA,WAAA,EAAA,OAAA,CAAA,GAAA,EAAA,CACI,IAAA,GACA,EAAA,IACG,MAEP,IAAA,IACI,IAAA,IACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACF,KAAA,KAEO,EAAA,IAM2D,KAC9D,CAIJ,OAFI,CAGH,EDqCE,EAAQ,eCrCL,GAAA,CACG,IAAA,EAAA,GAEP,OAAA,OAAA,GAAA,WAAA,EAAA,OAAA,CAAA,GAAA,EAAA,GAAA,CACI,IAAA,GACG,EAAA,IAEP,MACI,IAAA,GACG,EAAA,IAEP,MACF,IAAA,GAEO,EAAA,IAMmD,KAG1D,CACM,OAAA,CACL,EDaE,EAAQ,cCbL,EAAA,IAAA,CACA,OAAA,OAAA,GAAA,WAAA,EAAA,OAAA,CAAA,GAAA,EAAA,EAAA,CACA,IAAA,GACA,IAAA,GAEJ,IAAO,GACT,IAAA,GAEO,IAAA,GAMsC,IAAoB,GAA0C,OAAA,CAC3G,CAEM,MAAA,EACJ,EDJC,EAAQ,gBCID,EAAa,EAArB,IAAA,CACC,OAAK,EAAA,EAAL,CACS,IAAU,GAElB,OAAA,EAAA,EAAA,CACI,IAAA,GACe,EAAA,IAAA,EAAA,GAEnB,MACI,IAAA,GACe,EAAA,KAAA,EAAA,GAEnB,MACI,IAAA,GACgB,EAAA,KAAA,EAAA,IAEpB,MACF,IAAA,GACA,EAAA,MAAA,EAAA,IAEI,KACc,CAElB,MACF,IAAA,GAEO,EAAA,IAAA,EAAA,GAM+C,KAItD,CACM,OAAA,CACJ,EDzCC,EAAQ,mBCyCI,EAAA,IAAA,CAEb,OAAA,IAAA,OAAA,EAAA,GAAA,EAAA,CACI,IAAA,GACS,EAAA,EAEb,MACI,IAAA,GACgB,EAAa,EAEjC,MAEA,IAAA,GAAM,EAAA,IAAA,EAAA,GAAG,MAAG,QAAA,CAAG,EAAG,EAAsB,EAC1C,EAEO,CACR,CAAA,CAAA,SAAA,CAAA,IAAA,EAAA,EDjEQ,CACA,OAAO,CACX,CAOJ,CAAC","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/app-0qVCkgOO.esm.js\"], function (require, exports) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.searchersNames = exports.prepareVolumeType = exports.getSearcherGIcon = exports.getLangLabel = exports.getDeviceGIcon = exports.genVolumeLabel = void 0;\n //#region src/core/utils/searchers.ts\n var e = {\n 0: \"Yandex\",\n 20: \"Yandex.com\",\n 21: \"Yandex.com.tr\",\n 1: \"Google\",\n 4: \"YouTube\",\n 5: \"Bing\",\n 7: \"Seznam\",\n 8: \"AppStore\",\n 9: \"GooglePlay\",\n 101: \"VK\",\n 102: \"Facebook\",\n 103: \"Twitter\"\n }, t = (e) => {\n let t = \"\";\n switch (typeof e == \"string\" && (e = Number(e)), e) {\n case 0:\n t = \"\";\n break;\n case 20:\n case 21:\n t = \"\";\n break;\n case 1:\n t = \"\";\n break;\n case 2:\n t = \"\";\n break;\n case 3:\n t = \"\";\n break;\n case 4:\n t = \"\";\n break;\n case 5:\n t = \"\";\n break;\n case 6:\n t = \"\";\n break;\n case 7:\n t = \"\";\n break;\n case 8:\n t = \"\";\n break;\n case 9:\n t = \"\";\n break;\n case null:\n t = \"\";\n break;\n }\n return t;\n }, n = (e) => {\n let t = \"\";\n switch (typeof e == \"string\" && (e = Number(e)), e % 10) {\n case 0:\n t = \"\";\n break;\n case 1:\n t = \"\";\n break;\n case 2:\n t = \"\";\n break;\n }\n return t;\n }, r = (e, t) => {\n switch (typeof e == \"string\" && (e = Number(e)), e * 1) {\n case 1:\n case 4:\n case 5:\n case 6:\n case 8:\n case 9: return t;\n }\n return \"\";\n }, i = (e, t, n) => {\n switch (t * 1) {\n case 0:\n switch (n * 1) {\n case 2:\n e = `\"${e}\"`;\n break;\n case 3:\n e = `\"!${e}\"`;\n break;\n case 5:\n e = `\"[${e}]\"`;\n break;\n case 6:\n e = `\"[!${e}]\"`;\n break;\n }\n break;\n case 1:\n e = `[${e}]`;\n break;\n }\n return e;\n }, a = (e, t) => {\n switch (t === null && (t = 6), e) {\n case 1:\n t = 3;\n break;\n case 2:\n t = 2;\n break;\n case 5:\n t > 1 && (t = 1);\n break;\n default: [\n 1,\n 2,\n 3,\n 5,\n 6\n ].includes(t) || (t = 3);\n }\n return t;\n };\n exports.searchersNames = e;\n exports.getSearcherGIcon = t;\n exports.getDeviceGIcon = n;\n exports.getLangLabel = r;\n exports.genVolumeLabel = i;\n exports.prepareVolumeType = a;\n});\n//# sourceMappingURL=searchers.js.map\n","import { useI18nLang } from '@/core/app';\n\n/**\n * Вспомогательный класс для работы с разными Поисковиками\n */\nexport const searchersNames = {\n\t0: 'Yandex',\n\t20: 'Yandex.com',\n\t21: 'Yandex.com.tr',\n\t1: 'Google',\n\t4: 'YouTube',\n\t5: 'Bing',\n\t7: 'Seznam',\n\t8: 'AppStore',\n\t9: 'GooglePlay',\n\t101: 'VK',\n\t102: 'Facebook',\n\t103: 'Twitter',\n};\n\n/**\n * Получить иконку ПС\n * @param searcherKey - цифра или строка с цифрой обозначающая ПС. Если null вернется иконка с глобусом\n */\nexport const getSearcherGIcon = (searcherKey: number | string | undefined): string => {\n\tlet icon = '';\n\n\tif (typeof searcherKey === 'string') searcherKey = Number(searcherKey);\n\n\tswitch (searcherKey) {\n\t\tcase 0:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 20:\n\t\tcase 21:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 6:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 7:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 8:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 9:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase null:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t}\n\n\treturn icon;\n};\n\n/**\n * Получить иконку устройства (ПК, планшет, смартфон)\n */\nexport const getDeviceGIcon = (device: number | string): string => {\n\tlet icon = '';\n\n\tif (typeof device === 'string') device = Number(device);\n\n\tswitch (device % 10) {\n\t\tcase 0:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\ticon = '';\n\n\t\t\tbreak;\n\t}\n\n\treturn icon;\n};\n\n/**\n * Получить иконку языка\n */\nexport const getLangLabel = (searcherKey: number | string, lang: string) => {\n\tif (typeof searcherKey === 'string') searcherKey = Number(searcherKey);\n\n\tswitch (searcherKey * 1) {\n\t\tcase 1:\n\t\tcase 4:\n\t\tcase 5:\n\t\tcase 6:\n\t\tcase 8:\n\t\tcase 9:\n\t\t\treturn lang;\n\t}\n\n\treturn '';\n};\n\n/**\n * Сгенерировать заголовок типа частоты\n */\nexport const genVolumeLabel = (label: string, searcherKey: 0 | 1, volumeType: 1 | 2 | 3 | 5 | 6): string => {\n\tswitch (searcherKey * 1) {\n\t\t// Яндекс\n\t\tcase 0:\n\t\t\tswitch (volumeType * 1) {\n\t\t\t\tcase 2:\n\t\t\t\t\tlabel = `\"${label}\"`;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tlabel = `\"!${label}\"`;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\t\tlabel = `\"[${label}]\"`;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\t\tlabel = `\"[!${label}]\"`;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\t// Google\n\t\tcase 1:\n\t\t\tlabel = `[${label}]`;\n\n\t\t\tbreak;\n\t}\n\n\treturn label;\n};\n\n/**\n * Проверить значение частоты, вернуть правильное значение частоты\n */\nexport const prepareVolumeType = (searcherKey: number, volumeType: number): number => {\n\t// по умолчанию выбрана сама точная частота\n\tif (volumeType === null) volumeType = 6;\n\n\tswitch (searcherKey) {\n\t\tcase 1:\n\t\t\tvolumeType = 3;\n\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tvolumeType = 2;\n\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tif (volumeType > 1) volumeType = 1;\n\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tif (![1, 2, 3, 5, 6].includes(volumeType)) volumeType = 3;\n\t}\n\n\treturn volumeType;\n};\n"]}
|