@topvisor/ui 1.0.18 → 1.0.19
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-EJRX31J1.es.js → datepicker-B8O5mg_G.es.js} +2 -2
- package/.chunks/{datepicker-EJRX31J1.es.js.map → datepicker-B8O5mg_G.es.js.map} +1 -1
- package/.chunks/{datepicker-DKvr3NYw.amd.js → datepicker-CFiizYlZ.amd.js} +2 -2
- package/.chunks/{datepicker-DKvr3NYw.amd.js.map → datepicker-CFiizYlZ.amd.js.map} +1 -1
- package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-B55gllXV.amd.js +2 -0
- package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-B55gllXV.amd.js.map +1 -0
- package/.chunks/{utils-DXI6F7F9.es.js → dialogs.vue_vue_type_script_setup_true_lang-BkBYW0yR.es.js} +75 -147
- package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-BkBYW0yR.es.js.map +1 -0
- package/.chunks/forms-BWc2kMFD.amd.js +3 -0
- package/.chunks/forms-BWc2kMFD.amd.js.map +1 -0
- package/.chunks/forms-DW_XLzg8.es.js +2018 -0
- package/.chunks/forms-DW_XLzg8.es.js.map +1 -0
- package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-CnEbgJbu.amd.js → listItem.vue_vue_type_script_setup_true_lang-naMiJruI.amd.js} +2 -2
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-naMiJruI.amd.js.map +1 -0
- package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-3UaZvDrd.es.js → listItem.vue_vue_type_script_setup_true_lang-saYIC17M.es.js} +10 -10
- package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-3UaZvDrd.es.js.map → listItem.vue_vue_type_script_setup_true_lang-saYIC17M.es.js.map} +1 -1
- package/.chunks/{menu.vue_vue_type_style_index_0_lang-DcFQyQgs.amd.js → menu.vue_vue_type_style_index_0_lang-06YUloqb.amd.js} +2 -2
- package/.chunks/{menu.vue_vue_type_style_index_0_lang-DcFQyQgs.amd.js.map → menu.vue_vue_type_style_index_0_lang-06YUloqb.amd.js.map} +1 -1
- package/.chunks/{menu.vue_vue_type_style_index_0_lang-C4q81rOQ.es.js → menu.vue_vue_type_style_index_0_lang-CcspstQc.es.js} +24 -24
- package/.chunks/{menu.vue_vue_type_style_index_0_lang-C4q81rOQ.es.js.map → menu.vue_vue_type_style_index_0_lang-CcspstQc.es.js.map} +1 -1
- package/.chunks/{notice-CtXmQ8xM.es.js → notice-BQyuy4nF.es.js} +2 -2
- package/.chunks/{notice-CtXmQ8xM.es.js.map → notice-BQyuy4nF.es.js.map} +1 -1
- package/.chunks/{notice-CYeec0mu.amd.js → notice-zADfJ5TR.amd.js} +2 -2
- package/.chunks/{notice-CYeec0mu.amd.js.map → notice-zADfJ5TR.amd.js.map} +1 -1
- package/.chunks/{popup-38TbXxcV.amd.js → popup-CPS-7fSX.amd.js} +2 -2
- package/.chunks/popup-CPS-7fSX.amd.js.map +1 -0
- package/.chunks/{popup-BzCXSDdA.es.js → popup-DsVptZvL.es.js} +6 -7
- package/.chunks/popup-DsVptZvL.es.js.map +1 -0
- package/.chunks/punycode.es6-C2yitnNb.amd.js.map +1 -1
- package/.chunks/punycode.es6-CNI-zL6U.es.js.map +1 -1
- package/.chunks/store-CX_6ZXhO.es.js.map +1 -1
- package/.chunks/store-esTid5oI.amd.js.map +1 -1
- package/.chunks/utils-B75aamxF.amd.js +2 -0
- package/.chunks/utils-B75aamxF.amd.js.map +1 -0
- package/.chunks/utils-DIP-BdDy.es.js +225 -0
- package/.chunks/utils-DIP-BdDy.es.js.map +1 -0
- package/.chunks/utils-DfYj3r9i.amd.js +2 -0
- package/.chunks/utils-DfYj3r9i.amd.js.map +1 -0
- package/.chunks/utils-h5v4GPgp.es.js +79 -0
- package/.chunks/utils-h5v4GPgp.es.js.map +1 -0
- package/assets/charts.css +1 -1
- package/assets/core.css +1 -1
- package/assets/forms.css +1 -1
- package/assets/formsExt.css +1 -1
- package/assets/layout.css +1 -1
- package/assets/notice.css +1 -1
- package/charts/charts.amd.js +1 -1
- package/charts/charts.amd.js.map +1 -1
- package/charts/charts.js +1 -1
- package/components/charts/miniChart/miniChart.vue.d.ts +5 -5
- package/components/charts/miniCharts/miniCharts.vue.d.ts +9 -6
- package/components/core/notice/item/item.vue.d.ts +1 -1
- package/components/dialog/dialog/dialog.vue.d.ts +4 -3
- package/components/dialog/dialog/dialogs/dialogs.vue.d.ts +1 -1
- package/components/dialog/dialog/page/page.vue.d.ts +2 -1
- package/components/dialog/dialog/page/types.d.ts +7 -0
- package/components/forms/avatar/avatar.vue.d.ts +1 -1
- package/components/forms/button/button.vue.d.ts +2 -1
- package/components/forms/checkbox/checkbox.vue.d.ts +7 -6
- package/components/forms/controlLabel/controlLabel.vue.d.ts +3 -2
- package/components/forms/hint/hint.vue.d.ts +1 -1
- package/components/forms/input/input.vue.d.ts +2 -1
- package/components/forms/inputDate/inputDate.vue.d.ts +3 -1
- package/components/forms/inputRange/inputRange.vue.d.ts +3 -2
- package/components/forms/loadbar/loadbar.vue.d.ts +1 -1
- package/components/forms/radio/radio.vue.d.ts +3 -2
- package/components/forms/select/select.vue.d.ts +5 -5
- package/components/forms/switcher/switcher.vue.d.ts +3 -2
- package/components/formsExt/editArea/editArea.vue.d.ts +1 -1
- package/components/formsExt/editInput/editInput.vue.d.ts +1 -1
- package/components/formsExt/formsExt.d.ts +2 -0
- package/components/formsExt/info/info.vue.d.ts +20 -0
- package/components/formsExt/info/types.d.ts +21 -0
- package/components/formsExt/menu/menu.vue.d.ts +7 -5
- package/components/formsExt/radioGroup/radioGroup.vue.d.ts +7 -5
- package/components/formsExt/selector2/itemMulti.vue.d.ts +1 -1
- package/components/formsExt/selector2/selector2.vue.d.ts +98 -8
- package/components/layout/islandRows/islandRows.vue.d.ts +3 -2
- package/components/layout/islandRows/islandRowsRow/islandRowsRow.vue.d.ts +3 -2
- package/components/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue.d.ts +3 -2
- package/components/layout/rows/rows.vue.d.ts +3 -2
- package/components/popup/alert/alert.vue.d.ts +2 -1
- package/components/popup/confirm/confirm.vue.d.ts +2 -1
- package/components/popup/lib/popup.d.ts +2 -3
- package/components/popup/lib/worker.d.ts +7 -7
- package/components/popup/popup/listItem.vue.d.ts +2 -1
- package/components/popup/popup/opener.vue.d.ts +2 -1
- package/components/popup/popup/popup.vue.d.ts +2 -1
- package/components/popup/popup/widgetInput.vue.d.ts +4 -4
- package/components/popup/prompt/prompt.vue.d.ts +2 -1
- package/components/project/selectorCompetitors/selectorCompetitors.vue.d.ts +5 -5
- package/components/project/selectorRegion/selectorRegion.vue.d.ts +7 -7
- package/components/project/selectorRegion/utils/consts.d.ts +0 -2
- package/components/project/tagSelector/popupListItem/tagPopupListItem.vue.d.ts +5 -3
- package/components/project/tagSelector/popupOpener/popupOpener.vue.d.ts +6 -5
- package/components/project/tagSelector/tagIcon/tagIcon.vue.d.ts +1 -1
- package/components/project/tagSelector/tagSelector.vue.d.ts +6 -6
- package/components/tabs/tabs/content.vue.d.ts +3 -2
- package/components/tabs/tabs/tab.vue.d.ts +2 -1
- package/components/tabs/tabs/tabs.vue.d.ts +3 -2
- package/components/tabsView/tabsView/menu.vue.d.ts +9 -6
- package/components/tabsView/tabsView/menuDelimeter.vue.d.ts +1 -1
- package/components/tabsView/tabsView/menuItem.vue.d.ts +2 -1
- package/components/tabsView/tabsView/menuTitle.vue.d.ts +2 -1
- package/components/tabsView/tabsView/store.d.ts +5 -5
- package/components/tabsView/tabsView/tabsView.vue.d.ts +9 -6
- package/core/app.amd.js +1 -1
- package/core/app.amd.js.map +1 -1
- package/core/app.js +148 -127
- package/core/app.js.map +1 -1
- package/core/core/core.d.ts +2 -0
- package/core/core/preloaders.d.ts +19 -0
- package/core/directives/focus.d.ts +3 -1
- package/core/directives/scrollIntoView.d.ts +3 -0
- package/core/directives/scrollShadow.d.ts +2 -2
- package/core/plugins/i18n.d.ts +13 -3
- package/core/utils/scroll.d.ts +18 -0
- package/core/utils/searchers.d.ts +0 -2
- package/dialog/dialog.amd.js +1 -1
- package/dialog/dialog.amd.js.map +1 -1
- package/dialog/dialog.js +61 -55
- package/dialog/dialog.js.map +1 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.js +1 -1
- package/forms/helpers.amd.js.map +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +343 -300
- package/formsExt/formsExt.js.map +1 -1
- package/layout/layout.amd.js +1 -1
- package/layout/layout.amd.js.map +1 -1
- package/layout/layout.js +27 -26
- package/layout/layout.js.map +1 -1
- package/package.json +2 -1
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +17 -17
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +3 -3
- package/popup/worker.js.map +1 -1
- package/project/project.amd.js +1 -1
- package/project/project.amd.js.map +1 -1
- package/project/project.js +315 -317
- package/project/project.js.map +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.js +37 -37
- package/utils/check.amd.js.map +1 -1
- package/utils/check.js.map +1 -1
- package/utils/clipboard.amd.js +1 -1
- package/utils/clipboard.amd.js.map +1 -1
- package/utils/clipboard.js +1 -1
- package/utils/clipboard.js.map +1 -1
- 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 +30 -30
- package/utils/dom.js.map +1 -1
- package/utils/image.amd.js.map +1 -1
- package/utils/keyboard.amd.js.map +1 -1
- package/utils/lodash.amd.js +1 -1
- package/utils/lodash.js +5 -5
- package/utils/number.amd.js.map +1 -1
- package/utils/price.amd.js +1 -1
- package/utils/price.amd.js.map +1 -1
- package/utils/price.js +1 -1
- package/utils/price.js.map +1 -1
- package/utils/route.amd.js +1 -1
- package/utils/route.amd.js.map +1 -1
- package/utils/route.js +5 -5
- package/utils/route.js.map +1 -1
- package/utils/scroll.amd.js +1 -1
- package/utils/scroll.amd.js.map +1 -1
- package/utils/scroll.js +39 -7
- package/utils/scroll.js.map +1 -1
- package/utils/searchers.amd.js +1 -1
- package/utils/searchers.amd.js.map +1 -1
- package/utils/searchers.js +0 -2
- package/utils/searchers.js.map +1 -1
- package/utils/string.amd.js +1 -1
- package/utils/string.amd.js.map +1 -1
- package/utils/string.js +29 -29
- package/utils/string.js.map +1 -1
- package/utils/system.amd.js.map +1 -1
- package/utils/system.js.map +1 -1
- package/utils/url.amd.js.map +1 -1
- package/utils/url.js.map +1 -1
- package/web-types.json +28 -0
- package/.chunks/forms-CmlWMEyk.amd.js +0 -3
- package/.chunks/forms-CmlWMEyk.amd.js.map +0 -1
- package/.chunks/forms-DDIlFXbF.es.js +0 -1944
- package/.chunks/forms-DDIlFXbF.es.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CnEbgJbu.amd.js.map +0 -1
- package/.chunks/popup-38TbXxcV.amd.js.map +0 -1
- package/.chunks/popup-BzCXSDdA.es.js.map +0 -1
- package/.chunks/utils-CFCfvsI8.es.js +0 -223
- package/.chunks/utils-CFCfvsI8.es.js.map +0 -1
- package/.chunks/utils-CI9JyH64.amd.js +0 -2
- package/.chunks/utils-CI9JyH64.amd.js.map +0 -1
- package/.chunks/utils-DXI6F7F9.es.js.map +0 -1
- package/.chunks/utils-lvXB5hbW.amd.js +0 -2
- package/.chunks/utils-lvXB5hbW.amd.js.map +0 -1
- package/components/formsExt/info/info.d.ts +0 -20
package/formsExt/formsExt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formsExt.js","sources":["../../src/components/formsExt/editArea/editArea.vue","../../src/components/formsExt/editInput/editInput.vue","../../src/components/formsExt/radioGroup/radioGroup.vue","../../src/components/formsExt/selector2/api.ts","../../src/components/formsExt/selector2/selector2.vue","../../src/components/formsExt/formsExt.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport Button from '@/components/forms/button/button.vue';\nimport type { Emits, Props } from './editArea';\nimport Textarea from '@/components/forms/textarea/textarea.vue';\n\n// TODO: добавить переменную top-forms-fixed-height и использовать ее при добавлении отступов у страницы\n\nconst props = withDefaults(defineProps<Props>(), {\n\tdefaultValue: '',\n\tcancelText: 'Cancel',\n\tsubmitText: 'Send',\n\tcloseText: 'Close',\n\texpandable: true,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = ref(props.defaultValue);\n\nconst isFocused = ref(props.isFocused);\n\nconst isChanged = computed(() => localValue.value !== props.defaultValue);\n\nconst cancelBtnText = computed(() => {\n\tif (props.attachToKeyboard) return '';\n\n\tif (props.forceShowCloseBtn && !isChanged.value) return props.closeText;\n\n\treturn props.cancelText;\n});\n\nconst submit = (value: string) => {\n\temit('submit', value);\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst cancel = () => {\n\tif (props.forceShowCloseBtn && !isChanged.value) {\n\t\temit('close');\n\n\t\treturn;\n\t}\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst clickOnTitle = () => {\n\tif (props.attachToKeyboard) emit('clickOnTitle');\n};\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-editArea': true,\n\t\t\t'top-editArea-attachedToKeyboard': attachToKeyboard,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tv-if=\"title\"\n\t\t\tclass=\"top-editArea_title\"\n\t\t\t@click=\"clickOnTitle()\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-editArea_form': true,\n\t\t\t\t'top-error': isError,\n\t\t\t\t'top-focus': isFocused,\n\t\t\t}\"\n\t\t>\n\t\t\t<Textarea\n\t\t\t\tv-top-focus=\"{ disabled: !isFocused }\"\n\t\t\t\tv-model=\"localValue\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:rows=\"rows\"\n\t\t\t\t:minHeight=\"minHeight\"\n\t\t\t\t:expandable=\"expandable\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:readonly=\"readonly\"\n\t\t\t\t:isError=\"isError\"\n\t\t\t\t:hint=\"hint\"\n\t\t\t\tclass=\"top-editArea_element\"\n\t\t\t\t@focus=\"() => isFocused = true\"\n\t\t\t\t@blur=\"() => isFocused = false\"\n\t\t\t\t@keyup.esc=\"cancel\"\n\t\t\t\t@keyup.ctrl.enter=\"submit(localValue)\"\n\t\t\t/>\n\n\t\t\t<div class=\"top-editArea_footer\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"!attachToKeyboard && (isChanged || forceShowCloseBtn)\"\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\tstyling=\"soft\"\n\t\t\t\t\t@click=\"cancel\"\n\t\t\t\t>\n\t\t\t\t\t{{ cancelBtnText }}\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tv-if=\"isChanged\"\n\t\t\t\t\t:icon=\"attachToKeyboard ? '': ''\"\n\t\t\t\t\t@click=\"submit(localValue)\"\n\t\t\t\t>\n\t\t\t\t\t{{ attachToKeyboard ? '' : submitText }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-editArea {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.top-editArea_title {\n\tfont-size: 12px;\n}\n\n.top-editArea_form {\n\tflex-direction: column;\n}\n\n.top-editArea_form:hover {\n\tborder-color: var(--top-forms-border-color-hover);\n}\n\n.top-editArea_form.top-focus {\n\tborder-color: var(--color-line-primary-1);\n\toutline: none;\n}\n\n/* textarea в EditArea */\n.top-textarea {\n\twidth: 100%;\n}\n\n.top-editArea_element.top-textarea_textarea {\n\tborder: none;\n\toutline: none;\n\tanimation: none;\n}\n\n/* footer */\n.top-editArea_footer {\n\tpadding: var(--top-forms-padding);\n\tdisplay: flex;\n\tmin-height: 32px;\n\tjustify-content: flex-end;\n\tgap: var(--top-forms-padding);\n}\n\n/* attachedToKeyboard */\n.top-editArea-attachedToKeyboard {\n\tbackground: var(--top-forms-background-color);\n\tmargin-bottom: env(keyboard-inset-height, 0);\n\tposition: fixed;\n\tbottom: 0;\n\tright: 0;\n\tleft: 0;\n\tz-index: 2;\n\tgap: 0;\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_form {\n\tborder-radius: 0;\n\tborder: none;\n\tborder-top: 1px solid var(--top-forms-border-color);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_title {\n\tcursor: pointer;\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-forms-padding);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_footer > [data-top-icon] {\n\tborder-radius: 100%;\n}\n\n.top-editArea-attachedToKeyboard .top-button.top-editArea_button {\n\tmin-width: auto;\n\tpadding: 0;\n}\n\n.top-editArea-attachedToKeyboard .top-button.top-editArea_button:before {\n\t--top-icon-size: 18px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, toRef, watch } from 'vue';\nimport type { Emits, Props } from './editInput';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = defineProps<Props>();\n\nconst intermediateValue = ref(props.modelValue);\n\nwatch(toRef(props.modelValue), () => {\n\tintermediateValue.value = props.modelValue;\n});\n\nconst emit = defineEmits<Emits>();\n\nconst submit = () => {\n\temit('update:modelValue', intermediateValue.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-editInput\">\n\t\t<TopInput\n\t\t\t:=\"input\"\n\t\t\t@keydown.esc.capture.stop=\"intermediateValue = modelValue\"\n\t\t\t@keydown.enter.stop=\"submit\"\n\t\t\tv-model=\"intermediateValue\"\n\t\t/>\n\n\t\t<TopButton\n\t\t\tv-if=\"intermediateValue !== modelValue\"\n\t\t\ticon=\"\"\n\t\t\tstyling=\"soft\"\n\t\t\t:=\"button\"\n\t\t\t@click=\"submit\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n.top-editInput {\n\twidth: 220px;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: var(--top-gap-1);\n}\n\n.top-editInput .top-input {\n\twidth: unset;\n\tflex-grow: 1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Ref } from '@vue/reactivity';\nimport { ref, watch } from 'vue';\nimport type { Props, Emits } from './radioGroup';\n\nconst model = defineModel<string>({\n\trequired: true,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst elRef: Ref<HTMLElement | null> = ref(null);\n\nwatch(model, () => {\n\tif (!props.radiosProps?.some(item => item.value === model.value)) {\n\t\tmodel.value = props.radiosProps?.[0]?.value ?? '';\n\t}\n\n\telRef.value?.querySelector('.radioGroup_item-selected')?.scrollIntoView();\n}, { immediate: true });\n\nconst uid = 'radioGroup-' + Math.random();\n</script>\n\n<template>\n\t<div\n\t\tref=\"elRef\"\n\t\t:class=\"{\n\t\t\t['top-radioGroup']: true,\n\t\t\t['top-scrollBarXHidding']: true,\n\t\t\t['top-size_' + size]: !!size,\n\t\t\t['top-error']: isError,\n\t\t}\"\n\t>\n\t\t<label\n\t\t\tv-for=\"item of radiosProps\"\n\t\t\t:class=\"{\n\t\t\t\t['top-radioGroup_item-selected']: item.value === model,\n\t\t\t\t['top-radioGroup_item']: true,\n\t\t\t\t['top-forms-focusable']: true,\n\t\t\t\t['top-disabled']: item.disabled,\n\t\t\t}\"\n\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t@click=\"model = item.value\"\n\t\t>\n\t\t\t{{ item.title }}\n\n\t\t\t<span\n\t\t\t\tv-if=\"showIndicator\"\n\t\t\t\tclass=\"top-radioGroup_circle\"\n\t\t\t></span>\n\n\t\t\t<!-- Для нативной навигации -->\n\t\t\t<input\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:name=\"uid\"\n\t\t\t\ttype=\"radio\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-unvisible']: true,\n\t\t\t\t}\"\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t/>\n\t\t</label>\n\t</div>\n</template>\n\n<style>\n@import \"./styles/top-scrollBar.css\";\n\n.top-radioGroup {\n\tuser-select: none;\n\tbox-sizing: border-box;\n\tborder-radius: 8px;\n\tbackground-color: var(--color-layout-middle);\n\theight: var(--top-forms-base-height);\n\tpadding: 2px;\n\tgap: 2px;\n\tdisplay: flex;\n\talign-items: flex-start;\n}\n\n.top-radioGroup_item {\n\tcolor: var(--color-text-2);\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\tborder-radius: 6px;\n\theight: calc(var(--top-forms-base-height) - 4px);\n\tpadding: 0 16px;\n\tfont-weight: 400;\n\twhite-space: nowrap;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-grow: 1;\n\tgap: 4px;\n}\n\n.top-radioGroup_item:hover {\n\tbackground-color: var(--color-layout-front-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n/* selected */\n.top-radioGroup_item-selected {\n\tcolor: var(--color-text-1);\n\tpointer-events: none;\n\tbackground-color: var(--color-bg-lightning-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n/* circle */\n.top-radioGroup_circle {\n\tcontent: \"\";\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--color-line-3-opacity);\n\tborder-radius: 50%;\n\tpadding: 3px;\n\tmargin-left: auto;\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\n}\n\n.top-radioGroup_item:hover .top-radioGroup_circle:before {\n\tborder-color: var(--color-line-primary-1);\n}\n\n/* circle selected */\n.top-radioGroup_item-selected .top-radioGroup_circle {\n\tborder-color: var(--color-line-primary-1);\n\tborder-width: 5px;\n}\n\n.top-radioGroup_item-selected:hover .top-radioGroup_circle {\n\tborder-color: var(--color-line-primary-1);\n}\n\n/* top-error */\n.top-radioGroup.top-error .top-radioGroup_item:not(.top-disabled) .top-radioGroup_circle {\n\tborder-color: var(--color-line-negative-1);\n}\n</style>\n","import type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { debounce } from '@/core/utils/lodash';\nimport type { Item, Props } from './selector2';\n\nexport const useAPI = (apiRequest: Props['apiRequest'], minLength: number, useCache: Props['useCache']) => {\n\t/**\n\t * Список, полученный через API\n\t */\n\tconst items: Ref<Array<Item>> = ref([]);\n\n\t/**\n\t * Флаг - идет загрузка\n\t */\n\tconst isLoading = ref(false);\n\n\tlet _searchText = '';\n\tlet _nextOffset: number | undefined;\n\n\tif (apiRequest && !apiRequest.params.limit) {\n\t\tapiRequest.params.limit = 100;\n\t}\n\n\t/**\n\t * Выполнить обращение к API\n\t *\n\t * При ошибке вернет undefined\n\t */\n\tconst callAPIRequest = async (): Promise<{ nextOffset?: number, result: Array<Item> } | undefined> => {\n\t\tif (!apiRequest) return;\n\n\t\tlet res;\n\t\tlet cacheKey;\n\n\t\tif (useCache) {\n\t\t\t// кэш для полученных ответов через apiRequest\n\t\t\t// общий для всех компонентов, использующих apiRequest\n\t\t\tapiRequest.cache ??= new Map();\n\n\t\t\tcacheKey = JSON.stringify(apiRequest.params);\n\t\t\tres = apiRequest.cache.get(cacheKey);\n\n\t\t\tif (res) {\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\n\t\tisLoading.value = true;\n\t\tres = await apiRequest.call();\n\t\tisLoading.value = false;\n\n\t\tif (res.errors) return;\n\n\t\tif (!Array.isArray(res.result)) {\n\t\t\tconsole.warn(`В result ожидался массив`);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexWithError = (res.result as Array<Item | any>).findIndex(item => item.id === undefined || item.name === undefined);\n\t\tif (indexWithError !== -1) {\n\t\t\tconsole.warn(`В result[${indexWithError}] нет id или name`);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (useCache) {\n\t\t\tapiRequest.cache.set(cacheKey as string, res);\n\t\t}\n\n\t\treturn res;\n\t};\n\n\t/**\n\t * Загрузить items\n\t */\n\tconst load = async () => {\n\t\tif (!apiRequest) return;\n\n\t\tapiRequest.params.offset = 0;\n\t\tapiRequest.params.search = _searchText;\n\n\t\tconst res = await callAPIRequest();\n\t\tif (!res) return;\n\n\t\t_nextOffset = res.nextOffset;\n\n\t\titems.value = res.result;\n\t};\n\n\t/**\n\t * Загрузить следующую страницу items\n\t */\n\tconst loadAppend = async () => {\n\t\tif (!apiRequest) return;\n\n\t\t// данных о следующих страницах не обнаружено\n\t\tif (!_nextOffset) return;\n\n\t\t// дозагружать нельзя, если не завершена предыдущшая загрузка\n\t\tif (isLoading.value) return;\n\n\t\tapiRequest.params.offset = _nextOffset;\n\t\tapiRequest.params.search = _searchText;\n\n\t\tconst res = await callAPIRequest();\n\t\tif (!res) return;\n\n\t\t_nextOffset = res.nextOffset;\n\n\t\titems.value = items.value.concat(res.result);\n\t};\n\n\tconst loadDebounce = debounce(() => load(), 200);\n\n\t/**\n\t * Выполнить поиск по указанному тексту\n\t *\n\t * Если длина текста меньше minLength, поиск не будет проивзеден\n\t *\n\t * Если текст не изменился, поиск не будет проивзеден\n\t * @param searchText - текст поиска\n\t * @param useDebounce - отложенное выполнение поиска\n\t */\n\tconst setSearchTextAndLoad = (searchText: string, useDebounce = true) => {\n\t\tif (!apiRequest) return;\n\n\t\tif (searchText.length < minLength) return;\n\n\t\t// условия поиска не поменялись, данные загружены\n\t\tif (searchText === _searchText && items.value.length) return;\n\n\t\t_searchText = searchText;\n\n\t\tif (useDebounce) {\n\t\t\tloadDebounce();\n\t\t} else {\n\t\t\tvoid load();\n\t\t}\n\t};\n\n\treturn {\n\t\titems,\n\t\tisLoading,\n\t\tloadAppend,\n\t\tsetSearchTextAndLoad,\n\t};\n};\n","<script setup lang=\"ts\">\nimport type { Ref, ComputedRef, ModelRef, ComponentInstance } from 'vue';\nimport { computed, ref, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { invertKeyboardLayout } from '@/core/utils/keyboard';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { TopPopup, TopPopupListItem, TopPopupWidgetInput } from '@/components/popup/popup';\nimport type PopupClass from '@/components/popup/lib/popup';\nimport type { Item, Props, Slots } from './selector2';\nimport { useAPI } from './api';\nimport Selector2ItemMulti from './itemMulti.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\titems: () => [] as Array<Item>,\n\tsize: 's',\n\tminLength: 0,\n\tshowSelectedInInput: true,\n});\n\nconst model = defineModel<Props['modelValue']>() as ModelRef<Props['modelValue']>;\n\ndefineSlots<Slots>();\n\n/**\n * Текст поиска по результатам\n */\nconst searchText = ref('');\n\nconst itemAll = {\n\tid: 0,\n\tname: useI18n().Common.All!,\n};\n\n/**\n * Экземпляр компонента Popup\n */\nconst popupRef: Ref<ComponentInstance<typeof TopPopup> | null> = ref(null);\n\n/**\n * Получить доступ к объекту popup\n */\nconst getPopup = (): PopupClass | undefined => {\n\treturn popupRef.value?.popup;\n};\n\n// для storybook\nif ((window as any).__STORYBOOK_PREVIEW__ && !props.modelValue) {\n\twatch(\n\t\t() => props.multiselect,\n\t\t() => {\n\t\t\tmodel.value = props.multiselect ? [] : { id: null, name: '' };\n\t\t},\n\t\t{ immediate: true },\n\t);\n}\n\nconst API = useAPI(props.apiRequest, props.minLength, props.useCache);\n\n/**\n * Варианты выбора: props.items + \"Выбрать все\"\n */\nconst localItems: ComputedRef<Array<Item>> = computed(() => {\n\tconst items: Array<Item> = [];\n\n\tif (!props.multiselect && props.appendAllValue) {\n\t\titems.push(itemAll);\n\t}\n\n\tprops.items.forEach(item => items.push({ ...item }));\n\n\treturn items;\n});\n\n/**\n * Проверить, что элемент выбран\n */\nconst isSelected = (item: Item, checkNameForNullId = true) => {\n\tif (checkNameForNullId && item.id === null) {\n\t\tif (Array.isArray(model.value)) {\n\t\t\treturn model.value.some(itemSelected => itemSelected.id === item.id && itemSelected.name === item.name);\n\t\t} else {\n\t\t\treturn item.name === model.value.name;\n\t\t}\n\t}\n\n\tif (Array.isArray(model.value)) {\n\t\treturn model.value.some(itemSelected => itemSelected.id === item.id);\n\t} else {\n\t\treturn item.id === model.value.id;\n\t}\n};\n\n/**\n * Варианты выбора, которые выводятся\n */\nconst itemsForShow = computed(() => {\n\tconst searchString = searchText.value.toLowerCase();\n\tconst searchStringInvertKeyboard = invertKeyboardLayout(searchString);\n\n\tlet items: typeof localItems.value = [];\n\n\tlocalItems.value.forEach((item) => {\n\t\tconst itemName = item.name.toLowerCase();\n\n\t\tif (\n\t\t\titem.id === Number(searchString) ||\n\t\t\titemName.includes(searchString) ||\n\t\t\titemName.includes(searchStringInvertKeyboard)\n\t\t) {\n\t\t\tif (itemName === searchString || itemName === searchStringInvertKeyboard) {\n\t\t\t\titems.unshift(item);\n\t\t\t} else {\n\t\t\t\titems.push(item);\n\t\t\t}\n\t\t}\n\t});\n\n\titems.push(...API.items.value);\n\n\tif (\n\t\tprops.appendSearchToResult &&\n\t\t!!searchText.value &&\n\t\t(!items.length || items[0].name.toLowerCase() !== searchString)\n\t) {\n\t\titems.push({\n\t\t\tid: null,\n\t\t\tname: searchText.value,\n\t\t});\n\t}\n\n\tif (props.multiselect) {\n\t\titems = items.filter(item => !isSelected(item));\n\t}\n\n\treturn items;\n});\n\n/**\n * Флаг - идет загрузка\n *\n * Скрывает вывод заглушки \"Нет результатов\" - для загрузки данных через API (multiselect = true) - (см. selectItem)\n */\nconst isLoading = ref(API.isLoading.value);\n\nwatch(API.isLoading, () => {\n\tisLoading.value = API.isLoading.value\n});\n\n/**\n * Выбрать значение\n *\n * Управляет закрытием окна\n */\nconst selectItem = async (item: Item) => {\n\tif (props.multiselect) {\n\t\tif (!Array.isArray(model.value)) return;\n\n\t\tif (isSelected(item)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (props.apiRequest && searchText.value) {\n\t\t\tisLoading.value = true;\n\t\t}\n\n\t\tconst newModel = [...model.value];\n\t\tnewModel.push({ ...item });\n\t\tmodel.value = newModel;\n\n\t\tif (Core.state.isMobile) {\n\t\t\tgetPopup()?.close();\n\n\t\t\t// сбросить введенный текст\n\t\t\tif (searchText.value) {\n\t\t\t\tsearchText.value = '';\n\t\t\t\tAPI.items.value = [];\n\t\t\t}\n\t\t} else {\n\t\t\tsetTimeout(() => {\n\t\t\t\tgetPopup()?.recalcPosition();\n\t\t\t\tgetPopup()?.elPopupWidget?.querySelector('input')?.focus();\n\n\t\t\t\t// сбросить введенный текст, только если больше не найдено результатов\n\t\t\t\tif (searchText.value) {\n\t\t\t\t\tif (!itemsForShow.value.length) {\n\t\t\t\t\t\tsearchText.value = '';\n\t\t\t\t\t\tAPI.items.value = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (props.apiRequest) {\n\t\t\t\t\t\t\tisLoading.value = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\t// сбросить введенный текст\n\t\tif (searchText.value) {\n\t\t\tsearchText.value = '';\n\t\t\tAPI.items.value = [];\n\t\t}\n\n\t\tif (JSON.stringify(item) !== JSON.stringify(model.value)) {\n\t\t\tmodel.value = { ...item };\n\t\t}\n\n\t\tgetPopup()?.close();\n\t}\n};\n\n/**\n * Выбрать следующее значение\n */\nconst selectNextItem = () => {\n\tif (!Array.isArray(model.value)) {\n\t\tconst currentIndex = localItems.value.findIndex(item => item.id === (model.value as Item).id);\n\t\tconst nextIndex = (currentIndex + 1) % localItems.value.length;\n\t\tmodel.value = { ...localItems.value[nextIndex] };\n\t}\n};\n\n/**\n * Удалить выбранное значение по id\n * @param id\n */\nconst deleteItemById = async (id: Item['id']) => {\n\tif (Array.isArray(model.value)) {\n\t\tmodel.value = model.value.filter(item => item.id !== id);\n\n\t\tsetTimeout(() => {\n\t\t\tgetPopup()?.recalcPosition();\n\t\t});\n\t}\n};\n\nconst isOpened = ref(false); // флаг попап открыт\n\nif (props.apiRequest) {\n\twatch(isOpened, () => {\n\t\tif (isOpened.value) {\n\t\t\t// при открытии сразу выполнить поиск\n\t\t\tAPI.setSearchTextAndLoad(searchText.value, false);\n\t\t}\n\t});\n\n\t// отложенный поиск при вводе текста\n\twatch(searchText, () => API.setSearchTextAndLoad(searchText.value));\n}\n\nconst onScrollContentList = (e: Event) => {\n\tconst el = e.target as HTMLElement;\n\n\tif (el.scrollTop / (el.scrollHeight - el.offsetHeight) > 0.8) {\n\t\tAPI.loadAppend();\n\t}\n};\n</script>\n\n<template>\n\t<TopPopup\n\t\tref=\"popupRef\"\n\t\t@open=\"isOpened = true\"\n\t\t@close=\"isOpened = false\"\n\t\t@scrollContentList=\"apiRequest ? onScrollContentList($event) : undefined\"\n\t\t:notch=\"false\"\n\t\t:transitionDuration=\"0\"\n\t>\n\t\t<template #opener>\n\t\t\t<div\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-selector2' : true,\n\t\t\t\t\t'top-selector2-multiselect': multiselect,\n\t\t\t\t\t['top-size_' + size]: true,\n\t\t\t\t\t['top-disabled']: disabled,\n\t\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t\t['top-error']: isError,\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<template v-if=\"multiselect\">\n\t\t\t\t\t<div class=\"top-selector2_activeItems\">\n\t\t\t\t\t\t<Selector2ItemMulti\n\t\t\t\t\t\t\tv-for=\"item of model as Array<Item>\"\n\t\t\t\t\t\t\t:id=\"item.id\"\n\t\t\t\t\t\t\t:name=\"item.name\"\n\t\t\t\t\t\t\t@delete=\"deleteItemById\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<span v-if=\"!multiselect\" class=\"top-selector2_activeName top-ellipsis\">\n\t\t\t\t\t{{ !Array.isArray(model) ? model.name : '' }}\n\t\t\t\t</span>\n\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"addChanger && !multiselect && localItems.length > 1 && !disabled\"\n\t\t\t\t\tclass=\"top-changer top-changer-selector\"\n\t\t\t\t\t@click.stop=\"selectNextItem\"\n\t\t\t\t></span>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #widget>\n\t\t\t<TopPopupWidgetInput\n\t\t\t\ttitle=\"Поиск\"\n\t\t\t\ticon=\"\"\n\t\t\t\tv-model=\"searchText\"\n\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t:placeholder=\"!Array.isArray(model) && !multiselect && showSelectedInInput ? model.name : placeholder\"\n\t\t\t/>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopPopupListItem\n\t\t\t\tv-for=\"item of itemsForShow\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-active': !Array.isArray(model) && !multiselect && model.name === item.name\n\t\t\t\t}\"\n\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t@click.stop=\"selectItem(item)\"\n\t\t\t>\n\t\t\t\t<slot\n\t\t\t\t\tv-if=\"$slots.item\"\n\t\t\t\t\tname=\"item\"\n\t\t\t\t\t:item=\"item\"\n\t\t\t\t></slot>\n\n\t\t\t\t<template\n\t\t\t\t\tv-else\n\t\t\t\t>\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t</template>\n\t\t\t</TopPopupListItem>\n\n\t\t\t<TopPopupListItem\n\t\t\t\tv-if=\"!isLoading && !itemsForShow.length\"\n\t\t\t\ttype=\"regular\"\n\t\t\t>\n\t\t\t\t{{ $i18n.Common.No_results }}\n\t\t\t</TopPopupListItem>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-selector2 {\n\twidth: 180px;\n\tmin-height: var(--top-forms-base-height);\n\tbox-sizing: border-box;\n\tposition: relative;\n\tdisplay: flex;\n\toverflow: hidden;\n\tpadding: var(--top-padding-1) var(--top-forms-padding);\n\tcolor: var(--top-forms-placeholder-color);\n\n\tborder-radius: var(--top-radius-2);\n\tborder: 1px solid var(--top-forms-border-color);\n\tbackground: var(--top-forms-background-color);\n}\n\n.top-selector2-multiselect {\n\twidth: unset;\n\tmin-width: 180px;\n\tpadding: var(--top-padding-1);\n}\n\n.top-selector2.top-active {\n\t--top-forms-border-color: var(--top-forms-border-color-hover);\n\t--top-forms-background-color: var(--top-forms-background-color-hover);\n}\n\n.top-selector2_activeItems {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--top-padding-1);\n\tmax-width: 100%;\n}\n\n.top-selector2_activeName {\n\twhite-space: nowrap;\n}\n\n.top-changer-selector {\n\ttransform: translateX(-16px);\n}\n</style>\n","import type { ComponentCustomProps } from 'vue';\n\nimport EditArea from './editArea/editArea.vue';\nimport EditInput from './editInput/editInput.vue';\nimport RadioGroup from './radioGroup/radioGroup.vue';\nimport Selector2 from './selector2/selector2.vue';\nimport Menu from './menu/menu.vue';\n\nexport const TopEditArea = EditArea as typeof EditArea & ComponentCustomProps;\nexport const TopEditInput = EditInput as typeof EditInput & ComponentCustomProps;\nexport const TopRadioGroup = RadioGroup as typeof RadioGroup & ComponentCustomProps;\nexport const TopSelector2 = Selector2 as typeof Selector2 & ComponentCustomProps;\nexport const TopMenu = Menu as typeof Menu & ComponentCustomProps;\n"],"names":["props","__props","emit","__emit","localValue","ref","isFocused","isChanged","computed","cancelBtnText","submit","value","cancel","clickOnTitle","intermediateValue","watch","toRef","model","useModel","elRef","_a","item","_c","_b","_e","_d","uid","useAPI","apiRequest","minLength","useCache","items","isLoading","_searchText","_nextOffset","callAPIRequest","res","cacheKey","indexWithError","load","loadAppend","loadDebounce","debounce","searchText","useDebounce","itemAll","useI18n","popupRef","getPopup","API","localItems","isSelected","checkNameForNullId","itemSelected","itemsForShow","searchString","searchStringInvertKeyboard","invertKeyboardLayout","itemName","selectItem","newModel","Core","selectNextItem","nextIndex","deleteItemById","id","isOpened","onScrollContentList","e","el","TopEditArea","_sfc_main$4","TopEditInput","_sfc_main$3","TopRadioGroup","_sfc_main$2","TopSelector2","_sfc_main","TopMenu","_sfc_main$8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formsExt.js","sources":["../../src/components/formsExt/editArea/editArea.vue","../../src/components/formsExt/editInput/editInput.vue","../../src/components/formsExt/radioGroup/radioGroup.vue","../../src/components/formsExt/selector2/api.ts","../../src/components/formsExt/selector2/selector2.vue","../../src/components/formsExt/formsExt.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport Button from '@/components/forms/button/button.vue';\nimport type { Emits, Props } from './editArea';\nimport Textarea from '@/components/forms/textarea/textarea.vue';\n\n// TODO: добавить переменную top-forms-fixed-height и использовать ее при добавлении отступов у страницы\n\nconst props = withDefaults(defineProps<Props>(), {\n\tdefaultValue: '',\n\tcancelText: 'Cancel',\n\tsubmitText: 'Send',\n\tcloseText: 'Close',\n\texpandable: true,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = ref(props.defaultValue);\n\nconst isFocused = ref(props.isFocused);\n\nconst isChanged = computed(() => localValue.value !== props.defaultValue);\n\nconst cancelBtnText = computed(() => {\n\tif (props.attachToKeyboard) return '';\n\n\tif (props.forceShowCloseBtn && !isChanged.value) return props.closeText;\n\n\treturn props.cancelText;\n});\n\nconst submit = (value: string) => {\n\temit('submit', value);\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst cancel = () => {\n\tif (props.forceShowCloseBtn && !isChanged.value) {\n\t\temit('close');\n\n\t\treturn;\n\t}\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst clickOnTitle = () => {\n\tif (props.attachToKeyboard) emit('clickOnTitle');\n};\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-editArea': true,\n\t\t\t'top-editArea-attachedToKeyboard': attachToKeyboard,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tv-if=\"title\"\n\t\t\tclass=\"top-editArea_title\"\n\t\t\t@click=\"clickOnTitle()\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-editArea_form': true,\n\t\t\t\t'top-error': isError,\n\t\t\t\t'top-focus': isFocused,\n\t\t\t}\"\n\t\t>\n\t\t\t<Textarea\n\t\t\t\tv-model=\"localValue\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:rows=\"rows\"\n\t\t\t\t:minHeight=\"minHeight\"\n\t\t\t\t:expandable=\"expandable\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:readonly=\"readonly\"\n\t\t\t\t:isError=\"isError\"\n\t\t\t\t:hint=\"hint\"\n\t\t\t\tclass=\"top-editArea_element\"\n\t\t\t\t@focus=\"() => isFocused = true\"\n\t\t\t\t@blur=\"() => isFocused = false\"\n\t\t\t\t@keyup.esc=\"cancel\"\n\t\t\t\t@keyup.ctrl.enter=\"submit(localValue)\"\n\t\t\t/>\n\n\t\t\t<div class=\"top-editArea_footer\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"!attachToKeyboard && (isChanged || forceShowCloseBtn)\"\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\tstyling=\"soft\"\n\t\t\t\t\t@click=\"cancel\"\n\t\t\t\t>\n\t\t\t\t\t{{ cancelBtnText }}\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tv-if=\"isChanged\"\n\t\t\t\t\t:icon=\"attachToKeyboard ? '': ''\"\n\t\t\t\t\t@click=\"submit(localValue)\"\n\t\t\t\t>\n\t\t\t\t\t{{ attachToKeyboard ? '' : submitText }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-editArea {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.top-editArea_title {\n\tfont-size: 12px;\n}\n\n.top-editArea_form {\n\tflex-direction: column;\n\toutline: none;\n}\n\n.top-editArea_form:not(.top-error):hover,\n.top-editArea_form:not(.top-error).top-focus {\n\tborder-color: var(--top-forms-border-color-hover);\n}\n\n/* textarea в EditArea */\n.top-textarea {\n\twidth: 100%;\n}\n\n.top-editArea_element.top-textarea_textarea {\n\tborder: none;\n\toutline: none;\n\tanimation: none;\n}\n\n/* footer */\n.top-editArea_footer {\n\tpadding: var(--top-forms-padding);\n\tdisplay: flex;\n\tmin-height: 32px;\n\tjustify-content: flex-end;\n\tgap: var(--top-forms-padding);\n}\n\n/* attachedToKeyboard */\n.top-editArea-attachedToKeyboard {\n\tbackground: var(--top-forms-background-color);\n\tmargin-bottom: env(keyboard-inset-height, 0);\n\tposition: fixed;\n\tbottom: 0;\n\tright: 0;\n\tleft: 0;\n\tz-index: 2;\n\tgap: 0;\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_form {\n\tborder-radius: 0;\n\tborder: none;\n\tborder-top: 1px solid var(--top-forms-border-color);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_title {\n\tcursor: pointer;\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-forms-padding);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_footer > [data-top-icon] {\n\tborder-radius: 100%;\n}\n\n.top-editArea-attachedToKeyboard .top-button.top-editArea_button {\n\tmin-width: auto;\n\tpadding: 0;\n}\n\n.top-editArea-attachedToKeyboard .top-button.top-editArea_button:before {\n\t--top-icon-size: 18px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, toRef, watch } from 'vue';\nimport type { Emits, Props } from './editInput';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = defineProps<Props>();\n\nconst intermediateValue = ref(props.modelValue);\n\nwatch(toRef(props.modelValue), () => {\n\tintermediateValue.value = props.modelValue;\n});\n\nconst emit = defineEmits<Emits>();\n\nconst submit = () => {\n\temit('update:modelValue', intermediateValue.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-editInput\">\n\t\t<TopInput\n\t\t\t:=\"input\"\n\t\t\t@keydown.esc.capture.stop=\"intermediateValue = modelValue\"\n\t\t\t@keydown.enter.stop=\"submit\"\n\t\t\tv-model=\"intermediateValue\"\n\t\t/>\n\n\t\t<TopButton\n\t\t\tv-if=\"intermediateValue !== modelValue\"\n\t\t\ticon=\"\"\n\t\t\tstyling=\"soft\"\n\t\t\t:=\"button\"\n\t\t\t@click=\"submit\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n.top-editInput {\n\twidth: 220px;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: var(--top-gap-1);\n}\n\n.top-editInput .top-input {\n\twidth: unset;\n\tflex-grow: 1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Ref } from '@vue/reactivity';\nimport { ref, watch } from 'vue';\nimport type { Props, Emits } from './radioGroup';\n\nconst model = defineModel<string>({\n\trequired: true,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst elRef: Ref<HTMLElement | null> = ref(null);\n\nwatch(model, () => {\n\tif (!props.radiosProps?.some(item => item.value === model.value)) {\n\t\tmodel.value = props.radiosProps?.[0]?.value ?? '';\n\t}\n\n\telRef.value?.querySelector('.radioGroup_item-selected')?.scrollIntoView();\n}, { immediate: true });\n\nconst uid = 'radioGroup-' + Math.random();\n</script>\n\n<template>\n\t<div\n\t\tref=\"elRef\"\n\t\t:class=\"{\n\t\t\t['top-radioGroup']: true,\n\t\t\t['top-scrollBarXHidding']: true,\n\t\t\t['top-size_' + size]: !!size,\n\t\t\t['top-error']: isError,\n\t\t}\"\n\t>\n\t\t<label\n\t\t\tv-for=\"item of radiosProps\"\n\t\t\t:class=\"{\n\t\t\t\t['top-radioGroup_item-selected']: item.value === model,\n\t\t\t\t['top-radioGroup_item']: true,\n\t\t\t\t['top-forms-focusable']: true,\n\t\t\t\t['top-disabled']: item.disabled,\n\t\t\t}\"\n\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t@click=\"model = item.value\"\n\t\t>\n\t\t\t{{ item.title }}\n\n\t\t\t<span\n\t\t\t\tv-if=\"showIndicator\"\n\t\t\t\tclass=\"top-radioGroup_circle\"\n\t\t\t></span>\n\n\t\t\t<!-- Для нативной навигации -->\n\t\t\t<input\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:name=\"uid\"\n\t\t\t\ttype=\"radio\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-unvisible']: true,\n\t\t\t\t}\"\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t/>\n\t\t</label>\n\t</div>\n</template>\n\n<style>\n@import \"./styles/top-scrollBar.css\";\n\n.top-radioGroup {\n\tuser-select: none;\n\tbox-sizing: border-box;\n\tborder-radius: 8px;\n\tbackground-color: var(--color-layout-middle);\n\theight: var(--top-forms-base-height);\n\tpadding: 2px;\n\tgap: 2px;\n\tdisplay: flex;\n\talign-items: flex-start;\n}\n\n.top-radioGroup_item {\n\tcolor: var(--color-text-2);\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\tborder-radius: 6px;\n\theight: calc(var(--top-forms-base-height) - 4px);\n\tpadding: 0 16px;\n\tfont-weight: 400;\n\twhite-space: nowrap;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-grow: 1;\n\tgap: 4px;\n}\n\n.top-radioGroup_item:hover {\n\tbackground-color: var(--color-layout-front-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n/* selected */\n.top-radioGroup_item-selected {\n\tcolor: var(--color-text-1);\n\tpointer-events: none;\n\tbackground-color: var(--color-bg-lightning-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n/* circle */\n.top-radioGroup_circle {\n\tcontent: \"\";\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--color-line-3-opacity);\n\tborder-radius: 50%;\n\tpadding: 3px;\n\tmargin-left: auto;\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\n}\n\n.top-radioGroup_item:hover .top-radioGroup_circle:before {\n\tborder-color: var(--color-line-primary-1);\n}\n\n/* circle selected */\n.top-radioGroup_item-selected .top-radioGroup_circle {\n\tborder-color: var(--color-line-primary-1);\n\tborder-width: 5px;\n}\n\n.top-radioGroup_item-selected:hover .top-radioGroup_circle {\n\tborder-color: var(--color-line-primary-1);\n}\n\n/* top-error */\n.top-radioGroup.top-error .top-radioGroup_item:not(.top-disabled) .top-radioGroup_circle {\n\tborder-color: var(--color-line-negative-1);\n}\n</style>\n","import type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { debounce } from '@/core/utils/lodash';\nimport type { Item, Props } from './selector2';\n\nexport const useAPI = (apiRequest: Props['apiRequest'], minLength: number, useCache: Props['useCache']) => {\n\t/**\n\t * Список, полученный через API\n\t */\n\tconst items: Ref<Array<Item>> = ref([]);\n\n\t/**\n\t * Флаг - идет загрузка\n\t */\n\tconst isLoading = ref(false);\n\n\tlet _searchText = '';\n\tlet _nextOffset: number | undefined;\n\n\tif (apiRequest && !apiRequest.params.limit) {\n\t\tapiRequest.params.limit = 100;\n\t}\n\n\t/**\n\t * Выполнить обращение к API\n\t *\n\t * При ошибке вернет undefined\n\t */\n\tconst callAPIRequest = async (): Promise<{ nextOffset?: number, result: Array<Item> } | undefined> => {\n\t\tif (!apiRequest) return;\n\n\t\tlet res;\n\t\tlet cacheKey;\n\n\t\tif (useCache) {\n\t\t\t// кэш для полученных ответов через apiRequest\n\t\t\t// общий для всех компонентов, использующих apiRequest\n\t\t\tapiRequest.cache ??= new Map();\n\n\t\t\tcacheKey = JSON.stringify(apiRequest.params);\n\t\t\tres = apiRequest.cache.get(cacheKey);\n\n\t\t\tif (res) {\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\n\t\tisLoading.value = true;\n\t\tres = await apiRequest.call();\n\t\tisLoading.value = false;\n\n\t\tif (res.errors) return;\n\n\t\tif (!Array.isArray(res.result)) {\n\t\t\tconsole.warn(`В result ожидался массив`);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexWithError = (res.result as Array<Item | any>).findIndex(item => item.id === undefined || item.name === undefined);\n\t\tif (indexWithError !== -1) {\n\t\t\tconsole.warn(`В result[${indexWithError}] нет id или name`);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (useCache) {\n\t\t\tapiRequest.cache.set(cacheKey as string, res);\n\t\t}\n\n\t\treturn res;\n\t};\n\n\t/**\n\t * Загрузить items\n\t */\n\tconst load = async () => {\n\t\tif (!apiRequest) return;\n\n\t\tapiRequest.params.offset = 0;\n\t\tapiRequest.params.search = _searchText;\n\n\t\tconst res = await callAPIRequest();\n\t\tif (!res) return;\n\n\t\t_nextOffset = res.nextOffset;\n\n\t\titems.value = res.result;\n\t};\n\n\t/**\n\t * Загрузить следующую страницу items\n\t */\n\tconst loadAppend = async () => {\n\t\tif (!apiRequest) return;\n\n\t\t// данных о следующих страницах не обнаружено\n\t\tif (!_nextOffset) return;\n\n\t\t// дозагружать нельзя, если не завершена предыдущшая загрузка\n\t\tif (isLoading.value) return;\n\n\t\tapiRequest.params.offset = _nextOffset;\n\t\tapiRequest.params.search = _searchText;\n\n\t\tconst res = await callAPIRequest();\n\t\tif (!res) return;\n\n\t\t_nextOffset = res.nextOffset;\n\n\t\titems.value = items.value.concat(res.result);\n\t};\n\n\tconst loadDebounce = debounce(() => load(), 200);\n\n\t/**\n\t * Выполнить поиск по указанному тексту\n\t *\n\t * Если длина текста меньше minLength, поиск не будет проивзеден\n\t *\n\t * Если текст не изменился, поиск не будет проивзеден\n\t * @param searchText - текст поиска\n\t * @param useDebounce - отложенное выполнение поиска\n\t */\n\tconst setSearchTextAndLoad = (searchText: string, useDebounce = true) => {\n\t\tif (!apiRequest) return;\n\n\t\tif (searchText.length < minLength) return;\n\n\t\t// условия поиска не поменялись, данные загружены\n\t\tif (searchText === _searchText && items.value.length) return;\n\n\t\t_searchText = searchText;\n\n\t\tif (useDebounce) {\n\t\t\tloadDebounce();\n\t\t} else {\n\t\t\tvoid load();\n\t\t}\n\t};\n\n\treturn {\n\t\titems,\n\t\tisLoading,\n\t\tloadAppend,\n\t\tsetSearchTextAndLoad,\n\t};\n};\n","<script setup lang=\"ts\">\nimport type { ComputedRef, ModelRef, ComponentInstance } from 'vue';\nimport { computed, ref, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { invertKeyboardLayout } from '@/core/utils/keyboard';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { TopPopup, TopPopupListItem, TopPopupWidgetInput } from '@/components/popup/popup';\nimport type PopupClass from '@/components/popup/lib/popup';\nimport type { Item, Props, Slots } from './selector2';\nimport { useAPI } from './api';\nimport Selector2ItemMulti from './itemMulti.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\titems: () => [] as Array<Item>,\n\tsize: 's',\n\tminLength: 0,\n\tshowSelectedInInput: true,\n});\n\nconst model = defineModel<Props['modelValue']>() as ModelRef<Props['modelValue']>;\n\ndefineSlots<Slots>();\n\n/**\n * Текст поиска по результатам\n */\nconst searchText = ref('');\n\nconst itemAll = {\n\tid: 0,\n\tname: useI18n().Common.All!,\n};\n\n/**\n * Экземпляр компонента Popup\n */\nconst popupRef = ref<ComponentInstance<typeof TopPopup> | null>(null);\n\n/**\n * Основной элемент селектора\n */\nconst elRef = ref<HTMLElement | null>(null);\n\n/**\n * Получить доступ к объекту popup\n */\nconst getPopup = (): PopupClass | undefined => {\n\treturn popupRef.value?.popup;\n};\n\n// для storybook\nif ((window as any).__STORYBOOK_PREVIEW__ && !props.modelValue) {\n\twatch(\n\t\t() => props.multiselect,\n\t\t() => {\n\t\t\tmodel.value = props.multiselect ? [] : { id: null, name: '' };\n\t\t},\n\t\t{ immediate: true },\n\t);\n}\n\nconst API = useAPI(props.apiRequest, props.minLength, props.useCache);\n\n/**\n * Варианты выбора: props.items + \"Выбрать все\"\n */\nconst localItems: ComputedRef<Array<Item>> = computed(() => {\n\tconst items: Array<Item> = [];\n\n\tif (!props.multiselect && props.appendAllValue) {\n\t\titems.push(itemAll);\n\t}\n\n\tprops.items.forEach(item => items.push({ ...item }));\n\n\treturn items;\n});\n\n/**\n * Проверить, что элемент выбран\n */\nconst isSelected = (item: Item, checkNameForNullId = true) => {\n\tif (checkNameForNullId && item.id === null) {\n\t\tif (Array.isArray(model.value)) {\n\t\t\treturn model.value.some(itemSelected => itemSelected.id === item.id && itemSelected.name === item.name);\n\t\t} else {\n\t\t\treturn item.name === model.value.name;\n\t\t}\n\t}\n\n\tif (Array.isArray(model.value)) {\n\t\treturn model.value.some(itemSelected => itemSelected.id === item.id);\n\t} else {\n\t\treturn item.id === model.value.id;\n\t}\n};\n\n/**\n * Варианты выбора, которые выводятся\n */\nconst itemsForShow = computed(() => {\n\tconst searchString = searchText.value.toLowerCase();\n\tconst searchStringInvertKeyboard = invertKeyboardLayout(searchString);\n\n\tlet items: typeof localItems.value = [];\n\n\tlocalItems.value.forEach((item) => {\n\t\tconst itemName = item.name.toLowerCase();\n\n\t\tif (\n\t\t\titem.id === Number(searchString) ||\n\t\t\titemName.includes(searchString) ||\n\t\t\titemName.includes(searchStringInvertKeyboard)\n\t\t) {\n\t\t\tif (itemName === searchString || itemName === searchStringInvertKeyboard) {\n\t\t\t\titems.unshift(item);\n\t\t\t} else {\n\t\t\t\titems.push(item);\n\t\t\t}\n\t\t}\n\t});\n\n\titems.push(...API.items.value);\n\n\tif (\n\t\tprops.appendSearchToResult &&\n\t\t!!searchText.value &&\n\t\t(!items.length || items[0].name.toLowerCase() !== searchString)\n\t) {\n\t\titems.push({\n\t\t\tid: null,\n\t\t\tname: searchText.value,\n\t\t});\n\t}\n\n\tif (props.multiselect) {\n\t\titems = items.filter(item => !isSelected(item));\n\t}\n\n\treturn items;\n});\n\n/**\n * Флаг - идет загрузка\n *\n * Скрывает вывод заглушки \"Нет результатов\" - для загрузки данных через API (multiselect = true) - (см. selectItem)\n */\nconst isLoading = ref(API.isLoading.value);\n\nwatch(API.isLoading, () => {\n\tisLoading.value = API.isLoading.value;\n});\n\n/**\n * Выбрать значение\n *\n * Управляет закрытием окна\n */\nconst selectItem = async (item: Item) => {\n\tif (props.multiselect) {\n\t\tif (!Array.isArray(model.value)) return;\n\n\t\tif (isSelected(item)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (props.apiRequest && searchText.value) {\n\t\t\tisLoading.value = true;\n\t\t}\n\n\t\tconst newModel = [...model.value];\n\t\tnewModel.push({ ...item });\n\t\tmodel.value = newModel;\n\n\t\tif (Core.state.isMobile) {\n\t\t\tgetPopup()?.close();\n\n\t\t\t// сбросить введенный текст\n\t\t\tif (searchText.value) {\n\t\t\t\tsearchText.value = '';\n\t\t\t\tAPI.items.value = [];\n\t\t\t}\n\t\t} else {\n\t\t\tsetTimeout(() => {\n\t\t\t\tgetPopup()?.recalcPosition();\n\t\t\t\tgetPopup()?.elPopupWidget?.querySelector('input')?.focus();\n\n\t\t\t\t// сбросить введенный текст, только если больше не найдено результатов\n\t\t\t\tif (searchText.value) {\n\t\t\t\t\tif (!itemsForShow.value.length) {\n\t\t\t\t\t\tsearchText.value = '';\n\t\t\t\t\t\tAPI.items.value = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (props.apiRequest) {\n\t\t\t\t\t\t\tisLoading.value = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\t// сбросить введенный текст\n\t\tif (searchText.value) {\n\t\t\tsearchText.value = '';\n\t\t\tAPI.items.value = [];\n\t\t}\n\n\t\tif (JSON.stringify(item) !== JSON.stringify(model.value)) {\n\t\t\tmodel.value = { ...item };\n\t\t}\n\n\t\tgetPopup()?.close();\n\t}\n};\n\n/**\n * Выбрать следующее значение\n */\nconst selectNextItem = () => {\n\tif (!Array.isArray(model.value)) {\n\t\tconst currentIndex = localItems.value.findIndex(item => item.id === (model.value as Item).id);\n\t\tconst nextIndex = (currentIndex + 1) % localItems.value.length;\n\t\tmodel.value = { ...localItems.value[nextIndex] };\n\t}\n};\n\n/**\n * Удалить выбранное значение по id\n * @param id\n */\nconst deleteItemById = async (id: Item['id']) => {\n\tif (Array.isArray(model.value)) {\n\t\tmodel.value = model.value.filter(item => item.id !== id);\n\n\t\tsetTimeout(() => {\n\t\t\tgetPopup()?.recalcPosition();\n\t\t});\n\t}\n};\n\nconst isOpened = ref(false); // флаг попап открыт\n\nif (props.apiRequest) {\n\twatch(isOpened, () => {\n\t\tif (isOpened.value) {\n\t\t\t// при открытии сразу выполнить поиск\n\t\t\tAPI.setSearchTextAndLoad(searchText.value, false);\n\t\t}\n\t});\n\n\t// отложенный поиск при вводе текста\n\twatch(searchText, () => API.setSearchTextAndLoad(searchText.value));\n}\n\nconst onScrollContentList = (e: Event) => {\n\tconst el = e.target as HTMLElement;\n\n\tif (el.scrollTop / (el.scrollHeight - el.offsetHeight) > 0.8) {\n\t\tAPI.loadAppend();\n\t}\n};\n</script>\n\n<template>\n\t<TopPopup\n\t\tref=\"popupRef\"\n\t\t@open=\"isOpened = true\"\n\t\t@close=\"isOpened = false, elRef?.focus()\"\n\t\t@scrollContentList=\"apiRequest ? onScrollContentList($event) : undefined\"\n\t\t:notch=\"false\"\n\t\t:transitionDuration=\"0\"\n\t>\n\t\t<template #opener>\n\t\t\t<div\n\t\t\t\tref=\"elRef\"\n\t\t\t\tv-top-focus.onupdate=\"isError\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-selector2' : true,\n\t\t\t\t\t'top-selector2-multiselect': multiselect,\n\t\t\t\t\t['top-size_' + size]: true,\n\t\t\t\t\t['top-disabled']: disabled,\n\t\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t\t['top-error']: isError,\n\t\t\t\t}\"\n\t\t\t\t@keydown.up.down.enter.space.stop.prevent=\"($event.currentTarget as HTMLElement).click()\"\n\t\t\t\t@keydown.delete=\"model = []\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t<template v-if=\"multiselect\">\n\t\t\t\t\t<div class=\"top-selector2_activeItems\">\n\t\t\t\t\t\t<Selector2ItemMulti\n\t\t\t\t\t\t\tv-for=\"item of model as Array<Item>\"\n\t\t\t\t\t\t\t:id=\"item.id\"\n\t\t\t\t\t\t\t:name=\"item.name\"\n\t\t\t\t\t\t\t@delete=\"deleteItemById\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<span v-if=\"!multiselect\" class=\"top-selector2_activeName top-ellipsis\">\n\t\t\t\t\t{{ !Array.isArray(model) ? model.name : '' }}\n\t\t\t\t</span>\n\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"addChanger && !multiselect && localItems.length > 1 && !disabled\"\n\t\t\t\t\tclass=\"top-changer top-changer-selector\"\n\t\t\t\t\t@click.stop=\"selectNextItem\"\n\t\t\t\t></span>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #widget>\n\t\t\t<TopPopupWidgetInput\n\t\t\t\ttitle=\"Поиск\"\n\t\t\t\ticon=\"\"\n\t\t\t\tv-model=\"searchText\"\n\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t:placeholder=\"!Array.isArray(model) && !multiselect && showSelectedInInput ? model.name : placeholder\"\n\t\t\t/>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopPopupListItem\n\t\t\t\tv-for=\"item of itemsForShow\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-active': !Array.isArray(model) && !multiselect && model.name === item.name\n\t\t\t\t}\"\n\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t@click.stop=\"selectItem(item)\"\n\t\t\t>\n\t\t\t\t<slot\n\t\t\t\t\tv-if=\"$slots.item\"\n\t\t\t\t\tname=\"item\"\n\t\t\t\t\t:item=\"item\"\n\t\t\t\t></slot>\n\n\t\t\t\t<template\n\t\t\t\t\tv-else\n\t\t\t\t>\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t</template>\n\t\t\t</TopPopupListItem>\n\n\t\t\t<TopPopupListItem\n\t\t\t\tv-if=\"!isLoading && !itemsForShow.length\"\n\t\t\t\ttype=\"regular\"\n\t\t\t>\n\t\t\t\t{{ $i18n.Common.No_results }}\n\t\t\t</TopPopupListItem>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-selector2 {\n\twidth: 180px;\n\tmin-height: var(--top-forms-base-height);\n\tbox-sizing: border-box;\n\tposition: relative;\n\tdisplay: flex;\n\toverflow: hidden;\n\tpadding: var(--top-padding-1) var(--top-forms-padding);\n\tcolor: var(--top-forms-placeholder-color);\n\n\tborder-radius: var(--top-radius-2);\n\tborder: 1px solid var(--top-forms-border-color);\n\tbackground: var(--top-forms-background-color);\n}\n\n.top-selector2-multiselect {\n\twidth: unset;\n\tmin-width: 180px;\n\tpadding: var(--top-padding-1);\n}\n\n.top-selector2.top-active {\n\t--top-forms-border-color: var(--top-forms-border-color-hover);\n}\n\n.top-selector2_activeItems {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--top-padding-1);\n\tmax-width: 100%;\n}\n\n.top-selector2_activeName {\n\twhite-space: nowrap;\n}\n\n.top-changer-selector {\n\ttransform: translateX(-16px);\n}\n</style>\n","import type { ComponentCustomProps } from 'vue';\n\nimport EditArea from './editArea/editArea.vue';\nimport EditInput from './editInput/editInput.vue';\nimport RadioGroup from './radioGroup/radioGroup.vue';\nimport Selector2 from './selector2/selector2.vue';\nimport Menu from './menu/menu.vue';\nimport Info from './info/info.vue';\n\nexport const TopEditArea = EditArea as typeof EditArea & ComponentCustomProps;\nexport const TopEditInput = EditInput as typeof EditInput & ComponentCustomProps;\nexport const TopRadioGroup = RadioGroup as typeof RadioGroup & ComponentCustomProps;\nexport const TopSelector2 = Selector2 as typeof Selector2 & ComponentCustomProps;\nexport const TopMenu = Menu as typeof Menu & ComponentCustomProps;\nexport const TopInfo = Info as typeof Info & ComponentCustomProps;\n"],"names":["props","__props","emit","__emit","localValue","ref","isFocused","isChanged","computed","cancelBtnText","submit","value","cancel","clickOnTitle","intermediateValue","watch","toRef","model","useModel","elRef","_a","item","_c","_b","_e","_d","uid","useAPI","apiRequest","minLength","useCache","items","isLoading","_searchText","_nextOffset","callAPIRequest","res","cacheKey","indexWithError","load","loadAppend","loadDebounce","debounce","searchText","useDebounce","itemAll","useI18n","popupRef","getPopup","API","localItems","isSelected","checkNameForNullId","itemSelected","itemsForShow","searchString","searchStringInvertKeyboard","invertKeyboardLayout","itemName","selectItem","newModel","Core","selectNextItem","nextIndex","deleteItemById","id","isOpened","onScrollContentList","e","el","TopEditArea","_sfc_main$5","TopEditInput","_sfc_main$4","TopRadioGroup","_sfc_main$3","TopSelector2","_sfc_main$1","TopMenu","_sfc_main$9","TopInfo","_sfc_main"],"mappings":"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"}
|
package/layout/layout.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","vue","../.chunks/forms-
|
|
1
|
+
define(["require","exports","vue","../.chunks/forms-BWc2kMFD.amd","../require/css.amd!../assets/layout.css"],function(v,t,e,n){"use strict";if(typeof e>"u")var e=window.Vue;const l=e.defineComponent({__name:"rows",props:{gap:{default:"none"}},setup(s){const o=s;return(c,B)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-rows":!0,["top-rows-gap_"+o.gap]:!0})},[e.renderSlot(c.$slots,"default")],2))}}),r={class:"top-islandRows"},a={key:0,class:"top-islandRows_title"},d=e.defineComponent({__name:"islandRows",setup(s){return(o,c)=>(e.openBlock(),e.createElementBlock("div",r,[o.$slots.title?(e.openBlock(),e.createElementBlock("div",a,[e.renderSlot(o.$slots,"title")])):e.createCommentVNode("",!0),e.createVNode(l,{gap:"l",class:"top-islandRows_rows"},{default:e.withCtx(()=>[e.renderSlot(o.$slots,"default")]),_:3})]))}}),i={},_={class:"top-islandRows_row"};function u(s,o){return e.openBlock(),e.createElementBlock("div",_,[e.renderSlot(s.$slots,"default")])}const p=n._export_sfc(i,[["render",u]]),w={},f={class:"top-islandRows_subTitle"};function m(s,o){return e.openBlock(),e.createElementBlock("div",f,[e.renderSlot(s.$slots,"default")])}const R=n._export_sfc(w,[["render",m]]),T=d,k=p,$=R,h=l;t.TopIslandRows=T,t.TopIslandRowsRow=k,t.TopIslandRowsSubTitle=$,t.TopRows=h,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=layout.amd.js.map
|
package/layout/layout.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.amd.js","sources":["../../src/components/layout/
|
|
1
|
+
{"version":3,"file":"layout.amd.js","sources":["../../src/components/layout/islandRows/islandRowsRow/islandRowsRow.vue","../../src/components/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue","../../src/components/layout/layout.ts"],"sourcesContent":["<script setup lang=\"ts\">\n</script>\n\n<template>\n\t<div class=\"top-islandRows_row\">\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-islandRows_row {\n\toutline-offset: 2px;\n\tborder-radius: 8px;\n\tbackground: var(--color-layout-front-1);\n\tpadding: var(--top-padding-3);\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n}\n\n/* Фокус форм */\n.top-islandRows_row:has(> .top-forms-optionWrapper .top-forms-focusable:focus-visible) {\n\toutline: 2px solid var(--color-line-primary-1);\n\toutline-offset: 2px;\n}\n\n/* Фокус форм, стили top-error оставить у форм, иначе они будут конфликтовать со стилями фокуса, так как у top-islandRows_row нет border */\n.top-islandRows_row > .top-forms-optionWrapper .top-forms-focusable:not(.top-error) {\n\toutline: none;\n\tanimation: none;\n}\n\n/* Отмена прозрачных рамок у полей ввода внутри islandRows, если top-rows расположен в islandRowsRow */\n.top-islandRows_row .top-rows > .top-input,\n.top-islandRows_row .top-rows > .top-textarea,\n.top-islandRows_row .top-rows > .top-select { --top-forms-border-color: inherit }\n</style>\n","<script setup lang=\"ts\">\n</script>\n\n<template>\n\t<div class=\"top-islandRows_subTitle\">\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-islandRows_subTitle {\n\tfont-size: 16px;\n\tfont-weight: bold;\n}\n</style>\n","import type { ComponentCustomProps } from 'vue';\n\nimport IslandRows from './islandRows/islandRows.vue';\nimport IslandRowsRow from './islandRows/islandRowsRow/islandRowsRow.vue';\nimport IslandRowsSubTitle from './islandRows/islandRowsSubTitle/islandRowsSubTitle.vue';\nimport Rows from './rows/rows.vue';\n\nexport const TopIslandRows = IslandRows as typeof IslandRows & ComponentCustomProps;\nexport const TopIslandRowsRow = IslandRowsRow as typeof IslandRowsRow & ComponentCustomProps;\nexport const TopIslandRowsSubTitle = IslandRowsSubTitle as typeof IslandRowsSubTitle & ComponentCustomProps;\nexport const TopRows = Rows as typeof Rows & ComponentCustomProps;\n"],"names":["_sfc_render$1","_ctx","_cache","_sfc_render","TopIslandRows","_sfc_main$2","TopIslandRowsRow","IslandRowsRow","TopIslandRowsSubTitle","IslandRowsSubTitle","TopRows","_sfc_main$3"],"mappings":"q3BAIC,SAAAA,EAAAC,EAAAC,EAAA,wKCAA,SAAAC,EAAAF,EAAAC,EAAA,+HCGME,EAAAC,EACAC,EAAAC,EACAC,EAAAC,EACAC,EAAAC"}
|
package/layout/layout.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Core as i } from "../core/app.js";
|
|
2
|
-
import { defineComponent as r, openBlock as t, createElementBlock as e, normalizeClass as d, renderSlot as n, createCommentVNode as p,
|
|
3
|
-
import {
|
|
2
|
+
import { defineComponent as r, openBlock as t, createElementBlock as e, normalizeClass as d, renderSlot as n, createCommentVNode as p, createVNode as u, withCtx as m } from "vue";
|
|
3
|
+
import { e as l } from "../.chunks/forms-DW_XLzg8.es.js";
|
|
4
4
|
const _ = ["../assets/layout.css"].map((s) => import.meta.resolve(s));
|
|
5
5
|
i.insertCSSLinkToPage(_, !0);
|
|
6
6
|
const c = /* @__PURE__ */ r({
|
|
@@ -10,7 +10,7 @@ const c = /* @__PURE__ */ r({
|
|
|
10
10
|
},
|
|
11
11
|
setup(s) {
|
|
12
12
|
const o = s;
|
|
13
|
-
return (a,
|
|
13
|
+
return (a, k) => (t(), e("div", {
|
|
14
14
|
class: d({
|
|
15
15
|
"top-rows": !0,
|
|
16
16
|
["top-rows-gap_" + o.gap]: !0
|
|
@@ -19,43 +19,44 @@ const c = /* @__PURE__ */ r({
|
|
|
19
19
|
n(a.$slots, "default")
|
|
20
20
|
], 2));
|
|
21
21
|
}
|
|
22
|
-
}),
|
|
22
|
+
}), f = { class: "top-islandRows" }, w = {
|
|
23
23
|
key: 0,
|
|
24
24
|
class: "top-islandRows_title"
|
|
25
|
-
},
|
|
25
|
+
}, R = /* @__PURE__ */ r({
|
|
26
26
|
__name: "islandRows",
|
|
27
27
|
setup(s) {
|
|
28
|
-
return (o, a) => (t(), e("div",
|
|
29
|
-
o.$slots.title ? (t(), e("div",
|
|
28
|
+
return (o, a) => (t(), e("div", f, [
|
|
29
|
+
o.$slots.title ? (t(), e("div", w, [
|
|
30
30
|
n(o.$slots, "title")
|
|
31
31
|
])) : p("", !0),
|
|
32
|
-
u(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
u(c, {
|
|
33
|
+
gap: "l",
|
|
34
|
+
class: "top-islandRows_rows"
|
|
35
|
+
}, {
|
|
36
|
+
default: m(() => [
|
|
37
|
+
n(o.$slots, "default")
|
|
38
|
+
]),
|
|
39
|
+
_: 3
|
|
40
|
+
})
|
|
40
41
|
]));
|
|
41
42
|
}
|
|
42
|
-
}),
|
|
43
|
-
function
|
|
44
|
-
return t(), e("div",
|
|
43
|
+
}), $ = {}, h = { class: "top-islandRows_row" };
|
|
44
|
+
function C(s, o) {
|
|
45
|
+
return t(), e("div", h, [
|
|
45
46
|
n(s.$slots, "default")
|
|
46
47
|
]);
|
|
47
48
|
}
|
|
48
|
-
const
|
|
49
|
-
function
|
|
50
|
-
return t(), e("div",
|
|
49
|
+
const T = /* @__PURE__ */ l($, [["render", C]]), S = {}, v = { class: "top-islandRows_subTitle" };
|
|
50
|
+
function g(s, o) {
|
|
51
|
+
return t(), e("div", v, [
|
|
51
52
|
n(s.$slots, "default")
|
|
52
53
|
]);
|
|
53
54
|
}
|
|
54
|
-
const
|
|
55
|
+
const I = /* @__PURE__ */ l(S, [["render", g]]), B = R, V = T, x = I, z = c;
|
|
55
56
|
export {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
B as TopIslandRows,
|
|
58
|
+
V as TopIslandRowsRow,
|
|
59
|
+
x as TopIslandRowsSubTitle,
|
|
60
|
+
z as TopRows
|
|
60
61
|
};
|
|
61
62
|
//# sourceMappingURL=layout.js.map
|
package/layout/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sources":["../../src/components/layout/rows/rows.vue","../../src/components/layout/islandRows/islandRowsRow/islandRowsRow.vue","../../src/components/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue","../../src/components/layout/layout.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Props } from './types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tgap: 'none',\n});\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-rows': true,\n\t\t\t['top-rows-gap_' + props.gap]: true,\n\t\t}\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-rows {\n\
|
|
1
|
+
{"version":3,"file":"layout.js","sources":["../../src/components/layout/rows/rows.vue","../../src/components/layout/islandRows/islandRowsRow/islandRowsRow.vue","../../src/components/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue","../../src/components/layout/layout.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Props } from './types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tgap: 'none',\n});\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t['top-rows']: true,\n\t\t\t['top-rows-gap_' + props.gap]: true,\n\t\t}\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-rows {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-grow: 1;\n}\n\n.top-rows-gap_none {\n\tgap: 0x;\n}\n\n.top-rows-gap_xs {\n\tgap: var(--top-gap-1);\n}\n\n.top-rows-gap_s {\n\tgap: var(--top-gap-2);\n}\n\n.top-rows-gap_m {\n\tgap: var(--top-gap-3);\n}\n\n.top-rows-gap_l {\n\tgap: var(--top-gap-4);\n}\n</style>\n","<script setup lang=\"ts\">\n</script>\n\n<template>\n\t<div class=\"top-islandRows_row\">\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-islandRows_row {\n\toutline-offset: 2px;\n\tborder-radius: 8px;\n\tbackground: var(--color-layout-front-1);\n\tpadding: var(--top-padding-3);\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n}\n\n/* Фокус форм */\n.top-islandRows_row:has(> .top-forms-optionWrapper .top-forms-focusable:focus-visible) {\n\toutline: 2px solid var(--color-line-primary-1);\n\toutline-offset: 2px;\n}\n\n/* Фокус форм, стили top-error оставить у форм, иначе они будут конфликтовать со стилями фокуса, так как у top-islandRows_row нет border */\n.top-islandRows_row > .top-forms-optionWrapper .top-forms-focusable:not(.top-error) {\n\toutline: none;\n\tanimation: none;\n}\n\n/* Отмена прозрачных рамок у полей ввода внутри islandRows, если top-rows расположен в islandRowsRow */\n.top-islandRows_row .top-rows > .top-input,\n.top-islandRows_row .top-rows > .top-textarea,\n.top-islandRows_row .top-rows > .top-select { --top-forms-border-color: inherit }\n</style>\n","<script setup lang=\"ts\">\n</script>\n\n<template>\n\t<div class=\"top-islandRows_subTitle\">\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-islandRows_subTitle {\n\tfont-size: 16px;\n\tfont-weight: bold;\n}\n</style>\n","import type { ComponentCustomProps } from 'vue';\n\nimport IslandRows from './islandRows/islandRows.vue';\nimport IslandRowsRow from './islandRows/islandRowsRow/islandRowsRow.vue';\nimport IslandRowsSubTitle from './islandRows/islandRowsSubTitle/islandRowsSubTitle.vue';\nimport Rows from './rows/rows.vue';\n\nexport const TopIslandRows = IslandRows as typeof IslandRows & ComponentCustomProps;\nexport const TopIslandRowsRow = IslandRowsRow as typeof IslandRowsRow & ComponentCustomProps;\nexport const TopIslandRowsSubTitle = IslandRowsSubTitle as typeof IslandRowsSubTitle & ComponentCustomProps;\nexport const TopRows = Rows as typeof Rows & ComponentCustomProps;\n"],"names":["props","__props","_sfc_render$1","_ctx","_cache","_sfc_render","TopIslandRows","_sfc_main$2","TopIslandRowsRow","IslandRowsRow","TopIslandRowsSubTitle","IslandRowsSubTitle","TopRows","_sfc_main$3"],"mappings":";;;;;;;;;;;AAGA,UAAAA,IAAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCC,SAAAC,EAAAC,GAAAC,GAAA;;;;;;ACAA,SAAAC,EAAAF,GAAAC,GAAA;;;;;iDCGME,IAAAC,GACAC,IAAAC,GACAC,IAAAC,GACAC,IAAAC;"}
|
package/package.json
CHANGED
package/popup/popup.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/listItem.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
define(["require","exports","../.chunks/listItem.vue_vue_type_script_setup_true_lang-naMiJruI.amd","vue","../.chunks/forms-BWc2kMFD.amd","../require/css.amd!../assets/popup.css"],function(L,p,f,e,c){"use strict";if(typeof e>"u")var e=window.Vue;const $=e.defineComponent({__name:"widgetInput",props:e.mergeModels({modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},modificator:{},size:{},isError:{type:Boolean},isLoading:{type:Boolean},icon:{},icon2:{},addCleaner:{type:Boolean,default:!0},title:{},captionType:{}},{modelValue:{default:""},modelModifiers:{}}),emits:["update:modelValue"],setup(u){const d=e.useModel(u,"modelValue");return(r,o)=>(e.openBlock(),e.createBlock(c._sfc_main$2,e.mergeProps(r.$props,{modificator:"popupWidgetInput",modelValue:d.value,"onUpdate:modelValue":o[0]||(o[0]=l=>d.value=l)}),null,16,["modelValue"]))}}),S=e.defineComponent({__name:"alert",props:{submitText:{},id:{},class:{},transitionDuration:{},footerSupportLink:{},pos:{},notch:{type:Boolean},openByHover:{type:Boolean},posBy:{}},emits:["open","close","scrollContentList"],setup(u){const r={...u,submitText:void 0};return delete r.submitText,(o,l)=>(e.openBlock(),e.createBlock(f._sfc_main,e.mergeProps({class:"top-popupAlert"},r,{onOpen:l[0]||(l[0]=s=>o.$emit("open",s)),onClose:l[1]||(l[1]=s=>o.$emit("close",s)),onScrollContentList:l[2]||(l[2]=(...s)=>o.$emit("scrollContentList",...s))}),e.createSlots({opener:e.withCtx(()=>[e.renderSlot(o.$slots,"opener")]),footer:e.withCtx(()=>[e.renderSlot(o.$slots,"footer"),e.createVNode(c._sfc_main,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.submitText||o.$i18n.Common.Close),1)]),_:1})]),_:2},[o.$slots.header?{name:"header",fn:e.withCtx(()=>[e.renderSlot(o.$slots,"header")]),key:"0"}:void 0,o.$slots.default?{name:"content",fn:e.withCtx(()=>[e.renderSlot(o.$slots,"default")]),key:"1"}:void 0]),1040))}}),y=e.defineComponent({__name:"confirm",props:{cancelText:{},submitText:{},isWarning:{type:Boolean},id:{},class:{},transitionDuration:{},footerSupportLink:{},pos:{},notch:{type:Boolean},openByHover:{type:Boolean},posBy:{}},emits:["open","close","scrollContentList","submit"],setup(u,{emit:d}){const r=u,o=d,l=e.ref(!1),s=()=>{l.value=!0,o("submit")},C=n=>{if(l.value){l.value=!1;return}o("close",n)},T={...r,submitText:void 0,cancelText:void 0,isWarning:void 0};return delete T.submitText,delete T.cancelText,delete T.isWarning,(n,i)=>(e.openBlock(),e.createBlock(f._sfc_main,e.mergeProps({class:"top-popupConfirm"},T,{onOpen:i[0]||(i[0]=t=>n.$emit("open",t)),onClose:i[1]||(i[1]=t=>C(t)),onScrollContentList:i[2]||(i[2]=(...t)=>n.$emit("scrollContentList",...t))}),e.createSlots({opener:e.withCtx(()=>[e.renderSlot(n.$slots,"opener")]),footer:e.withCtx(()=>[e.renderSlot(n.$slots,"footer"),e.createVNode(c._sfc_main,{color:"theme"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.cancelText||n.$i18n.Common.Cancel),1)]),_:1}),e.createVNode(c._sfc_main,{onClick:s,color:n.isWarning?"red":"blue"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.submitText||n.$i18n.Common.Continue),1)]),_:1},8,["color"])]),_:2},[n.$slots.header?{name:"header",fn:e.withCtx(()=>[e.renderSlot(n.$slots,"header")]),key:"0"}:void 0,n.$slots.default?{name:"content",fn:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),key:"1"}:void 0]),1040))}}),V=e.defineComponent({__name:"prompt",props:{submitText:{},cancelText:{},defaultValue:{},id:{},class:{},transitionDuration:{},footerSupportLink:{},pos:{},notch:{type:Boolean},openByHover:{type:Boolean},posBy:{}},emits:["open","close","scrollContentList","submit"],setup(u,{emit:d}){const r=u,o=d,l=()=>C.value=r.defaultValue??"",s=e.ref(!1),C=e.ref();e.watch(()=>r.defaultValue,()=>l(),{immediate:!0});const T=()=>{s.value=!0},n=t=>{if(s.value){s.value=!1,o("submit",C.value),l();return}l(),o("close",t)},i={...r,submitText:void 0,cancelText:void 0,defaultValue:void 0};return delete i.submitText,delete i.cancelText,delete i.defaultValue,(t,a)=>(e.openBlock(),e.createBlock(f._sfc_main,e.mergeProps({class:"top-popupPrompt"},i,{onOpen:a[1]||(a[1]=m=>t.$emit("open",m)),onClose:a[2]||(a[2]=m=>n(m)),onScrollContentList:a[3]||(a[3]=(...m)=>t.$emit("scrollContentList",...m))}),e.createSlots({opener:e.withCtx(()=>[e.renderSlot(t.$slots,"opener")]),footer:e.withCtx(()=>[e.renderSlot(t.$slots,"footer"),e.createVNode(c._sfc_main,{color:"theme"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.cancelText||t.$i18n.Common.Cancel),1)]),_:1}),e.createVNode(c._sfc_main,{onClick:T},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.submitText||t.$i18n.Common.OK),1)]),_:1})]),_:2},[t.$slots.header?{name:"header",fn:e.withCtx(()=>[e.renderSlot(t.$slots,"header")]),key:"0"}:void 0,t.$slots.default?{name:"content",fn:e.withCtx(()=>[e.renderSlot(t.$slots,"default"),e.createVNode($,{modelValue:C.value,"onUpdate:modelValue":a[0]||(a[0]=m=>C.value=m),modelModifiers:{trim:!0}},null,8,["modelValue"])]),key:"1"}:void 0]),1040))}}),B=f._sfc_main,b=f._sfc_main$1,P=f._sfc_main$2,k=$,w=S,g=y,h=V;p.TopPopup=B,p.TopPopupAlert=w,p.TopPopupConfirm=g,p.TopPopupListItem=P,p.TopPopupOpener=b,p.TopPopupPrompt=h,p.TopPopupWidgetInput=k,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=popup.amd.js.map
|
package/popup/popup.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popup.amd.js","sources":["../../src/components/popup/
|
|
1
|
+
{"version":3,"file":"popup.amd.js","sources":["../../src/components/popup/confirm/confirm.vue","../../src/components/popup/prompt/prompt.vue","../../src/components/popup/popup.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { PopupEvent } from '@/components/popup/popup/popup';\nimport type { Emits, Props } from './confirm';\nimport TopButton from '@/components/forms/button/button.vue';\nimport TopPopup from '@/components/popup/popup/popup.vue';\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<Emits>();\n\nconst isSubmit = ref(false);\n\nconst onSubmit = () => {\n\tisSubmit.value = true;\n\n\temit('submit');\n};\n\nconst onClose = (popupEvent: PopupEvent) => {\n\tif (isSubmit.value) {\n\t\tisSubmit.value = false;\n\n\t\treturn;\n\t}\n\n\temit('close', popupEvent);\n};\n\nconst $propsPopup = { ...props, submitText: undefined, cancelText: undefined, isWarning: undefined };\ndelete $propsPopup.submitText;\ndelete $propsPopup.cancelText;\ndelete $propsPopup.isWarning;\n</script>\n\n<template>\n\t<TopPopup\n\t\tclass=\"top-popupConfirm\"\n\t\t:=$propsPopup\n\t\t@open=\"$emit('open', $event)\"\n\t\t@close=\"onClose($event)\"\n\t\t@scrollContentList=\"(...args) => $emit('scrollContentList', ...args)\"\n\t>\n\t\t<template #opener>\n\t\t\t<!-- @slot Элемент для открытия TopPopup -->\n\t\t\t<slot name=\"opener\"></slot>\n\t\t</template>\n\n\t\t<template #header v-if=\"$slots.header\">\n\t\t\t<!-- @slot Шапка -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</template>\n\n\t\t<template #content v-if=\"$slots.default\">\n\t\t\t<!-- @slot Контент в свободной форме -->\n\t\t\t<slot></slot>\n\t\t</template>\n\n\t\t<template #footer>\n\t\t\t<!-- @slot Футер -->\n\t\t\t<slot name=\"footer\"></slot>\n\n\t\t\t<TopButton color=\"theme\">\n\t\t\t\t{{ cancelText || $i18n.Common.Cancel }}\n\t\t\t</TopButton>\n\n\t\t\t<TopButton\n\t\t\t\t@click=\"onSubmit\"\n\t\t\t\t:color=\"isWarning ? 'red' : 'blue'\"\n\t\t\t>\n\t\t\t\t{{ submitText || $i18n.Common.Continue }}\n\t\t\t</TopButton>\n\t\t</template>\n\t</TopPopup>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { PopupEvent } from '@/components/popup/popup/popup';\nimport type { Emits, Props } from './prompt';\nimport TopButton from '@/components/forms/button/button.vue';\nimport TopPopup from '@/components/popup/popup/popup.vue';\nimport TopPopupWidgetInput from '@/components/popup/popup/widgetInput.vue';\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<Emits>();\n\nconst reset = () => localValue.value = props.defaultValue ?? '';\n\nconst isSubmit = ref(false);\n\nconst localValue = ref();\nwatch(() => props.defaultValue, () => reset(), { immediate: true });\n\nconst onSubmit = () => {\n\tisSubmit.value = true;\n};\n\nconst onClose = (popupEvent: PopupEvent) => {\n\tif (isSubmit.value) {\n\t\tisSubmit.value = false;\n\n\t\temit('submit', localValue.value);\n\n\t\treset();\n\n\t\treturn;\n\t}\n\n\treset();\n\n\temit('close', popupEvent);\n};\n\nconst $propsPopup = { ...props, submitText: undefined, cancelText: undefined, defaultValue: undefined };\ndelete $propsPopup.submitText;\ndelete $propsPopup.cancelText;\ndelete $propsPopup.defaultValue;\n</script>\n\n<template>\n\t<TopPopup\n\t\tclass=\"top-popupPrompt\"\n\t\t:=$propsPopup\n\t\t@open=\"$emit('open', $event)\"\n\t\t@close=\"onClose($event)\"\n\t\t@scrollContentList=\"(...args) => $emit('scrollContentList', ...args)\"\n\t>\n\t\t<template #opener>\n\t\t\t<!-- @slot Элемент для открытия TopPopup -->\n\t\t\t<slot name=\"opener\"></slot>\n\t\t</template>\n\n\t\t<template #header v-if=\"$slots.header\">\n\t\t\t<!-- @slot Шапка -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</template>\n\n\t\t<template #content v-if=\"$slots.default\">\n\t\t\t<!-- @slot Контент в свободной форме -->\n\t\t\t<slot></slot>\n\n\t\t\t<TopPopupWidgetInput v-model.trim=\"localValue\"/>\n\t\t</template>\n\n\t\t<template #footer>\n\t\t\t<!-- @slot Футер -->\n\t\t\t<slot name=\"footer\"></slot>\n\n\t\t\t<TopButton color=\"theme\">\n\t\t\t\t{{ cancelText || $i18n.Common.Cancel }}\n\t\t\t</TopButton>\n\n\t\t\t<TopButton @click=\"onSubmit\">\n\t\t\t\t{{ submitText || $i18n.Common.OK }}\n\t\t\t</TopButton>\n\t\t</template>\n\t</TopPopup>\n</template>\n","import type { ComponentCustomProps } from 'vue';\n\nimport Popup from './popup/popup.vue';\nimport PopupOpener from './popup/opener.vue';\nimport PopupListItem from './popup/listItem.vue';\nimport PopupWidgetInput from './popup/widgetInput.vue';\nimport PopupAlert from './alert/alert.vue';\nimport PopupConfirm from './confirm/confirm.vue';\nimport PopupPrompt from './prompt/prompt.vue';\n\nexport const TopPopup = Popup as typeof Popup & ComponentCustomProps;\nexport const TopPopupOpener = PopupOpener as typeof PopupOpener & ComponentCustomProps;\nexport const TopPopupListItem = PopupListItem as typeof PopupListItem & ComponentCustomProps;\nexport const TopPopupWidgetInput = PopupWidgetInput as typeof PopupWidgetInput & ComponentCustomProps;\nexport const TopPopupAlert = PopupAlert as typeof PopupAlert & ComponentCustomProps;\nexport const TopPopupConfirm = PopupConfirm as typeof PopupConfirm & ComponentCustomProps;\nexport const TopPopupPrompt = PopupPrompt as typeof PopupPrompt & ComponentCustomProps;\n"],"names":["isSubmit","vue","onClose","popupEvent","emit","$propsPopup","props","reset","localValue","TopPopup","listItem_vue_vue_type_script_setup_true_lang","TopPopupOpener","TopPopupListItem","TopPopupWidgetInput","_sfc_main$3","TopPopupAlert","_sfc_main$2","TopPopupConfirm","_sfc_main$1","TopPopupPrompt","_sfc_main"],"mappings":"6oEAWAA,EAAAC,EAAA,IAAA,EAAA,SAGCD,EAAA,MAAA,gBAKDE,EAAAC,GAAA,CACC,GAAAH,EAAA,MAAA,CACCA,EAAA,MAAA,SAEA,CAGDI,EAAA,QAAAD,CAAA,GAGDE,EAAA,CAAA,GAAAC,EAAA,WAAA,OAAA,WAAA,OAAA,UAAA,MAAA,wwCCjBAC,EAAA,IAAAC,EAAA,MAAAF,EAAA,cAAA,GAEAN,EAAAC,EAAA,IAAA,EAAA,EAEAO,EAAAP,EAAA,IAAA,EACAA,EAAA,MAAA,IAAAK,EAAA,aAAA,IAAAC,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,eAGCP,EAAA,MAAA,IAGDE,EAAAC,GAAA,CACC,GAAAH,EAAA,MAAA,CACCA,EAAA,MAAA,GAEAI,EAAA,SAAAI,EAAA,KAAA,EAEAD,EAAA,QAEA,CAGDA,EAAA,EAEAH,EAAA,QAAAD,CAAA,GAGDE,EAAA,CAAA,GAAAC,EAAA,WAAA,OAAA,WAAA,OAAA,aAAA,MAAA,ujCC7BOG,EAAAC,EAAA,UACAC,EAAAD,EAAA,YACAE,EAAAF,EAAA,YACAG,EAAAC,EACAC,EAAAC,EACAC,EAAAC,EACAC,EAAAC"}
|
package/popup/popup.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Core as g } from "../core/app.js";
|
|
2
|
-
import { _ as
|
|
3
|
-
import { defineComponent as
|
|
4
|
-
import { c as H, _ as
|
|
2
|
+
import { _ as b, a as O, b as D } from "../.chunks/listItem.vue_vue_type_script_setup_true_lang-saYIC17M.es.js";
|
|
3
|
+
import { defineComponent as B, mergeModels as I, useModel as M, openBlock as V, createBlock as S, mergeProps as v, createSlots as k, withCtx as n, renderSlot as l, createVNode as c, createTextVNode as C, toDisplayString as T, ref as L, watch as w } from "vue";
|
|
4
|
+
import { c as H, _ as y } from "../.chunks/forms-DW_XLzg8.es.js";
|
|
5
5
|
const W = ["../assets/popup.css"].map((a) => import.meta.resolve(a));
|
|
6
6
|
g.insertCSSLinkToPage(W, !0);
|
|
7
|
-
const P = /* @__PURE__ */
|
|
7
|
+
const P = /* @__PURE__ */ B({
|
|
8
8
|
__name: "widgetInput",
|
|
9
9
|
props: /* @__PURE__ */ I({
|
|
10
10
|
modelValue: {},
|
|
@@ -29,13 +29,13 @@ const P = /* @__PURE__ */ b({
|
|
|
29
29
|
emits: ["update:modelValue"],
|
|
30
30
|
setup(a) {
|
|
31
31
|
const m = M(a, "modelValue");
|
|
32
|
-
return (r, e) => (
|
|
32
|
+
return (r, e) => (V(), S(H, v(r.$props, {
|
|
33
33
|
modificator: "popupWidgetInput",
|
|
34
34
|
modelValue: m.value,
|
|
35
35
|
"onUpdate:modelValue": e[0] || (e[0] = (s) => m.value = s)
|
|
36
36
|
}), null, 16, ["modelValue"]));
|
|
37
37
|
}
|
|
38
|
-
}), N = /* @__PURE__ */
|
|
38
|
+
}), N = /* @__PURE__ */ B({
|
|
39
39
|
__name: "alert",
|
|
40
40
|
props: {
|
|
41
41
|
submitText: {},
|
|
@@ -51,7 +51,7 @@ const P = /* @__PURE__ */ b({
|
|
|
51
51
|
emits: ["open", "close", "scrollContentList"],
|
|
52
52
|
setup(a) {
|
|
53
53
|
const r = { ...a, submitText: void 0 };
|
|
54
|
-
return delete r.submitText, (e, s) => (
|
|
54
|
+
return delete r.submitText, (e, s) => (V(), S(b, v({ class: "top-popupAlert" }, r, {
|
|
55
55
|
onOpen: s[0] || (s[0] = (i) => e.$emit("open", i)),
|
|
56
56
|
onClose: s[1] || (s[1] = (i) => e.$emit("close", i)),
|
|
57
57
|
onScrollContentList: s[2] || (s[2] = (...i) => e.$emit("scrollContentList", ...i))
|
|
@@ -61,7 +61,7 @@ const P = /* @__PURE__ */ b({
|
|
|
61
61
|
]),
|
|
62
62
|
footer: n(() => [
|
|
63
63
|
l(e.$slots, "footer"),
|
|
64
|
-
c(
|
|
64
|
+
c(y, null, {
|
|
65
65
|
default: n(() => [
|
|
66
66
|
C(T(e.submitText || e.$i18n.Common.Close), 1)
|
|
67
67
|
]),
|
|
@@ -86,7 +86,7 @@ const P = /* @__PURE__ */ b({
|
|
|
86
86
|
} : void 0
|
|
87
87
|
]), 1040));
|
|
88
88
|
}
|
|
89
|
-
}), A = /* @__PURE__ */
|
|
89
|
+
}), A = /* @__PURE__ */ B({
|
|
90
90
|
__name: "confirm",
|
|
91
91
|
props: {
|
|
92
92
|
cancelText: {},
|
|
@@ -112,7 +112,7 @@ const P = /* @__PURE__ */ b({
|
|
|
112
112
|
}
|
|
113
113
|
e("close", t);
|
|
114
114
|
}, $ = { ...r, submitText: void 0, cancelText: void 0, isWarning: void 0 };
|
|
115
|
-
return delete $.submitText, delete $.cancelText, delete $.isWarning, (t, p) => (
|
|
115
|
+
return delete $.submitText, delete $.cancelText, delete $.isWarning, (t, p) => (V(), S(b, v({ class: "top-popupConfirm" }, $, {
|
|
116
116
|
onOpen: p[0] || (p[0] = (o) => t.$emit("open", o)),
|
|
117
117
|
onClose: p[1] || (p[1] = (o) => f(o)),
|
|
118
118
|
onScrollContentList: p[2] || (p[2] = (...o) => t.$emit("scrollContentList", ...o))
|
|
@@ -122,13 +122,13 @@ const P = /* @__PURE__ */ b({
|
|
|
122
122
|
]),
|
|
123
123
|
footer: n(() => [
|
|
124
124
|
l(t.$slots, "footer"),
|
|
125
|
-
c(
|
|
125
|
+
c(y, { color: "theme" }, {
|
|
126
126
|
default: n(() => [
|
|
127
127
|
C(T(t.cancelText || t.$i18n.Common.Cancel), 1)
|
|
128
128
|
]),
|
|
129
129
|
_: 1
|
|
130
130
|
}),
|
|
131
|
-
c(
|
|
131
|
+
c(y, {
|
|
132
132
|
onClick: i,
|
|
133
133
|
color: t.isWarning ? "red" : "blue"
|
|
134
134
|
}, {
|
|
@@ -156,7 +156,7 @@ const P = /* @__PURE__ */ b({
|
|
|
156
156
|
} : void 0
|
|
157
157
|
]), 1040));
|
|
158
158
|
}
|
|
159
|
-
}), U = /* @__PURE__ */
|
|
159
|
+
}), U = /* @__PURE__ */ B({
|
|
160
160
|
__name: "prompt",
|
|
161
161
|
props: {
|
|
162
162
|
submitText: {},
|
|
@@ -184,7 +184,7 @@ const P = /* @__PURE__ */ b({
|
|
|
184
184
|
}
|
|
185
185
|
s(), e("close", o);
|
|
186
186
|
}, p = { ...r, submitText: void 0, cancelText: void 0, defaultValue: void 0 };
|
|
187
|
-
return delete p.submitText, delete p.cancelText, delete p.defaultValue, (o, u) => (
|
|
187
|
+
return delete p.submitText, delete p.cancelText, delete p.defaultValue, (o, u) => (V(), S(b, v({ class: "top-popupPrompt" }, p, {
|
|
188
188
|
onOpen: u[1] || (u[1] = (d) => o.$emit("open", d)),
|
|
189
189
|
onClose: u[2] || (u[2] = (d) => t(d)),
|
|
190
190
|
onScrollContentList: u[3] || (u[3] = (...d) => o.$emit("scrollContentList", ...d))
|
|
@@ -194,13 +194,13 @@ const P = /* @__PURE__ */ b({
|
|
|
194
194
|
]),
|
|
195
195
|
footer: n(() => [
|
|
196
196
|
l(o.$slots, "footer"),
|
|
197
|
-
c(
|
|
197
|
+
c(y, { color: "theme" }, {
|
|
198
198
|
default: n(() => [
|
|
199
199
|
C(T(o.cancelText || o.$i18n.Common.Cancel), 1)
|
|
200
200
|
]),
|
|
201
201
|
_: 1
|
|
202
202
|
}),
|
|
203
|
-
c(
|
|
203
|
+
c(y, { onClick: $ }, {
|
|
204
204
|
default: n(() => [
|
|
205
205
|
C(T(o.submitText || o.$i18n.Common.OK), 1)
|
|
206
206
|
]),
|
|
@@ -230,7 +230,7 @@ const P = /* @__PURE__ */ b({
|
|
|
230
230
|
} : void 0
|
|
231
231
|
]), 1040));
|
|
232
232
|
}
|
|
233
|
-
}), q =
|
|
233
|
+
}), q = b, F = O, G = D, J = P, Q = N, R = A, X = U;
|
|
234
234
|
export {
|
|
235
235
|
q as TopPopup,
|
|
236
236
|
Q as TopPopupAlert,
|
package/popup/worker.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/forms-
|
|
1
|
+
define(["require","exports","../.chunks/forms-BWc2kMFD.amd","../utils/dom.amd"],function(require,exports,forms,utils_dom){"use strict";if(typeof vue>"u")var vue=window.Vue;class Worker{static noClose=!1;static vueConnectors=new Map;static options={};static getPopup(t){return utils_dom.default.storage(t,"TopPopup")}static getAll(){return utils_dom.default.querySelectorAllArray(document,".top-popup-wrapper")}static getAllVisible(){return utils_dom.default.querySelectorAllVisible(document,".top-popup-wrapper")}static async openByOpener(t){if(!(t instanceof HTMLElement))return;const o={};return o.popup=t.dataset.topPopup,o.id=t.dataset.topPopupId,t.dataset.topPopupP&&(o.p=parseInt(t.dataset.topPopupP)),t.dataset.topPopupPos&&(o.p=parseInt(t.dataset.topPopupPos)),t.dataset.topPopupNotch&&(o.notch=t.dataset.topPopupNotch==="true"||t.dataset.topPopupNotch==="1"),t.dataset.topPopupClass&&(o.class=t.dataset.topPopupClass),t.dataset.topPopupPosBy&&(o.posBy=t.dataset.topPopupPosBy),t.dataset.topPopupFront&&(o.frontSelector=t.dataset.topPopupFront),t.dataset.topPopupInvertX&&(o.invertX=t.dataset.topPopupInvertX==="true"||t.dataset.topPopupInvertX==="1"),t.dataset.topPopupOpenByHover&&(o.openByHover=t.dataset.topPopupOpenByHover==="true"||t.dataset.topPopupOpenByHover==="1"),t.dataset.topPopupUseOriginal&&(o.useOriginal=t.dataset.topPopupUseOriginal==="true"||t.dataset.topPopupUseOriginal==="1"),await Worker.open(t,o)}static async open(elOpener,options){elOpener instanceof HTMLElement&&(elOpener.dataset.topPopupOpened="opened");const{TopLibPopup}=await new Promise((t,o)=>require(["../.chunks/popup-CPS-7fSX.amd"],t,o));if(forms.Core.$){const $elOpener=forms.Core.$(elOpener);if($elOpener.data("aftershow")){let afterShow=$elOpener.data("aftershow");typeof afterShow=="string"&&(afterShow=eval(afterShow.replace(/\W/g,""))),$elOpener.one("aftershow.top-menu-popup",afterShow)}if($elOpener.data("afterclose")){let afterclose=$elOpener.data("afterclose");typeof afterclose=="string"&&(afterclose=eval(afterclose.replace(/\W/g,""))),$elOpener.one("afterclose.top-menu-popup",afterclose)}}return options.isFullScreen=forms.Core.state.isMobile,new TopLibPopup(elOpener,options)}static close(t){const o=Worker.getPopup(t);o&&o.close()}static recalcPosition(t){const o=Worker.getPopup(t);o&&o.elPopupBody instanceof HTMLElement&&o.recalcPosition()}static scrollToActive(t){if(!utils_dom.default.querySelectorVisible(t,"ul.top-popup_content > li > .top-active"))return;const s=t.querySelector("ul.top-popup_content"),a=utils_dom.default.querySelectorAllVisible(t,"ul.top-popup_content > li");t.classList.add("top-popup-wrapper-no_animate"),setTimeout(()=>t.classList.remove("top-popup-wrapper-no_animate"),100);let p=100;for(const e of a){if(e.querySelector(":scope > .top-active"))break;e instanceof HTMLElement&&(p+=e.offsetHeight)}if(s instanceof HTMLElement){const e=s.offsetHeight;p>e?s.scrollTop=p-e:s.scrollTop=0}}static decoratorBeforeOpen(t){this.options.decoratorBeforeOpen&&this.options.decoratorBeforeOpen(t)}static decoratorAfterOpen(t){this.options.decoratorAfterOpen&&this.options.decoratorAfterOpen(t)}static decoratorIsIgnoreOuterClick(t){return this.options.decoratorIsIgnoreOuterClick?this.options.decoratorIsIgnoreOuterClick(t):!1}static regVueComponent(t,o){if(Worker.vueConnectors.get(t))throw"Vue component Popup use duplicated id: "+t;Worker.vueConnectors.set(t,o)}static unregVueComponent(t){Worker.vueConnectors.delete(t)}static genElPopupOpener(t,o,...s){const a=utils_dom.default.genEl(t,{},...s);a.dataset.topPopup="#"+o.id;for(let p in o){const e="topPopup"+p.charAt(0).toUpperCase()+p.slice(1);a.dataset[e]=o[p]}return a}}exports.TopPopupWorker=Worker,Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=worker.amd.js.map
|