@topvisor/ui 0.9.2 → 0.9.4
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/datepicker-78c2af5a.es.js +275 -0
- package/.chunks/datepicker-78c2af5a.es.js.map +1 -0
- package/.chunks/datepicker-cc0011e1.amd.js +234 -0
- package/.chunks/datepicker-cc0011e1.amd.js.map +1 -0
- package/.chunks/forms-9516aa6c.es.js +1000 -0
- package/.chunks/forms-9516aa6c.es.js.map +1 -0
- package/.chunks/forms-9972aba2.amd.js +3 -0
- package/.chunks/forms-9972aba2.amd.js.map +1 -0
- package/.chunks/{popup-b2fe3094.es.js → popup-70a8c892.es.js} +423 -422
- package/.chunks/popup-70a8c892.es.js.map +1 -0
- package/.chunks/popup-d96418da.amd.js +378 -0
- package/.chunks/popup-d96418da.amd.js.map +1 -0
- package/README.md +80 -80
- package/assets/forms.css +1 -1
- package/assets/tabsView.css +1 -1
- package/core/core.amd.js +1 -1
- package/core/core.js +1 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.js +1 -1
- package/forms/helpers.amd.js.map +1 -1
- package/forms/helpers.js.map +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +83 -84
- package/formsExt/formsExt.js.map +1 -1
- package/icomoon/demo-files/demo.css +161 -161
- package/icomoon/demo-files/demo.js +30 -30
- package/icomoon/demo.html +2945 -2945
- package/icomoon/fonts/Topvisor-2.svg +232 -232
- package/icomoon/style.css +647 -647
- package/package.json +22 -19
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +52 -52
- package/popup/popup.js.map +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +3 -2
- package/popup/worker.js.map +1 -1
- package/require/css.amd.js +12 -0
- package/src/components/forms/button/button.stories.d.ts +97 -140
- package/src/components/forms/checkbox/checkbox.stories.d.ts +61 -100
- package/src/components/forms/controlLabel/controlLabel.stories.d.ts +20 -53
- package/src/components/forms/input/input.stories.d.ts +101 -145
- package/src/components/forms/inputRange/inputRange.stories.d.ts +117 -221
- package/src/components/forms/radio/radio.stories.d.ts +57 -95
- package/src/components/forms/switcher/switcher.stories.d.ts +55 -93
- package/src/components/formsExt/editInput/editInput.stories.d.ts +34 -69
- package/src/components/popup/popup/popup.stories.d.ts +242 -363
- package/src/components/tabs/tabs/tabs.stories.d.ts +195 -370
- package/src/components/tabsView/tabsView/_MenuItem.stories.d.ts +110 -216
- package/src/components/tabsView/tabsView/_MenuTitle.stories.d.ts +76 -176
- package/src/components/tabsView/tabsView/tabsView.stories.d.ts +156 -327
- package/src/core/core/page.d.ts +0 -7
- package/src/core/utils/css.d.ts +5 -0
- package/tabs/tabs.amd.js +1 -1
- package/tabs/tabs.js +37 -38
- package/tabs/tabs.js.map +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.js +94 -90
- package/tabsView/tabsView.js.map +1 -1
- package/utils/css.amd.js +2 -0
- package/utils/css.amd.js.map +1 -0
- package/utils/css.d.ts +1 -0
- package/utils/css.js +35 -0
- package/utils/css.js.map +1 -0
- package/utils/date.amd.js +1 -1
- package/utils/date.js +1 -1
- package/utils/device.amd.js +1 -1
- package/utils/device.js +1 -1
- package/utils/dom.amd.js +1 -1
- package/utils/dom.amd.js.map +1 -1
- package/utils/dom.js +61 -3
- package/utils/dom.js.map +1 -1
- package/.chunks/datepicker-32bc8bd9.es.js +0 -275
- package/.chunks/datepicker-32bc8bd9.es.js.map +0 -1
- package/.chunks/datepicker-8a42d8a6.amd.js +0 -234
- package/.chunks/datepicker-8a42d8a6.amd.js.map +0 -1
- package/.chunks/forms-30d68077.amd.js +0 -3
- package/.chunks/forms-30d68077.amd.js.map +0 -1
- package/.chunks/forms-64632f73.es.js +0 -1091
- package/.chunks/forms-64632f73.es.js.map +0 -1
- package/.chunks/popup-14ca85cf.amd.js +0 -378
- package/.chunks/popup-14ca85cf.amd.js.map +0 -1
- package/.chunks/popup-b2fe3094.es.js.map +0 -1
package/tabsView/tabsView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabsView.js","sources":["../../src/components/stateManager.ts","../../src/components/tabsView/tabsView/state.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue","../../src/components/tabsView/tabsView/content.vue"],"sourcesContent":["import { provide, inject, toRef, watch } from 'vue';\nimport type { InjectionKey } from 'vue';\nimport { injectionKey } from '@/components/tabsView/tabsView/state';\n\n/**\n * State - интерфейс с общими параметрами для состояния компоента\n */\nexport interface State {\n\t/**\n\t * Ключ для сохранения состояния\n\t *\n\t * Может быть одинаковый для разных компонентов\n\t *\n\t * Не может быть реактивным\n\t *\n\t * Состояния сохраняются в localStorage с префиксом top\n\t */\n\tkey?: string;\n}\n\n/**\n * Инициировать State компонента\n * @param key - InjectionKey для provide / inject в области компонента\n * @param state\n * @return - State компонента\n */\nconst init = <T>(injectionKey: InjectionKey<T>, state: T): T => {\n\tprovide(injectionKey, state);\n\n\treturn state;\n};\n\n/**\n * Получить State компонента\n * @param key - InjectionKey для provide / inject в области компонента\n * @return - State компонента\n */\nconst use = <T>(injectionKey: InjectionKey<T>): T => {\n\tconst state = inject(injectionKey);\n\n\tif (!state) {\n\t\tthrow Error('Попытка использовать tabsView state до его инициализации');\n\t}\n\n\treturn state;\n};\n\n/**\n * Сгенерировать имя для сохранения данных в localStorage\n * @param stateName - имя свойства состояния\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\n */\nconst genStorageKey = <T extends State>(stateName: keyof T, stateKey: string): string => {\n\tconst stateNameString = String(stateName);\n\n\treturn `top:tabsView:${stateNameString}:${stateKey}`;\n};\n\n/**\n * Загрузить состояние\n * @param stateName - имя свойства состояния\n * @param state\n */\nconst loadLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\n\tif (!state.key) return;\n\n\tconst localStorageKey = genStorageKey(stateName, state.key);\n\n\ttry {\n\t\tconst localStorageValue: typeof state[keyof typeof state] = JSON.parse(localStorage.getItem(localStorageKey) as string);\n\n\t\tif (typeof localStorageValue === typeof state[stateName]) {\n\t\t\tstate[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 state\n */\nconst addSaverLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\n\tif (!state.key) return;\n\n\tconst localStorageKey = genStorageKey(stateName, state.key);\n\n\twatch(toRef(state, stateName), () => {\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(state[stateName]));\n\t}, { immediate: true });\n};\n\nexport default {\n\tinit,\n\tuse,\n\tloadLocalStorge,\n\taddSaverLocalStorge,\n};","import { reactive, computed } from 'vue';\nimport type { InjectionKey } from 'vue';\nimport type { State } from './tabsView';\nimport type { Emits, Props } from './tabsView';\nimport stateManager from '@/components/stateManager';\n\nexport const injectionKey = Symbol() as InjectionKey<State>;\n\n/**\n * Инициировать State компонента\n * @param props\n * @param emit\n */\nexport const initState = (props: Props, emit: Emits): State => {\n\tconst state: State = reactive({\n\t\tkey: props.keyForSaveState,\n\t\tshowMenuInPopup: props.showMenuInPopup,\n\t\tisShort: false,\n\t\tactiveItemName: computed({\n\t\t\tget() {\n\t\t\t\treturn props.modelValue;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\temit('update:modelValue', value);\n\t\t\t},\n\t\t}),\n\t});\n\n\tinitLocalStorge(props, state);\n\n\treturn stateManager.init(injectionKey, state);\n};\n\n/**\n * Получить State компонента\n */\nexport const useState = () => {\n\treturn stateManager.use(injectionKey);\n};\n\n/**\n * Инициировать работу LocalStorge\n * @param props\n * @param state\n */\nconst initLocalStorge = (props: Props, state: State): void => {\n\tif (props.isShortable) {\n\t\tconst stateName = 'isShort';\n\n\t\tstateManager.loadLocalStorge(stateName, state);\n\t\tstateManager.addSaverLocalStorge(stateName, state);\n\t}\n};","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useState } from './state';\nimport type { PropsMenuItem, State } from './tabsView';\nimport { PopupListItem } from '../../popup/popup';\n\nconst props = defineProps<PropsMenuItem>();\n\nconst componentName = computed(() => {\n\tif (state.showMenuInPopup) {\n\t\treturn PopupListItem;\n\t}\n\n\treturn props.href ? 'a' : 'button';\n});\n\nconst state = useState();\n</script>\n\n<template>\n\t<component\n\t\t:is=\"componentName\"\n\t\t:class=\"{\n\t\t\t['top-tabsView_menuItem']: !state.showMenuInPopup,\n\t\t\t['top-active']: name && state.activeItemName === name,\n\t\t\t['top-disabled']: disabled,\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=\"name ? state.activeItemName = name : null\"\n\t>\n\t\t<slot v-if=\"state.showMenuInPopup\"></slot>\n\n\t\t<span\n\t\t\tv-else-if=\"$slots.default && !state.isShort\"\n\t\t\tclass=\"top-ellipsis\"\n\t\t>\n\t\t\t<slot></slot>\n\t\t</span>\n\t</component>\n</template>\n\n<style module>\n.top-tabsView_menuItem {\n\t--top-icon-color: var(--color-text-1);\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-align: left;\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\tbackground: var(--color-secondary-2-opacity);\n}\n\n.top-tabsView_menuItem.top-active {\n\t--top-icon-color: var(--color-primary);\n\n\tcursor: unset;\n\tbackground: var(--color-bg-3);\n\tcolor: var(--color-primary);\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>","<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport type { ComputedRef } from '@vue/reactivity';\nimport { Popup } from '../../popup/popup';\n\nimport type { PropsMenu, PropsMenuItem, MenuItem } from './tabsView';\nimport { useState } from './state';\nimport TabsViewMenuItem from './menuItem.vue';\n\ndefineProps<PropsMenu>();\n\nconst state = useState();\n\nconst slots = useSlots();\n\n// словарь испоьзуется для оптимизации получения нужного menuItem\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\n\n// activeMenuItem нужен для вывода текста активной вкладки в меню с popup\n// смена slot, например смена языка, требует повторного выполнения genMenuItemByName()\nconst activeMenuItem: ComputedRef<MenuItem | null> = computed(() => {\n\tlet menuItem = menuItemByName.get(state.activeItemName);\n\tif (menuItem) return menuItem;\n\n\tgenMenuItemByName();\n\n\treturn menuItemByName.get(state.activeItemName) || null;\n});\n\n// сгенерировать словарь с menuItem, по элементам в slot\nconst genMenuItemByName = () => {\n\tif (!slots.default) return;\n\n\tconst component: any = slots.default().find(item => item.key === '_menu');\n\tif (!component) return;\n\n\tcomponent.children.forEach((subComponent: any) => {\n\t\tif (subComponent.type.__name !== TabsViewMenuItem.__name) return;\n\t\tif (!subComponent.props.name) return;\n\n\t\tconst menuItem = {\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\n\t\t\ticon: subComponent.props.icon,\n\t\t};\n\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\n\t});\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': !state.showMenuInPopup,\n\t\t\t'top-tabsView_menu-inPopup_1': state.showMenuInPopup,\n\t\t\t'top-tabsView_menu-short': state.isShort && !state.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<!-- Спрятать меню под кнопку в popup -->\n\t\t<Popup v-if=\"state.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</Popup>\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<TabsViewMenuItem\n\t\t\t\tv-if=\"isShortable\"\n\t\t\t\t:icon=\"state.isShort ? '' : ''\"\n\t\t\t\t@click=\"state.isShort = !state.isShort\"\n\t\t\t>\n\t\t\t\t{{ state.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\n\t\t\t</TabsViewMenuItem>\n\t\t</template>\n\t</div>\n</template>\n\n<style module>\n.top-tabsView_menu-inPopup_0 {\n\tbox-sizing: border-box;\n\tbackground: var(--color-bg-2);\n\twidth: var(--top-tabsView-menu-width);\n\tpadding: var(--top-padding-2);\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n}\n\n.top-tabsView_menu-inPopup_1 {\n\tborder-bottom: 1px 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-secondary-opacity);\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-padding-2);\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\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-2);\n}\n</style>","<script setup lang=\"ts\">\nimport { watchEffect } from 'vue';\nimport type { Props, Emits } from './tabsView';\nimport { initState } from './state';\nimport TabsViewMenu from './menu.vue';\nimport Core from '@/core/core/core';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tisShortable: false,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst state = initState(props, emit);\n\nwatchEffect(() => {\n\tstate.showMenuInPopup = props.showMenuInPopup ?? Core.state.isMobile;\n});\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-inPopup': state.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<TabsViewMenu :isShortable=\"isShortable\">\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\n\t\t\t<slot name=\"menu\"></slot>\n\t\t</TabsViewMenu>\n\n\t\t<div class=\"top-tabsView_contents\">\n\t\t\t<!-- @slot Контент вкладок, ожидает передачу компонентов TabsViewContent, в слоте необходимо предусмотреть вывод неободимого компонента в зависимости от активной вкладки -->\n\t\t\t<slot name=\"contents\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style module>\n:root {\n\t--top-tabsView-menu-width: 190px;\n}\n\n.top-tabsView {\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.top-tabsView-inPopup {\n\tflex-direction: column;\n}\n\n.top-tabsView_contents {\n\tpadding: var(--top-padding-4);\n\tflex-grow: 1;\n}\n</style>","<script setup lang=\"ts\">\n\n</script>\n\n<template>\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\n</template>\n\n<style module>\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-opacity);\n\tflex-grow: 1;\n}\n\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\n\tdisplay: none;\n}\n</style>","<script setup lang=\"ts\">\nimport { useState } from './state';\nimport type { PropsMenuTitle, State } from './tabsView';\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\nimport { PopupListItem } from '../../popup/popup';\n\ndefineProps<PropsMenuTitle>();\n\nconst state = useState();\n</script>\n\n<template>\n\t<PopupListItem\n\t\tv-if=\"state.showMenuInPopup\"\n\t\ttype=\"title\"\n\t>\n\t\t<slot></slot>\n\t</PopupListItem>\n\n\t<TabsViewMenuDelimeter v-else-if=\"state.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 module>\n.top-tabsView_menuTitle {\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\n\tfont-weight: 600;\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>","<script setup lang=\"ts\">\nimport { useState } from './state';\nimport type { PropsContent } from './tabsView';\n\ndefineProps<PropsContent>();\n\nconst state = useState();\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"state.activeItemName === name\"\n\t\tclass=\"top-tabsView_content\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style module>\n\n</style>"],"names":["init","injectionKey2","state","provide","use","inject","genStorageKey","stateName","stateKey","loadLocalStorge","localStorageKey","localStorageValue","addSaverLocalStorge","watch","toRef","stateManager","injectionKey","initState","props","emit","reactive","computed","value","initLocalStorge","useState","__props","componentName","_sfc_main$6","slots","useSlots","menuItemByName","activeMenuItem","menuItem","genMenuItemByName","component","item","subComponent","TabsViewMenuItem","_b","_a","__emit","watchEffect","Core","_sfc_render","_ctx","_cache"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabsView.js","sources":["../../src/components/stateManager.ts","../../src/components/tabsView/tabsView/state.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue","../../src/components/tabsView/tabsView/content.vue"],"sourcesContent":["import { provide, inject, toRef, watch } from 'vue';\r\nimport type { InjectionKey } from 'vue';\r\nimport { injectionKey } from '@/components/tabsView/tabsView/state';\r\n\r\n/**\r\n * State - интерфейс с общими параметрами для состояния компоента\r\n */\r\nexport interface State {\r\n\t/**\r\n\t * Ключ для сохранения состояния\r\n\t *\r\n\t * Может быть одинаковый для разных компонентов\r\n\t *\r\n\t * Не может быть реактивным\r\n\t *\r\n\t * Состояния сохраняются в localStorage с префиксом top\r\n\t */\r\n\tkey?: string;\r\n}\r\n\r\n/**\r\n * Инициировать State компонента\r\n * @param key - InjectionKey для provide / inject в области компонента\r\n * @param state\r\n * @return - State компонента\r\n */\r\nconst init = <T>(injectionKey: InjectionKey<T>, state: T): T => {\r\n\tprovide(injectionKey, state);\r\n\r\n\treturn state;\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n * @param key - InjectionKey для provide / inject в области компонента\r\n * @return - State компонента\r\n */\r\nconst use = <T>(injectionKey: InjectionKey<T>): T => {\r\n\tconst state = inject(injectionKey);\r\n\r\n\tif (!state) {\r\n\t\tthrow Error('Попытка использовать tabsView state до его инициализации');\r\n\t}\r\n\r\n\treturn state;\r\n};\r\n\r\n/**\r\n * Сгенерировать имя для сохранения данных в localStorage\r\n * @param stateName - имя свойства состояния\r\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\r\n */\r\nconst genStorageKey = <T extends State>(stateName: keyof T, stateKey: string): string => {\r\n\tconst stateNameString = String(stateName);\r\n\r\n\treturn `top:tabsView:${stateNameString}:${stateKey}`;\r\n};\r\n\r\n/**\r\n * Загрузить состояние\r\n * @param stateName - имя свойства состояния\r\n * @param state\r\n */\r\nconst loadLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\r\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!state.key) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, state.key);\r\n\r\n\ttry {\r\n\t\tconst localStorageValue: typeof state[keyof typeof state] = JSON.parse(localStorage.getItem(localStorageKey) as string);\r\n\r\n\t\tif (typeof localStorageValue === typeof state[stateName]) {\r\n\t\t\tstate[stateName] = localStorageValue;\r\n\t\t}\r\n\t} catch (e) {\r\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\r\n\t}\r\n};\r\n\r\n/**\r\n * Добавить автосохранение состояние при его изменении\r\n * @param stateName - имя свойства состояния\r\n * @param state\r\n */\r\nconst addSaverLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\r\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!state.key) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, state.key);\r\n\r\n\twatch(toRef(state, stateName), () => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(state[stateName]));\r\n\t}, { immediate: true });\r\n};\r\n\r\nexport default {\r\n\tinit,\r\n\tuse,\r\n\tloadLocalStorge,\r\n\taddSaverLocalStorge,\r\n};","import { reactive, computed } from 'vue';\r\nimport type { InjectionKey } from 'vue';\r\nimport type { State } from './tabsView';\r\nimport type { Emits, Props } from './tabsView';\r\nimport stateManager from '@/components/stateManager';\r\n\r\nexport const injectionKey = Symbol() as InjectionKey<State>;\r\n\r\n/**\r\n * Инициировать State компонента\r\n * @param props\r\n * @param emit\r\n */\r\nexport const initState = (props: Props, emit: Emits): State => {\r\n\tconst state: State = reactive({\r\n\t\tkey: props.keyForSaveState,\r\n\t\tshowMenuInPopup: props.showMenuInPopup,\r\n\t\tisShort: false,\r\n\t\tactiveItemName: computed({\r\n\t\t\tget() {\r\n\t\t\t\treturn props.modelValue;\r\n\t\t\t},\r\n\t\t\tset(value) {\r\n\t\t\t\temit('update:modelValue', value);\r\n\t\t\t},\r\n\t\t}),\r\n\t});\r\n\r\n\tinitLocalStorge(props, state);\r\n\r\n\treturn stateManager.init(injectionKey, state);\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n */\r\nexport const useState = () => {\r\n\treturn stateManager.use(injectionKey);\r\n};\r\n\r\n/**\r\n * Инициировать работу LocalStorge\r\n * @param props\r\n * @param state\r\n */\r\nconst initLocalStorge = (props: Props, state: State): void => {\r\n\tif (props.isShortable) {\r\n\t\tconst stateName = 'isShort';\r\n\r\n\t\tstateManager.loadLocalStorge(stateName, state);\r\n\t\tstateManager.addSaverLocalStorge(stateName, state);\r\n\t}\r\n};","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport { useState } from './state';\r\nimport type { PropsMenuItem, State } from './tabsView';\r\nimport { PopupListItem } from '../../popup/popup';\r\n\r\nconst props = defineProps<PropsMenuItem>();\r\n\r\nconst componentName = computed(() => {\r\n\tif (state.showMenuInPopup) {\r\n\t\treturn PopupListItem;\r\n\t}\r\n\r\n\treturn props.href ? 'a' : 'button';\r\n});\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<component\r\n\t\t:is=\"componentName\"\r\n\t\t:class=\"{\r\n\t\t\t['top-tabsView_menuItem']: !state.showMenuInPopup,\r\n\t\t\t['top-active']: name && state.activeItemName === name,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t}\"\r\n\t\t:href=\"href\"\r\n\t\t:data-top-icon=\"icon || undefined\"\r\n\t\t:disabled=\"disabled || undefined\"\r\n\t\t@click=\"name ? state.activeItemName = name : null\"\r\n\t>\r\n\t\t<slot v-if=\"state.showMenuInPopup\"></slot>\r\n\r\n\t\t<span\r\n\t\t\tv-else-if=\"$slots.default && !state.isShort\"\r\n\t\t\tclass=\"top-ellipsis\"\r\n\t\t>\r\n\t\t\t<slot></slot>\r\n\t\t</span>\r\n\t</component>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuItem {\r\n\t--top-icon-color: var(--color-text-1);\r\n\t--top-icon-width: calc(var(--top-icon-size));\r\n\r\n\tcursor: pointer;\r\n\tbox-sizing: border-box;\r\n\r\n\tborder: none;\r\n\tborder-radius: var(--top-radius-2);\r\n\tpadding: var(--top-padding-2);\r\n\tbackground: transparent;\r\n\theight: 40px;\r\n\r\n\tcolor: var(--color-text-1);\r\n\ttext-align: left;\r\n\ttext-decoration: none;\r\n\twhite-space: nowrap;\r\n\r\n\tdisplay: flex;\r\n\tgap: var(--top-gap-2);\r\n\talign-items: center;\r\n\tjustify-content: flex-start;\r\n\ttransition: background var(--transition);\r\n}\r\n\r\n.top-tabsView_menuItem:hover {\r\n\tbackground: var(--color-secondary-2-opacity);\r\n}\r\n\r\n.top-tabsView_menuItem.top-active {\r\n\t--top-icon-color: var(--color-primary);\r\n\r\n\tcursor: unset;\r\n\tbackground: var(--color-bg-3);\r\n\tcolor: var(--color-primary);\r\n}\r\n\r\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\r\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\r\n\topacity: unset;\r\n\tfilter: unset;\r\n}\r\n\r\n.top-tabsView_menuItem.top-disabled {\r\n\t--top-icon-color: var(--color-text-4);\r\n\r\n\tcolor: var(--color-text-4);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed, useSlots } from 'vue';\r\nimport type { ComputedRef } from '@vue/reactivity';\r\nimport { Popup } from '../../popup/popup';\r\n\r\nimport type { PropsMenu, PropsMenuItem, MenuItem } from './tabsView';\r\nimport { useState } from './state';\r\nimport TabsViewMenuItem from './menuItem.vue';\r\n\r\ndefineProps<PropsMenu>();\r\n\r\nconst state = useState();\r\n\r\nconst slots = useSlots();\r\n\r\n// словарь испоьзуется для оптимизации получения нужного menuItem\r\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\r\n\r\n// activeMenuItem нужен для вывода текста активной вкладки в меню с popup\r\n// смена slot, например смена языка, требует повторного выполнения genMenuItemByName()\r\nconst activeMenuItem: ComputedRef<MenuItem | null> = computed(() => {\r\n\tlet menuItem = menuItemByName.get(state.activeItemName);\r\n\tif (menuItem) return menuItem;\r\n\r\n\tgenMenuItemByName();\r\n\r\n\treturn menuItemByName.get(state.activeItemName) || null;\r\n});\r\n\r\n// сгенерировать словарь с menuItem, по элементам в slot\r\nconst genMenuItemByName = () => {\r\n\tif (!slots.default) return;\r\n\r\n\tconst component: any = slots.default().find(item => item.key === '_menu');\r\n\tif (!component) return;\r\n\r\n\tcomponent.children.forEach((subComponent: any) => {\r\n\t\tif (subComponent.type.__name !== TabsViewMenuItem.__name) return;\r\n\t\tif (!subComponent.props.name) return;\r\n\r\n\t\tconst menuItem = {\r\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\r\n\t\t\ticon: subComponent.props.icon,\r\n\t\t};\r\n\r\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\r\n\t});\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menu': true,\r\n\t\t\t'top-tabsView_menu-inPopup_0': !state.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-inPopup_1': state.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-short': state.isShort && !state.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<!-- Спрятать меню под кнопку в popup -->\r\n\t\t<Popup v-if=\"state.showMenuInPopup\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\r\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\r\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\r\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\r\n\t\t\t\t</div>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<!-- Отобразить меню на старнице -->\r\n\t\t<template v-else>\r\n\t\t\t<div class=\"top-tabsView_menuList\">\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"top-tabsView_menuFooter\">\r\n\t\t\t\t<TabsViewMenuItem\r\n\t\t\t\t\tv-if=\"isShortable\"\r\n\t\t\t\t\t:icon=\"state.isShort ? '' : ''\"\r\n\t\t\t\t\t@click=\"state.isShort = !state.isShort\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ state.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\r\n\t\t\t\t</TabsViewMenuItem>\r\n\t\t\t</div>\r\n\t\t</template>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menu-inPopup_0 {\r\n\tbox-sizing: border-box;\r\n\twidth: var(--top-tabsView-menu-width);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: space-between;\r\n}\r\n\r\n.top-tabsView_menu-inPopup_1 {\r\n\tborder-bottom: 1px solid var(--color-line-2-opacity);\r\n}\r\n\r\n.top-tabsView_menu-short {\r\n\twidth: auto;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener {\r\n\tdisplay: flex;\r\n\tjustify-content: flex-end;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\r\n\tbackground: var(--color-secondary-opacity);\r\n}\r\n\r\n.top-tabsView_menuOpenerIcon { display: flex; }\r\n\r\n.top-tabsView_menuOpenerActiveItem {\r\n\t--top-forms-padding: 0px;\r\n\r\n\tbox-sizing: border-box;\r\n\tpadding: var(--top-padding-2);\r\n\tmax-width: calc(100% - var(--top-forms-base-height));\r\n\twhite-space: nowrap;\r\n\tflex-grow: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: var(--top-padding-2);\r\n}\r\n\r\n.top-tabsView_menuList,\r\n.top-tabsView_menuFooter{\r\n\tpadding: var(--top-padding-2);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: var(--top-gap-2);\r\n}\r\n\r\n.top-tabsView_menuList{\r\n\toverflow-y: auto;\r\n}\r\n\r\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem{\r\n\t--top-icon-width: 100%;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { watchEffect } from 'vue';\r\nimport type { Props, Emits } from './tabsView';\r\nimport { initState } from './state';\r\nimport TabsViewMenu from './menu.vue';\r\nimport Core from '@/core/core/core';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tisShortable: false,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst state = initState(props, emit);\r\n\r\nwatchEffect(() => {\r\n\tstate.showMenuInPopup = props.showMenuInPopup ?? Core.state.isMobile;\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView': true,\r\n\t\t\t'top-tabsView-inPopup': state.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<TabsViewMenu :isShortable=\"isShortable\">\r\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\r\n\t\t\t<slot name=\"menu\"></slot>\r\n\t\t</TabsViewMenu>\r\n\r\n\t\t<div class=\"top-tabsView_contents\">\r\n\t\t\t<!-- @slot Контент вкладок, ожидает передачу компонентов TabsViewContent, в слоте необходимо предусмотреть вывод неободимого компонента в зависимости от активной вкладки -->\r\n\t\t\t<slot name=\"contents\"></slot>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n:root {\r\n\t--top-tabsView-menu-width: 220px;\r\n}\r\n\r\n.top-tabsView {\r\n\tbackground: var(--color-bg-2);\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n}\r\n\r\n.top-tabsView-inPopup {\r\n\tbackground: var(--color-bg-3);\r\n\tflex-direction: column;\r\n}\r\n\r\n.top-tabsView_contents {\r\n\tborder-radius: var(--top-radius-4);\r\n\tbackground: var(--color-bg-3);\r\n\tpadding: var(--top-padding-4);\r\n\tflex-grow: 1;\r\n\toverflow: auto;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuDelimeter {\r\n\tpadding: var(--top-padding-1) 0;\r\n\tdisplay: flex;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:before {\r\n\tcontent: \"\";\r\n\theight: 2px;\r\n\tbackground: var(--color-line-2-opacity);\r\n\tflex-grow: 1;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:first-child,\r\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\r\n\tdisplay: none;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { useState } from './state';\r\nimport type { PropsMenuTitle, State } from './tabsView';\r\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\r\nimport { PopupListItem } from '../../popup/popup';\r\n\r\ndefineProps<PropsMenuTitle>();\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<PopupListItem\r\n\t\tv-if=\"state.showMenuInPopup\"\r\n\t\ttype=\"title\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</PopupListItem>\r\n\r\n\t<TabsViewMenuDelimeter v-else-if=\"state.isShort\"/>\r\n\r\n\t<div\r\n\t\tv-else\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menuTitle': true,\r\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\r\n\t\t}\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuTitle {\r\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\r\n\tfont-weight: 600;\r\n}\r\n\r\n.top-tabsView_menuTitle-subtitle {\r\n\tpadding-top: var(--top-padding-1);\r\n\tfont-size: 12px;\r\n\tfont-weight: 400;\r\n\tcolor: var(--color-text-2);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { useState } from './state';\r\nimport type { PropsContent } from './tabsView';\r\n\r\ndefineProps<PropsContent>();\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\tv-if=\"state.activeItemName === name\"\r\n\t\tclass=\"top-tabsView_content\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n\r\n</style>"],"names":["init","injectionKey2","state","provide","use","inject","genStorageKey","stateName","stateKey","loadLocalStorge","localStorageKey","localStorageValue","addSaverLocalStorge","watch","toRef","stateManager","injectionKey","initState","props","emit","reactive","computed","value","initLocalStorge","useState","__props","componentName","_sfc_main$6","slots","useSlots","menuItemByName","activeMenuItem","menuItem","genMenuItemByName","component","item","subComponent","TabsViewMenuItem","_b","_a","__emit","watchEffect","Core","_sfc_render","_ctx","_cache"],"mappings":"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"}
|
package/utils/css.amd.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
define(["require","exports"],function(h,l){"use strict";if(typeof u>"u")var u=window.Vue;const d=async p=>{const o=new Map;o.set("::",[]),p.forEach(e=>{let t=!1,r=!1;e.match(/\.m\./)&&(t=!0),e.match(/\.pc\./)&&(r=!0);const n=`${t}:${r}`;o.has(n)||o.set(`${t}:${r}`,[]),o.get(`${t}:${r}`).push(e)});const i=[];return o.forEach((e,t)=>{if(!e.length)return;const[r,n]=t.split(":").map(a=>a==="true");let c="all";r&&(c="(max-width: 900px)"),n&&(c="(min-width: 900px)"),m(e,c).forEach(a=>i.push(a))}),await Promise.all(i)},m=(p,o)=>{const i=[];return p.forEach(e=>{const t="topCSSLink-"+e.replace(/\W/g,"-");if(window[t])return;let r,n;const c=new Promise((a,f)=>{r=a,n=f});i.push(c);const s=document.createElement("link");s.id=t,s.rel="stylesheet",s.media=o,s.href=e,s.onload=()=>r(),s.onerror=()=>n(),document.head.append(s)}),i};l.insertToPage=d,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
|
|
2
|
+
//# sourceMappingURL=css.amd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.amd.js","sources":["../../src/core/utils/css.ts"],"sourcesContent":["/**\r\n * Вставить css стили на страницу с автоматическим определением media\r\n * @param fileNames - список ссылок на css файлы\r\n */\r\nexport const insertToPage = async (fileNames: Array<string>) => {\r\n\tconst cssFilesByOptions = new Map();\r\n\tcssFilesByOptions.set('::', []);\r\n\r\n\tfileNames.forEach(filename => {\r\n\t\tlet m = false;\r\n\t\tlet pc = false;\r\n\r\n\t\tif (filename.match(/\\.m\\./)) {\r\n\t\t\tm = true;\r\n\t\t}\r\n\t\tif (filename.match(/\\.pc\\./)) {\r\n\t\t\tpc = true;\r\n\t\t}\r\n\r\n\t\tconst key = `${m}:${pc}`;\r\n\t\tif (!cssFilesByOptions.has(key)) {\r\n\t\t\tcssFilesByOptions.set(`${m}:${pc}`, []);\r\n\t\t}\r\n\t\tcssFilesByOptions.get(`${m}:${pc}`).push(filename);\r\n\t});\r\n\r\n\tconst promises = [];\r\n\r\n\tcssFilesByOptions.forEach((fileNames, options: string) => {\r\n\t\tif (!fileNames.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst [m, pc] = options.split(':').map(item => item === 'true');\r\n\r\n\t\tlet media = 'all';\r\n\t\tif (m) {\r\n\t\t\tmedia = '(max-width: 900px)';\r\n\t\t}\r\n\t\tif (pc) {\r\n\t\t\tmedia = '(min-width: 900px)';\r\n\t\t}\r\n\r\n\t\tconst promisesI = _insertToPage(fileNames, media);\r\n\t\tpromisesI.forEach(promise => promises.push(promise));\r\n\t});\r\n\r\n\treturn await Promise.all(promises);\r\n};\r\n\r\nconst _insertToPage = (fileNames: Array<string>, media: string): Array<Promise<void>> => {\r\n\tconst promises = [];\r\n\r\n\tfileNames.forEach(fileName => {\r\n\t\tconst id = 'topCSSLink-' + fileName.replace(/\\W/g, '-');\r\n\r\n\t\t// стиль уже загружен\r\n\t\tif (window[id]) return;\r\n\r\n\t\tlet resolve: Function;\r\n\t\tlet reject: Function;\r\n\t\tconst promise = new Promise((_resolve, _reject) => {\r\n\t\t\tresolve = _resolve;\r\n\t\t\treject = _reject;\r\n\t\t});\r\n\t\tpromises.push(promise);\r\n\r\n\t\tconst elLink = document.createElement('link');\r\n\t\telLink.id = id;\r\n\t\telLink.rel = 'stylesheet';\r\n\t\telLink.media = media;\r\n\t\telLink.href = fileName;\r\n\t\telLink.onload = () => resolve();\r\n\t\telLink.onerror = () => reject();\r\n\r\n\t\tdocument.head.append(elLink);\r\n\t});\r\n\r\n\treturn promises;\r\n};"],"names":["insertToPage","fileNames","cssFilesByOptions","filename","m","pc","key","promises","fileNames2","media","promise","_insertToPage","fileName","id","elLink","resolve","reject"],"mappings":"yFAIa,MAAAA,EAAA,MAAAC,GAAA,CACZ,MAAAC,EAAA,IAAA,mBAGAD,EAAA,QAAAE,GAAA,CACC,IAAAC,EAAA,GACAC,EAAA,GAEAF,EAAA,MAAA,OAAA,UAGAA,EAAA,MAAA,QAAA,UAIA,MAAAG,EAAA,GAAAF,CAAA,IAAAC,CAAA,aAECH,EAAA,IAAA,GAAAE,CAAA,IAAAC,CAAA,GAAA,CAAA,CAAA,EAEDH,EAAA,IAAA,GAAAE,CAAA,IAAAC,CAAA,EAAA,EAAA,KAAAF,CAAA,CAAiD,CAAA,EAGlD,MAAAI,EAAA,CAAA,2BAGC,GAAA,CAAAC,EAAA,OACC,kDAKD,IAAAC,EAAA,qEASA,QAAAC,GAAAH,EAAA,KAAAG,CAAA,CAAA,CAAmD,CAAA,wBAMrDC,EAAA,CAAAV,EAAAQ,IAAA,CACC,MAAAF,EAAA,CAAA,EAEA,OAAAN,EAAA,QAAAW,GAAA,CACC,MAAAC,EAAA,cAAAD,EAAA,QAAA,MAAA,GAAA,EAGA,GAAA,OAAAC,CAAA,EAAgB,kDAMN,CAAA,EAEVN,EAAA,KAAAG,CAAA,yCAGAI,EAAA,GAAAD,EACAC,EAAA,IAAA,aACAA,EAAA,MAAAL,EACAK,EAAA,KAAAF,EACAE,EAAA,OAAA,IAAAC,EAAA,EACAD,EAAA,QAAA,IAAAE,EAAA,yBAE2B,CAAA"}
|
package/utils/css.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../src/core/utils/css'
|
package/utils/css.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const m = async (p) => {
|
|
2
|
+
const r = /* @__PURE__ */ new Map();
|
|
3
|
+
r.set("::", []), p.forEach((e) => {
|
|
4
|
+
let t = !1, s = !1;
|
|
5
|
+
e.match(/\.m\./) && (t = !0), e.match(/\.pc\./) && (s = !0);
|
|
6
|
+
const n = `${t}:${s}`;
|
|
7
|
+
r.has(n) || r.set(`${t}:${s}`, []), r.get(`${t}:${s}`).push(e);
|
|
8
|
+
});
|
|
9
|
+
const c = [];
|
|
10
|
+
return r.forEach((e, t) => {
|
|
11
|
+
if (!e.length)
|
|
12
|
+
return;
|
|
13
|
+
const [s, n] = t.split(":").map((a) => a === "true");
|
|
14
|
+
let i = "all";
|
|
15
|
+
s && (i = "(max-width: 900px)"), n && (i = "(min-width: 900px)"), h(e, i).forEach((a) => c.push(a));
|
|
16
|
+
}), await Promise.all(c);
|
|
17
|
+
}, h = (p, r) => {
|
|
18
|
+
const c = [];
|
|
19
|
+
return p.forEach((e) => {
|
|
20
|
+
const t = "topCSSLink-" + e.replace(/\W/g, "-");
|
|
21
|
+
if (window[t])
|
|
22
|
+
return;
|
|
23
|
+
let s, n;
|
|
24
|
+
const i = new Promise((a, l) => {
|
|
25
|
+
s = a, n = l;
|
|
26
|
+
});
|
|
27
|
+
c.push(i);
|
|
28
|
+
const o = document.createElement("link");
|
|
29
|
+
o.id = t, o.rel = "stylesheet", o.media = r, o.href = e, o.onload = () => s(), o.onerror = () => n(), document.head.append(o);
|
|
30
|
+
}), c;
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
m as insertToPage
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=css.js.map
|
package/utils/css.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.js","sources":["../../src/core/utils/css.ts"],"sourcesContent":["/**\r\n * Вставить css стили на страницу с автоматическим определением media\r\n * @param fileNames - список ссылок на css файлы\r\n */\r\nexport const insertToPage = async (fileNames: Array<string>) => {\r\n\tconst cssFilesByOptions = new Map();\r\n\tcssFilesByOptions.set('::', []);\r\n\r\n\tfileNames.forEach(filename => {\r\n\t\tlet m = false;\r\n\t\tlet pc = false;\r\n\r\n\t\tif (filename.match(/\\.m\\./)) {\r\n\t\t\tm = true;\r\n\t\t}\r\n\t\tif (filename.match(/\\.pc\\./)) {\r\n\t\t\tpc = true;\r\n\t\t}\r\n\r\n\t\tconst key = `${m}:${pc}`;\r\n\t\tif (!cssFilesByOptions.has(key)) {\r\n\t\t\tcssFilesByOptions.set(`${m}:${pc}`, []);\r\n\t\t}\r\n\t\tcssFilesByOptions.get(`${m}:${pc}`).push(filename);\r\n\t});\r\n\r\n\tconst promises = [];\r\n\r\n\tcssFilesByOptions.forEach((fileNames, options: string) => {\r\n\t\tif (!fileNames.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst [m, pc] = options.split(':').map(item => item === 'true');\r\n\r\n\t\tlet media = 'all';\r\n\t\tif (m) {\r\n\t\t\tmedia = '(max-width: 900px)';\r\n\t\t}\r\n\t\tif (pc) {\r\n\t\t\tmedia = '(min-width: 900px)';\r\n\t\t}\r\n\r\n\t\tconst promisesI = _insertToPage(fileNames, media);\r\n\t\tpromisesI.forEach(promise => promises.push(promise));\r\n\t});\r\n\r\n\treturn await Promise.all(promises);\r\n};\r\n\r\nconst _insertToPage = (fileNames: Array<string>, media: string): Array<Promise<void>> => {\r\n\tconst promises = [];\r\n\r\n\tfileNames.forEach(fileName => {\r\n\t\tconst id = 'topCSSLink-' + fileName.replace(/\\W/g, '-');\r\n\r\n\t\t// стиль уже загружен\r\n\t\tif (window[id]) return;\r\n\r\n\t\tlet resolve: Function;\r\n\t\tlet reject: Function;\r\n\t\tconst promise = new Promise((_resolve, _reject) => {\r\n\t\t\tresolve = _resolve;\r\n\t\t\treject = _reject;\r\n\t\t});\r\n\t\tpromises.push(promise);\r\n\r\n\t\tconst elLink = document.createElement('link');\r\n\t\telLink.id = id;\r\n\t\telLink.rel = 'stylesheet';\r\n\t\telLink.media = media;\r\n\t\telLink.href = fileName;\r\n\t\telLink.onload = () => resolve();\r\n\t\telLink.onerror = () => reject();\r\n\r\n\t\tdocument.head.append(elLink);\r\n\t});\r\n\r\n\treturn promises;\r\n};"],"names":["insertToPage","fileNames","cssFilesByOptions","filename","m","pc","key","promises","options","item","media","_insertToPage","promise","fileName","id","resolve","reject","_resolve","_reject","elLink"],"mappings":"AAIa,MAAAA,IAAe,OAAOC,MAA6B;AACzD,QAAAC,wBAAwB;AACZ,EAAAA,EAAA,IAAI,MAAM,CAAA,CAAE,GAE9BD,EAAU,QAAQ,CAAYE,MAAA;AAC7B,QAAIC,IAAI,IACJC,IAAK;AAEL,IAAAF,EAAS,MAAM,OAAO,MACrBC,IAAA,KAEDD,EAAS,MAAM,QAAQ,MACrBE,IAAA;AAGN,UAAMC,IAAM,GAAGF,CAAC,IAAIC,CAAE;AACtB,IAAKH,EAAkB,IAAII,CAAG,KAC7BJ,EAAkB,IAAI,GAAGE,CAAC,IAAIC,CAAE,IAAI,CAAA,CAAE,GAErBH,EAAA,IAAI,GAAGE,CAAC,IAAIC,CAAE,EAAE,EAAE,KAAKF,CAAQ;AAAA,EAAA,CACjD;AAED,QAAMI,IAAW,CAAA;AAEC,SAAAL,EAAA,QAAQ,CAACD,GAAWO,MAAoB;AACrD,QAAA,CAACP,EAAU;AACd;AAGK,UAAA,CAACG,GAAGC,CAAE,IAAIG,EAAQ,MAAM,GAAG,EAAE,IAAI,CAAQC,MAAAA,MAAS,MAAM;AAE9D,QAAIC,IAAQ;AACZ,IAAIN,MACKM,IAAA,uBAELL,MACKK,IAAA,uBAGSC,EAAcV,GAAWS,CAAK,EACtC,QAAQ,CAAAE,MAAWL,EAAS,KAAKK,CAAO,CAAC;AAAA,EAAA,CACnD,GAEM,MAAM,QAAQ,IAAIL,CAAQ;AAClC,GAEMI,IAAgB,CAACV,GAA0BS,MAAwC;AACxF,QAAMH,IAAW,CAAA;AAEjB,SAAAN,EAAU,QAAQ,CAAYY,MAAA;AAC7B,UAAMC,IAAK,gBAAgBD,EAAS,QAAQ,OAAO,GAAG;AAGtD,QAAI,OAAOC,CAAE;AAAG;AAEZ,QAAAC,GACAC;AACJ,UAAMJ,IAAU,IAAI,QAAQ,CAACK,GAAUC,MAAY;AACxC,MAAAH,IAAAE,GACDD,IAAAE;AAAA,IAAA,CACT;AACD,IAAAX,EAAS,KAAKK,CAAO;AAEf,UAAAO,IAAS,SAAS,cAAc,MAAM;AAC5C,IAAAA,EAAO,KAAKL,GACZK,EAAO,MAAM,cACbA,EAAO,QAAQT,GACfS,EAAO,OAAON,GACPM,EAAA,SAAS,MAAMJ,KACfI,EAAA,UAAU,MAAMH,KAEd,SAAA,KAAK,OAAOG,CAAM;AAAA,EAAA,CAC3B,GAEMZ;AACR;"}
|
package/utils/date.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/forms-
|
|
1
|
+
define(["require","exports","../.chunks/forms-9972aba2.amd","vue"],function(n,e,t,a){"use strict";if(typeof a>"u")var a=window.Vue;e.dateFormat=t.dateFormat,e.dateUnformat=t.dateUnformat,e.genDate=t.genDate,e.stringToDate=t.stringToDate,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=date.amd.js.map
|
package/utils/date.js
CHANGED
package/utils/device.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/forms-
|
|
1
|
+
define(["require","exports","../.chunks/forms-9972aba2.amd","vue"],function(n,i,e,a){"use strict";if(typeof a>"u")var a=window.Vue;i.getCommandKeyLabel=e.getCommandKeyLabel,i.isApp=e.isApp,i.isMacOS=e.isMacOS,i.isMobile=e.isMobile,i.isRetina=e.isRetina,i.isSafari=e.isSafari,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=device.amd.js.map
|
package/utils/device.js
CHANGED
package/utils/dom.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","
|
|
1
|
+
define(["require","exports"],function(m,f){"use strict";if(typeof l>"u")var l=window.Vue;function c(e,t,...n){const i=document.createElement(e);for(const r in t)r.indexOf("on")===0?i[r]=t[r]:i.setAttribute(r,t[r]);return n.forEach(r=>{typeof r=="string"?i.insertAdjacentHTML("beforeend",r):i.append(r)}),i}function o(e){if(!e)return!1;const t=e.getBoundingClientRect();return!!(t.width||t.height)}function s(e){const t=e.getBoundingClientRect();return{top:t.top+window.scrollY,left:t.left+window.scrollX}}function a(e,t){return window.getComputedStyle(e).getPropertyValue(t)}function d(e,t){const n=document.createElement(t);return e.after(n),n.append(e),n}function p(e,t){return u(e,t).find(o)||null}function g(e,t){return u(e,t).findLast(o)||null}function y(e,t){return u(e,t).filter(o)}function u(e,t){return e?[...e.querySelectorAll(t)]:[]}function b(e,t="common",n=void 0){if(e)return e.topData||(e.topData={}),n&&(e.topData[t]=n),n===null&&delete e.topData[t],e.topData[t]}function w(e){e&&delete e.topData}const S={genEl:c,isVisible:o,offset:s,css:a,wrap:d,querySelectorVisible:p,querySelectorVisibleLast:g,querySelectorAllVisible:y,querySelectorAllArray:u,storage:b,storageClear:w};f.default=S,Object.defineProperties(f,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
2
2
|
//# sourceMappingURL=dom.amd.js.map
|
package/utils/dom.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.amd.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"dom.amd.js","sources":["../../src/core/utils/dom.ts"],"sourcesContent":["/**\r\n * Функции для работы с работы с Document Object Model (DOM)\r\n */\r\n\r\n/**\r\n * Создать элемент\r\n * @param {string} tagName\r\n * @param {any} attrs - атрибуты\r\n * @param {Element[]} elsChildrens\r\n * @returns {Element} - созданный элемент\r\n */\r\nfunction genEl (tagName: string, attrs: any, ...elsChildrens: Element[]): Element {\r\n\tconst el: any = document.createElement(tagName);\r\n\r\n\tfor (const name in attrs) {\r\n\t\tif (name.indexOf('on') === 0) {\r\n\t\t\t// events\r\n\t\t\tel[name] = attrs[name];\r\n\t\t} else {\r\n\t\t\tel.setAttribute(name, attrs[name]);\r\n\t\t}\r\n\t}\r\n\r\n\telsChildrens.forEach((elChildren) => {\r\n\t\tif (typeof (elChildren) === 'string') {\r\n\t\t\tel.insertAdjacentHTML('beforeend', elChildren);\r\n\t\t} else {\r\n\t\t\tel.append(elChildren);\r\n\t\t}\r\n\t});\r\n\r\n\treturn el;\r\n}\r\n\r\n/**\r\n * Проверить видимость элемента\r\n * @param {?Element} el\r\n * @returns boolean - вернет true, если элемент считается видимым\r\n */\r\nfunction isVisible (el?: Element) {\r\n\tif (!el) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tconst boundingClientRect = el.getBoundingClientRect();\r\n\treturn !!(boundingClientRect.width || boundingClientRect.height);\r\n}\r\n\r\n/**\r\n * Получить координаты элемента относительно документа\r\n * @param {Element} el\r\n * @returns {{top: number, left: number}} - координаты элемента относительно документа\r\n */\r\nfunction offset (el: Element): { top: number, left: number } {\r\n\tconst boundingClientRect = el.getBoundingClientRect();\r\n\r\n\treturn {\r\n\t\ttop: boundingClientRect.top + window.scrollY,\r\n\t\tleft: boundingClientRect.left + window.scrollX,\r\n\t};\r\n}\r\n\r\n/**\r\n * Получить значение css свойства элемента\r\n * @param {Element} el\r\n * @param {string} property - имя свойства\r\n * @return {string} - значение css стиля\r\n */\r\nfunction css (el: Element, property: string): string {\r\n\treturn window.getComputedStyle(el).getPropertyValue(property);\r\n}\r\n\r\n/**\r\n * Обернуть элемент и вернуть только что созданный элемент\r\n * @param {Element} el - элемент, который требуется обернуть\r\n * @param {string} tagName - имя тега элемента, в который треубется обернуть элемент\r\n * @returns {Element}\r\n */\r\nfunction wrap (el: Element, tagName: string): Element {\r\n\tconst elWrapper = document.createElement(tagName);\r\n\tel.after(elWrapper);\r\n\r\n\telWrapper.append(el);\r\n\r\n\treturn elWrapper;\r\n}\r\n\r\n/**\r\n * Найти и вернуть первый видимый элемент\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element|null}\r\n */\r\nfunction querySelectorVisible (el: Element, selectors: string): Element | null {\r\n\treturn querySelectorAllArray(el, selectors).find(isVisible) || null;\r\n}\r\n\r\n/**\r\n * Найти и вернуть последний видимый элемент\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element|null}\r\n */\r\nfunction querySelectorVisibleLast (el: Element, selectors: string): Element | null {\r\n\treturn querySelectorAllArray(el, selectors).findLast(isVisible) || null;\r\n}\r\n\r\n/**\r\n * Найти видимые элементы\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element[]} - обратите внимание, возвращается не NodeList[], а Element[]\r\n */\r\nfunction querySelectorAllVisible (el: Element, selectors: string): Element[] {\r\n\treturn querySelectorAllArray(el, selectors).filter(isVisible);\r\n}\r\n\r\n/**\r\n * Найти элементы и вернуть в виде массива\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element[]}\r\n */\r\nfunction querySelectorAllArray (el: Element, selectors: string): Element[] {\r\n\tif (!el) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\treturn [...el.querySelectorAll(selectors)];\r\n}\r\n\r\n/**\r\n * Хранилище данных элемента\r\n * @param {Element} el\r\n * @param {string} contextName - контекст, обычно используется имя компонента\r\n * @param {?object | null} contextData - установить объект с данными, предыдущие данные будут заменены, установите null для удаления данных\r\n * @returns {?object} - вернет объект контекста или undefined, если данные контекста не найдены\r\n */\r\nfunction storage (\r\n\tel?: Element & { topData?: any },\r\n\tcontextName: string = 'common', contextData: object | null | undefined = undefined,\r\n): object | undefined {\r\n\tif (!el) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (!el.topData) {\r\n\t\tel.topData = {};\r\n\t}\r\n\r\n\tif (contextData) {\r\n\t\tel.topData[contextName] = contextData;\r\n\t}\r\n\r\n\tif (contextData === null) {\r\n\t\tdelete el.topData[contextName];\r\n\t}\r\n\r\n\treturn el.topData[contextName];\r\n}\r\n\r\n/**\r\n * Очистить хранилище элемента\r\n */\r\nfunction storageClear (el?: Element & { topData?: any }) {\r\n\tif (!el) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tdelete el.topData;\r\n}\r\n\r\nexport default {\r\n\tgenEl,\r\n\tisVisible,\r\n\toffset,\r\n\tcss,\r\n\twrap,\r\n\tquerySelectorVisible,\r\n\tquerySelectorVisibleLast,\r\n\tquerySelectorAllVisible,\r\n\tquerySelectorAllArray,\r\n\tstorage,\r\n\tstorageClear,\r\n};\r\n"],"names":["name","attrs","elsChildrens","elChildren","el","boundingClientRect","css","property","wrap","tagName","elWrapper","querySelectorVisible","selectors","querySelectorAllArray","isVisible","querySelectorVisibleLast","querySelectorAllVisible","storage","contextName","contextData","DOM","genEl","offset","storageClear"],"mappings":"gJAcC,UAAAA,KAAAC,uDASA,OAAAC,EAAA,QAAAC,GAAA,CACC,OAAAA,GAAA,6CAGCC,EAAA,OAAAD,CAAA,CACD,CAAA,iCAgBD,MAAAE,EAAAD,EAAA,sBAAA,4CAUA,MAAAC,EAAAD,EAAA,sBAAA,EAEA,MAAA,oDAEwC,EAUzC,SAAAE,EAAAF,EAAAG,EAAA,CACC,OAAA,OAAA,iBAAAH,CAAA,EAAA,iBAAAG,CAAA,EASD,SAAAC,EAAAJ,EAAAK,EAAA,mCAEC,OAAAL,EAAA,MAAAM,CAAA,EAEAA,EAAA,OAAAN,CAAA,IAWD,SAAAO,EAAAP,EAAAQ,EAAA,CACC,OAAAC,EAAAT,EAAAQ,CAAA,EAAA,KAAAE,CAAA,GAAA,KASD,SAAAC,EAAAX,EAAAQ,EAAA,CACC,OAAAC,EAAAT,EAAAQ,CAAA,EAAA,SAAAE,CAAA,GAAA,KASD,SAAAE,EAAAZ,EAAAQ,EAAA,CACC,OAAAC,EAAAT,EAAAQ,CAAA,EAAA,OAAAE,CAAA,EASD,SAAAD,EAAAT,EAAAQ,EAAA,wCAeA,SAAAK,EAAAb,EAAAc,EAAA,SAAAC,EAAA,OAAA,MAQC,OAAAf,EAAA,UACCA,EAAA,QAAA,CAAA,uBAODe,IAAA,MACC,OAAAf,EAAA,QAAAc,CAAA,EAGDd,EAAA,QAAAc,CAAA,mBAWA,OAAAd,EAAA,QAGD,MAAAgB,EAAA,CAAe,MAAAC,EACd,UAAAP,EACA,OAAAQ,EACA,IAAAhB,EACA,KAAAE,EACA,qBAAAG,EACA,yBAAAI,EACA,wBAAAC,EACA,sBAAAH,EACA,QAAAI,EACA,aAAAM"}
|
package/utils/dom.js
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
function f(t, e, ...n) {
|
|
2
|
+
const o = document.createElement(t);
|
|
3
|
+
for (const r in e)
|
|
4
|
+
r.indexOf("on") === 0 ? o[r] = e[r] : o.setAttribute(r, e[r]);
|
|
5
|
+
return n.forEach((r) => {
|
|
6
|
+
typeof r == "string" ? o.insertAdjacentHTML("beforeend", r) : o.append(r);
|
|
7
|
+
}), o;
|
|
8
|
+
}
|
|
9
|
+
function i(t) {
|
|
10
|
+
if (!t)
|
|
11
|
+
return !1;
|
|
12
|
+
const e = t.getBoundingClientRect();
|
|
13
|
+
return !!(e.width || e.height);
|
|
14
|
+
}
|
|
15
|
+
function l(t) {
|
|
16
|
+
const e = t.getBoundingClientRect();
|
|
17
|
+
return {
|
|
18
|
+
top: e.top + window.scrollY,
|
|
19
|
+
left: e.left + window.scrollX
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function c(t, e) {
|
|
23
|
+
return window.getComputedStyle(t).getPropertyValue(e);
|
|
24
|
+
}
|
|
25
|
+
function s(t, e) {
|
|
26
|
+
const n = document.createElement(e);
|
|
27
|
+
return t.after(n), n.append(t), n;
|
|
28
|
+
}
|
|
29
|
+
function a(t, e) {
|
|
30
|
+
return u(t, e).find(i) || null;
|
|
31
|
+
}
|
|
32
|
+
function d(t, e) {
|
|
33
|
+
return u(t, e).findLast(i) || null;
|
|
34
|
+
}
|
|
35
|
+
function p(t, e) {
|
|
36
|
+
return u(t, e).filter(i);
|
|
37
|
+
}
|
|
38
|
+
function u(t, e) {
|
|
39
|
+
return t ? [...t.querySelectorAll(e)] : [];
|
|
40
|
+
}
|
|
41
|
+
function g(t, e = "common", n = void 0) {
|
|
42
|
+
if (t)
|
|
43
|
+
return t.topData || (t.topData = {}), n && (t.topData[e] = n), n === null && delete t.topData[e], t.topData[e];
|
|
44
|
+
}
|
|
45
|
+
function y(t) {
|
|
46
|
+
t && delete t.topData;
|
|
47
|
+
}
|
|
48
|
+
const b = {
|
|
49
|
+
genEl: f,
|
|
50
|
+
isVisible: i,
|
|
51
|
+
offset: l,
|
|
52
|
+
css: c,
|
|
53
|
+
wrap: s,
|
|
54
|
+
querySelectorVisible: a,
|
|
55
|
+
querySelectorVisibleLast: d,
|
|
56
|
+
querySelectorAllVisible: p,
|
|
57
|
+
querySelectorAllArray: u,
|
|
58
|
+
storage: g,
|
|
59
|
+
storageClear: y
|
|
60
|
+
};
|
|
3
61
|
export {
|
|
4
|
-
|
|
62
|
+
b as default
|
|
5
63
|
};
|
|
6
64
|
//# sourceMappingURL=dom.js.map
|
package/utils/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dom.js","sources":["../../src/core/utils/dom.ts"],"sourcesContent":["/**\r\n * Функции для работы с работы с Document Object Model (DOM)\r\n */\r\n\r\n/**\r\n * Создать элемент\r\n * @param {string} tagName\r\n * @param {any} attrs - атрибуты\r\n * @param {Element[]} elsChildrens\r\n * @returns {Element} - созданный элемент\r\n */\r\nfunction genEl (tagName: string, attrs: any, ...elsChildrens: Element[]): Element {\r\n\tconst el: any = document.createElement(tagName);\r\n\r\n\tfor (const name in attrs) {\r\n\t\tif (name.indexOf('on') === 0) {\r\n\t\t\t// events\r\n\t\t\tel[name] = attrs[name];\r\n\t\t} else {\r\n\t\t\tel.setAttribute(name, attrs[name]);\r\n\t\t}\r\n\t}\r\n\r\n\telsChildrens.forEach((elChildren) => {\r\n\t\tif (typeof (elChildren) === 'string') {\r\n\t\t\tel.insertAdjacentHTML('beforeend', elChildren);\r\n\t\t} else {\r\n\t\t\tel.append(elChildren);\r\n\t\t}\r\n\t});\r\n\r\n\treturn el;\r\n}\r\n\r\n/**\r\n * Проверить видимость элемента\r\n * @param {?Element} el\r\n * @returns boolean - вернет true, если элемент считается видимым\r\n */\r\nfunction isVisible (el?: Element) {\r\n\tif (!el) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tconst boundingClientRect = el.getBoundingClientRect();\r\n\treturn !!(boundingClientRect.width || boundingClientRect.height);\r\n}\r\n\r\n/**\r\n * Получить координаты элемента относительно документа\r\n * @param {Element} el\r\n * @returns {{top: number, left: number}} - координаты элемента относительно документа\r\n */\r\nfunction offset (el: Element): { top: number, left: number } {\r\n\tconst boundingClientRect = el.getBoundingClientRect();\r\n\r\n\treturn {\r\n\t\ttop: boundingClientRect.top + window.scrollY,\r\n\t\tleft: boundingClientRect.left + window.scrollX,\r\n\t};\r\n}\r\n\r\n/**\r\n * Получить значение css свойства элемента\r\n * @param {Element} el\r\n * @param {string} property - имя свойства\r\n * @return {string} - значение css стиля\r\n */\r\nfunction css (el: Element, property: string): string {\r\n\treturn window.getComputedStyle(el).getPropertyValue(property);\r\n}\r\n\r\n/**\r\n * Обернуть элемент и вернуть только что созданный элемент\r\n * @param {Element} el - элемент, который требуется обернуть\r\n * @param {string} tagName - имя тега элемента, в который треубется обернуть элемент\r\n * @returns {Element}\r\n */\r\nfunction wrap (el: Element, tagName: string): Element {\r\n\tconst elWrapper = document.createElement(tagName);\r\n\tel.after(elWrapper);\r\n\r\n\telWrapper.append(el);\r\n\r\n\treturn elWrapper;\r\n}\r\n\r\n/**\r\n * Найти и вернуть первый видимый элемент\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element|null}\r\n */\r\nfunction querySelectorVisible (el: Element, selectors: string): Element | null {\r\n\treturn querySelectorAllArray(el, selectors).find(isVisible) || null;\r\n}\r\n\r\n/**\r\n * Найти и вернуть последний видимый элемент\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element|null}\r\n */\r\nfunction querySelectorVisibleLast (el: Element, selectors: string): Element | null {\r\n\treturn querySelectorAllArray(el, selectors).findLast(isVisible) || null;\r\n}\r\n\r\n/**\r\n * Найти видимые элементы\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element[]} - обратите внимание, возвращается не NodeList[], а Element[]\r\n */\r\nfunction querySelectorAllVisible (el: Element, selectors: string): Element[] {\r\n\treturn querySelectorAllArray(el, selectors).filter(isVisible);\r\n}\r\n\r\n/**\r\n * Найти элементы и вернуть в виде массива\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element[]}\r\n */\r\nfunction querySelectorAllArray (el: Element, selectors: string): Element[] {\r\n\tif (!el) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\treturn [...el.querySelectorAll(selectors)];\r\n}\r\n\r\n/**\r\n * Хранилище данных элемента\r\n * @param {Element} el\r\n * @param {string} contextName - контекст, обычно используется имя компонента\r\n * @param {?object | null} contextData - установить объект с данными, предыдущие данные будут заменены, установите null для удаления данных\r\n * @returns {?object} - вернет объект контекста или undefined, если данные контекста не найдены\r\n */\r\nfunction storage (\r\n\tel?: Element & { topData?: any },\r\n\tcontextName: string = 'common', contextData: object | null | undefined = undefined,\r\n): object | undefined {\r\n\tif (!el) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (!el.topData) {\r\n\t\tel.topData = {};\r\n\t}\r\n\r\n\tif (contextData) {\r\n\t\tel.topData[contextName] = contextData;\r\n\t}\r\n\r\n\tif (contextData === null) {\r\n\t\tdelete el.topData[contextName];\r\n\t}\r\n\r\n\treturn el.topData[contextName];\r\n}\r\n\r\n/**\r\n * Очистить хранилище элемента\r\n */\r\nfunction storageClear (el?: Element & { topData?: any }) {\r\n\tif (!el) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tdelete el.topData;\r\n}\r\n\r\nexport default {\r\n\tgenEl,\r\n\tisVisible,\r\n\toffset,\r\n\tcss,\r\n\twrap,\r\n\tquerySelectorVisible,\r\n\tquerySelectorVisibleLast,\r\n\tquerySelectorAllVisible,\r\n\tquerySelectorAllArray,\r\n\tstorage,\r\n\tstorageClear,\r\n};\r\n"],"names":["genEl","tagName","attrs","elsChildrens","el","name","elChildren","isVisible","boundingClientRect","offset","css","property","wrap","elWrapper","querySelectorVisible","selectors","querySelectorAllArray","querySelectorVisibleLast","querySelectorAllVisible","storage","contextName","contextData","storageClear","DOM"],"mappings":"AAWA,SAASA,EAAOC,GAAiBC,MAAeC,GAAkC;AAC3E,QAAAC,IAAU,SAAS,cAAcH,CAAO;AAE9C,aAAWI,KAAQH;AAClB,IAAIG,EAAK,QAAQ,IAAI,MAAM,IAEvBD,EAAAC,CAAI,IAAIH,EAAMG,CAAI,IAErBD,EAAG,aAAaC,GAAMH,EAAMG,CAAI,CAAC;AAItB,SAAAF,EAAA,QAAQ,CAACG,MAAe;AAChC,IAAA,OAAQA,KAAgB,WACxBF,EAAA,mBAAmB,aAAaE,CAAU,IAE7CF,EAAG,OAAOE,CAAU;AAAA,EACrB,CACA,GAEMF;AACR;AAOA,SAASG,EAAWH,GAAc;AACjC,MAAI,CAACA;AACG,WAAA;AAGF,QAAAI,IAAqBJ,EAAG;AAC9B,SAAO,CAAC,EAAEI,EAAmB,SAASA,EAAmB;AAC1D;AAOA,SAASC,EAAQL,GAA4C;AACtD,QAAAI,IAAqBJ,EAAG;AAEvB,SAAA;AAAA,IACN,KAAKI,EAAmB,MAAM,OAAO;AAAA,IACrC,MAAMA,EAAmB,OAAO,OAAO;AAAA,EAAA;AAEzC;AAQA,SAASE,EAAKN,GAAaO,GAA0B;AACpD,SAAO,OAAO,iBAAiBP,CAAE,EAAE,iBAAiBO,CAAQ;AAC7D;AAQA,SAASC,EAAMR,GAAaH,GAA0B;AAC/C,QAAAY,IAAY,SAAS,cAAcZ,CAAO;AAChD,SAAAG,EAAG,MAAMS,CAAS,GAElBA,EAAU,OAAOT,CAAE,GAEZS;AACR;AAQA,SAASC,EAAsBV,GAAaW,GAAmC;AAC9E,SAAOC,EAAsBZ,GAAIW,CAAS,EAAE,KAAKR,CAAS,KAAK;AAChE;AAQA,SAASU,EAA0Bb,GAAaW,GAAmC;AAClF,SAAOC,EAAsBZ,GAAIW,CAAS,EAAE,SAASR,CAAS,KAAK;AACpE;AAQA,SAASW,EAAyBd,GAAaW,GAA8B;AAC5E,SAAOC,EAAsBZ,GAAIW,CAAS,EAAE,OAAOR,CAAS;AAC7D;AAQA,SAASS,EAAuBZ,GAAaW,GAA8B;AAC1E,SAAKX,IAIE,CAAC,GAAGA,EAAG,iBAAiBW,CAAS,CAAC,IAHjC;AAIT;AASA,SAASI,EACRf,GACAgB,IAAsB,UAAUC,IAAyC,QACpD;AACrB,MAAKjB;AAID,WAACA,EAAG,YACPA,EAAG,UAAU,KAGViB,MACAjB,EAAA,QAAQgB,CAAW,IAAIC,IAGvBA,MAAgB,QACZ,OAAAjB,EAAG,QAAQgB,CAAW,GAGvBhB,EAAG,QAAQgB,CAAW;AAC9B;AAKA,SAASE,EAAclB,GAAkC;AACxD,EAAKA,KAIL,OAAOA,EAAG;AACX;AAEA,MAAemB,IAAA;AAAA,EACd,OAAAvB;AAAA,EACA,WAAAO;AAAA,EACA,QAAAE;AAAA,EACA,KAAAC;AAAA,EACA,MAAAE;AAAA,EACA,sBAAAE;AAAA,EACA,0BAAAG;AAAA,EACA,yBAAAC;AAAA,EACA,uBAAAF;AAAA,EACA,SAAAG;AAAA,EACA,cAAAG;AACD;"}
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
import { watch as g, toRef as m } from "vue";
|
|
2
|
-
import { C as k, d as h } from "./forms-64632f73.es.js";
|
|
3
|
-
const b = `/* ui-datepicker */
|
|
4
|
-
.ui-datepicker {
|
|
5
|
-
--datepicker-day-color: #FFF;
|
|
6
|
-
--datepicker-day-color-hover: var(--color-blue-150);
|
|
7
|
-
--datepicker-selected-color: var(--color-blue-500);
|
|
8
|
-
--datepicker-selected-color-hover: var(--color-blue-550);
|
|
9
|
-
--datepicker-range-color: var(--color-blue-100);
|
|
10
|
-
--datepicker-range-color-hover: var(--color-blue-150);
|
|
11
|
-
|
|
12
|
-
user-select: none;
|
|
13
|
-
width: auto;
|
|
14
|
-
padding: 0;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.ui-datepicker:before,
|
|
18
|
-
.ui-datepicker:after {
|
|
19
|
-
display: none;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/* на странице */
|
|
23
|
-
.ui-datepicker-inline {
|
|
24
|
-
display: inline-block !important;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/* в popup */
|
|
28
|
-
.ui-datepicker:not(.ui-datepicker-inline) {
|
|
29
|
-
border-radius: 8px;
|
|
30
|
-
background: var(--content-background-color);
|
|
31
|
-
box-shadow: var(--top-shadow);
|
|
32
|
-
z-index: 10000000 !important;
|
|
33
|
-
padding: 8px;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.ui-datepicker a {
|
|
37
|
-
text-decoration: none !important;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.ui-datepicker option {
|
|
41
|
-
color: var(--color-text);
|
|
42
|
-
font-size: 14px;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
.ui-datepicker-header {
|
|
46
|
-
padding: 0 !important;
|
|
47
|
-
margin: 0 0 18px 0;
|
|
48
|
-
display: flex;
|
|
49
|
-
align-items: center;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.ui-datepicker-header > * {
|
|
53
|
-
display: flex;
|
|
54
|
-
align-items: center;
|
|
55
|
-
justify-content: center;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.ui-datepicker-title {
|
|
59
|
-
width: 100% !important;
|
|
60
|
-
height: 24px;
|
|
61
|
-
margin: 0 !important;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.ui-datepicker-month,
|
|
65
|
-
.ui-datepicker-year {
|
|
66
|
-
outline: none !important;
|
|
67
|
-
width: auto !important;
|
|
68
|
-
border: none;
|
|
69
|
-
padding: 0;
|
|
70
|
-
margin: 0 6px !important;
|
|
71
|
-
text-align: center;
|
|
72
|
-
font-size: 16px !important;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.ui-datepicker-month {
|
|
76
|
-
color: var(--color-text);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.ui-datepicker-year {
|
|
80
|
-
color: var(--color-gray-300);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/* select.ui-datepicker-month,
|
|
84
|
-
select.ui-datepicker-year{ cursor: pointer; color: var(--color-blue-500); }*/
|
|
85
|
-
select.ui-datepicker-month,
|
|
86
|
-
select.ui-datepicker-year {
|
|
87
|
-
cursor: pointer;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.ui-datepicker-prev,
|
|
91
|
-
.ui-datepicker-next {
|
|
92
|
-
cursor: pointer;
|
|
93
|
-
width: 24px !important;
|
|
94
|
-
height: 24px !important;
|
|
95
|
-
font-size: 24px;
|
|
96
|
-
font-family: 'Topvisor-2';
|
|
97
|
-
position: static !important;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.ui-datepicker-prev:before {
|
|
101
|
-
content: '';
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.ui-datepicker-next {
|
|
105
|
-
order: 1;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.ui-datepicker-next:before {
|
|
109
|
-
content: '';
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
.ui-datepicker-prev > *,
|
|
113
|
-
.ui-datepicker-next > * {
|
|
114
|
-
display: none !important;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.ui-datepicker thead th {
|
|
118
|
-
width: auto !important;
|
|
119
|
-
padding: 0 !important;
|
|
120
|
-
color: #B3BEBF;
|
|
121
|
-
font-size: 14px;
|
|
122
|
-
font-weight: 400 !important;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.ui-datepicker table {
|
|
126
|
-
margin: 0 !important;
|
|
127
|
-
font-size: 14px;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
.ui-datepicker td {
|
|
131
|
-
background: none;
|
|
132
|
-
padding: 0 !important;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.ui-datepicker td span,
|
|
136
|
-
.ui-datepicker td a {
|
|
137
|
-
border-radius: 8px;
|
|
138
|
-
border: none;
|
|
139
|
-
min-width: 32px;
|
|
140
|
-
height: 32px;
|
|
141
|
-
padding: 0;
|
|
142
|
-
margin: 1px;
|
|
143
|
-
color: var(--color-text) !important;
|
|
144
|
-
line-height: 32px;
|
|
145
|
-
text-align: center;
|
|
146
|
-
position: relative;
|
|
147
|
-
display: block;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/* обычные даты */
|
|
151
|
-
.ui-datepicker td a {
|
|
152
|
-
background: var(--datepicker-day-color);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.ui-datepicker td a:hover {
|
|
156
|
-
background: var(--datepicker-day-color-hover);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/* текущий день */
|
|
160
|
-
td.ui-datepicker-today span,
|
|
161
|
-
td.ui-datepicker-today a {
|
|
162
|
-
background: none;
|
|
163
|
-
position: relative;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/* выбранные даты */
|
|
167
|
-
.ui-datepicker td.selected a {
|
|
168
|
-
background: var(--datepicker-range-color);
|
|
169
|
-
padding-right: 0;
|
|
170
|
-
padding-left: 1px;
|
|
171
|
-
margin-right: 1px;
|
|
172
|
-
margin-left: 0;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.ui-datepicker td.selected a:hover {
|
|
176
|
-
background: var(--datepicker-range-color-hover);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
.ui-datepicker td.selected:not(.selected-start):not(:first-child):not(.first-of-month) a {
|
|
180
|
-
border-top-left-radius: 0;
|
|
181
|
-
border-bottom-left-radius: 0;
|
|
182
|
-
padding-left: 1px;
|
|
183
|
-
margin-left: 0;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
.ui-datepicker td.selected:not(.selected-end):not(:last-child):not(.last-of-month) a {
|
|
187
|
-
border-top-right-radius: 0;
|
|
188
|
-
border-bottom-right-radius: 0;
|
|
189
|
-
padding-right: 1px;
|
|
190
|
-
margin-right: 0;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.ui-datepicker td.selected-start a,
|
|
194
|
-
.ui-datepicker td.selected-end a,
|
|
195
|
-
.ui-datepicker td.ui-datepicker-current-day a {
|
|
196
|
-
background: var(--datepicker-selected-color);
|
|
197
|
-
color: #FFF !important;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
.ui-datepicker td.selected-start a:hover,
|
|
201
|
-
.ui-datepicker td.selected-end a:hover,
|
|
202
|
-
.ui-datepicker td.ui-datepicker-current-day a:hover {
|
|
203
|
-
background: var(--datepicker-selected-color-hover);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
.ui-datepicker-day-marks {
|
|
207
|
-
line-height: normal;
|
|
208
|
-
position: absolute;
|
|
209
|
-
right: 0;
|
|
210
|
-
bottom: 3px;
|
|
211
|
-
left: 0;
|
|
212
|
-
display: flex;
|
|
213
|
-
align-items: center;
|
|
214
|
-
justify-content: center;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
.ui-datepicker-day-marks > i {
|
|
218
|
-
border-radius: 50%;
|
|
219
|
-
border: 1px solid #FFF;
|
|
220
|
-
width: 4px;
|
|
221
|
-
height: 4px;
|
|
222
|
-
margin: 0 2px;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
.ui-datepicker-day-marks-exists {
|
|
226
|
-
background: var(--color-blue-500);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
.ui-datepicker-day-marks-update {
|
|
230
|
-
background: var(--color-red-500);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
.ui-datepicker-row-break {
|
|
234
|
-
display: none;
|
|
235
|
-
}`;
|
|
236
|
-
k.appendStyle(b);
|
|
237
|
-
const o = window, x = (e) => {
|
|
238
|
-
var t, n;
|
|
239
|
-
if (!((n = (t = o == null ? void 0 : o.jQuery) == null ? void 0 : t.ui) != null && n.datepicker)) {
|
|
240
|
-
console.info("Для работы datepicker требуется глобальная загрузка jQuery UI Datepicker");
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
return o.jQuery.datepicker._defaults.dateFormat = k.state.dateFormat.toLowerCase().replace("m", "mm").replace("y", "yy").replace("d", "dd"), o.jQuery(e);
|
|
244
|
-
};
|
|
245
|
-
function y(e, t) {
|
|
246
|
-
var n;
|
|
247
|
-
return (n = x(e)) == null ? void 0 : n.datepicker(t);
|
|
248
|
-
}
|
|
249
|
-
let d, l, p, u;
|
|
250
|
-
g(m(k.state.dateFormat), () => {
|
|
251
|
-
var e;
|
|
252
|
-
d = h("2000-01-01"), l = ((e = d.match(/\D/)) == null ? void 0 : e[0]) ?? "-", p = d.replace(/\D+/g, "").length, u = [];
|
|
253
|
-
for (let t = 0; t < d.length; t++)
|
|
254
|
-
d[t] === l && u.push(t);
|
|
255
|
-
}, { immediate: !0 });
|
|
256
|
-
function F(e) {
|
|
257
|
-
let t = e.target.selectionEnd, n = e.target.value, r = n.substring(0, t).replace(/\D+/g, ""), i = n.substring(t).replace(/\D+/g, ""), c = r.length + i.length - p;
|
|
258
|
-
if (c > 0) {
|
|
259
|
-
r = r.substring(0, p);
|
|
260
|
-
const a = p - r.length;
|
|
261
|
-
i = i.substring(i.length - a);
|
|
262
|
-
} else
|
|
263
|
-
c < 0 && (e.inputType === "deleteContentForward" ? r += "0".repeat(-c) : i = "0".repeat(-c) + i);
|
|
264
|
-
t = r.length, n = r + i;
|
|
265
|
-
for (let a = 0; a < u.length; a++) {
|
|
266
|
-
const s = u[a];
|
|
267
|
-
n = n.substring(0, s) + l + n.substring(s), t >= s && t++;
|
|
268
|
-
}
|
|
269
|
-
e.inputType === "deleteContentBackward" && n[t - 1] === l && t--, n !== e.target.value && (e.target.value = n, e.target.selectionStart = t, e.target.selectionEnd = t);
|
|
270
|
-
}
|
|
271
|
-
export {
|
|
272
|
-
y as connectDatepicker,
|
|
273
|
-
F as oninput
|
|
274
|
-
};
|
|
275
|
-
//# sourceMappingURL=datepicker-32bc8bd9.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker-32bc8bd9.es.js","sources":["../../src/components/forms/inputDate/datepicker.css?raw","../../src/components/forms/inputDate/datepicker.ts"],"sourcesContent":["export default \"/* ui-datepicker */\\n.ui-datepicker {\\n\\t--datepicker-day-color: #FFF;\\n\\t--datepicker-day-color-hover: var(--color-blue-150);\\n\\t--datepicker-selected-color: var(--color-blue-500);\\n\\t--datepicker-selected-color-hover: var(--color-blue-550);\\n\\t--datepicker-range-color: var(--color-blue-100);\\n\\t--datepicker-range-color-hover: var(--color-blue-150);\\n\\n\\tuser-select: none;\\n\\twidth: auto;\\n\\tpadding: 0;\\n}\\n\\n.ui-datepicker:before,\\n.ui-datepicker:after {\\n\\tdisplay: none;\\n}\\n\\n/* на странице */\\n.ui-datepicker-inline {\\n\\tdisplay: inline-block !important;\\n}\\n\\n/* в popup */\\n.ui-datepicker:not(.ui-datepicker-inline) {\\n\\tborder-radius: 8px;\\n\\tbackground: var(--content-background-color);\\n\\tbox-shadow: var(--top-shadow);\\n\\tz-index: 10000000 !important;\\n\\tpadding: 8px;\\n}\\n\\n.ui-datepicker a {\\n\\ttext-decoration: none !important;\\n}\\n\\n.ui-datepicker option {\\n\\tcolor: var(--color-text);\\n\\tfont-size: 14px;\\n}\\n\\n.ui-datepicker-header {\\n\\tpadding: 0 !important;\\n\\tmargin: 0 0 18px 0;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n}\\n\\n.ui-datepicker-header > * {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n\\n.ui-datepicker-title {\\n\\twidth: 100% !important;\\n\\theight: 24px;\\n\\tmargin: 0 !important;\\n}\\n\\n.ui-datepicker-month,\\n.ui-datepicker-year {\\n\\toutline: none !important;\\n\\twidth: auto !important;\\n\\tborder: none;\\n\\tpadding: 0;\\n\\tmargin: 0 6px !important;\\n\\ttext-align: center;\\n\\tfont-size: 16px !important;\\n}\\n\\n.ui-datepicker-month {\\n\\tcolor: var(--color-text);\\n}\\n\\n.ui-datepicker-year {\\n\\tcolor: var(--color-gray-300);\\n}\\n\\n/*\\tselect.ui-datepicker-month,\\nselect.ui-datepicker-year{ cursor: pointer; color: var(--color-blue-500); }*/\\nselect.ui-datepicker-month,\\nselect.ui-datepicker-year {\\n\\tcursor: pointer;\\n}\\n\\n.ui-datepicker-prev,\\n.ui-datepicker-next {\\n\\tcursor: pointer;\\n\\twidth: 24px !important;\\n\\theight: 24px !important;\\n\\tfont-size: 24px;\\n\\tfont-family: 'Topvisor-2';\\n\\tposition: static !important;\\n}\\n\\n.ui-datepicker-prev:before {\\n\\tcontent: '';\\n}\\n\\n.ui-datepicker-next {\\n\\torder: 1;\\n}\\n\\n.ui-datepicker-next:before {\\n\\tcontent: '';\\n}\\n\\n.ui-datepicker-prev > *,\\n.ui-datepicker-next > * {\\n\\tdisplay: none !important;\\n}\\n\\n.ui-datepicker thead th {\\n\\twidth: auto !important;\\n\\tpadding: 0 !important;\\n\\tcolor: #B3BEBF;\\n\\tfont-size: 14px;\\n\\tfont-weight: 400 !important;\\n}\\n\\n.ui-datepicker table {\\n\\tmargin: 0 !important;\\n\\tfont-size: 14px;\\n}\\n\\n.ui-datepicker td {\\n\\tbackground: none;\\n\\tpadding: 0 !important;\\n}\\n\\n.ui-datepicker td span,\\n.ui-datepicker td a {\\n\\tborder-radius: 8px;\\n\\tborder: none;\\n\\tmin-width: 32px;\\n\\theight: 32px;\\n\\tpadding: 0;\\n\\tmargin: 1px;\\n\\tcolor: var(--color-text) !important;\\n\\tline-height: 32px;\\n\\ttext-align: center;\\n\\tposition: relative;\\n\\tdisplay: block;\\n}\\n\\n/* обычные даты */\\n.ui-datepicker td a {\\n\\tbackground: var(--datepicker-day-color);\\n}\\n\\n.ui-datepicker td a:hover {\\n\\tbackground: var(--datepicker-day-color-hover);\\n}\\n\\n/* текущий день */\\ntd.ui-datepicker-today span,\\ntd.ui-datepicker-today a {\\n\\tbackground: none;\\n\\tposition: relative;\\n}\\n\\n/* выбранные даты */\\n.ui-datepicker td.selected a {\\n\\tbackground: var(--datepicker-range-color);\\n\\tpadding-right: 0;\\n\\tpadding-left: 1px;\\n\\tmargin-right: 1px;\\n\\tmargin-left: 0;\\n}\\n\\n.ui-datepicker td.selected a:hover {\\n\\tbackground: var(--datepicker-range-color-hover);\\n}\\n\\n.ui-datepicker td.selected:not(.selected-start):not(:first-child):not(.first-of-month) a {\\n\\tborder-top-left-radius: 0;\\n\\tborder-bottom-left-radius: 0;\\n\\tpadding-left: 1px;\\n\\tmargin-left: 0;\\n}\\n\\n.ui-datepicker td.selected:not(.selected-end):not(:last-child):not(.last-of-month) a {\\n\\tborder-top-right-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n\\tpadding-right: 1px;\\n\\tmargin-right: 0;\\n}\\n\\n.ui-datepicker td.selected-start a,\\n.ui-datepicker td.selected-end a,\\n.ui-datepicker td.ui-datepicker-current-day a {\\n\\tbackground: var(--datepicker-selected-color);\\n\\tcolor: #FFF !important;\\n}\\n\\n.ui-datepicker td.selected-start a:hover,\\n.ui-datepicker td.selected-end a:hover,\\n.ui-datepicker td.ui-datepicker-current-day a:hover {\\n\\tbackground: var(--datepicker-selected-color-hover);\\n}\\n\\n.ui-datepicker-day-marks {\\n\\tline-height: normal;\\n\\tposition: absolute;\\n\\tright: 0;\\n\\tbottom: 3px;\\n\\tleft: 0;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n\\n.ui-datepicker-day-marks > i {\\n\\tborder-radius: 50%;\\n\\tborder: 1px solid #FFF;\\n\\twidth: 4px;\\n\\theight: 4px;\\n\\tmargin: 0 2px;\\n}\\n\\n.ui-datepicker-day-marks-exists {\\n\\tbackground: var(--color-blue-500);\\n}\\n\\n.ui-datepicker-day-marks-update {\\n\\tbackground: var(--color-red-500);\\n}\\n\\n.ui-datepicker-row-break {\\n\\tdisplay: none;\\n}\"","import { toRef, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { dateFormat } from '@/core/utils/date';\n\nimport css from '@/components/forms/inputDate/datepicker.css?raw';\n\nCore.appendStyle(css);\n\nconst _window: any = window;\n\nconst $ = (el: HTMLInputElement) => {\n\tif (!_window?.jQuery?.ui?.datepicker) {\n\t\tconsole.info('Для работы datepicker требуется глобальная загрузка jQuery UI Datepicker');\n\n\t\treturn;\n\t}\n\n\t_window.jQuery.datepicker._defaults.dateFormat = Core.state.dateFormat.toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd');\n\n\treturn _window.jQuery(el);\n};\n\nexport function connectDatepicker(el: HTMLInputElement, options: any) {\n\treturn $(el)?.datepicker(options);\n}\n\nlet dateFormatted;\nlet delimiter: string;\nlet dateNumbersCount: number;\nlet delimitersIndexes: number[];\n\nwatch(toRef(Core.state.dateFormat), () => {\n\t// генерация отформатированной даты, извлечение из нее разделителей и их индексов\n\tdateFormatted = dateFormat('2000-01-01');\n\tdelimiter = dateFormatted.match(/\\D/)?.[0] ?? '-';\n\tdateNumbersCount = dateFormatted.replace(/\\D+/g, '').length;\n\tdelimitersIndexes = [];\n\n\tfor (let i = 0; i < dateFormatted.length; i++) {\n\t\tif (dateFormatted[i] === delimiter) {\n\t\t\tdelimitersIndexes.push(i);\n\t\t}\n\t}\n}, { immediate: true });\n\n/**\n * Автоформат при вводе в поле с датой\n */\nexport function oninput(e: any) {\n\tlet selectionPos = e.target.selectionEnd;\n\tlet value = e.target.value;\n\n\t// разбить занчение на две половины - до и после каретки\n\t// удалить все символы, кроме цифр\n\tlet valueChunkLeft = value.substring(0, selectionPos).replace(/\\D+/g, '');\n\tlet valueChunkRight = value.substring(selectionPos).replace(/\\D+/g, '');\n\n\tlet extraNumbersCount = valueChunkLeft.length + valueChunkRight.length - dateNumbersCount;\n\tif (extraNumbersCount > 0) {\n\t\t// // количество цифр больше требуемого - удалить лишние\n\t\tvalueChunkLeft = valueChunkLeft.substring(0, dateNumbersCount);\n\n\t\tconst valueChunkRightMaxLength = dateNumbersCount - valueChunkLeft.length;\n\t\tvalueChunkRight = valueChunkRight.substring(valueChunkRight.length - valueChunkRightMaxLength);\n\t} else if (extraNumbersCount < 0) {\n\t\t// количество цифр меньше требуемого - добавить 0\n\t\tif (e.inputType === 'deleteContentForward') {\n\t\t\t// нажатие на delete - добавить к левой части для правильного позиционирования каретки\n\t\t\tvalueChunkLeft += '0'.repeat(-extraNumbersCount);\n\t\t} else {\n\t\t\tvalueChunkRight = '0'.repeat(-extraNumbersCount) + valueChunkRight;\n\t\t}\n\t}\n\n\tselectionPos = valueChunkLeft.length;\n\tvalue = valueChunkLeft + valueChunkRight;\n\n\t// вставить разделители\n\tfor (let i = 0; i < delimitersIndexes.length; i++) {\n\t\tconst delimiterIndex = delimitersIndexes[i];\n\n\t\tvalue = value.substring(0, delimiterIndex) + delimiter + value.substring(delimiterIndex);\n\n\t\t// сдвинуть каретку, если разделитель вставлен левее ее\n\t\tif (selectionPos >= delimiterIndex) {\n\t\t\tselectionPos++;\n\t\t}\n\t}\n\n\t// нажатие на backspace - если слева символ разделителя, перенести каретку за него\n\tif (e.inputType === 'deleteContentBackward' && value[selectionPos - 1] === delimiter) {\n\t\tselectionPos--;\n\t}\n\n\t// если значение изменилось - вставить его и переместить каретку\n\tif (value !== e.target.value) {\n\t\te.target.value = value;\n\t\te.target.selectionStart = selectionPos;\n\t\te.target.selectionEnd = selectionPos;\n\t}\n}"],"names":["css","Core","_window","$","el","_b","_a","connectDatepicker","options","dateFormatted","delimiter","dateNumbersCount","delimitersIndexes","watch","toRef","dateFormat","i","oninput","selectionPos","value","valueChunkLeft","valueChunkRight","extraNumbersCount","valueChunkRightMaxLength","delimiterIndex"],"mappings":";;AAAA,MAAeA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACMfC,EAAK,YAAYD,CAAG;AAEpB,MAAME,IAAe,QAEfC,IAAI,CAACC,MAAyB;;AACnC,MAAI,GAACC,KAAAC,IAAAJ,KAAA,gBAAAA,EAAS,WAAT,gBAAAI,EAAiB,OAAjB,QAAAD,EAAqB,aAAY;AACrC,YAAQ,KAAK,0EAA0E;AAEvF;AAAA,EACD;AAEA,SAAAH,EAAQ,OAAO,WAAW,UAAU,aAAaD,EAAK,MAAM,WAAW,YAAY,EAAE,QAAQ,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI,GAErIC,EAAQ,OAAOE,CAAE;AACzB;AAEgB,SAAAG,EAAkBH,GAAsBI,GAAc;;AACrE,UAAOF,IAAAH,EAAEC,CAAE,MAAJ,gBAAAE,EAAO,WAAWE;AAC1B;AAEA,IAAIC,GACAC,GACAC,GACAC;AAEJC,EAAMC,EAAMb,EAAK,MAAM,UAAU,GAAG,MAAM;;AAEzC,EAAAQ,IAAgBM,EAAW,YAAY,GACvCL,MAAYJ,IAAAG,EAAc,MAAM,IAAI,MAAxB,gBAAAH,EAA4B,OAAM,KAC9CK,IAAmBF,EAAc,QAAQ,QAAQ,EAAE,EAAE,QACrDG,IAAoB,CAAA;AAEpB,WAASI,IAAI,GAAGA,IAAIP,EAAc,QAAQO;AACrC,IAAAP,EAAcO,CAAC,MAAMN,KACxBE,EAAkB,KAAKI,CAAC;AAG3B,GAAG,EAAE,WAAW,GAAA,CAAM;AAKf,SAASC,EAAQ,GAAQ;AAC3B,MAAAC,IAAe,EAAE,OAAO,cACxBC,IAAQ,EAAE,OAAO,OAIjBC,IAAiBD,EAAM,UAAU,GAAGD,CAAY,EAAE,QAAQ,QAAQ,EAAE,GACpEG,IAAkBF,EAAM,UAAUD,CAAY,EAAE,QAAQ,QAAQ,EAAE,GAElEI,IAAoBF,EAAe,SAASC,EAAgB,SAASV;AACzE,MAAIW,IAAoB,GAAG;AAET,IAAAF,IAAAA,EAAe,UAAU,GAAGT,CAAgB;AAEvD,UAAAY,IAA2BZ,IAAmBS,EAAe;AACnE,IAAAC,IAAkBA,EAAgB,UAAUA,EAAgB,SAASE,CAAwB;AAAA,EAAA;AAC9F,IAAWD,IAAoB,MAE1B,EAAE,cAAc,yBAEDF,KAAA,IAAI,OAAO,CAACE,CAAiB,IAE/CD,IAAkB,IAAI,OAAO,CAACC,CAAiB,IAAID;AAIrD,EAAAH,IAAeE,EAAe,QAC9BD,IAAQC,IAAiBC;AAGzB,WAASL,IAAI,GAAGA,IAAIJ,EAAkB,QAAQI,KAAK;AAC5C,UAAAQ,IAAiBZ,EAAkBI,CAAC;AAElC,IAAAG,IAAAA,EAAM,UAAU,GAAGK,CAAc,IAAId,IAAYS,EAAM,UAAUK,CAAc,GAGnFN,KAAgBM,KACnBN;AAAA,EAEF;AAGA,EAAI,EAAE,cAAc,2BAA2BC,EAAMD,IAAe,CAAC,MAAMR,KAC1EQ,KAIGC,MAAU,EAAE,OAAO,UACtB,EAAE,OAAO,QAAQA,GACjB,EAAE,OAAO,iBAAiBD,GAC1B,EAAE,OAAO,eAAeA;AAE1B;"}
|