@topvisor/ui 0.0.16 → 0.0.18
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/core-96a4bfb4.amd.js +2 -0
- package/.chunks/core-96a4bfb4.amd.js.map +1 -0
- package/.chunks/{core-c3afa109.es.js → core-fd9de702.es.js} +44 -44
- package/.chunks/core-fd9de702.es.js.map +1 -0
- package/.chunks/forms-1dc7c6f3.amd.js +3 -0
- package/.chunks/forms-1dc7c6f3.amd.js.map +1 -0
- package/.chunks/forms-3575c189.es.js +461 -0
- package/.chunks/forms-3575c189.es.js.map +1 -0
- package/.chunks/popup-b891abb1.amd.js +342 -0
- package/.chunks/popup-b891abb1.amd.js.map +1 -0
- package/.chunks/popup-dd9546aa.es.js +702 -0
- package/.chunks/popup-dd9546aa.es.js.map +1 -0
- package/README.md +62 -62
- package/common/common.amd.js +1 -1
- package/common/common.js +1 -17
- package/common/common.js.map +1 -1
- package/core/core.amd.js +1 -1
- package/core/core.js +1 -1
- package/core.css +1 -1
- package/editArea/editArea.amd.js +2 -2
- package/editArea/editArea.amd.js.map +1 -1
- package/editArea/editArea.js +16 -16
- package/editArea/editArea.js.map +1 -1
- package/editArea.css +1 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.js +1 -1
- package/forms/helpers.amd.js +1 -1
- package/forms/helpers.amd.js.map +1 -1
- package/forms/helpers.js +6 -3
- package/forms/helpers.js.map +1 -1
- package/forms.css +1 -1
- package/icomoon/demo-files/demo.css +161 -161
- package/icomoon/demo-files/demo.js +30 -30
- package/icomoon/demo.html +2945 -2931
- package/icomoon/fonts/Topvisor-2.svg +232 -231
- package/icomoon/fonts/Topvisor-2.ttf +0 -0
- package/icomoon/fonts/Topvisor-2.woff +0 -0
- package/icomoon/selection.json +1 -1
- package/icomoon/style.css +647 -644
- package/package.json +19 -19
- package/popup/popup.amd.js +2 -2
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +67 -68
- 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 +18 -21
- package/popup/worker.js.map +1 -1
- package/tabs/tabs.amd.js +3 -0
- package/tabs/tabs.amd.js.map +1 -0
- package/tabs/tabs.js +97 -0
- package/tabs/tabs.js.map +1 -0
- package/tabs.css +1 -0
- package/utils/device.amd.js.map +1 -1
- package/utils/device.js.map +1 -1
- package/utils/dom.amd.js.map +1 -1
- package/utils/dom.js.map +1 -1
- package/.chunks/core-97b070be.amd.js +0 -2
- package/.chunks/core-97b070be.amd.js.map +0 -1
- package/.chunks/core-c3afa109.es.js.map +0 -1
- package/.chunks/forms-6a6b0b80.es.js +0 -436
- package/.chunks/forms-6a6b0b80.es.js.map +0 -1
- package/.chunks/forms-7119886a.amd.js +0 -3
- package/.chunks/forms-7119886a.amd.js.map +0 -1
- package/.chunks/popup-6d1d8097.amd.js +0 -342
- package/.chunks/popup-6d1d8097.amd.js.map +0 -1
- package/.chunks/popup-95d27020.es.js +0 -720
- package/.chunks/popup-95d27020.es.js.map +0 -1
- package/icomoon/demo-files/Read Me.txt +0 -7
package/popup/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sources":["../../src/components/popup/lib/worker.globalEvents.js","../../src/components/popup/lib/worker.js"],"sourcesContent":["import Core from '@/core/core/core';\nimport Events from '@/core/core/events';\nimport Worker from '@/components/popup/lib/worker';\n\n/**\n * Глобальные события, для реализации Popup\n */\nclass WorkerEvents {\n\tstatic init () {\n\t\t// автоматическое открытие при наведении мыши, событие глобальное, так как инициализация popup отложена\n\t\tdocument.addEventListener('mouseover', (e) => {\n\t\t\tif (!e.target.dataset?.topPopupOpenByHover) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.target.click();\n\t\t});\n\n\t\t// при скролле страницы убирать закрыть Popup\n\t\tdocument.addEventListener('scroll', () => {\n\t\t\tif (Core.isMobile) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\n\t\t});\n\n\t\tEvents.addOnReize(e => {\n\t\t\t// закрыть popup при повороте экрана телефона\n\t\t\t// если была отображена ПК версия, она будет закрыта\n\t\t\tif (Core.state.isMobile && e.topEvent.widthDiff) {\n\t\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\n\t\t\t}\n\t\t});\n\n\t\tdocument.addEventListener('click', this.onclick);\n\t}\n\n\t/**\n\t * Глобальный обработчик кликов\n\t * обрабатывает клики на открытие Popup\n\t * @param {Event} e\n\t */\n\tstatic async onclick (e) {\n\t\tlet elOpener;\n\n\t\tswitch (true) {\n\t\t\tcase !!e.target.dataset?.topPopup:\n\t\t\t\telOpener = e.target;\n\n\t\t\t\tbreak;\n\n\t\t\tcase !!e.target.parentElement?.dataset.topPopup:\n\t\t\t\telOpener = e.target.parentElement;\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!elOpener) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupDisabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// меню уже открыто\n\t\tif (elOpener.dataset.topPopupOpened) {\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\tawait Worker.openByOpener(elOpener);\n\t}\n}\n\nexport default WorkerEvents;\n","import Core from '@/core/core/core';\nimport DOM from '@/core/utils/dom';\nimport GlobalEvents from '@/components/popup/lib/worker.globalEvents';\n\nlet decoratorBeforeOpen;\nlet decoratorAfterOpen;\nlet decoratorIsIgnoreOuterClick;\nlet i18n = {\n\tClose: 'Close',\n};\n\nclass Worker {\n\n\t// глобальное выключение закрытия меню, используется при различных оверлеях\n\tstatic noClose = false;\n\n\tstatic vueConnectors = new Map();\n\n\t/**\n\t * Вызывается при инициализаци приложения\n\t * устанавливает глобальные статические декортаоры для компонента Popup\n\t * @param {{\n\t * \tdecoratorBeforeOpen: (object) => void\n\t * \tdecoratorAfterOpen: (object) => void,\n\t * \tdecoratorIsIgnoreOuterClick: (e) => void,\n\t * \ti18n: {Close: string}\n\t * }} options\n\t */\n\tstatic onInitApp (options) {\n\t\tdecoratorBeforeOpen = options?.decoratorBeforeOpen;\n\t\tdecoratorAfterOpen = options?.decoratorAfterOpen;\n\t\tdecoratorIsIgnoreOuterClick = options?.decoratorIsIgnoreOuterClick;\n\t\ti18n = options?.i18n;\n\t}\n\n\t// вернуть объект компонента popup, привязанный к элементу\n\tstatic getPopup (elPopup) {\n\t\treturn DOM.storage(elPopup, 'Popup');\n\t}\n\n\tstatic getAll () {\n\t\treturn DOM.querySelectorAllArray(document, '.top-popup-wrapper');\n\t}\n\n\tstatic getAllVisible () {\n\t\treturn DOM.querySelectorAllVisible(document, '.top-popup-wrapper');\n\t}\n\n\t/**\n\t * Открть Popup от указанного elOpener\n\t * @param {Element} elOpener - элемент, который должен вызвать открытие Popup\n\t */\n\tstatic async openByOpener (elOpener) {\n\t\tconst options = {};\n\n\t\toptions.popup = elOpener.dataset.topPopup;\n\n\t\tif (elOpener.dataset.topPopupP) {\n\t\t\toptions.p = parseInt(elOpener.dataset.topPopupP);\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupNotch) {\n\t\t\toptions.notch = elOpener.dataset.topPopupNotch;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupClass) {\n\t\t\toptions.class = elOpener.dataset.topPopupClass;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupPosBy) {\n\t\t\toptions.posBy = elOpener.dataset.topPopupPosBy;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupFront) {\n\t\t\toptions.frontSelector = elOpener.dataset.topPopupFront;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupInvertX) {\n\t\t\toptions.invertX = elOpener.dataset.topPopupInvertX;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupOpenByHover) {\n\t\t\toptions.openByHover = elOpener.dataset.topPopupOpenByHover;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupUseOriginal) {\n\t\t\toptions.useOriginal = elOpener.dataset.topPopupUseOriginal;\n\t\t}\n\n\t\treturn await Worker.open(elOpener, options);\n\t}\n\n\t/**\n\t * Создать и открыть Popup\n\t * @param {Element} elOpener - элемент, вызвавший открытие Popup\n\t * @param {object} options - опции Popup\n\t */\n\tstatic async open (elOpener, options) {\n\t\telOpener.dataset.topPopupOpened = 'opened';\n\n\t\tconst { default: Popup } = await import('./popup');\n\n\t\tif (typeof (jQuery) === 'function') {\n\t\t\tconst $elOpener = jQuery(elOpener);\n\n\t\t\t// deprecated, используется aftershow.top-menu-popup\n\t\t\tif ($elOpener.data('aftershow')) {\n\t\t\t\tlet afterShow = $elOpener.data('aftershow');\n\t\t\t\tif (typeof (afterShow) == 'string') {\n\t\t\t\t\tafterShow = eval(afterShow.replace(/\\W/g, ''));\n\t\t\t\t}\n\n\t\t\t\t$elOpener.one('aftershow.top-menu-popup', afterShow);\n\t\t\t}\n\n\t\t\t// deprecated, используется afterclose.top-menu-popup\n\t\t\tif ($elOpener.data('afterclose')) {\n\t\t\t\tlet afterclose = $elOpener.data('afterclose');\n\t\t\t\tif (typeof (afterclose) == 'string') {\n\t\t\t\t\tafterclose = eval(afterclose.replace(/\\W/g, ''));\n\t\t\t\t}\n\n\t\t\t\t$elOpener.one('afterclose.top-menu-popup', afterclose);\n\t\t\t}\n\t\t}\n\n\t\toptions.isFullScreen = Core.state.isMobile;\n\t\toptions.i18n = i18n;\n\n\t\treturn await new Popup(elOpener, options);\n\t}\n\n\tstatic close (elPopup) {\n\t\tconst popup = Worker.getPopup(elPopup);\n\t\tif (popup) {\n\t\t\tpopup.close();\n\t\t}\n\t}\n\n\tstatic recalcPosition (elPopup) {\n\t\tconst popup = Worker.getPopup(elPopup);\n\t\tif (popup) {\n\t\t\tpopup.recalcPosition();\n\n\t\t\t// контроль за состоянием тени скролла\n\t\t\t// вызывать после имзенения высоты скролла popup.elPopupBody\n\t\t\tHelperCommon.genHasScroll($(popup.elPopupBody));\n\t\t}\n\t}\n\n\t// скролл к активному элементу списка\n\tstatic scrollToActive (elPopup) {\n\t\tconst elItemActive = DOM.querySelectorVisible(elPopup, 'ul.top-popup_content > li > .top-active');\n\t\tif (!elItemActive) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elUl = elPopup.querySelector('ul.top-popup_content');\n\t\tconst elsLi = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li');\n\n\t\telPopup.classList.add('top-popup-wrapper-no_animate');\n\t\tsetTimeout(() => elPopup.classList.remove('top-popup-wrapper-no_animate'), 100);\n\n\t\tlet top = 100;\n\t\tfor (const elLi of elsLi) {\n\t\t\tif (elLi.querySelector(':scope > .top-active')) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\ttop += elLi.offsetHeight;\n\t\t}\n\n\t\tconst heightWrapper = elUl.offsetHeight;\n\t\tif (top > heightWrapper) {\n\t\t\telUl.scrollTop = top - heightWrapper;\n\t\t} else {\n\t\t\telUl.scrollTop = 0;\n\t\t}\n\t}\n\n\tstatic decoratorBeforeOpen (popup) {\n\t\tif (decoratorBeforeOpen) {\n\t\t\tdecoratorBeforeOpen(popup);\n\t\t}\n\t};\n\n\tstatic decoratorAfterOpen (popup) {\n\t\tif (decoratorAfterOpen) {\n\t\t\tdecoratorAfterOpen(popup);\n\t\t}\n\t};\n\n\t/**\n\t * Определитель того, что клик вне Popup нужно игнорировать\n\t * @returns {boolean} - игнорировать клик, то есть не закрывать Popup\n\t */\n\tstatic decoratorIsIgnoreOuterClick (e) {\n\t\tif (decoratorIsIgnoreOuterClick) {\n\t\t\treturn decoratorIsIgnoreOuterClick(e);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Зарегистрировать Vue компонент\n\t *\n\t * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js\n\t * @param {string} id\n\t * @param {any} vueConnector\n\t */\n\tstatic regVueComponent (id, vueConnector) {\n\t\tif (Worker.vueConnectors.get(id)) {\n\t\t\tthrow 'Vue component Popup use duplicated id: ' + id;\n\t\t}\n\n\t\tWorker.vueConnectors.set(id, vueConnector);\n\t}\n\n\t/**\n\t * Снять с регистрации Vue компонент\n\t * @param {string} id\n\t */\n\tstatic unregVueComponent (id) {\n\t\tWorker.vueConnectors.delete(id);\n\t}\n\n}\n\nGlobalEvents.init(Worker, Core);\n\nexport default Worker;\n"],"names":["e","_a","Worker","elPopup","elOpener","_b","options","popup","elUl","elsLi","top","elLi","heightWrapper","id","vueConnector","__publicField","GlobalEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.js","sources":["../../src/components/popup/lib/worker.globalEvents.js","../../src/components/popup/lib/worker.js"],"sourcesContent":["import Core from '@/core/core/core';\r\nimport Events from '@/core/core/events';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\n/**\r\n * Глобальные события, для реализации Popup\r\n */\r\nclass WorkerEvents {\r\n\tstatic init () {\r\n\t\t// автоматическое открытие при наведении мыши, событие глобальное, так как инициализация popup отложена\r\n\t\tdocument.addEventListener('mouseover', (e) => {\r\n\t\t\tif (!e.target.dataset?.topPopupOpenByHover) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\te.target.click();\r\n\t\t});\r\n\r\n\t\t// при скролле страницы убирать закрыть Popup\r\n\t\tdocument.addEventListener('scroll', () => {\r\n\t\t\tif (Core.isMobile) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\r\n\t\t});\r\n\r\n\t\tEvents.addOnReize(e => {\r\n\t\t\t// закрыть popup при повороте экрана телефона\r\n\t\t\t// если была отображена ПК версия, она будет закрыта\r\n\t\t\tif (Core.state.isMobile && e.topEvent.widthDiff) {\r\n\t\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.addEventListener('click', this.onclick);\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик кликов\r\n\t * обрабатывает клики на открытие Popup\r\n\t * @param {Event} e\r\n\t */\r\n\tstatic async onclick (e) {\r\n\t\tlet elOpener;\r\n\r\n\t\tswitch (true) {\r\n\t\t\tcase !!e.target.dataset?.topPopup:\r\n\t\t\t\telOpener = e.target;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase !!e.target.parentElement?.dataset.topPopup:\r\n\t\t\t\telOpener = e.target.parentElement;\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (!elOpener) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupDisabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// меню уже открыто\r\n\t\tif (elOpener.dataset.topPopupOpened) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tawait Worker.openByOpener(elOpener);\r\n\t}\r\n}\r\n\r\nexport default WorkerEvents;\r\n","import Core from '@/core/core/core';\r\nimport DOM from '@/core/utils/dom';\r\nimport GlobalEvents from '@/components/popup/lib/worker.globalEvents';\r\n\r\nlet decoratorBeforeOpen;\r\nlet decoratorAfterOpen;\r\nlet decoratorIsIgnoreOuterClick;\r\nlet i18n = {\r\n\tClose: 'Close',\r\n};\r\n\r\nclass Worker {\r\n\r\n\t// глобальное выключение закрытия меню, используется при различных оверлеях\r\n\tstatic noClose = false;\r\n\r\n\tstatic vueConnectors = new Map();\r\n\r\n\t/**\r\n\t * Вызывается при инициализаци приложения\r\n\t * устанавливает глобальные статические декортаоры для компонента Popup\r\n\t * @param {{\r\n\t * \tdecoratorBeforeOpen: (object) => void\r\n\t * \tdecoratorAfterOpen: (object) => void,\r\n\t * \tdecoratorIsIgnoreOuterClick: (e) => void,\r\n\t * \ti18n: {Close: string}\r\n\t * }} options\r\n\t */\r\n\tstatic onInitApp (options) {\r\n\t\tdecoratorBeforeOpen = options?.decoratorBeforeOpen;\r\n\t\tdecoratorAfterOpen = options?.decoratorAfterOpen;\r\n\t\tdecoratorIsIgnoreOuterClick = options?.decoratorIsIgnoreOuterClick;\r\n\t\ti18n = options?.i18n;\r\n\t}\r\n\r\n\t// вернуть объект компонента popup, привязанный к элементу\r\n\tstatic getPopup (elPopup) {\r\n\t\treturn DOM.storage(elPopup, 'Popup');\r\n\t}\r\n\r\n\tstatic getAll () {\r\n\t\treturn DOM.querySelectorAllArray(document, '.top-popup-wrapper');\r\n\t}\r\n\r\n\tstatic getAllVisible () {\r\n\t\treturn DOM.querySelectorAllVisible(document, '.top-popup-wrapper');\r\n\t}\r\n\r\n\t/**\r\n\t * Открть Popup от указанного elOpener\r\n\t * @param {Element} elOpener - элемент, который должен вызвать открытие Popup\r\n\t */\r\n\tstatic async openByOpener (elOpener) {\r\n\t\tconst options = {};\r\n\r\n\t\toptions.popup = elOpener.dataset.topPopup;\r\n\r\n\t\tif (elOpener.dataset.topPopupP) {\r\n\t\t\toptions.p = parseInt(elOpener.dataset.topPopupP);\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupNotch) {\r\n\t\t\toptions.notch = elOpener.dataset.topPopupNotch;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupClass) {\r\n\t\t\toptions.class = elOpener.dataset.topPopupClass;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupPosBy) {\r\n\t\t\toptions.posBy = elOpener.dataset.topPopupPosBy;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupFront) {\r\n\t\t\toptions.frontSelector = elOpener.dataset.topPopupFront;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupInvertX) {\r\n\t\t\toptions.invertX = elOpener.dataset.topPopupInvertX;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupOpenByHover) {\r\n\t\t\toptions.openByHover = elOpener.dataset.topPopupOpenByHover;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupUseOriginal) {\r\n\t\t\toptions.useOriginal = elOpener.dataset.topPopupUseOriginal;\r\n\t\t}\r\n\r\n\t\treturn await Worker.open(elOpener, options);\r\n\t}\r\n\r\n\t/**\r\n\t * Создать и открыть Popup\r\n\t * @param {Element} elOpener - элемент, вызвавший открытие Popup\r\n\t * @param {object} options - опции Popup\r\n\t */\r\n\tstatic async open (elOpener, options) {\r\n\t\telOpener.dataset.topPopupOpened = 'opened';\r\n\r\n\t\tconst { default: Popup } = await import('./popup');\r\n\r\n\t\tif (typeof (jQuery) === 'function') {\r\n\t\t\tconst $elOpener = jQuery(elOpener);\r\n\r\n\t\t\t// deprecated, используется aftershow.top-menu-popup\r\n\t\t\tif ($elOpener.data('aftershow')) {\r\n\t\t\t\tlet afterShow = $elOpener.data('aftershow');\r\n\t\t\t\tif (typeof (afterShow) == 'string') {\r\n\t\t\t\t\tafterShow = eval(afterShow.replace(/\\W/g, ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$elOpener.one('aftershow.top-menu-popup', afterShow);\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated, используется afterclose.top-menu-popup\r\n\t\t\tif ($elOpener.data('afterclose')) {\r\n\t\t\t\tlet afterclose = $elOpener.data('afterclose');\r\n\t\t\t\tif (typeof (afterclose) == 'string') {\r\n\t\t\t\t\tafterclose = eval(afterclose.replace(/\\W/g, ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$elOpener.one('afterclose.top-menu-popup', afterclose);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions.isFullScreen = Core.state.isMobile;\r\n\t\toptions.i18n = i18n;\r\n\r\n\t\treturn await new Popup(elOpener, options);\r\n\t}\r\n\r\n\tstatic close (elPopup) {\r\n\t\tconst popup = Worker.getPopup(elPopup);\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t}\r\n\r\n\tstatic recalcPosition (elPopup) {\r\n\t\tconst popup = Worker.getPopup(elPopup);\r\n\t\tif (popup) {\r\n\t\t\tpopup.recalcPosition();\r\n\r\n\t\t\t// контроль за состоянием тени скролла\r\n\t\t\t// вызывать после имзенения высоты скролла popup.elPopupBody\r\n\t\t\tHelperCommon.genHasScroll($(popup.elPopupBody));\r\n\t\t}\r\n\t}\r\n\r\n\t// скролл к активному элементу списка\r\n\tstatic scrollToActive (elPopup) {\r\n\t\tconst elItemActive = DOM.querySelectorVisible(elPopup, 'ul.top-popup_content > li > .top-active');\r\n\t\tif (!elItemActive) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elUl = elPopup.querySelector('ul.top-popup_content');\r\n\t\tconst elsLi = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li');\r\n\r\n\t\telPopup.classList.add('top-popup-wrapper-no_animate');\r\n\t\tsetTimeout(() => elPopup.classList.remove('top-popup-wrapper-no_animate'), 100);\r\n\r\n\t\tlet top = 100;\r\n\t\tfor (const elLi of elsLi) {\r\n\t\t\tif (elLi.querySelector(':scope > .top-active')) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\ttop += elLi.offsetHeight;\r\n\t\t}\r\n\r\n\t\tconst heightWrapper = elUl.offsetHeight;\r\n\t\tif (top > heightWrapper) {\r\n\t\t\telUl.scrollTop = top - heightWrapper;\r\n\t\t} else {\r\n\t\t\telUl.scrollTop = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tstatic decoratorBeforeOpen (popup) {\r\n\t\tif (decoratorBeforeOpen) {\r\n\t\t\tdecoratorBeforeOpen(popup);\r\n\t\t}\r\n\t};\r\n\r\n\tstatic decoratorAfterOpen (popup) {\r\n\t\tif (decoratorAfterOpen) {\r\n\t\t\tdecoratorAfterOpen(popup);\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Определитель того, что клик вне Popup нужно игнорировать\r\n\t * @returns {boolean} - игнорировать клик, то есть не закрывать Popup\r\n\t */\r\n\tstatic decoratorIsIgnoreOuterClick (e) {\r\n\t\tif (decoratorIsIgnoreOuterClick) {\r\n\t\t\treturn decoratorIsIgnoreOuterClick(e);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Зарегистрировать Vue компонент\r\n\t *\r\n\t * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js\r\n\t * @param {string} id\r\n\t * @param {any} vueConnector\r\n\t */\r\n\tstatic regVueComponent (id, vueConnector) {\r\n\t\tif (Worker.vueConnectors.get(id)) {\r\n\t\t\tthrow 'Vue component Popup use duplicated id: ' + id;\r\n\t\t}\r\n\r\n\t\tWorker.vueConnectors.set(id, vueConnector);\r\n\t}\r\n\r\n\t/**\r\n\t * Снять с регистрации Vue компонент\r\n\t * @param {string} id\r\n\t */\r\n\tstatic unregVueComponent (id) {\r\n\t\tWorker.vueConnectors.delete(id);\r\n\t}\r\n\r\n}\r\n\r\nGlobalEvents.init(Worker, Core);\r\n\r\nexport default Worker;\r\n"],"names":["e","_a","Worker","elPopup","elOpener","_b","options","popup","elUl","elsLi","top","elLi","heightWrapper","id","vueConnector","GlobalEvents"],"mappings":"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"}
|
package/tabs/tabs.amd.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
define(["exports","vue","../.chunks/forms-1dc7c6f3.amd"],function(o,t,a){"use strict"; if(typeof vue === "undefined") var vue = window.Vue;var s=document.createElement("style");s.textContent=`.top-tabs{background:var(--content-background-color);border-radius:8px;border:1px solid var(--color-line-2-opacity);padding:0;display:flex;flex-wrap:wrap;align-items:stretch}.top-tabs_header{padding:6px;margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.top-tabs_contents{border-top:1px solid var(--color-line-2-opacity);width:100%;margin-top:-1px}.top-tabs_tabInput:checked:nth-child(1)~.top-tabs_contents>.top-tabs_content:nth-child(1),.top-tabs_tabInput:checked:nth-child(3)~.top-tabs_contents>.top-tabs_content:nth-child(2),.top-tabs_tabInput:checked:nth-child(5)~.top-tabs_contents>.top-tabs_content:nth-child(3),.top-tabs_tabInput:checked:nth-child(7)~.top-tabs_contents>.top-tabs_content:nth-child(4),.top-tabs_tabInput:checked:nth-child(9)~.top-tabs_contents>.top-tabs_content:nth-child(5),.top-tabs_tabInput:checked:nth-child(11)~.top-tabs_contents>.top-tabs_content:nth-child(6){display:block}.top-tabs_tabLabel{cursor:pointer;border-bottom:2px solid transparent;padding:14px 20px;position:relative;display:flex;align-items:center}.top-tabs_tabLabel:hover{border-color:var(--color-line-2-opacity)}.top-tabs_tabInput:checked+.top-tabs_tabLabel{border-color:var(--color-primary);color:var(--color-primary)}.top-tabs_tabLabel.top-disabled{color:var(--color-text-3)}.top-tabs_content{padding:14px;overflow:auto;display:none}
|
|
2
|
+
`,document.head.appendChild(s);const c={class:t.normalizeClass({"top-tabs":!0})},p={key:0,class:"top-tabs_header"},d={class:"top-tabs_contents"},r=t.defineComponent({__name:"tabs",props:{id:{}},setup(n){return(e,l)=>(t.openBlock(),t.createElementBlock("div",c,[t.renderSlot(e.$slots,"buttons"),e.$slots.header?(t.openBlock(),t.createElementBlock("div",p,[t.renderSlot(e.$slots,"header")])):t.createCommentVNode("",!0),t.createElementVNode("div",d,[t.renderSlot(e.$slots,"contents")])]))}}),b={$style:{"top-tabs":"top-tabs","top-tabs_header":"top-tabs_header","top-tabs_contents":"top-tabs_contents","top-tabs_tabInput":"top-tabs_tabInput","top-tabs_content":"top-tabs_content"}},i=a._export_sfc(r,[["__cssModules",b]]),_=["id","name","value","checked","disabled"],h=["for"],m=t.defineComponent({__name:"tab",props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(n){return(e,l)=>(t.openBlock(),t.createElementBlock(t.Fragment,null,[t.createElementVNode("input",{type:"radio",class:"top-tabs_tabInput top-unvisible",id:e.tabsId+e.name,name:e.tabsId,value:e.name,checked:e.active,disabled:e.disabled},null,8,_),t.createElementVNode("label",{class:t.normalizeClass({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":e.disabled}),for:e.tabsId+e.name},[t.renderSlot(e.$slots,"default")],10,h)],64))}}),u={$style:{"top-tabs_tabLabel":"top-tabs_tabLabel","top-tabs_tabInput":"top-tabs_tabInput","top-disabled":"top-disabled"}},y=a._export_sfc(m,[["__cssModules",u]]),f=["data-tabs-name"],k=t.defineComponent({__name:"content",props:{name:{}},setup(n){return(e,l)=>(t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass({"top-tabs_content":!0}),"data-tabs-name":e.name},[t.renderSlot(e.$slots,"default")],8,f))}}),$={$style:{"top-tabs_content":"top-tabs_content"}},I=a._export_sfc(k,[["__cssModules",$]]);o.Tabs=i,o.TabsContent=I,o.TabsTab=y,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
|
|
3
|
+
//# sourceMappingURL=tabs.amd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.amd.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/tabs/tabs.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { defineComponent as n, openBlock as e, createElementBlock as a, renderSlot as s, createCommentVNode as c, createElementVNode as o, normalizeClass as b, Fragment as _ } from "vue";
|
|
2
|
+
import { _ as l } from "../.chunks/forms-3575c189.es.js";
|
|
3
|
+
const r = {
|
|
4
|
+
class: /* @__PURE__ */ b({
|
|
5
|
+
"top-tabs": !0
|
|
6
|
+
})
|
|
7
|
+
}, i = {
|
|
8
|
+
key: 0,
|
|
9
|
+
class: "top-tabs_header"
|
|
10
|
+
}, u = { class: "top-tabs_contents" }, m = /* @__PURE__ */ n({
|
|
11
|
+
__name: "tabs",
|
|
12
|
+
props: {
|
|
13
|
+
id: {}
|
|
14
|
+
},
|
|
15
|
+
setup(p) {
|
|
16
|
+
return (t, d) => (e(), a("div", r, [
|
|
17
|
+
s(t.$slots, "buttons"),
|
|
18
|
+
t.$slots.header ? (e(), a("div", i, [
|
|
19
|
+
s(t.$slots, "header")
|
|
20
|
+
])) : c("", !0),
|
|
21
|
+
o("div", u, [
|
|
22
|
+
s(t.$slots, "contents")
|
|
23
|
+
])
|
|
24
|
+
]));
|
|
25
|
+
}
|
|
26
|
+
}), $ = {
|
|
27
|
+
"top-tabs": "top-tabs",
|
|
28
|
+
"top-tabs_header": "top-tabs_header",
|
|
29
|
+
"top-tabs_contents": "top-tabs_contents",
|
|
30
|
+
"top-tabs_tabInput": "top-tabs_tabInput",
|
|
31
|
+
"top-tabs_content": "top-tabs_content"
|
|
32
|
+
}, h = {
|
|
33
|
+
$style: $
|
|
34
|
+
}, N = /* @__PURE__ */ l(m, [["__cssModules", h]]), f = ["id", "name", "value", "checked", "disabled"], y = ["for"], v = /* @__PURE__ */ n({
|
|
35
|
+
__name: "tab",
|
|
36
|
+
props: {
|
|
37
|
+
tabsId: {},
|
|
38
|
+
name: {},
|
|
39
|
+
title: {},
|
|
40
|
+
active: { type: Boolean },
|
|
41
|
+
disabled: { type: Boolean }
|
|
42
|
+
},
|
|
43
|
+
setup(p) {
|
|
44
|
+
return (t, d) => (e(), a(_, null, [
|
|
45
|
+
o("input", {
|
|
46
|
+
type: "radio",
|
|
47
|
+
class: "top-tabs_tabInput top-unvisible",
|
|
48
|
+
id: t.tabsId + t.name,
|
|
49
|
+
name: t.tabsId,
|
|
50
|
+
value: t.name,
|
|
51
|
+
checked: t.active,
|
|
52
|
+
disabled: t.disabled
|
|
53
|
+
}, null, 8, f),
|
|
54
|
+
o("label", {
|
|
55
|
+
class: b({
|
|
56
|
+
"top-tabs_tabLabel": !0,
|
|
57
|
+
"top-forms-focusable": !0,
|
|
58
|
+
"top-disabled": t.disabled
|
|
59
|
+
}),
|
|
60
|
+
for: t.tabsId + t.name
|
|
61
|
+
}, [
|
|
62
|
+
s(t.$slots, "default")
|
|
63
|
+
], 10, y)
|
|
64
|
+
], 64));
|
|
65
|
+
}
|
|
66
|
+
}), I = {
|
|
67
|
+
"top-tabs_tabLabel": "top-tabs_tabLabel",
|
|
68
|
+
"top-tabs_tabInput": "top-tabs_tabInput",
|
|
69
|
+
"top-disabled": "top-disabled"
|
|
70
|
+
}, M = {
|
|
71
|
+
$style: I
|
|
72
|
+
}, V = /* @__PURE__ */ l(v, [["__cssModules", M]]), k = ["data-tabs-name"], B = /* @__PURE__ */ n({
|
|
73
|
+
__name: "content",
|
|
74
|
+
props: {
|
|
75
|
+
name: {}
|
|
76
|
+
},
|
|
77
|
+
setup(p) {
|
|
78
|
+
return (t, d) => (e(), a("div", {
|
|
79
|
+
class: b({
|
|
80
|
+
"top-tabs_content": !0
|
|
81
|
+
}),
|
|
82
|
+
"data-tabs-name": t.name
|
|
83
|
+
}, [
|
|
84
|
+
s(t.$slots, "default")
|
|
85
|
+
], 8, k));
|
|
86
|
+
}
|
|
87
|
+
}), C = {
|
|
88
|
+
"top-tabs_content": "top-tabs_content"
|
|
89
|
+
}, T = {
|
|
90
|
+
$style: C
|
|
91
|
+
}, g = /* @__PURE__ */ l(B, [["__cssModules", T]]);
|
|
92
|
+
export {
|
|
93
|
+
N as Tabs,
|
|
94
|
+
g as TabsContent,
|
|
95
|
+
V as TabsTab
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=tabs.js.map
|
package/tabs/tabs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/tabs.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.top-tabs{background:var(--content-background-color);border-radius:8px;border:1px solid var(--color-line-2-opacity);padding:0;display:flex;flex-wrap:wrap;align-items:stretch}.top-tabs_header{padding:6px;margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.top-tabs_contents{border-top:1px solid var(--color-line-2-opacity);width:100%;margin-top:-1px}.top-tabs_tabInput:checked:nth-child(1)~.top-tabs_contents>.top-tabs_content:nth-child(1),.top-tabs_tabInput:checked:nth-child(3)~.top-tabs_contents>.top-tabs_content:nth-child(2),.top-tabs_tabInput:checked:nth-child(5)~.top-tabs_contents>.top-tabs_content:nth-child(3),.top-tabs_tabInput:checked:nth-child(7)~.top-tabs_contents>.top-tabs_content:nth-child(4),.top-tabs_tabInput:checked:nth-child(9)~.top-tabs_contents>.top-tabs_content:nth-child(5),.top-tabs_tabInput:checked:nth-child(11)~.top-tabs_contents>.top-tabs_content:nth-child(6){display:block}.top-tabs_tabLabel{cursor:pointer;border-bottom:2px solid transparent;padding:14px 20px;position:relative;display:flex;align-items:center}.top-tabs_tabLabel:hover{border-color:var(--color-line-2-opacity)}.top-tabs_tabInput:checked+.top-tabs_tabLabel{border-color:var(--color-primary);color:var(--color-primary)}.top-tabs_tabLabel.top-disabled{color:var(--color-text-3)}.top-tabs_content{padding:14px;overflow:auto;display:none}
|
package/utils/device.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.amd.js","sources":["../../src/core/utils/device.ts"],"sourcesContent":["class Device {\n\n\tstatic isRetina () {\n\t\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\n\t}\n\n\t// определить, является ли устройство мобильным\n\tstatic isMobile (): boolean {\n\t\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\n\t}\n\n\t// определить, открыт ли сайт в приложении\n\tstatic isApp () {\n\t\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\n\t}\n\n\t// определить, является ли OS пользователя macOS\n\tstatic isMacOS () {\n\t\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\n\t}\n\n\t// определить, является ли текущий браузер пользователя Safari\n\tstatic isSafari () {\n\t\tconst isChrome = /Chrome|Android/.test(navigator.userAgent);\n\n\t\tlet isSafari = /Safari/.test(navigator.userAgent);\n\t\tif (isChrome && isSafari) {\n\t\t\tisSafari = false;\n\t\t}\n\n\t\treturn isSafari;\n\t};\n\n\t/**\n\t * Вернуть текст для обозначения клавиши Ctrl / Command в зависимости от OS\n\t * @returns {'Ctrl'|'⌘'}\n\t */\n\tstatic getCommandKeyLabel (): 'Ctrl' | '⌘' {\n\t\tif (this.isMacOS()) {\n\t\t\treturn '⌘';\n\t\t} else {\n\t\t\treturn 'Ctrl';\n\t\t}\n\t}\n\n}\n\nexport default Device;\n"],"names":["Device","isChrome","isSafari"],"mappings":"+BAAA,MAAMA,CAAO,CAEZ,OAAO,UAAY,CACV,MAAA,qBAAsB,QAAU,OAAO,iBAAmB,CACnE,CAGA,OAAO,UAAqB,CAC3B,MAAO,CAAC,CAAC,UAAU,UAAU,MAAM,0DAA0D,CAC9F,CAGA,OAAO,OAAS,CACf,OAAQ,UAAU,UAAU,QAAQ,cAAc,GAAK,EACxD,CAGA,OAAO,SAAW,CACjB,OAAO,UAAU,UAAU,QAAQ,UAAU,IAAM,EACpD,CAGA,OAAO,UAAY,CAClB,MAAMC,EAAW,iBAAiB,KAAK,UAAU,SAAS,EAE1D,IAAIC,EAAW,SAAS,KAAK,UAAU,SAAS,EAChD,OAAID,GAAYC,IACJA,EAAA,IAGLA,CACR,CAMA,OAAO,oBAAoC,CACtC,OAAA,KAAK,UACD,IAEA,MAET,CAED"}
|
|
1
|
+
{"version":3,"file":"device.amd.js","sources":["../../src/core/utils/device.ts"],"sourcesContent":["class Device {\r\n\r\n\tstatic isRetina () {\r\n\t\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\r\n\t}\r\n\r\n\t// определить, является ли устройство мобильным\r\n\tstatic isMobile (): boolean {\r\n\t\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\r\n\t}\r\n\r\n\t// определить, открыт ли сайт в приложении\r\n\tstatic isApp () {\r\n\t\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\r\n\t}\r\n\r\n\t// определить, является ли OS пользователя macOS\r\n\tstatic isMacOS () {\r\n\t\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\r\n\t}\r\n\r\n\t// определить, является ли текущий браузер пользователя Safari\r\n\tstatic isSafari () {\r\n\t\tconst isChrome = /Chrome|Android/.test(navigator.userAgent);\r\n\r\n\t\tlet isSafari = /Safari/.test(navigator.userAgent);\r\n\t\tif (isChrome && isSafari) {\r\n\t\t\tisSafari = false;\r\n\t\t}\r\n\r\n\t\treturn isSafari;\r\n\t};\r\n\r\n\t/**\r\n\t * Вернуть текст для обозначения клавиши Ctrl / Command в зависимости от OS\r\n\t * @returns {'Ctrl'|'⌘'}\r\n\t */\r\n\tstatic getCommandKeyLabel (): 'Ctrl' | '⌘' {\r\n\t\tif (this.isMacOS()) {\r\n\t\t\treturn '⌘';\r\n\t\t} else {\r\n\t\t\treturn 'Ctrl';\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default Device;\r\n"],"names":["Device","isChrome","isSafari"],"mappings":"+BAAA,MAAMA,CAAO,CAEZ,OAAO,UAAY,CACV,MAAA,qBAAsB,QAAU,OAAO,iBAAmB,CACnE,CAGA,OAAO,UAAqB,CAC3B,MAAO,CAAC,CAAC,UAAU,UAAU,MAAM,0DAA0D,CAC9F,CAGA,OAAO,OAAS,CACf,OAAQ,UAAU,UAAU,QAAQ,cAAc,GAAK,EACxD,CAGA,OAAO,SAAW,CACjB,OAAO,UAAU,UAAU,QAAQ,UAAU,IAAM,EACpD,CAGA,OAAO,UAAY,CAClB,MAAMC,EAAW,iBAAiB,KAAK,UAAU,SAAS,EAE1D,IAAIC,EAAW,SAAS,KAAK,UAAU,SAAS,EAChD,OAAID,GAAYC,IACJA,EAAA,IAGLA,CACR,CAMA,OAAO,oBAAoC,CACtC,OAAA,KAAK,UACD,IAEA,MAET,CAED"}
|
package/utils/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sources":["../../src/core/utils/device.ts"],"sourcesContent":["class Device {\n\n\tstatic isRetina () {\n\t\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\n\t}\n\n\t// определить, является ли устройство мобильным\n\tstatic isMobile (): boolean {\n\t\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\n\t}\n\n\t// определить, открыт ли сайт в приложении\n\tstatic isApp () {\n\t\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\n\t}\n\n\t// определить, является ли OS пользователя macOS\n\tstatic isMacOS () {\n\t\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\n\t}\n\n\t// определить, является ли текущий браузер пользователя Safari\n\tstatic isSafari () {\n\t\tconst isChrome = /Chrome|Android/.test(navigator.userAgent);\n\n\t\tlet isSafari = /Safari/.test(navigator.userAgent);\n\t\tif (isChrome && isSafari) {\n\t\t\tisSafari = false;\n\t\t}\n\n\t\treturn isSafari;\n\t};\n\n\t/**\n\t * Вернуть текст для обозначения клавиши Ctrl / Command в зависимости от OS\n\t * @returns {'Ctrl'|'⌘'}\n\t */\n\tstatic getCommandKeyLabel (): 'Ctrl' | '⌘' {\n\t\tif (this.isMacOS()) {\n\t\t\treturn '⌘';\n\t\t} else {\n\t\t\treturn 'Ctrl';\n\t\t}\n\t}\n\n}\n\nexport default Device;\n"],"names":["Device","isChrome","isSafari"],"mappings":"AAAA,MAAMA,EAAO;AAAA,EAEZ,OAAO,WAAY;AACV,WAAA,sBAAsB,UAAU,OAAO,mBAAmB;AAAA,EACnE;AAAA;AAAA,EAGA,OAAO,WAAqB;AAC3B,WAAO,CAAC,CAAC,UAAU,UAAU,MAAM,0DAA0D;AAAA,EAC9F;AAAA;AAAA,EAGA,OAAO,QAAS;AACf,WAAQ,UAAU,UAAU,QAAQ,cAAc,KAAK;AAAA,EACxD;AAAA;AAAA,EAGA,OAAO,UAAW;AACjB,WAAO,UAAU,UAAU,QAAQ,UAAU,MAAM;AAAA,EACpD;AAAA;AAAA,EAGA,OAAO,WAAY;AAClB,UAAMC,IAAW,iBAAiB,KAAK,UAAU,SAAS;AAE1D,QAAIC,IAAW,SAAS,KAAK,UAAU,SAAS;AAChD,WAAID,KAAYC,MACJA,IAAA,KAGLA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,qBAAoC;AACtC,WAAA,KAAK,YACD,MAEA;AAAA,EAET;AAED;"}
|
|
1
|
+
{"version":3,"file":"device.js","sources":["../../src/core/utils/device.ts"],"sourcesContent":["class Device {\r\n\r\n\tstatic isRetina () {\r\n\t\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\r\n\t}\r\n\r\n\t// определить, является ли устройство мобильным\r\n\tstatic isMobile (): boolean {\r\n\t\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\r\n\t}\r\n\r\n\t// определить, открыт ли сайт в приложении\r\n\tstatic isApp () {\r\n\t\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\r\n\t}\r\n\r\n\t// определить, является ли OS пользователя macOS\r\n\tstatic isMacOS () {\r\n\t\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\r\n\t}\r\n\r\n\t// определить, является ли текущий браузер пользователя Safari\r\n\tstatic isSafari () {\r\n\t\tconst isChrome = /Chrome|Android/.test(navigator.userAgent);\r\n\r\n\t\tlet isSafari = /Safari/.test(navigator.userAgent);\r\n\t\tif (isChrome && isSafari) {\r\n\t\t\tisSafari = false;\r\n\t\t}\r\n\r\n\t\treturn isSafari;\r\n\t};\r\n\r\n\t/**\r\n\t * Вернуть текст для обозначения клавиши Ctrl / Command в зависимости от OS\r\n\t * @returns {'Ctrl'|'⌘'}\r\n\t */\r\n\tstatic getCommandKeyLabel (): 'Ctrl' | '⌘' {\r\n\t\tif (this.isMacOS()) {\r\n\t\t\treturn '⌘';\r\n\t\t} else {\r\n\t\t\treturn 'Ctrl';\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default Device;\r\n"],"names":["Device","isChrome","isSafari"],"mappings":"AAAA,MAAMA,EAAO;AAAA,EAEZ,OAAO,WAAY;AACV,WAAA,sBAAsB,UAAU,OAAO,mBAAmB;AAAA,EACnE;AAAA;AAAA,EAGA,OAAO,WAAqB;AAC3B,WAAO,CAAC,CAAC,UAAU,UAAU,MAAM,0DAA0D;AAAA,EAC9F;AAAA;AAAA,EAGA,OAAO,QAAS;AACf,WAAQ,UAAU,UAAU,QAAQ,cAAc,KAAK;AAAA,EACxD;AAAA;AAAA,EAGA,OAAO,UAAW;AACjB,WAAO,UAAU,UAAU,QAAQ,UAAU,MAAM;AAAA,EACpD;AAAA;AAAA,EAGA,OAAO,WAAY;AAClB,UAAMC,IAAW,iBAAiB,KAAK,UAAU,SAAS;AAE1D,QAAIC,IAAW,SAAS,KAAK,UAAU,SAAS;AAChD,WAAID,KAAYC,MACJA,IAAA,KAGLA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,qBAAoC;AACtC,WAAA,KAAK,YACD,MAEA;AAAA,EAET;AAED;"}
|
package/utils/dom.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.amd.js","sources":["../../src/core/utils/dom.ts"],"sourcesContent":["/**\n * Функции для работы с работы с Document Object Model (DOM)\n */\n\n/**\n * Создать элемент\n * @param {string} tagName\n * @param {any} attrs - атрибуты\n * @param {Element[]} elsChildrens\n * @returns {Element} - созданный элемент\n */\nfunction genEl (tagName: string, attrs: any, ...elsChildrens: Element[]): Element {\n\tconst el: any = document.createElement(tagName);\n\n\tfor (const name in attrs) {\n\t\tif (name.indexOf('on') === 0) {\n\t\t\t// events\n\t\t\tel[name] = attrs[name];\n\t\t} else {\n\t\t\tel.setAttribute(name, attrs[name]);\n\t\t}\n\t}\n\n\telsChildrens.forEach((elChildren) => {\n\t\tif (typeof (elChildren) === 'string') {\n\t\t\tel.insertAdjacentHTML('beforeend', elChildren);\n\t\t} else {\n\t\t\tel.append(elChildren);\n\t\t}\n\t});\n\n\treturn el;\n}\n\n/**\n * Проверить видимость элемента\n * @param {?Element} el\n * @returns boolean - вернет true, если элемент считается видимым\n */\nfunction isVisible (el?: Element) {\n\tif (!el) {\n\t\treturn false;\n\t}\n\n\tconst boundingClientRect = el.getBoundingClientRect();\n\treturn !!(boundingClientRect.width || boundingClientRect.height);\n}\n\n/**\n * Получить координаты элемента относительно документа\n * @param {Element} el\n * @returns {{top: number, left: number}} - координаты элемента относительно документа\n */\nfunction offset (el: Element): { top: number, left: number } {\n\tconst boundingClientRect = el.getBoundingClientRect();\n\n\treturn {\n\t\ttop: boundingClientRect.top + window.scrollY,\n\t\tleft: boundingClientRect.left + window.scrollX,\n\t};\n}\n\n/**\n * Получить значение css свойства элемента\n * @param {Element} el\n * @param {string} property - имя свойства\n * @return {string} - значение css стиля\n */\nfunction css (el: Element, property: string): string {\n\treturn window.getComputedStyle(el).getPropertyValue(property);\n}\n\n/**\n * Обернуть элемент и вернуть только что созданный элемент\n * @param {Element} el - элемент, который требуется обернуть\n * @param {string} tagName - имя тега элемента, в который треубется обернуть элемент\n * @returns {Element}\n */\nfunction wrap (el: Element, tagName: string): Element {\n\tconst elWrapper = document.createElement(tagName);\n\tel.after(elWrapper);\n\n\telWrapper.append(el);\n\n\treturn elWrapper;\n}\n\n/**\n * Найти и вернуть первый видимый элемент\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element|null}\n */\nfunction querySelectorVisible (el: Element, selectors: string): Element | null {\n\treturn querySelectorAllArray(el, selectors).find(isVisible) || null;\n}\n\n/**\n * Найти и вернуть последний видимый элемент\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element|null}\n */\nfunction querySelectorVisibleLast (el: Element, selectors: string): Element | null {\n\treturn querySelectorAllArray(el, selectors).findLast(isVisible) || null;\n}\n\n/**\n * Найти видимые элементы\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element[]} - обратите внимание, возвращается не NodeList[], а Element[]\n */\nfunction querySelectorAllVisible (el: Element, selectors: string): Element[] {\n\treturn querySelectorAllArray(el, selectors).filter(isVisible);\n}\n\n/**\n * Найти элементы и вернуть в виде массива\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element[]}\n */\nfunction querySelectorAllArray (el: Element, selectors: string): Element[] {\n\tif (!el) {\n\t\treturn [];\n\t}\n\n\treturn [...el.querySelectorAll(selectors)];\n}\n\n/**\n * Хранилище данных элемента\n * @param {Element} el\n * @param {string} contextName - контекст, обычно используется имя компонента\n * @param {?object | null} contextData - установить объект с данными, предыдущие данные будут заменены, установите null для удаления данных\n * @returns {?object} - вернет объект контекста или undefined, если данные контекста не найдены\n */\nfunction storage (\n\tel?: Element & { topData?: any },\n\tcontextName: string = 'common', contextData: object | null | undefined = undefined,\n): object | undefined {\n\tif (!el) {\n\t\treturn;\n\t}\n\n\tif (!el.topData) {\n\t\tel.topData = {};\n\t}\n\n\tif (contextData) {\n\t\tel.topData[contextName] = contextData;\n\t}\n\n\tif (contextData === null) {\n\t\tdelete el.topData[contextName];\n\t}\n\n\treturn el.topData[contextName];\n}\n\n/**\n * Очистить хранилище элемента\n */\nfunction storageClear (el?: Element & { topData?: any }) {\n\tif (!el) {\n\t\treturn;\n\t}\n\n\tdelete el.topData;\n}\n\nexport default {\n\tgenEl,\n\tisVisible,\n\toffset,\n\tcss,\n\twrap,\n\tquerySelectorVisible,\n\tquerySelectorVisibleLast,\n\tquerySelectorAllVisible,\n\tquerySelectorAllArray,\n\tstorage,\n\tstorageClear,\n};\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"],"mappings":"+BAWA,SAASA,EAAOC,EAAiBC,KAAeC,EAAkC,CAC3E,MAAAC,EAAU,SAAS,cAAcH,CAAO,EAE9C,UAAWI,KAAQH,EACdG,EAAK,QAAQ,IAAI,IAAM,EAEvBD,EAAAC,CAAI,EAAIH,EAAMG,CAAI,EAErBD,EAAG,aAAaC,EAAMH,EAAMG,CAAI,CAAC,EAItB,OAAAF,EAAA,QAASG,GAAe,CAChC,OAAQA,GAAgB,SACxBF,EAAA,mBAAmB,YAAaE,CAAU,EAE7CF,EAAG,OAAOE,CAAU,CACrB,CACA,EAEMF,CACR,CAOA,SAASG,EAAWH,EAAc,CACjC,GAAI,CAACA,EACG,MAAA,GAGF,MAAAI,EAAqBJ,EAAG,wBAC9B,MAAO,CAAC,EAAEI,EAAmB,OAASA,EAAmB,OAC1D,CAOA,SAASC,EAAQL,EAA4C,CACtD,MAAAI,EAAqBJ,EAAG,wBAEvB,MAAA,CACN,IAAKI,EAAmB,IAAM,OAAO,QACrC,KAAMA,EAAmB,KAAO,OAAO,OAAA,CAEzC,CAQA,SAASE,EAAKN,EAAaO,EAA0B,CACpD,OAAO,OAAO,iBAAiBP,CAAE,EAAE,iBAAiBO,CAAQ,CAC7D,CAQA,SAASC,EAAMR,EAAaH,EAA0B,CAC/C,MAAAY,EAAY,SAAS,cAAcZ,CAAO,EAChD,OAAAG,EAAG,MAAMS,CAAS,EAElBA,EAAU,OAAOT,CAAE,EAEZS,CACR,CAQA,SAASC,EAAsBV,EAAaW,EAAmC,CAC9E,OAAOC,EAAsBZ,EAAIW,CAAS,EAAE,KAAKR,CAAS,GAAK,IAChE,CAQA,SAASU,EAA0Bb,EAAaW,EAAmC,CAClF,OAAOC,EAAsBZ,EAAIW,CAAS,EAAE,SAASR,CAAS,GAAK,IACpE,CAQA,SAASW,EAAyBd,EAAaW,EAA8B,CAC5E,OAAOC,EAAsBZ,EAAIW,CAAS,EAAE,OAAOR,CAAS,CAC7D,CAQA,SAASS,EAAuBZ,EAAaW,EAA8B,CAC1E,OAAKX,EAIE,CAAC,GAAGA,EAAG,iBAAiBW,CAAS,CAAC,EAHjC,EAIT,CASA,SAASI,EACRf,EACAgB,EAAsB,SAAUC,EAAyC,OACpD,CACrB,GAAKjB,EAID,OAACA,EAAG,UACPA,EAAG,QAAU,IAGViB,IACAjB,EAAA,QAAQgB,CAAW,EAAIC,GAGvBA,IAAgB,MACZ,OAAAjB,EAAG,QAAQgB,CAAW,EAGvBhB,EAAG,QAAQgB,CAAW,CAC9B,CAKA,SAASE,EAAclB,EAAkC,CACnDA,GAIL,OAAOA,EAAG,OACX,OAEe,CACd,MAAAJ,EACA,UAAAO,EACA,OAAAE,EACA,IAAAC,EACA,KAAAE,EACA,qBAAAE,EACA,yBAAAG,EACA,wBAAAC,EACA,sBAAAF,EACA,QAAAG,EACA,aAAAG,CACD"}
|
|
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":["genEl","tagName","attrs","elsChildrens","el","name","elChildren","isVisible","boundingClientRect","offset","css","property","wrap","elWrapper","querySelectorVisible","selectors","querySelectorAllArray","querySelectorVisibleLast","querySelectorAllVisible","storage","contextName","contextData","storageClear"],"mappings":"+BAWA,SAASA,EAAOC,EAAiBC,KAAeC,EAAkC,CAC3E,MAAAC,EAAU,SAAS,cAAcH,CAAO,EAE9C,UAAWI,KAAQH,EACdG,EAAK,QAAQ,IAAI,IAAM,EAEvBD,EAAAC,CAAI,EAAIH,EAAMG,CAAI,EAErBD,EAAG,aAAaC,EAAMH,EAAMG,CAAI,CAAC,EAItB,OAAAF,EAAA,QAASG,GAAe,CAChC,OAAQA,GAAgB,SACxBF,EAAA,mBAAmB,YAAaE,CAAU,EAE7CF,EAAG,OAAOE,CAAU,CACrB,CACA,EAEMF,CACR,CAOA,SAASG,EAAWH,EAAc,CACjC,GAAI,CAACA,EACG,MAAA,GAGF,MAAAI,EAAqBJ,EAAG,wBAC9B,MAAO,CAAC,EAAEI,EAAmB,OAASA,EAAmB,OAC1D,CAOA,SAASC,EAAQL,EAA4C,CACtD,MAAAI,EAAqBJ,EAAG,wBAEvB,MAAA,CACN,IAAKI,EAAmB,IAAM,OAAO,QACrC,KAAMA,EAAmB,KAAO,OAAO,OAAA,CAEzC,CAQA,SAASE,EAAKN,EAAaO,EAA0B,CACpD,OAAO,OAAO,iBAAiBP,CAAE,EAAE,iBAAiBO,CAAQ,CAC7D,CAQA,SAASC,EAAMR,EAAaH,EAA0B,CAC/C,MAAAY,EAAY,SAAS,cAAcZ,CAAO,EAChD,OAAAG,EAAG,MAAMS,CAAS,EAElBA,EAAU,OAAOT,CAAE,EAEZS,CACR,CAQA,SAASC,EAAsBV,EAAaW,EAAmC,CAC9E,OAAOC,EAAsBZ,EAAIW,CAAS,EAAE,KAAKR,CAAS,GAAK,IAChE,CAQA,SAASU,EAA0Bb,EAAaW,EAAmC,CAClF,OAAOC,EAAsBZ,EAAIW,CAAS,EAAE,SAASR,CAAS,GAAK,IACpE,CAQA,SAASW,EAAyBd,EAAaW,EAA8B,CAC5E,OAAOC,EAAsBZ,EAAIW,CAAS,EAAE,OAAOR,CAAS,CAC7D,CAQA,SAASS,EAAuBZ,EAAaW,EAA8B,CAC1E,OAAKX,EAIE,CAAC,GAAGA,EAAG,iBAAiBW,CAAS,CAAC,EAHjC,EAIT,CASA,SAASI,EACRf,EACAgB,EAAsB,SAAUC,EAAyC,OACpD,CACrB,GAAKjB,EAID,OAACA,EAAG,UACPA,EAAG,QAAU,IAGViB,IACAjB,EAAA,QAAQgB,CAAW,EAAIC,GAGvBA,IAAgB,MACZ,OAAAjB,EAAG,QAAQgB,CAAW,EAGvBhB,EAAG,QAAQgB,CAAW,CAC9B,CAKA,SAASE,EAAclB,EAAkC,CACnDA,GAIL,OAAOA,EAAG,OACX,OAEe,CACd,MAAAJ,EACA,UAAAO,EACA,OAAAE,EACA,IAAAC,EACA,KAAAE,EACA,qBAAAE,EACA,yBAAAG,EACA,wBAAAC,EACA,sBAAAF,EACA,QAAAG,EACA,aAAAG,CACD"}
|
package/utils/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sources":["../../src/core/utils/dom.ts"],"sourcesContent":["/**\n * Функции для работы с работы с Document Object Model (DOM)\n */\n\n/**\n * Создать элемент\n * @param {string} tagName\n * @param {any} attrs - атрибуты\n * @param {Element[]} elsChildrens\n * @returns {Element} - созданный элемент\n */\nfunction genEl (tagName: string, attrs: any, ...elsChildrens: Element[]): Element {\n\tconst el: any = document.createElement(tagName);\n\n\tfor (const name in attrs) {\n\t\tif (name.indexOf('on') === 0) {\n\t\t\t// events\n\t\t\tel[name] = attrs[name];\n\t\t} else {\n\t\t\tel.setAttribute(name, attrs[name]);\n\t\t}\n\t}\n\n\telsChildrens.forEach((elChildren) => {\n\t\tif (typeof (elChildren) === 'string') {\n\t\t\tel.insertAdjacentHTML('beforeend', elChildren);\n\t\t} else {\n\t\t\tel.append(elChildren);\n\t\t}\n\t});\n\n\treturn el;\n}\n\n/**\n * Проверить видимость элемента\n * @param {?Element} el\n * @returns boolean - вернет true, если элемент считается видимым\n */\nfunction isVisible (el?: Element) {\n\tif (!el) {\n\t\treturn false;\n\t}\n\n\tconst boundingClientRect = el.getBoundingClientRect();\n\treturn !!(boundingClientRect.width || boundingClientRect.height);\n}\n\n/**\n * Получить координаты элемента относительно документа\n * @param {Element} el\n * @returns {{top: number, left: number}} - координаты элемента относительно документа\n */\nfunction offset (el: Element): { top: number, left: number } {\n\tconst boundingClientRect = el.getBoundingClientRect();\n\n\treturn {\n\t\ttop: boundingClientRect.top + window.scrollY,\n\t\tleft: boundingClientRect.left + window.scrollX,\n\t};\n}\n\n/**\n * Получить значение css свойства элемента\n * @param {Element} el\n * @param {string} property - имя свойства\n * @return {string} - значение css стиля\n */\nfunction css (el: Element, property: string): string {\n\treturn window.getComputedStyle(el).getPropertyValue(property);\n}\n\n/**\n * Обернуть элемент и вернуть только что созданный элемент\n * @param {Element} el - элемент, который требуется обернуть\n * @param {string} tagName - имя тега элемента, в который треубется обернуть элемент\n * @returns {Element}\n */\nfunction wrap (el: Element, tagName: string): Element {\n\tconst elWrapper = document.createElement(tagName);\n\tel.after(elWrapper);\n\n\telWrapper.append(el);\n\n\treturn elWrapper;\n}\n\n/**\n * Найти и вернуть первый видимый элемент\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element|null}\n */\nfunction querySelectorVisible (el: Element, selectors: string): Element | null {\n\treturn querySelectorAllArray(el, selectors).find(isVisible) || null;\n}\n\n/**\n * Найти и вернуть последний видимый элемент\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element|null}\n */\nfunction querySelectorVisibleLast (el: Element, selectors: string): Element | null {\n\treturn querySelectorAllArray(el, selectors).findLast(isVisible) || null;\n}\n\n/**\n * Найти видимые элементы\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element[]} - обратите внимание, возвращается не NodeList[], а Element[]\n */\nfunction querySelectorAllVisible (el: Element, selectors: string): Element[] {\n\treturn querySelectorAllArray(el, selectors).filter(isVisible);\n}\n\n/**\n * Найти элементы и вернуть в виде массива\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element[]}\n */\nfunction querySelectorAllArray (el: Element, selectors: string): Element[] {\n\tif (!el) {\n\t\treturn [];\n\t}\n\n\treturn [...el.querySelectorAll(selectors)];\n}\n\n/**\n * Хранилище данных элемента\n * @param {Element} el\n * @param {string} contextName - контекст, обычно используется имя компонента\n * @param {?object | null} contextData - установить объект с данными, предыдущие данные будут заменены, установите null для удаления данных\n * @returns {?object} - вернет объект контекста или undefined, если данные контекста не найдены\n */\nfunction storage (\n\tel?: Element & { topData?: any },\n\tcontextName: string = 'common', contextData: object | null | undefined = undefined,\n): object | undefined {\n\tif (!el) {\n\t\treturn;\n\t}\n\n\tif (!el.topData) {\n\t\tel.topData = {};\n\t}\n\n\tif (contextData) {\n\t\tel.topData[contextName] = contextData;\n\t}\n\n\tif (contextData === null) {\n\t\tdelete el.topData[contextName];\n\t}\n\n\treturn el.topData[contextName];\n}\n\n/**\n * Очистить хранилище элемента\n */\nfunction storageClear (el?: Element & { topData?: any }) {\n\tif (!el) {\n\t\treturn;\n\t}\n\n\tdelete el.topData;\n}\n\nexport default {\n\tgenEl,\n\tisVisible,\n\toffset,\n\tcss,\n\twrap,\n\tquerySelectorVisible,\n\tquerySelectorVisibleLast,\n\tquerySelectorAllVisible,\n\tquerySelectorAllArray,\n\tstorage,\n\tstorageClear,\n};\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
|
+
{"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,2 +0,0 @@
|
|
|
1
|
-
var g=Object.defineProperty;var v=(s,t,n)=>t in s?g(s,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[t]=n;var a=(s,t,n)=>(v(s,typeof t!="symbol"?t+"":t,n),n);define(["exports","vue","../utils/device.amd"],function(s,t,n){"use strict";let m;const c=new Map,d={width:window.innerWidth,height:window.innerHeight};function f(o){c.set(o,o)}function b(o){c.delete(o)}function z(o){clearTimeout(m),m=setTimeout(function(){o.topEvent={widthDiff:d.width-window.innerWidth,hightDiff:d.height-window.innerHeight},d.width=window.innerWidth,d.height=window.innerHeight,c.forEach(e=>e(o))},100)}window.addEventListener("resize",z);const M={addOnReize:f,removeOnResize:b},u={widthForMobile:900},R={isMobile:!1,isMobileUA:!1,isRetina:!1,isApp:!1,isLandscape:!0,isPortrait:!1,size:0},h=window,i=class i{static appendStyle(e,w){let l="all";w==="m"&&(l="(max-width: "+this.options.widthForMobile+"px)"),w==="pc"&&(l="(min-width: "+this.options.widthForMobile+"px)");const p=document.createElement("style");p.innerHTML=e,p.media=l,document.head.append(p)}static install(e,w){i.defineOptions(w),e.provide("top-core",i)}static defineOptions(e){e.widthForMobile&&(this.options.widthForMobile=e.widthForMobile),i.setState()}static setState(){i.matchMediaIsMobile=window.matchMedia(`(max-width: ${i.options.widthForMobile}px)`),i.state.isMobileUA=n.isMobile(),i.state.isRetina=n.isRetina(),i.state.isApp=n.isApp(),i.setStateByWindowSize(),M.addOnReize(i.onResize),i.onResize(),i.saveToCookie()}static onResize(){i.setStateByWindowSize(),document.documentElement.style.setProperty("--100vh",window.innerHeight+"px")}static setStateByWindowSize(){var e;i.state.isMobile=!!((e=i.matchMediaIsMobile)!=null&&e.matches),i.state.isLandscape=window.innerWidth>window.innerHeight,i.state.isPortrait=!i.state.isLandscape,i.state.size=window.innerWidth>window.innerHeight?window.innerWidth:window.innerHeight,i.saveToCookie()}static saveToCookie(){const e=[1,window.innerWidth,window.innerHeight,window.devicePixelRatio,Number(i.state.isMobile),Number(i.state.isRetina)];document.cookie="device="+e.join(",")+"; path=/;"}};a(i,"page",(h==null?void 0:h.page)||{}),a(i,"options",u),a(i,"state",t.reactive({...R})),a(i,"matchMediaIsMobile");let r=i;s.Core=r,s.Events=M});
|
|
2
|
-
//# sourceMappingURL=core-97b070be.amd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-97b070be.amd.js","sources":["../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/core/core.ts"],"sourcesContent":["const onResizeDelay = 100;\n\nlet onResizeTimer: NodeJS.Timeout;\n\ntype TopEvent = Event & { topEvent: { widthDiff: number, hightDiff: number } }\n\n/**\n * Установленные обрабочики на событие изменения размеров окна\n */\nconst onResizeListeners: Map<(ev: TopEvent) => any, (ev: TopEvent) => any> = new Map();\n\n// зафиксированное состояние размеров окна\nconst windowSize = {\n\twidth: window.innerWidth,\n\theight: window.innerHeight,\n};\n\n/**\n * Добавить обработчик на событие изменения размеров экрана\n * вызов таких обработчиков будет опмизирован и объединен в одно событие\n */\nfunction addOnReize (listener: (this: Element, ev: TopEvent) => any) {\n\tonResizeListeners.set(listener, listener);\n}\n\n/**\n * Удаление обработчика на событие изменений размеров экрана\n */\nfunction removeOnResize (listener: (this: Element, ev: TopEvent) => any) {\n\tonResizeListeners.delete(listener);\n}\n\nfunction onResize (e: any) {\n\tclearTimeout(onResizeTimer);\n\n\tonResizeTimer = setTimeout(function () {\n\t\te.topEvent = {\n\t\t\twidthDiff: windowSize.width - window.innerWidth,\n\t\t\thightDiff: windowSize.height - window.innerHeight,\n\t\t};\n\n\t\twindowSize.width = window.innerWidth;\n\t\twindowSize.height = window.innerHeight;\n\n\t\tonResizeListeners.forEach((callback) => callback(e));\n\t}, onResizeDelay);\n}\n\nwindow.addEventListener('resize', onResize);\n\nexport default {\n\taddOnReize,\n\tremoveOnResize,\n};\n","/**\n * Конфигурация UI\n * Можно переопределить при подклчюении UI во Vue приложение через app.use(Core, options)\n */\nconst options = {\n\twidthForMobile: 900,\n};\n\nexport default options;","/**\n * State UI для взаимодейсвтиями с приложениями Vue\n */\nconst state = {\n\t/**\n\t * Device by size\n\t * @see widthForMobile\n\t */\n\tisMobile: false,\n\n\t/**\n\t * Device by user agent\n\t */\n\tisMobileUA: false,\n\n\t/**\n\t * true, если плотность пикселей экрана больше 1\n\t */\n\tisRetina: false,\n\n\t/**\n\t * true, елси это приложение\n\t */\n\tisApp: false,\n\n\t/**\n\t * true при горизонтальном расположении устройства\n\t */\n\tisLandscape: true,\n\n\t/**\n\t * true при вертикальном расположении устройства\n\t */\n\tisPortrait: false,\n\tsize: 0,\n};\n\nexport default state;","import { reactive } from 'vue';\nimport Device from '@/core/utils/device';\nimport DOM from '@/core/utils/dom';\nimport Events from '@/core/core/events';\nimport options from '@/core/core/options';\nimport state from '@/core/core/state';\n\nconst _window: any = window;\n\nclass Core {\n\n\tstatic page = _window?.page || {};\n\n\tstatic options = options;\n\n\tstatic state = reactive({ ...state });\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\t/**\n\t * Добавить на страницу стили, используется для загрузки стилей из js\n\t *\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\n\t */\n\tstatic appendStyle (style: string, type: '' | 'm' | 'pc'): void {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tconst elStyle = document.createElement('style');\n\t\telStyle.innerHTML = style;\n\t\telStyle.media = media;\n\n\t\tdocument.head.append(elStyle);\n\t}\n\n\t/**\n\t * Установить как плагин в прилоежнии Vue\n\t * Core.state является общим для всех приложений Vue на странице\n\t * Core.options является общим для всех приложений Vue на странице\n\t * @param app - Vue App\n\t * @param {typeof options} options - параметры UI\n\t */\n\tstatic install (app: any, options: typeof this.options) {\n\t\tCore.defineOptions(options);\n\n\t\tapp.provide('top-core', Core);\n\t}\n\n\t/**\n\t * Установить конфигурацию UI\n\t * @param {typeof options} options\n\t */\n\tstatic defineOptions (options: typeof this.options) {\n\t\tif (options.widthForMobile) {\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\n\t\t}\n\n\t\tCore.setState();\n\t}\n\n\tstatic setState () {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = Device.isMobile();\n\t\tCore.state.isRetina = Device.isRetina();\n\t\tCore.state.isApp = Device.isApp();\n\n\t\tCore.setStateByWindowSize();\n\n\t\t// пересчет значений, зависящих от рамзеров окна\n\t\tEvents.addOnReize(Core.onResize);\n\n\t\tCore.onResize();\n\n\t\tCore.saveToCookie();\n\t}\n\n\tstatic onResize () {\n\t\tCore.setStateByWindowSize();\n\n\t\t// честный vh\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\n\t}\n\n\tstatic setStateByWindowSize () {\n\t\tCore.state.isMobile = !!Core.matchMediaIsMobile?.matches;\n\t\tCore.state.isLandscape = (window.innerWidth > window.innerHeight);\n\t\tCore.state.isPortrait = !Core.state.isLandscape;\n\t\tCore.state.size = (window.innerWidth > window.innerHeight) ? window.innerWidth : window.innerHeight;\n\n\t\tCore.saveToCookie();\n\t}\n\n\t/**\n\t * Сохранить информацию об устройстве в cookie\n\t */\n\tstatic saveToCookie () {\n\t\tconst device = [\n\t\t\t1,\n\t\t\twindow.innerWidth,\n\t\t\twindow.innerHeight,\n\t\t\twindow.devicePixelRatio,\n\t\t\tNumber(Core.state.isMobile),\n\t\t\tNumber(Core.state.isRetina),\n\t\t];\n\n\t\tdocument.cookie = 'device=' + device.join(',') + '; path=/;';\n\t}\n\n}\n\nexport default Core;"],"names":["onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","options","state","_window","_Core","style","type","media","elStyle","app","Device","_a","device","__publicField","reactive","Core"],"mappings":"oPAEA,IAAIA,EAOJ,MAAMC,MAA2E,IAG3EC,EAAa,CAClB,MAAO,OAAO,WACd,OAAQ,OAAO,WAChB,EAMA,SAASC,EAAYC,EAAgD,CAClDH,EAAA,IAAIG,EAAUA,CAAQ,CACzC,CAKA,SAASC,EAAgBD,EAAgD,CACxEH,EAAkB,OAAOG,CAAQ,CAClC,CAEA,SAASE,EAAUC,EAAQ,CAC1B,aAAaP,CAAa,EAE1BA,EAAgB,WAAW,UAAY,CACtCO,EAAE,SAAW,CACZ,UAAWL,EAAW,MAAQ,OAAO,WACrC,UAAWA,EAAW,OAAS,OAAO,WAAA,EAGvCA,EAAW,MAAQ,OAAO,WAC1BA,EAAW,OAAS,OAAO,YAE3BD,EAAkB,QAASO,GAAaA,EAASD,CAAC,CAAC,GACjD,GAAa,CACjB,CAEA,OAAO,iBAAiB,SAAUD,CAAQ,EAE3B,MAAAG,EAAA,CACd,WAAAN,EACA,eAAAE,CACD,ECjDMK,EAAU,CACf,eAAgB,GACjB,ECHMC,EAAQ,CAKb,SAAU,GAKV,WAAY,GAKZ,SAAU,GAKV,MAAO,GAKP,YAAa,GAKb,WAAY,GACZ,KAAM,CACP,EC5BMC,EAAe,OAEfC,EAAN,MAAMA,CAAK,CAiBV,OAAO,YAAaC,EAAeC,EAA6B,CAC/D,IAAIC,EAAQ,MAERD,IAAS,MACJC,EAAA,eAAiB,KAAK,QAAQ,eAAiB,OAGpDD,IAAS,OACJC,EAAA,eAAiB,KAAK,QAAQ,eAAiB,OAGlD,MAAAC,EAAU,SAAS,cAAc,OAAO,EAC9CA,EAAQ,UAAYH,EACpBG,EAAQ,MAAQD,EAEP,SAAA,KAAK,OAAOC,CAAO,CAC7B,CASA,OAAO,QAASC,EAAUR,EAA8B,CACvDG,EAAK,cAAcH,CAAO,EAEtBQ,EAAA,QAAQ,WAAYL,CAAI,CAC7B,CAMA,OAAO,cAAeH,EAA8B,CAC/CA,EAAQ,iBACN,KAAA,QAAQ,eAAiBA,EAAQ,gBAGvCG,EAAK,SAAS,CACf,CAEA,OAAO,UAAY,CAClBA,EAAK,mBAAqB,OAAO,WAAW,eAAeA,EAAK,QAAQ,cAAc,KAAK,EAEtFA,EAAA,MAAM,WAAaM,EAAO,SAAS,EACnCN,EAAA,MAAM,SAAWM,EAAO,SAAS,EACjCN,EAAA,MAAM,MAAQM,EAAO,MAAM,EAEhCN,EAAK,qBAAqB,EAGnBJ,EAAA,WAAWI,EAAK,QAAQ,EAE/BA,EAAK,SAAS,EAEdA,EAAK,aAAa,CACnB,CAEA,OAAO,UAAY,CAClBA,EAAK,qBAAqB,EAG1B,SAAS,gBAAgB,MAAM,YAAY,UAAW,OAAO,YAAc,IAAI,CAChF,CAEA,OAAO,sBAAwB,OAC9BA,EAAK,MAAM,SAAW,CAAC,GAACO,EAAAP,EAAK,qBAAL,MAAAO,EAAyB,SACjDP,EAAK,MAAM,YAAe,OAAO,WAAa,OAAO,YACrDA,EAAK,MAAM,WAAa,CAACA,EAAK,MAAM,YAC/BA,EAAA,MAAM,KAAQ,OAAO,WAAa,OAAO,YAAe,OAAO,WAAa,OAAO,YAExFA,EAAK,aAAa,CACnB,CAKA,OAAO,cAAgB,CACtB,MAAMQ,EAAS,CACd,EACA,OAAO,WACP,OAAO,YACP,OAAO,iBACP,OAAOR,EAAK,MAAM,QAAQ,EAC1B,OAAOA,EAAK,MAAM,QAAQ,CAAA,EAG3B,SAAS,OAAS,UAAYQ,EAAO,KAAK,GAAG,EAAI,WAClD,CAED,EA3GCC,EAFKT,EAEE,QAAOD,GAAA,YAAAA,EAAS,OAAQ,IAE/BU,EAJKT,EAIE,UAAUH,GAEjBY,EANKT,EAME,QAAQU,EAAA,SAAS,CAAE,GAAGZ,CAAO,CAAA,GAEpCW,EARKT,EAQE,sBARR,IAAMW,EAANX"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-c3afa109.es.js","sources":["../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/core/core.ts"],"sourcesContent":["const onResizeDelay = 100;\n\nlet onResizeTimer: NodeJS.Timeout;\n\ntype TopEvent = Event & { topEvent: { widthDiff: number, hightDiff: number } }\n\n/**\n * Установленные обрабочики на событие изменения размеров окна\n */\nconst onResizeListeners: Map<(ev: TopEvent) => any, (ev: TopEvent) => any> = new Map();\n\n// зафиксированное состояние размеров окна\nconst windowSize = {\n\twidth: window.innerWidth,\n\theight: window.innerHeight,\n};\n\n/**\n * Добавить обработчик на событие изменения размеров экрана\n * вызов таких обработчиков будет опмизирован и объединен в одно событие\n */\nfunction addOnReize (listener: (this: Element, ev: TopEvent) => any) {\n\tonResizeListeners.set(listener, listener);\n}\n\n/**\n * Удаление обработчика на событие изменений размеров экрана\n */\nfunction removeOnResize (listener: (this: Element, ev: TopEvent) => any) {\n\tonResizeListeners.delete(listener);\n}\n\nfunction onResize (e: any) {\n\tclearTimeout(onResizeTimer);\n\n\tonResizeTimer = setTimeout(function () {\n\t\te.topEvent = {\n\t\t\twidthDiff: windowSize.width - window.innerWidth,\n\t\t\thightDiff: windowSize.height - window.innerHeight,\n\t\t};\n\n\t\twindowSize.width = window.innerWidth;\n\t\twindowSize.height = window.innerHeight;\n\n\t\tonResizeListeners.forEach((callback) => callback(e));\n\t}, onResizeDelay);\n}\n\nwindow.addEventListener('resize', onResize);\n\nexport default {\n\taddOnReize,\n\tremoveOnResize,\n};\n","/**\n * Конфигурация UI\n * Можно переопределить при подклчюении UI во Vue приложение через app.use(Core, options)\n */\nconst options = {\n\twidthForMobile: 900,\n};\n\nexport default options;","/**\n * State UI для взаимодейсвтиями с приложениями Vue\n */\nconst state = {\n\t/**\n\t * Device by size\n\t * @see widthForMobile\n\t */\n\tisMobile: false,\n\n\t/**\n\t * Device by user agent\n\t */\n\tisMobileUA: false,\n\n\t/**\n\t * true, если плотность пикселей экрана больше 1\n\t */\n\tisRetina: false,\n\n\t/**\n\t * true, елси это приложение\n\t */\n\tisApp: false,\n\n\t/**\n\t * true при горизонтальном расположении устройства\n\t */\n\tisLandscape: true,\n\n\t/**\n\t * true при вертикальном расположении устройства\n\t */\n\tisPortrait: false,\n\tsize: 0,\n};\n\nexport default state;","import { reactive } from 'vue';\nimport Device from '@/core/utils/device';\nimport DOM from '@/core/utils/dom';\nimport Events from '@/core/core/events';\nimport options from '@/core/core/options';\nimport state from '@/core/core/state';\n\nconst _window: any = window;\n\nclass Core {\n\n\tstatic page = _window?.page || {};\n\n\tstatic options = options;\n\n\tstatic state = reactive({ ...state });\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\t/**\n\t * Добавить на страницу стили, используется для загрузки стилей из js\n\t *\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\n\t */\n\tstatic appendStyle (style: string, type: '' | 'm' | 'pc'): void {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tconst elStyle = document.createElement('style');\n\t\telStyle.innerHTML = style;\n\t\telStyle.media = media;\n\n\t\tdocument.head.append(elStyle);\n\t}\n\n\t/**\n\t * Установить как плагин в прилоежнии Vue\n\t * Core.state является общим для всех приложений Vue на странице\n\t * Core.options является общим для всех приложений Vue на странице\n\t * @param app - Vue App\n\t * @param {typeof options} options - параметры UI\n\t */\n\tstatic install (app: any, options: typeof this.options) {\n\t\tCore.defineOptions(options);\n\n\t\tapp.provide('top-core', Core);\n\t}\n\n\t/**\n\t * Установить конфигурацию UI\n\t * @param {typeof options} options\n\t */\n\tstatic defineOptions (options: typeof this.options) {\n\t\tif (options.widthForMobile) {\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\n\t\t}\n\n\t\tCore.setState();\n\t}\n\n\tstatic setState () {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = Device.isMobile();\n\t\tCore.state.isRetina = Device.isRetina();\n\t\tCore.state.isApp = Device.isApp();\n\n\t\tCore.setStateByWindowSize();\n\n\t\t// пересчет значений, зависящих от рамзеров окна\n\t\tEvents.addOnReize(Core.onResize);\n\n\t\tCore.onResize();\n\n\t\tCore.saveToCookie();\n\t}\n\n\tstatic onResize () {\n\t\tCore.setStateByWindowSize();\n\n\t\t// честный vh\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\n\t}\n\n\tstatic setStateByWindowSize () {\n\t\tCore.state.isMobile = !!Core.matchMediaIsMobile?.matches;\n\t\tCore.state.isLandscape = (window.innerWidth > window.innerHeight);\n\t\tCore.state.isPortrait = !Core.state.isLandscape;\n\t\tCore.state.size = (window.innerWidth > window.innerHeight) ? window.innerWidth : window.innerHeight;\n\n\t\tCore.saveToCookie();\n\t}\n\n\t/**\n\t * Сохранить информацию об устройстве в cookie\n\t */\n\tstatic saveToCookie () {\n\t\tconst device = [\n\t\t\t1,\n\t\t\twindow.innerWidth,\n\t\t\twindow.innerHeight,\n\t\t\twindow.devicePixelRatio,\n\t\t\tNumber(Core.state.isMobile),\n\t\t\tNumber(Core.state.isRetina),\n\t\t];\n\n\t\tdocument.cookie = 'device=' + device.join(',') + '; path=/;';\n\t}\n\n}\n\nexport default Core;"],"names":["onResizeDelay","onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","options","state","_window","_Core","style","type","media","elStyle","app","Device","_a","device","__publicField","reactive","Core"],"mappings":"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"}
|